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