1a9643ea8Slogwang /*- 2*22ce4affSfengbojiang * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3*22ce4affSfengbojiang * 4a9643ea8Slogwang * Copyright (c) 2013 Dmitry Chagin 5a9643ea8Slogwang * Copyright (c) 1994-1996 Søren Schmidt 6a9643ea8Slogwang * All rights reserved. 7a9643ea8Slogwang * 8a9643ea8Slogwang * Redistribution and use in source and binary forms, with or without 9a9643ea8Slogwang * modification, are permitted provided that the following conditions 10a9643ea8Slogwang * are met: 11a9643ea8Slogwang * 1. Redistributions of source code must retain the above copyright 12*22ce4affSfengbojiang * notice, this list of conditions and the following disclaimer. 13a9643ea8Slogwang * 2. Redistributions in binary form must reproduce the above copyright 14a9643ea8Slogwang * notice, this list of conditions and the following disclaimer in the 15a9643ea8Slogwang * documentation and/or other materials provided with the distribution. 16a9643ea8Slogwang * 17*22ce4affSfengbojiang * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 18*22ce4affSfengbojiang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19*22ce4affSfengbojiang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20*22ce4affSfengbojiang * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 21*22ce4affSfengbojiang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 22*22ce4affSfengbojiang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 23*22ce4affSfengbojiang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 24*22ce4affSfengbojiang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 25*22ce4affSfengbojiang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 26*22ce4affSfengbojiang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27*22ce4affSfengbojiang * SUCH DAMAGE. 28a9643ea8Slogwang * 29a9643ea8Slogwang * $FreeBSD$ 30a9643ea8Slogwang */ 31a9643ea8Slogwang 32a9643ea8Slogwang #ifndef _AMD64_LINUX_H_ 33a9643ea8Slogwang #define _AMD64_LINUX_H_ 34a9643ea8Slogwang 35*22ce4affSfengbojiang #include <sys/abi_compat.h> 36*22ce4affSfengbojiang 37a9643ea8Slogwang #include <compat/linux/linux.h> 38a9643ea8Slogwang #include <amd64/linux/linux_syscall.h> 39a9643ea8Slogwang 40*22ce4affSfengbojiang #define LINUX_LEGACY_SYSCALLS 41*22ce4affSfengbojiang 42a9643ea8Slogwang #define LINUX_DTRACE linuxulator 43a9643ea8Slogwang 44a9643ea8Slogwang /* 45a9643ea8Slogwang * Provide a separate set of types for the Linux types. 46a9643ea8Slogwang */ 47a9643ea8Slogwang typedef int32_t l_int; 48a9643ea8Slogwang typedef int64_t l_long; 49a9643ea8Slogwang typedef int16_t l_short; 50a9643ea8Slogwang typedef uint32_t l_uint; 51a9643ea8Slogwang typedef uint64_t l_ulong; 52a9643ea8Slogwang typedef uint16_t l_ushort; 53a9643ea8Slogwang 54a9643ea8Slogwang typedef l_ulong l_uintptr_t; 55a9643ea8Slogwang typedef l_long l_clock_t; 56a9643ea8Slogwang typedef l_int l_daddr_t; 57a9643ea8Slogwang typedef l_ulong l_dev_t; 58a9643ea8Slogwang typedef l_uint l_gid_t; 59*22ce4affSfengbojiang typedef l_ushort l_gid16_t; 60a9643ea8Slogwang typedef l_uint l_uid_t; 61*22ce4affSfengbojiang typedef l_ushort l_uid16_t; 62a9643ea8Slogwang typedef l_ulong l_ino_t; 63a9643ea8Slogwang typedef l_int l_key_t; 64a9643ea8Slogwang typedef l_long l_loff_t; 65a9643ea8Slogwang typedef l_uint l_mode_t; 66a9643ea8Slogwang typedef l_long l_off_t; 67a9643ea8Slogwang typedef l_int l_pid_t; 68a9643ea8Slogwang typedef l_ulong l_size_t; 69a9643ea8Slogwang typedef l_long l_ssize_t; 70a9643ea8Slogwang typedef l_long l_suseconds_t; 71a9643ea8Slogwang typedef l_long l_time_t; 72a9643ea8Slogwang typedef l_int l_timer_t; 73a9643ea8Slogwang typedef l_int l_mqd_t; 74a9643ea8Slogwang typedef l_size_t l_socklen_t; 75a9643ea8Slogwang typedef l_ulong l_fd_mask; 76a9643ea8Slogwang 77a9643ea8Slogwang typedef struct { 78a9643ea8Slogwang l_int val[2]; 79a9643ea8Slogwang } l_fsid_t; 80a9643ea8Slogwang 81a9643ea8Slogwang typedef struct { 82a9643ea8Slogwang l_time_t tv_sec; 83a9643ea8Slogwang l_suseconds_t tv_usec; 84a9643ea8Slogwang } l_timeval; 85a9643ea8Slogwang 86a9643ea8Slogwang #define l_fd_set fd_set 87a9643ea8Slogwang 88a9643ea8Slogwang /* 89a9643ea8Slogwang * Miscellaneous 90a9643ea8Slogwang */ 91a9643ea8Slogwang #define LINUX_AT_COUNT 19 /* Count of used aux entry types. */ 92a9643ea8Slogwang 93a9643ea8Slogwang struct l___sysctl_args 94a9643ea8Slogwang { 95a9643ea8Slogwang l_uintptr_t name; 96a9643ea8Slogwang l_int nlen; 97a9643ea8Slogwang l_uintptr_t oldval; 98a9643ea8Slogwang l_uintptr_t oldlenp; 99a9643ea8Slogwang l_uintptr_t newval; 100a9643ea8Slogwang l_size_t newlen; 101a9643ea8Slogwang l_ulong __spare[4]; 102a9643ea8Slogwang }; 103a9643ea8Slogwang 104a9643ea8Slogwang /* Resource limits */ 105a9643ea8Slogwang #define LINUX_RLIMIT_CPU 0 106a9643ea8Slogwang #define LINUX_RLIMIT_FSIZE 1 107a9643ea8Slogwang #define LINUX_RLIMIT_DATA 2 108a9643ea8Slogwang #define LINUX_RLIMIT_STACK 3 109a9643ea8Slogwang #define LINUX_RLIMIT_CORE 4 110a9643ea8Slogwang #define LINUX_RLIMIT_RSS 5 111a9643ea8Slogwang #define LINUX_RLIMIT_NPROC 6 112a9643ea8Slogwang #define LINUX_RLIMIT_NOFILE 7 113a9643ea8Slogwang #define LINUX_RLIMIT_MEMLOCK 8 114a9643ea8Slogwang #define LINUX_RLIMIT_AS 9 /* Address space limit */ 115a9643ea8Slogwang 116a9643ea8Slogwang #define LINUX_RLIM_NLIMITS 10 117a9643ea8Slogwang 118a9643ea8Slogwang struct l_rlimit { 119a9643ea8Slogwang l_ulong rlim_cur; 120a9643ea8Slogwang l_ulong rlim_max; 121a9643ea8Slogwang }; 122a9643ea8Slogwang 123a9643ea8Slogwang /* 124a9643ea8Slogwang * stat family of syscalls 125a9643ea8Slogwang */ 126a9643ea8Slogwang struct l_timespec { 127a9643ea8Slogwang l_time_t tv_sec; 128a9643ea8Slogwang l_long tv_nsec; 129a9643ea8Slogwang }; 130a9643ea8Slogwang 131a9643ea8Slogwang struct l_newstat { 132a9643ea8Slogwang l_dev_t st_dev; 133a9643ea8Slogwang l_ino_t st_ino; 134a9643ea8Slogwang l_ulong st_nlink; 135a9643ea8Slogwang l_uint st_mode; 136a9643ea8Slogwang l_uid_t st_uid; 137a9643ea8Slogwang l_gid_t st_gid; 138a9643ea8Slogwang l_uint __st_pad1; 139a9643ea8Slogwang l_dev_t st_rdev; 140a9643ea8Slogwang l_off_t st_size; 141a9643ea8Slogwang l_long st_blksize; 142a9643ea8Slogwang l_long st_blocks; 143a9643ea8Slogwang struct l_timespec st_atim; 144a9643ea8Slogwang struct l_timespec st_mtim; 145a9643ea8Slogwang struct l_timespec st_ctim; 146a9643ea8Slogwang l_long __unused1; 147a9643ea8Slogwang l_long __unused2; 148a9643ea8Slogwang l_long __unused3; 149a9643ea8Slogwang }; 150a9643ea8Slogwang 151a9643ea8Slogwang /* sigaction flags */ 152a9643ea8Slogwang #define LINUX_SA_NOCLDSTOP 0x00000001 153a9643ea8Slogwang #define LINUX_SA_NOCLDWAIT 0x00000002 154a9643ea8Slogwang #define LINUX_SA_SIGINFO 0x00000004 155a9643ea8Slogwang #define LINUX_SA_RESTORER 0x04000000 156a9643ea8Slogwang #define LINUX_SA_ONSTACK 0x08000000 157a9643ea8Slogwang #define LINUX_SA_RESTART 0x10000000 158a9643ea8Slogwang #define LINUX_SA_INTERRUPT 0x20000000 159a9643ea8Slogwang #define LINUX_SA_NOMASK 0x40000000 160a9643ea8Slogwang #define LINUX_SA_ONESHOT 0x80000000 161a9643ea8Slogwang 162a9643ea8Slogwang /* sigprocmask actions */ 163a9643ea8Slogwang #define LINUX_SIG_BLOCK 0 164a9643ea8Slogwang #define LINUX_SIG_UNBLOCK 1 165a9643ea8Slogwang #define LINUX_SIG_SETMASK 2 166a9643ea8Slogwang 167a9643ea8Slogwang /* sigaltstack */ 168a9643ea8Slogwang #define LINUX_MINSIGSTKSZ 2048 169a9643ea8Slogwang 170a9643ea8Slogwang typedef void (*l_handler_t)(l_int); 171a9643ea8Slogwang 172a9643ea8Slogwang typedef struct { 173a9643ea8Slogwang l_handler_t lsa_handler; 174a9643ea8Slogwang l_ulong lsa_flags; 175a9643ea8Slogwang l_uintptr_t lsa_restorer; 176a9643ea8Slogwang l_sigset_t lsa_mask; 177a9643ea8Slogwang } l_sigaction_t; 178a9643ea8Slogwang 179a9643ea8Slogwang typedef struct { 180a9643ea8Slogwang l_uintptr_t ss_sp; 181a9643ea8Slogwang l_int ss_flags; 182a9643ea8Slogwang l_size_t ss_size; 183a9643ea8Slogwang } l_stack_t; 184a9643ea8Slogwang 185a9643ea8Slogwang struct l_fpstate { 186a9643ea8Slogwang u_int16_t cwd; 187a9643ea8Slogwang u_int16_t swd; 188a9643ea8Slogwang u_int16_t twd; 189a9643ea8Slogwang u_int16_t fop; 190a9643ea8Slogwang u_int64_t rip; 191a9643ea8Slogwang u_int64_t rdp; 192a9643ea8Slogwang u_int32_t mxcsr; 193a9643ea8Slogwang u_int32_t mxcsr_mask; 194a9643ea8Slogwang u_int32_t st_space[32]; 195a9643ea8Slogwang u_int32_t xmm_space[64]; 196a9643ea8Slogwang u_int32_t reserved2[24]; 197a9643ea8Slogwang }; 198a9643ea8Slogwang 199a9643ea8Slogwang struct l_sigcontext { 200a9643ea8Slogwang l_ulong sc_r8; 201a9643ea8Slogwang l_ulong sc_r9; 202a9643ea8Slogwang l_ulong sc_r10; 203a9643ea8Slogwang l_ulong sc_r11; 204a9643ea8Slogwang l_ulong sc_r12; 205a9643ea8Slogwang l_ulong sc_r13; 206a9643ea8Slogwang l_ulong sc_r14; 207a9643ea8Slogwang l_ulong sc_r15; 208a9643ea8Slogwang l_ulong sc_rdi; 209a9643ea8Slogwang l_ulong sc_rsi; 210a9643ea8Slogwang l_ulong sc_rbp; 211a9643ea8Slogwang l_ulong sc_rbx; 212a9643ea8Slogwang l_ulong sc_rdx; 213a9643ea8Slogwang l_ulong sc_rax; 214a9643ea8Slogwang l_ulong sc_rcx; 215a9643ea8Slogwang l_ulong sc_rsp; 216a9643ea8Slogwang l_ulong sc_rip; 217a9643ea8Slogwang l_ulong sc_rflags; 218a9643ea8Slogwang l_ushort sc_cs; 219a9643ea8Slogwang l_ushort sc_gs; 220a9643ea8Slogwang l_ushort sc_fs; 221a9643ea8Slogwang l_ushort sc___pad0; 222a9643ea8Slogwang l_ulong sc_err; 223a9643ea8Slogwang l_ulong sc_trapno; 224a9643ea8Slogwang l_sigset_t sc_mask; 225a9643ea8Slogwang l_ulong sc_cr2; 226a9643ea8Slogwang struct l_fpstate *sc_fpstate; 227a9643ea8Slogwang l_ulong sc_reserved1[8]; 228a9643ea8Slogwang }; 229a9643ea8Slogwang 230a9643ea8Slogwang struct l_ucontext { 231a9643ea8Slogwang l_ulong uc_flags; 232a9643ea8Slogwang l_uintptr_t uc_link; 233a9643ea8Slogwang l_stack_t uc_stack; 234a9643ea8Slogwang struct l_sigcontext uc_mcontext; 235a9643ea8Slogwang l_sigset_t uc_sigmask; 236a9643ea8Slogwang }; 237a9643ea8Slogwang 238a9643ea8Slogwang #define LINUX_SI_PREAMBLE_SIZE (4 * sizeof(int)) 239a9643ea8Slogwang #define LINUX_SI_MAX_SIZE 128 240a9643ea8Slogwang #define LINUX_SI_PAD_SIZE ((LINUX_SI_MAX_SIZE - \ 241a9643ea8Slogwang LINUX_SI_PREAMBLE_SIZE) / sizeof(l_int)) 242a9643ea8Slogwang typedef union l_sigval { 243a9643ea8Slogwang l_int sival_int; 244a9643ea8Slogwang l_uintptr_t sival_ptr; 245a9643ea8Slogwang } l_sigval_t; 246a9643ea8Slogwang 247a9643ea8Slogwang typedef struct l_siginfo { 248a9643ea8Slogwang l_int lsi_signo; 249a9643ea8Slogwang l_int lsi_errno; 250a9643ea8Slogwang l_int lsi_code; 251a9643ea8Slogwang union { 252a9643ea8Slogwang l_int _pad[LINUX_SI_PAD_SIZE]; 253a9643ea8Slogwang 254a9643ea8Slogwang struct { 255a9643ea8Slogwang l_pid_t _pid; 256a9643ea8Slogwang l_uid_t _uid; 257a9643ea8Slogwang } _kill; 258a9643ea8Slogwang 259a9643ea8Slogwang struct { 260a9643ea8Slogwang l_timer_t _tid; 261a9643ea8Slogwang l_int _overrun; 262a9643ea8Slogwang char _pad[sizeof(l_uid_t) - sizeof(int)]; 263a9643ea8Slogwang union l_sigval _sigval; 264a9643ea8Slogwang l_uint _sys_private; 265a9643ea8Slogwang } _timer; 266a9643ea8Slogwang 267a9643ea8Slogwang struct { 268a9643ea8Slogwang l_pid_t _pid; /* sender's pid */ 269a9643ea8Slogwang l_uid_t _uid; /* sender's uid */ 270a9643ea8Slogwang union l_sigval _sigval; 271a9643ea8Slogwang } _rt; 272a9643ea8Slogwang 273a9643ea8Slogwang struct { 274a9643ea8Slogwang l_pid_t _pid; /* which child */ 275a9643ea8Slogwang l_uid_t _uid; /* sender's uid */ 276a9643ea8Slogwang l_int _status; /* exit code */ 277a9643ea8Slogwang l_clock_t _utime; 278a9643ea8Slogwang l_clock_t _stime; 279a9643ea8Slogwang } _sigchld; 280a9643ea8Slogwang 281a9643ea8Slogwang struct { 282a9643ea8Slogwang l_uintptr_t _addr; /* Faulting insn/memory ref. */ 283a9643ea8Slogwang } _sigfault; 284a9643ea8Slogwang 285a9643ea8Slogwang struct { 286a9643ea8Slogwang l_long _band; /* POLL_IN,POLL_OUT,POLL_MSG */ 287a9643ea8Slogwang l_int _fd; 288a9643ea8Slogwang } _sigpoll; 289a9643ea8Slogwang } _sifields; 290a9643ea8Slogwang } l_siginfo_t; 291a9643ea8Slogwang 292a9643ea8Slogwang #define lsi_pid _sifields._kill._pid 293a9643ea8Slogwang #define lsi_uid _sifields._kill._uid 294a9643ea8Slogwang #define lsi_tid _sifields._timer._tid 295a9643ea8Slogwang #define lsi_overrun _sifields._timer._overrun 296a9643ea8Slogwang #define lsi_sys_private _sifields._timer._sys_private 297a9643ea8Slogwang #define lsi_status _sifields._sigchld._status 298a9643ea8Slogwang #define lsi_utime _sifields._sigchld._utime 299a9643ea8Slogwang #define lsi_stime _sifields._sigchld._stime 300a9643ea8Slogwang #define lsi_value _sifields._rt._sigval 301a9643ea8Slogwang #define lsi_int _sifields._rt._sigval.sival_int 302a9643ea8Slogwang #define lsi_ptr _sifields._rt._sigval.sival_ptr 303a9643ea8Slogwang #define lsi_addr _sifields._sigfault._addr 304a9643ea8Slogwang #define lsi_band _sifields._sigpoll._band 305a9643ea8Slogwang #define lsi_fd _sifields._sigpoll._fd 306a9643ea8Slogwang 307a9643ea8Slogwang /* 308a9643ea8Slogwang * We make the stack look like Linux expects it when calling a signal 309a9643ea8Slogwang * handler, but use the BSD way of calling the handler and sigreturn(). 310a9643ea8Slogwang * This means that we need to pass the pointer to the handler too. 311a9643ea8Slogwang * It is appended to the frame to not interfere with the rest of it. 312a9643ea8Slogwang */ 313a9643ea8Slogwang 314a9643ea8Slogwang struct l_rt_sigframe { 315a9643ea8Slogwang struct l_ucontext sf_sc; 316a9643ea8Slogwang struct l_siginfo sf_si; 317a9643ea8Slogwang l_handler_t sf_handler; 318a9643ea8Slogwang }; 319a9643ea8Slogwang 320a9643ea8Slogwang /* 321a9643ea8Slogwang * mount flags 322a9643ea8Slogwang */ 323a9643ea8Slogwang #define LINUX_MS_RDONLY 0x0001 324a9643ea8Slogwang #define LINUX_MS_NOSUID 0x0002 325a9643ea8Slogwang #define LINUX_MS_NODEV 0x0004 326a9643ea8Slogwang #define LINUX_MS_NOEXEC 0x0008 327a9643ea8Slogwang #define LINUX_MS_REMOUNT 0x0020 328a9643ea8Slogwang 329a9643ea8Slogwang /* 330a9643ea8Slogwang * SystemV IPC defines 331a9643ea8Slogwang */ 332a9643ea8Slogwang #define LINUX_IPC_RMID 0 333a9643ea8Slogwang #define LINUX_IPC_SET 1 334a9643ea8Slogwang #define LINUX_IPC_STAT 2 335a9643ea8Slogwang #define LINUX_IPC_INFO 3 336a9643ea8Slogwang 337a9643ea8Slogwang #define LINUX_SHM_LOCK 11 338a9643ea8Slogwang #define LINUX_SHM_UNLOCK 12 339a9643ea8Slogwang #define LINUX_SHM_STAT 13 340a9643ea8Slogwang #define LINUX_SHM_INFO 14 341a9643ea8Slogwang 342a9643ea8Slogwang #define LINUX_SHM_RDONLY 0x1000 343a9643ea8Slogwang #define LINUX_SHM_RND 0x2000 344a9643ea8Slogwang #define LINUX_SHM_REMAP 0x4000 345a9643ea8Slogwang 346a9643ea8Slogwang /* semctl commands */ 347a9643ea8Slogwang #define LINUX_GETPID 11 348a9643ea8Slogwang #define LINUX_GETVAL 12 349a9643ea8Slogwang #define LINUX_GETALL 13 350a9643ea8Slogwang #define LINUX_GETNCNT 14 351a9643ea8Slogwang #define LINUX_GETZCNT 15 352a9643ea8Slogwang #define LINUX_SETVAL 16 353a9643ea8Slogwang #define LINUX_SETALL 17 354a9643ea8Slogwang #define LINUX_SEM_STAT 18 355a9643ea8Slogwang #define LINUX_SEM_INFO 19 356a9643ea8Slogwang 357a9643ea8Slogwang union l_semun { 358a9643ea8Slogwang l_int val; 359a9643ea8Slogwang l_uintptr_t buf; 360a9643ea8Slogwang l_uintptr_t array; 361a9643ea8Slogwang l_uintptr_t __buf; 362a9643ea8Slogwang l_uintptr_t __pad; 363a9643ea8Slogwang }; 364a9643ea8Slogwang 365a9643ea8Slogwang struct l_ifmap { 366a9643ea8Slogwang l_ulong mem_start; 367a9643ea8Slogwang l_ulong mem_end; 368a9643ea8Slogwang l_ushort base_addr; 369a9643ea8Slogwang u_char irq; 370a9643ea8Slogwang u_char dma; 371a9643ea8Slogwang u_char port; 372a9643ea8Slogwang } __packed; 373a9643ea8Slogwang 374a9643ea8Slogwang struct l_ifreq { 375a9643ea8Slogwang union { 376a9643ea8Slogwang char ifrn_name[LINUX_IFNAMSIZ]; 377a9643ea8Slogwang } ifr_ifrn; 378a9643ea8Slogwang 379a9643ea8Slogwang union { 380a9643ea8Slogwang struct l_sockaddr ifru_addr; 381a9643ea8Slogwang struct l_sockaddr ifru_dstaddr; 382a9643ea8Slogwang struct l_sockaddr ifru_broadaddr; 383a9643ea8Slogwang struct l_sockaddr ifru_netmask; 384a9643ea8Slogwang struct l_sockaddr ifru_hwaddr; 385a9643ea8Slogwang l_short ifru_flags[1]; 386*22ce4affSfengbojiang l_int ifru_ivalue; 387a9643ea8Slogwang l_int ifru_mtu; 388a9643ea8Slogwang struct l_ifmap ifru_map; 389a9643ea8Slogwang char ifru_slave[LINUX_IFNAMSIZ]; 390a9643ea8Slogwang l_uintptr_t ifru_data; 391a9643ea8Slogwang } ifr_ifru; 392a9643ea8Slogwang } __packed; 393a9643ea8Slogwang 394a9643ea8Slogwang #define ifr_name ifr_ifrn.ifrn_name /* Interface name */ 395a9643ea8Slogwang #define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ 396*22ce4affSfengbojiang #define ifr_ifindex ifr_ifru.ifru_ivalue /* Interface index */ 397a9643ea8Slogwang 398a9643ea8Slogwang struct l_ifconf { 399a9643ea8Slogwang int ifc_len; 400a9643ea8Slogwang union { 401a9643ea8Slogwang l_uintptr_t ifcu_buf; 402a9643ea8Slogwang l_uintptr_t ifcu_req; 403a9643ea8Slogwang } ifc_ifcu; 404a9643ea8Slogwang }; 405a9643ea8Slogwang 406a9643ea8Slogwang #define ifc_buf ifc_ifcu.ifcu_buf 407a9643ea8Slogwang #define ifc_req ifc_ifcu.ifcu_req 408a9643ea8Slogwang 409a9643ea8Slogwang /* 410a9643ea8Slogwang * poll() 411a9643ea8Slogwang */ 412a9643ea8Slogwang #define LINUX_POLLIN 0x0001 413a9643ea8Slogwang #define LINUX_POLLPRI 0x0002 414a9643ea8Slogwang #define LINUX_POLLOUT 0x0004 415a9643ea8Slogwang #define LINUX_POLLERR 0x0008 416a9643ea8Slogwang #define LINUX_POLLHUP 0x0010 417a9643ea8Slogwang #define LINUX_POLLNVAL 0x0020 418a9643ea8Slogwang #define LINUX_POLLRDNORM 0x0040 419a9643ea8Slogwang #define LINUX_POLLRDBAND 0x0080 420a9643ea8Slogwang #define LINUX_POLLWRNORM 0x0100 421a9643ea8Slogwang #define LINUX_POLLWRBAND 0x0200 422a9643ea8Slogwang #define LINUX_POLLMSG 0x0400 423a9643ea8Slogwang 424a9643ea8Slogwang struct l_pollfd { 425a9643ea8Slogwang l_int fd; 426a9643ea8Slogwang l_short events; 427a9643ea8Slogwang l_short revents; 428a9643ea8Slogwang }; 429a9643ea8Slogwang 430a9643ea8Slogwang #define LINUX_ARCH_SET_GS 0x1001 431a9643ea8Slogwang #define LINUX_ARCH_SET_FS 0x1002 432a9643ea8Slogwang #define LINUX_ARCH_GET_FS 0x1003 433a9643ea8Slogwang #define LINUX_ARCH_GET_GS 0x1004 434a9643ea8Slogwang 435a9643ea8Slogwang #define linux_copyout_rusage(r, u) copyout(r, u, sizeof(*r)) 436a9643ea8Slogwang 437a9643ea8Slogwang /* robust futexes */ 438a9643ea8Slogwang struct linux_robust_list { 439a9643ea8Slogwang l_uintptr_t next; 440a9643ea8Slogwang }; 441a9643ea8Slogwang 442a9643ea8Slogwang struct linux_robust_list_head { 443a9643ea8Slogwang struct linux_robust_list list; 444a9643ea8Slogwang l_long futex_offset; 445a9643ea8Slogwang l_uintptr_t pending_list; 446a9643ea8Slogwang }; 447a9643ea8Slogwang 448a9643ea8Slogwang #endif /* !_AMD64_LINUX_H_ */ 449