1b2f58791SDmitry Chagin /*- 2b2f58791SDmitry Chagin * Copyright (c) 2013 Dmitry Chagin 3b2f58791SDmitry Chagin * Copyright (c) 1994-1996 Søren Schmidt 4b2f58791SDmitry Chagin * All rights reserved. 5b2f58791SDmitry Chagin * 6b2f58791SDmitry Chagin * Redistribution and use in source and binary forms, with or without 7b2f58791SDmitry Chagin * modification, are permitted provided that the following conditions 8b2f58791SDmitry Chagin * are met: 9b2f58791SDmitry Chagin * 1. Redistributions of source code must retain the above copyright 10b2f58791SDmitry Chagin * notice, this list of conditions and the following disclaimer 11b2f58791SDmitry Chagin * in this position and unchanged. 12b2f58791SDmitry Chagin * 2. Redistributions in binary form must reproduce the above copyright 13b2f58791SDmitry Chagin * notice, this list of conditions and the following disclaimer in the 14b2f58791SDmitry Chagin * documentation and/or other materials provided with the distribution. 15b2f58791SDmitry Chagin * 3. The name of the author may not be used to endorse or promote products 16b2f58791SDmitry Chagin * derived from this software without specific prior written permission 17b2f58791SDmitry Chagin * 18b2f58791SDmitry Chagin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19b2f58791SDmitry Chagin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20b2f58791SDmitry Chagin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21b2f58791SDmitry Chagin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 22b2f58791SDmitry Chagin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 23b2f58791SDmitry Chagin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24b2f58791SDmitry Chagin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25b2f58791SDmitry Chagin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26b2f58791SDmitry Chagin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 27b2f58791SDmitry Chagin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28b2f58791SDmitry Chagin * 29b2f58791SDmitry Chagin * $FreeBSD$ 30b2f58791SDmitry Chagin */ 31b2f58791SDmitry Chagin 32b2f58791SDmitry Chagin #ifndef _AMD64_LINUX_H_ 33b2f58791SDmitry Chagin #define _AMD64_LINUX_H_ 34b2f58791SDmitry Chagin 35b2f58791SDmitry Chagin #include <amd64/linux/linux_syscall.h> 36b2f58791SDmitry Chagin 37b2f58791SDmitry Chagin /* 38b2f58791SDmitry Chagin * debugging support 39b2f58791SDmitry Chagin */ 40b2f58791SDmitry Chagin extern u_char linux_debug_map[]; 41b2f58791SDmitry Chagin #define ldebug(name) isclr(linux_debug_map, LINUX_SYS_linux_ ## name) 42b2f58791SDmitry Chagin #define ARGS(nm, fmt) "linux(%ld/%ld): "#nm"("fmt")\n", \ 43b2f58791SDmitry Chagin (long)td->td_proc->p_pid, (long)td->td_tid 44b2f58791SDmitry Chagin #define LMSG(fmt) "linux(%ld/%ld): "fmt"\n", \ 45b2f58791SDmitry Chagin (long)td->td_proc->p_pid, (long)td->td_tid 46b2f58791SDmitry Chagin #define LINUX_DTRACE linuxulator 47b2f58791SDmitry Chagin 48b2f58791SDmitry Chagin #define PTRIN(v) (void *)(v) 49b2f58791SDmitry Chagin #define PTROUT(v) (uintptr_t)(v) 50b2f58791SDmitry Chagin 51b2f58791SDmitry Chagin #define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0) 52b2f58791SDmitry Chagin #define CP2(src,dst,sfld,dfld) do { (dst).dfld = (src).sfld; } while (0) 53b2f58791SDmitry Chagin #define PTRIN_CP(src,dst,fld) \ 54b2f58791SDmitry Chagin do { (dst).fld = PTRIN((src).fld); } while (0) 55b2f58791SDmitry Chagin 56b2f58791SDmitry Chagin /* 57b2f58791SDmitry Chagin * Provide a separate set of types for the Linux types. 58b2f58791SDmitry Chagin */ 59b2f58791SDmitry Chagin typedef int32_t l_int; 60b2f58791SDmitry Chagin typedef int64_t l_long; 61b2f58791SDmitry Chagin typedef int16_t l_short; 62b2f58791SDmitry Chagin typedef uint32_t l_uint; 63b2f58791SDmitry Chagin typedef uint64_t l_ulong; 64b2f58791SDmitry Chagin typedef uint16_t l_ushort; 65b2f58791SDmitry Chagin 66b2f58791SDmitry Chagin typedef l_ulong l_uintptr_t; 67b2f58791SDmitry Chagin typedef l_long l_clock_t; 68b2f58791SDmitry Chagin typedef l_int l_daddr_t; 69b2f58791SDmitry Chagin typedef l_ulong l_dev_t; 70b2f58791SDmitry Chagin typedef l_uint l_gid_t; 71b2f58791SDmitry Chagin typedef l_uint l_uid_t; 72b2f58791SDmitry Chagin typedef l_ulong l_ino_t; 73b2f58791SDmitry Chagin typedef l_int l_key_t; 74b2f58791SDmitry Chagin typedef l_long l_loff_t; 75b2f58791SDmitry Chagin typedef l_uint l_mode_t; 76b2f58791SDmitry Chagin typedef l_long l_off_t; 77b2f58791SDmitry Chagin typedef l_int l_pid_t; 78b2f58791SDmitry Chagin typedef l_ulong l_size_t; 79b2f58791SDmitry Chagin typedef l_long l_ssize_t; 80b2f58791SDmitry Chagin typedef l_long l_suseconds_t; 81b2f58791SDmitry Chagin typedef l_long l_time_t; 82b2f58791SDmitry Chagin typedef l_int l_timer_t; 83b2f58791SDmitry Chagin typedef l_int l_mqd_t; 84b2f58791SDmitry Chagin typedef l_size_t l_socklen_t; 85b2f58791SDmitry Chagin 86b2f58791SDmitry Chagin typedef struct { 87b2f58791SDmitry Chagin l_int val[2]; 88b2f58791SDmitry Chagin } l_fsid_t; 89b2f58791SDmitry Chagin 90b2f58791SDmitry Chagin typedef struct { 91b2f58791SDmitry Chagin l_time_t tv_sec; 92b2f58791SDmitry Chagin l_suseconds_t tv_usec; 93b2f58791SDmitry Chagin } l_timeval; 94b2f58791SDmitry Chagin 95b2f58791SDmitry Chagin #define l_fd_set fd_set 96b2f58791SDmitry Chagin 97b2f58791SDmitry Chagin /* 98b2f58791SDmitry Chagin * Miscellaneous 99b2f58791SDmitry Chagin */ 100b2f58791SDmitry Chagin #define LINUX_NAME_MAX 255 101b2f58791SDmitry Chagin #define LINUX_CTL_MAXNAME 10 102b2f58791SDmitry Chagin 103b2f58791SDmitry Chagin #define LINUX_AT_COUNT 17 /* Count of used aux entry types. */ 104b2f58791SDmitry Chagin 105b2f58791SDmitry Chagin struct l___sysctl_args 106b2f58791SDmitry Chagin { 107b2f58791SDmitry Chagin l_uintptr_t name; 108b2f58791SDmitry Chagin l_int nlen; 109b2f58791SDmitry Chagin l_uintptr_t oldval; 110b2f58791SDmitry Chagin l_uintptr_t oldlenp; 111b2f58791SDmitry Chagin l_uintptr_t newval; 112b2f58791SDmitry Chagin l_size_t newlen; 113b2f58791SDmitry Chagin l_ulong __spare[4]; 114b2f58791SDmitry Chagin }; 115b2f58791SDmitry Chagin 116b2f58791SDmitry Chagin /* Scheduling policies */ 117b2f58791SDmitry Chagin #define LINUX_SCHED_OTHER 0 118b2f58791SDmitry Chagin #define LINUX_SCHED_FIFO 1 119b2f58791SDmitry Chagin #define LINUX_SCHED_RR 2 120b2f58791SDmitry Chagin 121b2f58791SDmitry Chagin /* Resource limits */ 122b2f58791SDmitry Chagin #define LINUX_RLIMIT_CPU 0 123b2f58791SDmitry Chagin #define LINUX_RLIMIT_FSIZE 1 124b2f58791SDmitry Chagin #define LINUX_RLIMIT_DATA 2 125b2f58791SDmitry Chagin #define LINUX_RLIMIT_STACK 3 126b2f58791SDmitry Chagin #define LINUX_RLIMIT_CORE 4 127b2f58791SDmitry Chagin #define LINUX_RLIMIT_RSS 5 128b2f58791SDmitry Chagin #define LINUX_RLIMIT_NPROC 6 129b2f58791SDmitry Chagin #define LINUX_RLIMIT_NOFILE 7 130b2f58791SDmitry Chagin #define LINUX_RLIMIT_MEMLOCK 8 131b2f58791SDmitry Chagin #define LINUX_RLIMIT_AS 9 /* Address space limit */ 132b2f58791SDmitry Chagin 133b2f58791SDmitry Chagin #define LINUX_RLIM_NLIMITS 10 134b2f58791SDmitry Chagin 135b2f58791SDmitry Chagin struct l_rlimit { 136b2f58791SDmitry Chagin l_ulong rlim_cur; 137b2f58791SDmitry Chagin l_ulong rlim_max; 138b2f58791SDmitry Chagin }; 139b2f58791SDmitry Chagin 140b2f58791SDmitry Chagin /* mmap options */ 141b2f58791SDmitry Chagin #define LINUX_MAP_SHARED 0x0001 142b2f58791SDmitry Chagin #define LINUX_MAP_PRIVATE 0x0002 143b2f58791SDmitry Chagin #define LINUX_MAP_FIXED 0x0010 144b2f58791SDmitry Chagin #define LINUX_MAP_ANON 0x0020 145b2f58791SDmitry Chagin #define LINUX_MAP_GROWSDOWN 0x0100 146b2f58791SDmitry Chagin 147b2f58791SDmitry Chagin /* 148b2f58791SDmitry Chagin * stat family of syscalls 149b2f58791SDmitry Chagin */ 150b2f58791SDmitry Chagin struct l_timespec { 151b2f58791SDmitry Chagin l_time_t tv_sec; 152b2f58791SDmitry Chagin l_long tv_nsec; 153b2f58791SDmitry Chagin }; 154b2f58791SDmitry Chagin 155b2f58791SDmitry Chagin struct l_newstat { 156b2f58791SDmitry Chagin l_dev_t st_dev; 157b2f58791SDmitry Chagin l_ino_t st_ino; 158b2f58791SDmitry Chagin l_ulong st_nlink; 159b2f58791SDmitry Chagin l_uint st_mode; 160b2f58791SDmitry Chagin l_uid_t st_uid; 161b2f58791SDmitry Chagin l_gid_t st_gid; 162b2f58791SDmitry Chagin l_uint __st_pad1; 163b2f58791SDmitry Chagin l_dev_t st_rdev; 164b2f58791SDmitry Chagin l_off_t st_size; 165b2f58791SDmitry Chagin l_long st_blksize; 166b2f58791SDmitry Chagin l_long st_blocks; 167b2f58791SDmitry Chagin struct l_timespec st_atim; 168b2f58791SDmitry Chagin struct l_timespec st_mtim; 169b2f58791SDmitry Chagin struct l_timespec st_ctim; 170b2f58791SDmitry Chagin l_long __unused1; 171b2f58791SDmitry Chagin l_long __unused2; 172b2f58791SDmitry Chagin l_long __unused3; 173b2f58791SDmitry Chagin }; 174b2f58791SDmitry Chagin 175b2f58791SDmitry Chagin /* 176b2f58791SDmitry Chagin * Signalling 177b2f58791SDmitry Chagin */ 178b2f58791SDmitry Chagin #define LINUX_SIGHUP 1 179b2f58791SDmitry Chagin #define LINUX_SIGINT 2 180b2f58791SDmitry Chagin #define LINUX_SIGQUIT 3 181b2f58791SDmitry Chagin #define LINUX_SIGILL 4 182b2f58791SDmitry Chagin #define LINUX_SIGTRAP 5 183b2f58791SDmitry Chagin #define LINUX_SIGABRT 6 184b2f58791SDmitry Chagin #define LINUX_SIGIOT LINUX_SIGABRT 185b2f58791SDmitry Chagin #define LINUX_SIGBUS 7 186b2f58791SDmitry Chagin #define LINUX_SIGFPE 8 187b2f58791SDmitry Chagin #define LINUX_SIGKILL 9 188b2f58791SDmitry Chagin #define LINUX_SIGUSR1 10 189b2f58791SDmitry Chagin #define LINUX_SIGSEGV 11 190b2f58791SDmitry Chagin #define LINUX_SIGUSR2 12 191b2f58791SDmitry Chagin #define LINUX_SIGPIPE 13 192b2f58791SDmitry Chagin #define LINUX_SIGALRM 14 193b2f58791SDmitry Chagin #define LINUX_SIGTERM 15 194b2f58791SDmitry Chagin #define LINUX_SIGSTKFLT 16 195b2f58791SDmitry Chagin #define LINUX_SIGCHLD 17 196b2f58791SDmitry Chagin #define LINUX_SIGCONT 18 197b2f58791SDmitry Chagin #define LINUX_SIGSTOP 19 198b2f58791SDmitry Chagin #define LINUX_SIGTSTP 20 199b2f58791SDmitry Chagin #define LINUX_SIGTTIN 21 200b2f58791SDmitry Chagin #define LINUX_SIGTTOU 22 201b2f58791SDmitry Chagin #define LINUX_SIGURG 23 202b2f58791SDmitry Chagin #define LINUX_SIGXCPU 24 203b2f58791SDmitry Chagin #define LINUX_SIGXFSZ 25 204b2f58791SDmitry Chagin #define LINUX_SIGVTALRM 26 205b2f58791SDmitry Chagin #define LINUX_SIGPROF 27 206b2f58791SDmitry Chagin #define LINUX_SIGWINCH 28 207b2f58791SDmitry Chagin #define LINUX_SIGIO 29 208b2f58791SDmitry Chagin #define LINUX_SIGPOLL LINUX_SIGIO 209b2f58791SDmitry Chagin #define LINUX_SIGPWR 30 210b2f58791SDmitry Chagin #define LINUX_SIGSYS 31 211b2f58791SDmitry Chagin #define LINUX_SIGRTMIN 32 212b2f58791SDmitry Chagin 213b2f58791SDmitry Chagin #define LINUX_SIGTBLSZ 31 214b2f58791SDmitry Chagin #define LINUX_NSIG 64 215b2f58791SDmitry Chagin #define LINUX_NBPW 64 216b2f58791SDmitry Chagin #define LINUX_NSIG_WORDS (LINUX_NSIG / LINUX_NBPW) 217b2f58791SDmitry Chagin 218b2f58791SDmitry Chagin /* sigaction flags */ 219b2f58791SDmitry Chagin #define LINUX_SA_NOCLDSTOP 0x00000001 220b2f58791SDmitry Chagin #define LINUX_SA_NOCLDWAIT 0x00000002 221b2f58791SDmitry Chagin #define LINUX_SA_SIGINFO 0x00000004 222b2f58791SDmitry Chagin #define LINUX_SA_RESTORER 0x04000000 223b2f58791SDmitry Chagin #define LINUX_SA_ONSTACK 0x08000000 224b2f58791SDmitry Chagin #define LINUX_SA_RESTART 0x10000000 225b2f58791SDmitry Chagin #define LINUX_SA_INTERRUPT 0x20000000 226b2f58791SDmitry Chagin #define LINUX_SA_NOMASK 0x40000000 227b2f58791SDmitry Chagin #define LINUX_SA_ONESHOT 0x80000000 228b2f58791SDmitry Chagin 229b2f58791SDmitry Chagin /* sigprocmask actions */ 230b2f58791SDmitry Chagin #define LINUX_SIG_BLOCK 0 231b2f58791SDmitry Chagin #define LINUX_SIG_UNBLOCK 1 232b2f58791SDmitry Chagin #define LINUX_SIG_SETMASK 2 233b2f58791SDmitry Chagin 234b2f58791SDmitry Chagin /* primitives to manipulate sigset_t */ 235b2f58791SDmitry Chagin 236b2f58791SDmitry Chagin #define LINUX_SIGEMPTYSET(set) \ 237b2f58791SDmitry Chagin do { \ 238b2f58791SDmitry Chagin (set).__bits[0] = 0; \ 239b2f58791SDmitry Chagin } while(0) 240b2f58791SDmitry Chagin 241b2f58791SDmitry Chagin #define LINUX_SIGISMEMBER(set, sig) \ 242b2f58791SDmitry Chagin (1UL & ((set).__bits[0] >> _SIG_IDX(sig))) 243b2f58791SDmitry Chagin 244b2f58791SDmitry Chagin #define LINUX_SIGADDSET(set, sig) \ 245b2f58791SDmitry Chagin (set).__bits[0] |= 1UL << _SIG_IDX(sig) 246b2f58791SDmitry Chagin 247b2f58791SDmitry Chagin /* sigaltstack */ 248b2f58791SDmitry Chagin #define LINUX_MINSIGSTKSZ 2048 249b2f58791SDmitry Chagin #define LINUX_SS_ONSTACK 1 250b2f58791SDmitry Chagin #define LINUX_SS_DISABLE 2 251b2f58791SDmitry Chagin 252b2f58791SDmitry Chagin int linux_to_bsd_sigaltstack(int lsa); 253b2f58791SDmitry Chagin int bsd_to_linux_sigaltstack(int bsa); 254b2f58791SDmitry Chagin 255b2f58791SDmitry Chagin typedef void (*l_handler_t)(l_int); 256b2f58791SDmitry Chagin 257b2f58791SDmitry Chagin typedef struct { 258b2f58791SDmitry Chagin l_ulong __bits[LINUX_NSIG_WORDS]; 259b2f58791SDmitry Chagin } l_sigset_t; 260b2f58791SDmitry Chagin 261b2f58791SDmitry Chagin typedef struct { 262b2f58791SDmitry Chagin l_handler_t lsa_handler; 263b2f58791SDmitry Chagin l_ulong lsa_flags; 264b2f58791SDmitry Chagin l_uintptr_t lsa_restorer; 265b2f58791SDmitry Chagin l_sigset_t lsa_mask; 266b2f58791SDmitry Chagin } l_sigaction_t; 267b2f58791SDmitry Chagin 268b2f58791SDmitry Chagin typedef struct { 269b2f58791SDmitry Chagin l_uintptr_t ss_sp; 270b2f58791SDmitry Chagin l_int ss_flags; 271b2f58791SDmitry Chagin l_size_t ss_size; 272b2f58791SDmitry Chagin } l_stack_t; 273b2f58791SDmitry Chagin 274b2f58791SDmitry Chagin struct l_fpstate { 275b2f58791SDmitry Chagin u_int16_t cwd; 276b2f58791SDmitry Chagin u_int16_t swd; 277b2f58791SDmitry Chagin u_int16_t twd; 278b2f58791SDmitry Chagin u_int16_t fop; 279b2f58791SDmitry Chagin u_int64_t rip; 280b2f58791SDmitry Chagin u_int64_t rdp; 281b2f58791SDmitry Chagin u_int32_t mxcsr; 282b2f58791SDmitry Chagin u_int32_t mxcsr_mask; 283b2f58791SDmitry Chagin u_int32_t st_space[32]; 284b2f58791SDmitry Chagin u_int32_t xmm_space[64]; 285b2f58791SDmitry Chagin u_int32_t reserved2[24]; 286b2f58791SDmitry Chagin }; 287b2f58791SDmitry Chagin 288b2f58791SDmitry Chagin struct l_sigcontext { 289b2f58791SDmitry Chagin l_ulong sc_r8; 290b2f58791SDmitry Chagin l_ulong sc_r9; 291b2f58791SDmitry Chagin l_ulong sc_r10; 292b2f58791SDmitry Chagin l_ulong sc_r11; 293b2f58791SDmitry Chagin l_ulong sc_r12; 294b2f58791SDmitry Chagin l_ulong sc_r13; 295b2f58791SDmitry Chagin l_ulong sc_r14; 296b2f58791SDmitry Chagin l_ulong sc_r15; 297b2f58791SDmitry Chagin l_ulong sc_rdi; 298b2f58791SDmitry Chagin l_ulong sc_rsi; 299b2f58791SDmitry Chagin l_ulong sc_rbp; 300b2f58791SDmitry Chagin l_ulong sc_rbx; 301b2f58791SDmitry Chagin l_ulong sc_rdx; 302b2f58791SDmitry Chagin l_ulong sc_rax; 303b2f58791SDmitry Chagin l_ulong sc_rcx; 304b2f58791SDmitry Chagin l_ulong sc_rsp; 305b2f58791SDmitry Chagin l_ulong sc_rip; 306b2f58791SDmitry Chagin l_ulong sc_rflags; 307b2f58791SDmitry Chagin l_ushort sc_cs; 308b2f58791SDmitry Chagin l_ushort sc_gs; 309b2f58791SDmitry Chagin l_ushort sc_fs; 310b2f58791SDmitry Chagin l_ushort sc___pad0; 311b2f58791SDmitry Chagin l_ulong sc_err; 312b2f58791SDmitry Chagin l_ulong sc_trapno; 313b2f58791SDmitry Chagin l_sigset_t sc_mask; 314b2f58791SDmitry Chagin l_ulong sc_cr2; 315b2f58791SDmitry Chagin struct l_fpstate *sc_fpstate; 316b2f58791SDmitry Chagin l_ulong sc_reserved1[8]; 317b2f58791SDmitry Chagin }; 318b2f58791SDmitry Chagin 319b2f58791SDmitry Chagin struct l_ucontext { 320b2f58791SDmitry Chagin l_ulong uc_flags; 321b2f58791SDmitry Chagin l_uintptr_t uc_link; 322b2f58791SDmitry Chagin l_stack_t uc_stack; 323b2f58791SDmitry Chagin struct l_sigcontext uc_mcontext; 324b2f58791SDmitry Chagin l_sigset_t uc_sigmask; 325b2f58791SDmitry Chagin }; 326b2f58791SDmitry Chagin 327b2f58791SDmitry Chagin #define LINUX_SI_PREAMBLE_SIZE (4 * sizeof(int)) 328b2f58791SDmitry Chagin #define LINUX_SI_MAX_SIZE 128 329b2f58791SDmitry Chagin #define LINUX_SI_PAD_SIZE ((LINUX_SI_MAX_SIZE - \ 330b2f58791SDmitry Chagin LINUX_SI_PREAMBLE_SIZE) / sizeof(l_int)) 331b2f58791SDmitry Chagin typedef union l_sigval { 332b2f58791SDmitry Chagin l_int sival_int; 333b2f58791SDmitry Chagin l_uintptr_t sival_ptr; 334b2f58791SDmitry Chagin } l_sigval_t; 335b2f58791SDmitry Chagin 336b2f58791SDmitry Chagin typedef struct l_siginfo { 337b2f58791SDmitry Chagin l_int lsi_signo; 338b2f58791SDmitry Chagin l_int lsi_errno; 339b2f58791SDmitry Chagin l_int lsi_code; 340b2f58791SDmitry Chagin union { 341b2f58791SDmitry Chagin l_int _pad[LINUX_SI_PAD_SIZE]; 342b2f58791SDmitry Chagin 343b2f58791SDmitry Chagin struct { 344b2f58791SDmitry Chagin l_pid_t _pid; 345b2f58791SDmitry Chagin l_uid_t _uid; 346b2f58791SDmitry Chagin } _kill; 347b2f58791SDmitry Chagin 348b2f58791SDmitry Chagin struct { 349b2f58791SDmitry Chagin l_timer_t _tid; 350b2f58791SDmitry Chagin l_int _overrun; 351b2f58791SDmitry Chagin char _pad[sizeof(l_uid_t) - sizeof(int)]; 352b2f58791SDmitry Chagin union l_sigval _sigval; 353b2f58791SDmitry Chagin l_uint _sys_private; 354b2f58791SDmitry Chagin } _timer; 355b2f58791SDmitry Chagin 356b2f58791SDmitry Chagin struct { 357b2f58791SDmitry Chagin l_pid_t _pid; /* sender's pid */ 358b2f58791SDmitry Chagin l_uid_t _uid; /* sender's uid */ 359b2f58791SDmitry Chagin union l_sigval _sigval; 360b2f58791SDmitry Chagin } _rt; 361b2f58791SDmitry Chagin 362b2f58791SDmitry Chagin struct { 363b2f58791SDmitry Chagin l_pid_t _pid; /* which child */ 364b2f58791SDmitry Chagin l_uid_t _uid; /* sender's uid */ 365b2f58791SDmitry Chagin l_int _status; /* exit code */ 366b2f58791SDmitry Chagin l_clock_t _utime; 367b2f58791SDmitry Chagin l_clock_t _stime; 368b2f58791SDmitry Chagin } _sigchld; 369b2f58791SDmitry Chagin 370b2f58791SDmitry Chagin struct { 371b2f58791SDmitry Chagin l_uintptr_t _addr; /* Faulting insn/memory ref. */ 372b2f58791SDmitry Chagin } _sigfault; 373b2f58791SDmitry Chagin 374b2f58791SDmitry Chagin struct { 375b2f58791SDmitry Chagin l_long _band; /* POLL_IN,POLL_OUT,POLL_MSG */ 376b2f58791SDmitry Chagin l_int _fd; 377b2f58791SDmitry Chagin } _sigpoll; 378b2f58791SDmitry Chagin } _sifields; 379b2f58791SDmitry Chagin } l_siginfo_t; 380b2f58791SDmitry Chagin 381b2f58791SDmitry Chagin #define lsi_pid _sifields._kill._pid 382b2f58791SDmitry Chagin #define lsi_uid _sifields._kill._uid 383b2f58791SDmitry Chagin #define lsi_tid _sifields._timer._tid 384b2f58791SDmitry Chagin #define lsi_overrun _sifields._timer._overrun 385b2f58791SDmitry Chagin #define lsi_sys_private _sifields._timer._sys_private 386b2f58791SDmitry Chagin #define lsi_status _sifields._sigchld._status 387b2f58791SDmitry Chagin #define lsi_utime _sifields._sigchld._utime 388b2f58791SDmitry Chagin #define lsi_stime _sifields._sigchld._stime 389b2f58791SDmitry Chagin #define lsi_value _sifields._rt._sigval 390b2f58791SDmitry Chagin #define lsi_int _sifields._rt._sigval.sival_int 391b2f58791SDmitry Chagin #define lsi_ptr _sifields._rt._sigval.sival_ptr 392b2f58791SDmitry Chagin #define lsi_addr _sifields._sigfault._addr 393b2f58791SDmitry Chagin #define lsi_band _sifields._sigpoll._band 394b2f58791SDmitry Chagin #define lsi_fd _sifields._sigpoll._fd 395b2f58791SDmitry Chagin 396b2f58791SDmitry Chagin /* 397b2f58791SDmitry Chagin * We make the stack look like Linux expects it when calling a signal 398b2f58791SDmitry Chagin * handler, but use the BSD way of calling the handler and sigreturn(). 399b2f58791SDmitry Chagin * This means that we need to pass the pointer to the handler too. 400b2f58791SDmitry Chagin * It is appended to the frame to not interfere with the rest of it. 401b2f58791SDmitry Chagin */ 402b2f58791SDmitry Chagin 403b2f58791SDmitry Chagin struct l_rt_sigframe { 404b2f58791SDmitry Chagin struct l_ucontext sf_sc; 405b2f58791SDmitry Chagin struct l_siginfo sf_si; 406b2f58791SDmitry Chagin l_handler_t sf_handler; 407b2f58791SDmitry Chagin }; 408b2f58791SDmitry Chagin 409b2f58791SDmitry Chagin /* 410b2f58791SDmitry Chagin * open/fcntl flags 411b2f58791SDmitry Chagin */ 412b2f58791SDmitry Chagin #define LINUX_O_RDONLY 00000000 413b2f58791SDmitry Chagin #define LINUX_O_WRONLY 00000001 414b2f58791SDmitry Chagin #define LINUX_O_RDWR 00000002 415b2f58791SDmitry Chagin #define LINUX_O_ACCMODE 00000003 416b2f58791SDmitry Chagin #define LINUX_O_CREAT 00000100 417b2f58791SDmitry Chagin #define LINUX_O_EXCL 00000200 418b2f58791SDmitry Chagin #define LINUX_O_NOCTTY 00000400 419b2f58791SDmitry Chagin #define LINUX_O_TRUNC 00001000 420b2f58791SDmitry Chagin #define LINUX_O_APPEND 00002000 421b2f58791SDmitry Chagin #define LINUX_O_NONBLOCK 00004000 422b2f58791SDmitry Chagin #define LINUX_O_NDELAY LINUX_O_NONBLOCK 423b2f58791SDmitry Chagin #define LINUX_O_SYNC 00010000 424b2f58791SDmitry Chagin #define LINUX_FASYNC 00020000 425b2f58791SDmitry Chagin #define LINUX_O_DIRECT 00040000 /* Direct disk access hint */ 426b2f58791SDmitry Chagin #define LINUX_O_LARGEFILE 00100000 427b2f58791SDmitry Chagin #define LINUX_O_DIRECTORY 00200000 /* Must be a directory */ 428b2f58791SDmitry Chagin #define LINUX_O_NOFOLLOW 00400000 /* Do not follow links */ 429b2f58791SDmitry Chagin #define LINUX_O_NOATIME 01000000 430b2f58791SDmitry Chagin #define LINUX_O_CLOEXEC 02000000 431b2f58791SDmitry Chagin 432b2f58791SDmitry Chagin #define LINUX_F_DUPFD 0 433b2f58791SDmitry Chagin #define LINUX_F_GETFD 1 434b2f58791SDmitry Chagin #define LINUX_F_SETFD 2 435b2f58791SDmitry Chagin #define LINUX_F_GETFL 3 436b2f58791SDmitry Chagin #define LINUX_F_SETFL 4 437b2f58791SDmitry Chagin #define LINUX_F_GETLK 5 438b2f58791SDmitry Chagin #define LINUX_F_SETLK 6 439b2f58791SDmitry Chagin #define LINUX_F_SETLKW 7 440b2f58791SDmitry Chagin #define LINUX_F_SETOWN 8 441b2f58791SDmitry Chagin #define LINUX_F_GETOWN 9 442b2f58791SDmitry Chagin 443b2f58791SDmitry Chagin #define LINUX_F_RDLCK 0 444b2f58791SDmitry Chagin #define LINUX_F_WRLCK 1 445b2f58791SDmitry Chagin #define LINUX_F_UNLCK 2 446b2f58791SDmitry Chagin 447b2f58791SDmitry Chagin /* 448b2f58791SDmitry Chagin * mount flags 449b2f58791SDmitry Chagin */ 450b2f58791SDmitry Chagin #define LINUX_MS_RDONLY 0x0001 451b2f58791SDmitry Chagin #define LINUX_MS_NOSUID 0x0002 452b2f58791SDmitry Chagin #define LINUX_MS_NODEV 0x0004 453b2f58791SDmitry Chagin #define LINUX_MS_NOEXEC 0x0008 454b2f58791SDmitry Chagin #define LINUX_MS_REMOUNT 0x0020 455b2f58791SDmitry Chagin 456b2f58791SDmitry Chagin /* 457b2f58791SDmitry Chagin * SystemV IPC defines 458b2f58791SDmitry Chagin */ 459b2f58791SDmitry Chagin #define LINUX_IPC_RMID 0 460b2f58791SDmitry Chagin #define LINUX_IPC_SET 1 461b2f58791SDmitry Chagin #define LINUX_IPC_STAT 2 462b2f58791SDmitry Chagin #define LINUX_IPC_INFO 3 463b2f58791SDmitry Chagin 464b2f58791SDmitry Chagin #define LINUX_SHM_LOCK 11 465b2f58791SDmitry Chagin #define LINUX_SHM_UNLOCK 12 466b2f58791SDmitry Chagin #define LINUX_SHM_STAT 13 467b2f58791SDmitry Chagin #define LINUX_SHM_INFO 14 468b2f58791SDmitry Chagin 469b2f58791SDmitry Chagin #define LINUX_SHM_RDONLY 0x1000 470b2f58791SDmitry Chagin #define LINUX_SHM_RND 0x2000 471b2f58791SDmitry Chagin #define LINUX_SHM_REMAP 0x4000 472b2f58791SDmitry Chagin 473b2f58791SDmitry Chagin /* semctl commands */ 474b2f58791SDmitry Chagin #define LINUX_GETPID 11 475b2f58791SDmitry Chagin #define LINUX_GETVAL 12 476b2f58791SDmitry Chagin #define LINUX_GETALL 13 477b2f58791SDmitry Chagin #define LINUX_GETNCNT 14 478b2f58791SDmitry Chagin #define LINUX_GETZCNT 15 479b2f58791SDmitry Chagin #define LINUX_SETVAL 16 480b2f58791SDmitry Chagin #define LINUX_SETALL 17 481b2f58791SDmitry Chagin #define LINUX_SEM_STAT 18 482b2f58791SDmitry Chagin #define LINUX_SEM_INFO 19 483b2f58791SDmitry Chagin 484b2f58791SDmitry Chagin union l_semun { 485b2f58791SDmitry Chagin l_int val; 486b2f58791SDmitry Chagin l_uintptr_t buf; 487b2f58791SDmitry Chagin l_uintptr_t array; 488b2f58791SDmitry Chagin l_uintptr_t __buf; 489b2f58791SDmitry Chagin l_uintptr_t __pad; 490b2f58791SDmitry Chagin }; 491b2f58791SDmitry Chagin 492b2f58791SDmitry Chagin struct l_ipc_perm { 493b2f58791SDmitry Chagin l_key_t key; 494b2f58791SDmitry Chagin l_uid_t uid; 495b2f58791SDmitry Chagin l_gid_t gid; 496b2f58791SDmitry Chagin l_uid_t cuid; 497b2f58791SDmitry Chagin l_gid_t cgid; 498b2f58791SDmitry Chagin l_ushort mode; 499b2f58791SDmitry Chagin l_ushort seq; 500b2f58791SDmitry Chagin }; 501b2f58791SDmitry Chagin 502b2f58791SDmitry Chagin /* 503b2f58791SDmitry Chagin * Socket defines 504b2f58791SDmitry Chagin */ 505b2f58791SDmitry Chagin 506b2f58791SDmitry Chagin #define LINUX_SOL_SOCKET 1 507b2f58791SDmitry Chagin #define LINUX_SOL_IP 0 508b2f58791SDmitry Chagin #define LINUX_SOL_IPX 256 509b2f58791SDmitry Chagin #define LINUX_SOL_AX25 257 510b2f58791SDmitry Chagin #define LINUX_SOL_TCP 6 511b2f58791SDmitry Chagin #define LINUX_SOL_UDP 17 512b2f58791SDmitry Chagin 513b2f58791SDmitry Chagin #define LINUX_SO_DEBUG 1 514b2f58791SDmitry Chagin #define LINUX_SO_REUSEADDR 2 515b2f58791SDmitry Chagin #define LINUX_SO_TYPE 3 516b2f58791SDmitry Chagin #define LINUX_SO_ERROR 4 517b2f58791SDmitry Chagin #define LINUX_SO_DONTROUTE 5 518b2f58791SDmitry Chagin #define LINUX_SO_BROADCAST 6 519b2f58791SDmitry Chagin #define LINUX_SO_SNDBUF 7 520b2f58791SDmitry Chagin #define LINUX_SO_RCVBUF 8 521b2f58791SDmitry Chagin #define LINUX_SO_KEEPALIVE 9 522b2f58791SDmitry Chagin #define LINUX_SO_OOBINLINE 10 523b2f58791SDmitry Chagin #define LINUX_SO_NO_CHECK 11 524b2f58791SDmitry Chagin #define LINUX_SO_PRIORITY 12 525b2f58791SDmitry Chagin #define LINUX_SO_LINGER 13 526b2f58791SDmitry Chagin #define LINUX_SO_PASSCRED 16 527b2f58791SDmitry Chagin #define LINUX_SO_PEERCRED 17 528b2f58791SDmitry Chagin #define LINUX_SO_RCVLOWAT 18 529b2f58791SDmitry Chagin #define LINUX_SO_SNDLOWAT 19 530b2f58791SDmitry Chagin #define LINUX_SO_RCVTIMEO 20 531b2f58791SDmitry Chagin #define LINUX_SO_SNDTIMEO 21 532b2f58791SDmitry Chagin #define LINUX_SO_TIMESTAMP 29 533b2f58791SDmitry Chagin #define LINUX_SO_ACCEPTCONN 30 534b2f58791SDmitry Chagin 535b2f58791SDmitry Chagin #define LINUX_IP_TOS 1 536b2f58791SDmitry Chagin #define LINUX_IP_TTL 2 537b2f58791SDmitry Chagin #define LINUX_IP_HDRINCL 3 538b2f58791SDmitry Chagin #define LINUX_IP_OPTIONS 4 539b2f58791SDmitry Chagin 540b2f58791SDmitry Chagin #define LINUX_IP_MULTICAST_IF 32 541b2f58791SDmitry Chagin #define LINUX_IP_MULTICAST_TTL 33 542b2f58791SDmitry Chagin #define LINUX_IP_MULTICAST_LOOP 34 543b2f58791SDmitry Chagin #define LINUX_IP_ADD_MEMBERSHIP 35 544b2f58791SDmitry Chagin #define LINUX_IP_DROP_MEMBERSHIP 36 545b2f58791SDmitry Chagin 546b2f58791SDmitry Chagin struct l_sockaddr { 547b2f58791SDmitry Chagin l_ushort sa_family; 548b2f58791SDmitry Chagin char sa_data[14]; 549b2f58791SDmitry Chagin }; 550b2f58791SDmitry Chagin 551b2f58791SDmitry Chagin struct l_msghdr { 552b2f58791SDmitry Chagin l_uintptr_t msg_name; 553b2f58791SDmitry Chagin l_int msg_namelen; 554b2f58791SDmitry Chagin l_uintptr_t msg_iov; 555b2f58791SDmitry Chagin l_size_t msg_iovlen; 556b2f58791SDmitry Chagin l_uintptr_t msg_control; 557b2f58791SDmitry Chagin l_size_t msg_controllen; 558b2f58791SDmitry Chagin l_uint msg_flags; 559b2f58791SDmitry Chagin }; 560b2f58791SDmitry Chagin 561b2f58791SDmitry Chagin struct l_cmsghdr { 562b2f58791SDmitry Chagin l_size_t cmsg_len; 563b2f58791SDmitry Chagin l_int cmsg_level; 564b2f58791SDmitry Chagin l_int cmsg_type; 565b2f58791SDmitry Chagin }; 566b2f58791SDmitry Chagin 567b2f58791SDmitry Chagin struct l_ifmap { 568b2f58791SDmitry Chagin l_ulong mem_start; 569b2f58791SDmitry Chagin l_ulong mem_end; 570b2f58791SDmitry Chagin l_ushort base_addr; 571b2f58791SDmitry Chagin u_char irq; 572b2f58791SDmitry Chagin u_char dma; 573b2f58791SDmitry Chagin u_char port; 574b2f58791SDmitry Chagin } __packed; 575b2f58791SDmitry Chagin 576b2f58791SDmitry Chagin #define LINUX_IFHWADDRLEN 6 577b2f58791SDmitry Chagin #define LINUX_IFNAMSIZ 16 578b2f58791SDmitry Chagin 579b2f58791SDmitry Chagin struct l_ifreq { 580b2f58791SDmitry Chagin union { 581b2f58791SDmitry Chagin char ifrn_name[LINUX_IFNAMSIZ]; 582b2f58791SDmitry Chagin } ifr_ifrn; 583b2f58791SDmitry Chagin 584b2f58791SDmitry Chagin union { 585b2f58791SDmitry Chagin struct l_sockaddr ifru_addr; 586b2f58791SDmitry Chagin struct l_sockaddr ifru_dstaddr; 587b2f58791SDmitry Chagin struct l_sockaddr ifru_broadaddr; 588b2f58791SDmitry Chagin struct l_sockaddr ifru_netmask; 589b2f58791SDmitry Chagin struct l_sockaddr ifru_hwaddr; 590b2f58791SDmitry Chagin l_short ifru_flags[1]; 591b2f58791SDmitry Chagin l_int ifru_metric; 592b2f58791SDmitry Chagin l_int ifru_mtu; 593b2f58791SDmitry Chagin struct l_ifmap ifru_map; 594b2f58791SDmitry Chagin char ifru_slave[LINUX_IFNAMSIZ]; 595b2f58791SDmitry Chagin l_uintptr_t ifru_data; 596b2f58791SDmitry Chagin } ifr_ifru; 597b2f58791SDmitry Chagin } __packed; 598b2f58791SDmitry Chagin 599b2f58791SDmitry Chagin #define ifr_name ifr_ifrn.ifrn_name /* Interface name */ 600b2f58791SDmitry Chagin #define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ 601b2f58791SDmitry Chagin 602b2f58791SDmitry Chagin struct l_ifconf { 603b2f58791SDmitry Chagin int ifc_len; 604b2f58791SDmitry Chagin union { 605b2f58791SDmitry Chagin l_uintptr_t ifcu_buf; 606b2f58791SDmitry Chagin l_uintptr_t ifcu_req; 607b2f58791SDmitry Chagin } ifc_ifcu; 608b2f58791SDmitry Chagin }; 609b2f58791SDmitry Chagin 610b2f58791SDmitry Chagin #define ifc_buf ifc_ifcu.ifcu_buf 611b2f58791SDmitry Chagin #define ifc_req ifc_ifcu.ifcu_req 612b2f58791SDmitry Chagin 613b2f58791SDmitry Chagin /* 614b2f58791SDmitry Chagin * poll() 615b2f58791SDmitry Chagin */ 616b2f58791SDmitry Chagin #define LINUX_POLLIN 0x0001 617b2f58791SDmitry Chagin #define LINUX_POLLPRI 0x0002 618b2f58791SDmitry Chagin #define LINUX_POLLOUT 0x0004 619b2f58791SDmitry Chagin #define LINUX_POLLERR 0x0008 620b2f58791SDmitry Chagin #define LINUX_POLLHUP 0x0010 621b2f58791SDmitry Chagin #define LINUX_POLLNVAL 0x0020 622b2f58791SDmitry Chagin #define LINUX_POLLRDNORM 0x0040 623b2f58791SDmitry Chagin #define LINUX_POLLRDBAND 0x0080 624b2f58791SDmitry Chagin #define LINUX_POLLWRNORM 0x0100 625b2f58791SDmitry Chagin #define LINUX_POLLWRBAND 0x0200 626b2f58791SDmitry Chagin #define LINUX_POLLMSG 0x0400 627b2f58791SDmitry Chagin 628b2f58791SDmitry Chagin struct l_pollfd { 629b2f58791SDmitry Chagin l_int fd; 630b2f58791SDmitry Chagin l_short events; 631b2f58791SDmitry Chagin l_short revents; 632b2f58791SDmitry Chagin }; 633b2f58791SDmitry Chagin 634b2f58791SDmitry Chagin 635b2f58791SDmitry Chagin #define LINUX_CLONE_VM 0x00000100 636b2f58791SDmitry Chagin #define LINUX_CLONE_FS 0x00000200 637b2f58791SDmitry Chagin #define LINUX_CLONE_FILES 0x00000400 638b2f58791SDmitry Chagin #define LINUX_CLONE_SIGHAND 0x00000800 639b2f58791SDmitry Chagin #define LINUX_CLONE_PID 0x00001000 /* No longer exist in Linux */ 640b2f58791SDmitry Chagin #define LINUX_CLONE_VFORK 0x00004000 641b2f58791SDmitry Chagin #define LINUX_CLONE_PARENT 0x00008000 642b2f58791SDmitry Chagin #define LINUX_CLONE_THREAD 0x00010000 643b2f58791SDmitry Chagin #define LINUX_CLONE_SETTLS 0x00080000 644b2f58791SDmitry Chagin #define LINUX_CLONE_PARENT_SETTID 0x00100000 645b2f58791SDmitry Chagin #define LINUX_CLONE_CHILD_CLEARTID 0x00200000 646b2f58791SDmitry Chagin #define LINUX_CLONE_CHILD_SETTID 0x01000000 647b2f58791SDmitry Chagin 648b2f58791SDmitry Chagin #define LINUX_ARCH_SET_GS 0x1001 649b2f58791SDmitry Chagin #define LINUX_ARCH_SET_FS 0x1002 650b2f58791SDmitry Chagin #define LINUX_ARCH_GET_GS 0x1003 651b2f58791SDmitry Chagin #define LINUX_ARCH_GET_FS 0x1004 652b2f58791SDmitry Chagin 653b2f58791SDmitry Chagin #define linux_copyout_rusage(r, u) copyout(r, u, sizeof(*r)) 654b2f58791SDmitry Chagin 655b2f58791SDmitry Chagin /* robust futexes */ 656b2f58791SDmitry Chagin struct linux_robust_list { 657b2f58791SDmitry Chagin l_uintptr_t next; 658b2f58791SDmitry Chagin }; 659b2f58791SDmitry Chagin 660b2f58791SDmitry Chagin struct linux_robust_list_head { 661b2f58791SDmitry Chagin struct linux_robust_list list; 662b2f58791SDmitry Chagin l_long futex_offset; 663b2f58791SDmitry Chagin l_uintptr_t pending_list; 664b2f58791SDmitry Chagin }; 665b2f58791SDmitry Chagin 666b2f58791SDmitry Chagin #endif /* !_AMD64_LINUX_H_ */ 667