xref: /freebsd/sys/amd64/linux/linux.h (revision dd2a6cd701aea5a6ced59b9947e087304f7d7238)
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