1b2f58791SDmitry Chagin /*- 24d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 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_uint l_gid_t; 58ab60bc84SDmitry Chagin typedef l_ushort l_gid16_t; 59b2f58791SDmitry Chagin typedef l_uint l_uid_t; 60ab60bc84SDmitry Chagin typedef l_ushort l_uid16_t; 61b2f58791SDmitry Chagin typedef l_ulong l_ino_t; 62b2f58791SDmitry Chagin typedef l_int l_key_t; 63b2f58791SDmitry Chagin typedef l_long l_loff_t; 64b2f58791SDmitry Chagin typedef l_uint l_mode_t; 65b2f58791SDmitry Chagin typedef l_long l_off_t; 66b2f58791SDmitry Chagin typedef l_int l_pid_t; 67b2f58791SDmitry Chagin typedef l_ulong l_size_t; 68b2f58791SDmitry Chagin typedef l_long l_ssize_t; 69b2f58791SDmitry Chagin typedef l_long l_suseconds_t; 70b2f58791SDmitry Chagin typedef l_long l_time_t; 71b2f58791SDmitry Chagin typedef l_int l_timer_t; 72b2f58791SDmitry Chagin typedef l_int l_mqd_t; 73b2f58791SDmitry Chagin typedef l_size_t l_socklen_t; 743e89b641SDmitry Chagin typedef l_ulong l_fd_mask; 75b2f58791SDmitry Chagin 76af557e64SDmitry Chagin #include <compat/linux/linux_siginfo.h> 77af557e64SDmitry Chagin 78b2f58791SDmitry Chagin typedef struct { 79b2f58791SDmitry Chagin l_int val[2]; 80b2f58791SDmitry Chagin } l_fsid_t; 81b2f58791SDmitry Chagin 82b2f58791SDmitry Chagin typedef struct { 83b2f58791SDmitry Chagin l_time_t tv_sec; 84b2f58791SDmitry Chagin l_suseconds_t tv_usec; 85b2f58791SDmitry Chagin } l_timeval; 86b2f58791SDmitry Chagin 87b2f58791SDmitry Chagin #define l_fd_set fd_set 88b2f58791SDmitry Chagin 89b2f58791SDmitry Chagin /* 90b2f58791SDmitry Chagin * Miscellaneous 91b2f58791SDmitry Chagin */ 9256c5230aSDmitry Chagin #define LINUX_AT_COUNT 21 /* Count of used aux entry types. 9356c5230aSDmitry Chagin * Keep this synchronized with 9456c5230aSDmitry Chagin * linux_copyout_auxargs() code. 9556c5230aSDmitry Chagin */ 96b2f58791SDmitry Chagin 97b2f58791SDmitry Chagin struct l___sysctl_args 98b2f58791SDmitry Chagin { 99b2f58791SDmitry Chagin l_uintptr_t name; 100b2f58791SDmitry Chagin l_int nlen; 101b2f58791SDmitry Chagin l_uintptr_t oldval; 102b2f58791SDmitry Chagin l_uintptr_t oldlenp; 103b2f58791SDmitry Chagin l_uintptr_t newval; 104b2f58791SDmitry Chagin l_size_t newlen; 105b2f58791SDmitry Chagin l_ulong __spare[4]; 106b2f58791SDmitry Chagin }; 107b2f58791SDmitry Chagin 108b2f58791SDmitry Chagin /* Resource limits */ 109b2f58791SDmitry Chagin #define LINUX_RLIMIT_CPU 0 110b2f58791SDmitry Chagin #define LINUX_RLIMIT_FSIZE 1 111b2f58791SDmitry Chagin #define LINUX_RLIMIT_DATA 2 112b2f58791SDmitry Chagin #define LINUX_RLIMIT_STACK 3 113b2f58791SDmitry Chagin #define LINUX_RLIMIT_CORE 4 114b2f58791SDmitry Chagin #define LINUX_RLIMIT_RSS 5 115b2f58791SDmitry Chagin #define LINUX_RLIMIT_NPROC 6 116b2f58791SDmitry Chagin #define LINUX_RLIMIT_NOFILE 7 117b2f58791SDmitry Chagin #define LINUX_RLIMIT_MEMLOCK 8 118b2f58791SDmitry Chagin #define LINUX_RLIMIT_AS 9 /* Address space limit */ 119b2f58791SDmitry Chagin 120b2f58791SDmitry Chagin #define LINUX_RLIM_NLIMITS 10 121b2f58791SDmitry Chagin 122b2f58791SDmitry Chagin struct l_rlimit { 123b2f58791SDmitry Chagin l_ulong rlim_cur; 124b2f58791SDmitry Chagin l_ulong rlim_max; 125b2f58791SDmitry Chagin }; 126b2f58791SDmitry Chagin 127b2f58791SDmitry Chagin /* 128b2f58791SDmitry Chagin * stat family of syscalls 129b2f58791SDmitry Chagin */ 130b2f58791SDmitry Chagin struct l_timespec { 131b2f58791SDmitry Chagin l_time_t tv_sec; 132b2f58791SDmitry Chagin l_long tv_nsec; 133b2f58791SDmitry Chagin }; 134b2f58791SDmitry Chagin 135b2f58791SDmitry Chagin struct l_newstat { 136e0bfe0d6SDmitry Chagin l_ulong st_dev; 137b2f58791SDmitry Chagin l_ino_t st_ino; 138b2f58791SDmitry Chagin l_ulong st_nlink; 139b2f58791SDmitry Chagin l_uint st_mode; 140b2f58791SDmitry Chagin l_uid_t st_uid; 141b2f58791SDmitry Chagin l_gid_t st_gid; 142e0bfe0d6SDmitry Chagin l_uint __st_pad0; 143e0bfe0d6SDmitry Chagin l_ulong st_rdev; 144b2f58791SDmitry Chagin l_off_t st_size; 145b2f58791SDmitry Chagin l_long st_blksize; 146b2f58791SDmitry Chagin l_long st_blocks; 147b2f58791SDmitry Chagin struct l_timespec st_atim; 148b2f58791SDmitry Chagin struct l_timespec st_mtim; 149b2f58791SDmitry Chagin struct l_timespec st_ctim; 150b2f58791SDmitry Chagin l_long __unused1; 151b2f58791SDmitry Chagin l_long __unused2; 152b2f58791SDmitry Chagin l_long __unused3; 153b2f58791SDmitry Chagin }; 154b2f58791SDmitry Chagin 155b2f58791SDmitry Chagin /* sigaction flags */ 156b2f58791SDmitry Chagin #define LINUX_SA_NOCLDSTOP 0x00000001 157b2f58791SDmitry Chagin #define LINUX_SA_NOCLDWAIT 0x00000002 158b2f58791SDmitry Chagin #define LINUX_SA_SIGINFO 0x00000004 159b2f58791SDmitry Chagin #define LINUX_SA_RESTORER 0x04000000 160b2f58791SDmitry Chagin #define LINUX_SA_ONSTACK 0x08000000 161b2f58791SDmitry Chagin #define LINUX_SA_RESTART 0x10000000 162b2f58791SDmitry Chagin #define LINUX_SA_INTERRUPT 0x20000000 163b2f58791SDmitry Chagin #define LINUX_SA_NOMASK 0x40000000 164b2f58791SDmitry Chagin #define LINUX_SA_ONESHOT 0x80000000 165b2f58791SDmitry Chagin 166b2f58791SDmitry Chagin /* sigaltstack */ 167b2f58791SDmitry Chagin #define LINUX_MINSIGSTKSZ 2048 168b2f58791SDmitry Chagin 169b2f58791SDmitry Chagin typedef void (*l_handler_t)(l_int); 170b2f58791SDmitry Chagin 171b2f58791SDmitry Chagin typedef struct { 172b2f58791SDmitry Chagin l_handler_t lsa_handler; 173b2f58791SDmitry Chagin l_ulong lsa_flags; 174b2f58791SDmitry Chagin l_uintptr_t lsa_restorer; 175b2f58791SDmitry Chagin l_sigset_t lsa_mask; 176b2f58791SDmitry Chagin } l_sigaction_t; 177b2f58791SDmitry Chagin 178b2f58791SDmitry Chagin typedef struct { 179b2f58791SDmitry Chagin l_uintptr_t ss_sp; 180b2f58791SDmitry Chagin l_int ss_flags; 181b2f58791SDmitry Chagin l_size_t ss_size; 182b2f58791SDmitry Chagin } l_stack_t; 183b2f58791SDmitry Chagin 184b2f58791SDmitry Chagin /* 185b2f58791SDmitry Chagin * mount flags 186b2f58791SDmitry Chagin */ 187b2f58791SDmitry Chagin #define LINUX_MS_RDONLY 0x0001 188b2f58791SDmitry Chagin #define LINUX_MS_NOSUID 0x0002 189b2f58791SDmitry Chagin #define LINUX_MS_NODEV 0x0004 190b2f58791SDmitry Chagin #define LINUX_MS_NOEXEC 0x0008 191b2f58791SDmitry Chagin #define LINUX_MS_REMOUNT 0x0020 192b2f58791SDmitry Chagin 193b2f58791SDmitry Chagin /* 194b2f58791SDmitry Chagin * SystemV IPC defines 195b2f58791SDmitry Chagin */ 196b2f58791SDmitry Chagin #define LINUX_IPC_RMID 0 197b2f58791SDmitry Chagin #define LINUX_IPC_SET 1 198b2f58791SDmitry Chagin #define LINUX_IPC_STAT 2 199b2f58791SDmitry Chagin #define LINUX_IPC_INFO 3 200b2f58791SDmitry Chagin 201b2f58791SDmitry Chagin #define LINUX_SHM_LOCK 11 202b2f58791SDmitry Chagin #define LINUX_SHM_UNLOCK 12 203b2f58791SDmitry Chagin #define LINUX_SHM_STAT 13 204b2f58791SDmitry Chagin #define LINUX_SHM_INFO 14 205b2f58791SDmitry Chagin 206b2f58791SDmitry Chagin #define LINUX_SHM_RDONLY 0x1000 207b2f58791SDmitry Chagin #define LINUX_SHM_RND 0x2000 208b2f58791SDmitry Chagin #define LINUX_SHM_REMAP 0x4000 209b2f58791SDmitry Chagin 210b2f58791SDmitry Chagin /* semctl commands */ 211b2f58791SDmitry Chagin #define LINUX_GETPID 11 212b2f58791SDmitry Chagin #define LINUX_GETVAL 12 213b2f58791SDmitry Chagin #define LINUX_GETALL 13 214b2f58791SDmitry Chagin #define LINUX_GETNCNT 14 215b2f58791SDmitry Chagin #define LINUX_GETZCNT 15 216b2f58791SDmitry Chagin #define LINUX_SETVAL 16 217b2f58791SDmitry Chagin #define LINUX_SETALL 17 218b2f58791SDmitry Chagin #define LINUX_SEM_STAT 18 219b2f58791SDmitry Chagin #define LINUX_SEM_INFO 19 220b2f58791SDmitry Chagin 221b2f58791SDmitry Chagin union l_semun { 222b2f58791SDmitry Chagin l_int val; 223b2f58791SDmitry Chagin l_uintptr_t buf; 224b2f58791SDmitry Chagin l_uintptr_t array; 225b2f58791SDmitry Chagin l_uintptr_t __buf; 226b2f58791SDmitry Chagin l_uintptr_t __pad; 227b2f58791SDmitry Chagin }; 228b2f58791SDmitry Chagin 229b2f58791SDmitry Chagin #define LINUX_ARCH_SET_GS 0x1001 230b2f58791SDmitry Chagin #define LINUX_ARCH_SET_FS 0x1002 231f1389991SDmitry Chagin #define LINUX_ARCH_GET_FS 0x1003 232f1389991SDmitry Chagin #define LINUX_ARCH_GET_GS 0x1004 233916f3dbaSEdward Tomasz Napierala #define LINUX_ARCH_CET_STATUS 0x3001 234b2f58791SDmitry Chagin 235b2f58791SDmitry Chagin #define linux_copyout_rusage(r, u) copyout(r, u, sizeof(*r)) 236b2f58791SDmitry Chagin 23795c19e1dSEdward Tomasz Napierala /* This corresponds to 'struct user_regs_struct' in Linux. */ 23895c19e1dSEdward Tomasz Napierala struct linux_pt_regset { 23995c19e1dSEdward Tomasz Napierala l_ulong r15; 24095c19e1dSEdward Tomasz Napierala l_ulong r14; 24195c19e1dSEdward Tomasz Napierala l_ulong r13; 24295c19e1dSEdward Tomasz Napierala l_ulong r12; 24395c19e1dSEdward Tomasz Napierala l_ulong rbp; 24495c19e1dSEdward Tomasz Napierala l_ulong rbx; 24595c19e1dSEdward Tomasz Napierala l_ulong r11; 24695c19e1dSEdward Tomasz Napierala l_ulong r10; 24795c19e1dSEdward Tomasz Napierala l_ulong r9; 24895c19e1dSEdward Tomasz Napierala l_ulong r8; 24995c19e1dSEdward Tomasz Napierala l_ulong rax; 25095c19e1dSEdward Tomasz Napierala l_ulong rcx; 25195c19e1dSEdward Tomasz Napierala l_ulong rdx; 25295c19e1dSEdward Tomasz Napierala l_ulong rsi; 25395c19e1dSEdward Tomasz Napierala l_ulong rdi; 25495c19e1dSEdward Tomasz Napierala l_ulong orig_rax; 25595c19e1dSEdward Tomasz Napierala l_ulong rip; 25695c19e1dSEdward Tomasz Napierala l_ulong cs; 25795c19e1dSEdward Tomasz Napierala l_ulong eflags; 25895c19e1dSEdward Tomasz Napierala l_ulong rsp; 25995c19e1dSEdward Tomasz Napierala l_ulong ss; 26095c19e1dSEdward Tomasz Napierala l_ulong fs_base; 26195c19e1dSEdward Tomasz Napierala l_ulong gs_base; 26295c19e1dSEdward Tomasz Napierala l_ulong ds; 26395c19e1dSEdward Tomasz Napierala l_ulong es; 26495c19e1dSEdward Tomasz Napierala l_ulong fs; 26595c19e1dSEdward Tomasz Napierala l_ulong gs; 26695c19e1dSEdward Tomasz Napierala }; 26795c19e1dSEdward Tomasz Napierala 268d416ee86SDmitry Chagin #ifdef _KERNEL 26995c19e1dSEdward Tomasz Napierala struct reg; 2700bf8d5d5SEdward Tomasz Napierala struct syscall_info; 27195c19e1dSEdward Tomasz Napierala 2723417c298SEdward Tomasz Napierala void bsd_to_linux_regset(const struct reg *b_reg, 27395c19e1dSEdward Tomasz Napierala struct linux_pt_regset *l_regset); 274f0d9a6a7SEdward Tomasz Napierala void linux_to_bsd_regset(struct reg *b_reg, 275f0d9a6a7SEdward Tomasz Napierala const struct linux_pt_regset *l_regset); 2760bf8d5d5SEdward Tomasz Napierala void linux_ptrace_get_syscall_info_machdep(const struct reg *reg, 2770bf8d5d5SEdward Tomasz Napierala struct syscall_info *si); 2780bf8d5d5SEdward Tomasz Napierala int linux_ptrace_getregs_machdep(struct thread *td, pid_t pid, 2790bf8d5d5SEdward Tomasz Napierala struct linux_pt_regset *l_regset); 280*dd2a6cd7SDmitry Chagin int linux_ptrace_peekuser(struct thread *td, pid_t pid, 281*dd2a6cd7SDmitry Chagin void *addr, void *data); 282d416ee86SDmitry Chagin #endif /* _KERNEL */ 28395c19e1dSEdward Tomasz Napierala 284b2f58791SDmitry Chagin #endif /* !_AMD64_LINUX_H_ */ 285