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