1 
2 /*--------------------------------------------------------------------*/
3 /*--- FreeBSD-specific kernel interface.             vki-freebsd.h ---*/
4 /*--------------------------------------------------------------------*/
5 
6 /*
7    This file is part of Valgrind, a dynamic binary instrumentation
8    framework.
9 
10    Copyright (C) 2000-2005 Julian Seward
11       jseward@acm.org
12 
13    This program is free software; you can redistribute it and/or
14    modify it under the terms of the GNU General Public License as
15    published by the Free Software Foundation; either version 2 of the
16    License, or (at your option) any later version.
17 
18    This program is distributed in the hope that it will be useful, but
19    WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21    General Public License for more details.
22 
23    You should have received a copy of the GNU General Public License
24    along with this program; if not, write to the Free Software
25    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26    02111-1307, USA.
27 
28    The GNU General Public License is contained in the file COPYING.
29 */
30 
31 /* This file defines types and constants for the kernel interface, and to
32    make that clear everything is prefixed VKI_/vki_.
33 
34    All code is copied verbatim from kernel source files, except that:
35    - VKI_/vki_ prefixes are added
36    - some extra explanatory comments are included;  they are all within
37      "[[ ]]"
38    - for some types, we only care about the size;  for a few of them (big
39      ones that are painful to fully drag in here), a VKI_SIZEOF_* constant
40      is used.
41 
42    The files the code is taken from is indicated.
43 
44    Note especially that the types are not the glibc versions, many of which
45    are different to those in here.
46 
47    Also note that this file contains all the generic header info, ie. that
48    from linux/include/linux/ *.h.  The arch-specific header info, eg. that
49    from linux/include/asm-i386/ *.h, is in vki-$PLATFORM.h and
50    vki_posixtypes-$PLATFORM.h.  (Two files are required to avoid
51    circular dependencies between the generic VKI header and the
52    arch-specific VKI header.  It's possible in the future, as more stuff
53    gets pulled in, that we might have to split files up some more to avoid
54    further circular dependencies.)
55 
56    Finally, note that it is assumed that __KERNEL__ is set for all these
57    definitions, which affects some of them.
58 */
59 
60 #ifndef __VKI_FREEBSD_H
61 #define __VKI_FREEBSD_H
62 
63 //----------------------------------------------------------------------
64 // Arch-specific POSIX types
65 //----------------------------------------------------------------------
66 
67 #if defined(VGA_x86)
68 #  include "vki-machine-types-x86-freebsd.h"
69 #elif defined(VGA_amd64)
70 #  include "vki-machine-types-amd64-freebsd.h"
71 #else
72 #  error Unknown platform
73 #endif
74 
75 #include <sys/fcntl.h>
76 #include <sys/param.h>
77 
78 
79 //----------------------------------------------------------------------
80 // From sys/select.h
81 //----------------------------------------------------------------------
82 
83 typedef unsigned long __vki_fd_mask;
84 
85 #undef __VKI_NFDBITS
86 #define __VKI_NFDBITS	(8 * sizeof(__vki_fd_mask))
87 
88 #undef __VKI_FD_SETSIZE
89 #define __VKI_FD_SETSIZE	1024U
90 
91 #undef __VKI_FDSET_LONGS
92 #define __VKI_FDSET_LONGS	(__VKI_FD_SETSIZE/__VKI_NFDBITS)
93 
94 #undef __VKI_FDELT
95 #define	__VKI_FDELT(d)	((d) / __VKI_NFDBITS)
96 
97 #undef __VKI_FDMASK
98 #define	__VKI_FDMASK(d)	(1UL << ((d) % __VKI_NFDBITS))
99 
100 typedef struct {
101 	unsigned long fds_bits [__VKI_FDSET_LONGS];
102 } __vki_fd_set;
103 
104 //----------------------------------------------------------------------
105 // sys/_types.h
106 //----------------------------------------------------------------------
107 /* MD QQQ 32 on 64 */
108 typedef	long		__vki_key_t;
109 typedef	long		__vki_suseconds_t;
110 typedef	struct __timer	*__vki_timer_t;
111 typedef	struct __mq	*__vki_mqd_t;
112 
113 /* MI */
114 typedef	vki_uint32_t	__vki_blksize_t;
115 typedef	vki_int64_t	__vki_blkcnt_t;
116 typedef	vki_int32_t	__vki_clockid_t;
117 typedef	vki_int32_t	__vki_ct_rune_t;
118 typedef	vki_uint32_t	__vki_fflags_t;
119 typedef	vki_uint64_t	__vki_fsblkcnt_t;
120 typedef	vki_uint64_t	__vki_fsfilcnt_t;
121 typedef	vki_uint32_t	__vki_gid_t;
122 typedef	vki_int64_t	__vki_id_t;
123 typedef	vki_uint32_t	__vki_ino_t;
124 typedef	vki_int32_t	__vki_lwpid_t;
125 typedef	vki_uint16_t	__vki_mode_t;
126 typedef	vki_uint16_t	__vki_nlink_t;
127 typedef	vki_int64_t	__vki_off_t;
128 typedef	vki_int32_t	__vki_pid_t;
129 typedef	vki_int64_t	__vki_rlim_t;
130 typedef	vki_uint8_t	__vki_sa_family_t;
131 typedef	vki_uint32_t	__vki_socklen_t;
132 typedef	vki_uint32_t	__vki_uid_t;
133 typedef	vki_int32_t	__vki_useconds_t;
134 typedef	__vki_ct_rune_t	__vki_rune_t;
135 typedef	__vki_ct_rune_t	__vki_wchar_t;
136 typedef	__vki_ct_rune_t	__vki_wint_t;
137 typedef	vki_uint32_t	__vki_dev_t;
138 typedef	vki_uint32_t	__vki_fixpt_t;
139 
140 
141 //----------------------------------------------------------------------
142 // sys/types.h
143 //----------------------------------------------------------------------
144 
145 typedef	vki_uint8_t		vki_u_int8_t;
146 typedef	vki_uint16_t		vki_u_int16_t;
147 typedef	vki_uint32_t		vki_u_int32_t;
148 typedef	vki_uint64_t		vki_u_int64_t;
149 
150 typedef	vki_uint64_t		vki_u_quad_t;
151 typedef	vki_int64_t		vki_quad_t;
152 typedef	__vki_caddr_t		vki_caddr_t;
153 typedef __const __vki_caddr_t	vki_c_caddr_t;
154 typedef __volatile __vki_caddr_t vki_v_caddr_t;
155 
156 typedef __vki_blksize_t		vki_blksize_t;
157 typedef __vki_blkcnt_t		vki_blkcnt_t;
158 typedef __vki_clock_t		vki_clock_t;
159 typedef __vki_clockid_t		vki_clockid_t;
160 typedef __vki_dev_t		vki_dev_t;
161 typedef __vki_fflags_t		vki_fflags_t;
162 typedef __vki_fixpt_t		vki_fixpt_t;
163 typedef __vki_fsblkcnt_t	vki_fsblkcnt_t;
164 typedef __vki_fsfilcnt_t	vki_fsfilcnt_t;
165 typedef __vki_gid_t		vki_gid_t;
166 typedef vki_uint32_t		vki_in_addr_t;
167 typedef vki_uint16_t		vki_in_port_t;
168 typedef __vki_id_t		vki_id_t;
169 typedef __vki_ino_t		vki_ino_t;
170 typedef __vki_key_t		vki_key_t;
171 typedef __vki_lwpid_t		vki_lwpid_t;
172 typedef __vki_mode_t		vki_mode_t;
173 typedef __vki_nlink_t		vki_nlink_t;
174 typedef __vki_off_t		vki_off_t;
175 typedef __vki_pid_t		vki_pid_t;
176 typedef __vki_register_t	vki_register_t;
177 typedef __vki_rlim_t		vki_rlim_t;
178 typedef __vki_segsz_t		vki_segsz_t;
179 typedef __vki_size_t		vki_size_t;
180 typedef __vki_ssize_t		vki_ssize_t;
181 typedef __vki_suseconds_t	vki_suseconds_t;
182 typedef __vki_time_t		vki_time_t;
183 typedef __vki_timer_t		vki_timer_t;
184 typedef __vki_mqd_t		vki_mqd_t;
185 typedef __vki_u_register_t	vki_u_register_t;
186 typedef __vki_uid_t		vki_uid_t;
187 typedef __vki_useconds_t	vki_useconds_t;
188 
189 typedef __vki_vm_offset_t	vki_vm_offset_t;
190 typedef __vki_vm_ooffset_t	vki_vm_ooffset_t;
191 typedef __vki_vm_paddr_t	vki_vm_paddr_t;
192 typedef __vki_vm_pindex_t	vki_vm_pindex_t;
193 typedef __vki_vm_size_t		vki_vm_size_t;
194 
195 //----------------------------------------------------------------------
196 // sys/select.h
197 //----------------------------------------------------------------------
198 
199 typedef __vki_fd_set		vki_fd_set;
200 
201 //----------------------------------------------------------------------
202 // Now the rest of the arch-specific stuff
203 //----------------------------------------------------------------------
204 
205 #if defined(VGA_x86)
206 #  include "vki-x86-freebsd.h"
207 #elif defined(VGA_amd64)
208 #  include "vki-amd64-freebsd.h"
209 #elif defined(VGA_ppc32)
210 #  include "vki-ppc32-freebsd.h"
211 #elif defined(VGA_ppc64)
212 #  include "vki-ppc64-freebsd.h"
213 #else
214 #  error Unknown platform
215 #endif
216 
217 //----------------------------------------------------------------------
218 // linux and freebsd version hacks
219 //----------------------------------------------------------------------
220 #ifndef ELFMAG
221 #define ELFMAG	"\177ELF"	/* magic string */
222 #endif
223 #ifndef SELFMAG
224 #define SELFMAG	4		/* magic string size */
225 #endif
226 
227 //----------------------------------------------------------------------
228 // From sys/syslimits.h
229 //----------------------------------------------------------------------
230 
231 #define VKI_PATH_MAX       1024
232 
233 
234 //----------------------------------------------------------------------
235 // From sys/timespec.h
236 //----------------------------------------------------------------------
237 
238 struct vki_timespec {
239 	vki_time_t	tv_sec;		/* seconds */
240 	long		tv_nsec;	/* nanoseconds */
241 };
242 
243 struct  vki_itimerspec {
244         struct  vki_timespec it_interval;    /* timer period */
245         struct  vki_timespec it_value;       /* timer expiration */
246 };
247 
248 //----------------------------------------------------------------------
249 // From sys/_time.h
250 //----------------------------------------------------------------------
251 
252 struct vki_timeval {
253 	vki_time_t	tv_sec;		/* seconds */
254 	vki_suseconds_t	tv_usec;	/* microseconds */
255 };
256 
257 //----------------------------------------------------------------------
258 // From sys/time.h
259 //----------------------------------------------------------------------
260 
261 #define VKI_CLOCK_REALTIME            0
262 #define VKI_CLOCK_MONOTONIC           1
263 #define VKI_CLOCK_PROCESS_CPUTIME_ID  2
264 #define VKI_CLOCK_THREAD_CPUTIME_ID   3
265 
266 struct vki_timezone {
267 	int	tz_minuteswest;	/* minutes west of Greenwich */
268 	int	tz_dsttime;	/* type of dst correction */
269 };
270 
271 struct	vki_itimerval {
272 	struct	vki_timeval it_interval;	/* timer interval */
273 	struct	vki_timeval it_value;	/* current value */
274 };
275 
276 //----------------------------------------------------------------------
277 // From sys/timex.h
278 //----------------------------------------------------------------------
279 
280 struct vki_ntptimeval {
281 	struct vki_timespec time;
282 	long maxerror;
283 	long esterror;
284 	long tai;
285 	int time_state;
286 };
287 
288 struct vki_timex {
289 	unsigned int modes;	/* mode selector */
290 	long offset;		/* time offset (usec) */
291 	long freq;		/* frequency offset (scaled ppm) */
292 	long maxerror;		/* maximum error (usec) */
293 	long esterror;		/* estimated error (usec) */
294 	int status;		/* clock command/status */
295 	long constant;		/* pll time constant */
296 	long precision;		/* clock precision (usec) (read only) */
297 	long tolerance;		/* clock frequency tolerance (ppm)
298 				 * (read only)
299 				 */
300 	long ppsfreq;           /* pps frequency (scaled ppm) (ro) */
301 	long jitter;            /* pps jitter (us) (ro) */
302 	int shift;              /* interval duration (s) (shift) (ro) */
303 	long stabil;            /* pps stability (scaled ppm) (ro) */
304 	long jitcnt;            /* jitter limit exceeded (ro) */
305 	long calcnt;            /* calibration intervals (ro) */
306 	long errcnt;            /* calibration errors (ro) */
307 	long stbcnt;            /* stability limit exceeded (ro) */
308 };
309 
310 #define MOD_OFFSET		0x0001	/* time offset */
311 #define MOD_FREQUENCY		0x0002	/* frequency offset */
312 #define MOD_MAXERROR		0x0004	/* maximum time error */
313 #define MOD_ESTERROR		0x0008	/* estimated time error */
314 #define MOD_STATUS		0x0010	/* clock status */
315 #define MOD_TIMECONST		0x0020	/* pll time constant */
316 #define MOD_PPSMAX		0x0040
317 #define MOD_TAI			0x0080
318 #define MOD_MICRO		0x1000
319 #define MOD_NANO		0x2000
320 #define MOD_CLKB		0x4000
321 #define MOD_CLKA		0x8000
322 
323 //----------------------------------------------------------------------
324 // From sys/times.h
325 //----------------------------------------------------------------------
326 
327 struct vki_tms {
328 	vki_clock_t tms_utime;
329 	vki_clock_t tms_stime;
330 	vki_clock_t tms_cutime;
331 	vki_clock_t tms_cstime;
332 };
333 
334 //----------------------------------------------------------------------
335 // From sys/stat.h
336 //----------------------------------------------------------------------
337 
338 /* QQQ 4.x stat layout */
339 struct vki_stat {
340 	vki_dev_t	st_dev;
341 	vki_ino_t	st_ino;
342 	vki_mode_t	st_mode;
343 	vki_nlink_t	st_nlink;
344 	vki_uid_t	st_uid;
345 	vki_gid_t	st_gid;
346 	vki_dev_t	st_rdev;
347 #if 0
348 	struct vki_timespec	st_atimespec;
349 	struct vki_timespec	st_mtimespec;
350 	struct vki_timespec	st_ctimespec;
351 #else
352 	vki_time_t	st_atime;
353 	long		st_atime_nsec;
354 	vki_time_t	st_mtime;
355 	long		st_mtime_nsec;
356 	vki_time_t	st_ctime;
357 	long		st_ctime_nsec;
358 #endif
359 	vki_off_t	st_size;
360 	vki_blkcnt_t	st_blocks;
361 	vki_blksize_t	st_blksize;
362 	vki_fflags_t	st_flags;
363 	vki_uint32_t	st_gen;
364 	vki_int32_t	st_lspare;
365 	struct vki_timespec	st_birthtimespec;
366 	unsigned int :(8 / 2) * (16 - (int)sizeof(struct vki_timespec));
367 	unsigned int :(8 / 2) * (16 - (int)sizeof(struct vki_timespec));
368 };
369 
370 
371 //----------------------------------------------------------------------
372 // From linux-2.6.8.1/include/linux/sched.h
373 //----------------------------------------------------------------------
374 
375 struct vki_sched_param {
376 	int sched_priority;
377 };
378 
379 //----------------------------------------------------------------------
380 // From sys/signal.h
381 //----------------------------------------------------------------------
382 
383 #define	VKI_SIG_BLOCK	1	/*  block specified signal set */
384 #define	VKI_SIG_UNBLOCK	2	/*  unblock specified signal set */
385 #define	VKI_SIG_SETMASK	3	/*  set specified signal set */
386 
387 #define	VKI_SIG_DFL	((__vki_sighandler_t)0)
388 #define	VKI_SIG_IGN	((__vki_sighandler_t)1)
389 #define	VKI_SIG_ERR	((__vki_sighandler_t)-1)
390 
391 typedef void __vki_signalfn_t(int);
392 typedef __vki_signalfn_t *__vki_sighandler_t;
393 
394 #define	VKI_SIGHUP		1
395 #define	VKI_SIGINT		2
396 #define	VKI_SIGQUIT		3
397 #define	VKI_SIGILL		4
398 #define	VKI_SIGTRAP		5
399 #define	VKI_SIGABRT		6
400 #define	VKI_SIGEMT		7
401 #define	VKI_SIGFPE		8
402 #define	VKI_SIGKILL		9
403 #define	VKI_SIGBUS		10
404 #define	VKI_SIGSEGV		11
405 #define	VKI_SIGSYS		12
406 #define	VKI_SIGPIPE		13
407 #define	VKI_SIGALRM		14
408 #define	VKI_SIGTERM		15
409 #define	VKI_SIGURG		16
410 #define	VKI_SIGSTOP		17
411 #define	VKI_SIGTSTP		18
412 #define	VKI_SIGCONT		19
413 #define	VKI_SIGCHLD		20
414 #define	VKI_SIGTTIN		21
415 #define	VKI_SIGTTOU		22
416 #define	VKI_SIGIO		23
417 #define	VKI_SIGXCPU		24
418 #define	VKI_SIGXFSZ		25
419 #define	VKI_SIGVTALRM		26
420 #define	VKI_SIGPROF		27
421 #define	VKI_SIGWINCH		28
422 #define	VKI_SIGINFO		29
423 #define	VKI_SIGUSR1		30
424 #define	VKI_SIGUSR2		31
425 #define	VKI_SIGTHR		32
426 
427 #define	VKI_SIGRTMIN		65
428 #define	VKI_SIGRTMAX		126
429 
430 #define	VKI_SA_ONSTACK		0x0001
431 #define	VKI_SA_RESTART		0x0002
432 #define	VKI_SA_RESETHAND	0x0004
433 #define	VKI_SA_NOCLDSTOP	0x0008
434 #define	VKI_SA_NODEFER		0x0010
435 #define	VKI_SA_NOCLDWAIT	0x0020
436 #define	VKI_SA_SIGINFO		0x0040
437 
438 #define	VKI_SS_ONSTACK		0x0001
439 #define	VKI_SS_DISABLE		0x0004
440 
441 #define	VKI_SA_ONESHOT		VKI_SA_RESETHAND
442 #define	VKI_SA_NOMASK		VKI_SA_NODEFER
443 
444 struct vki_sigaction {
445 	__vki_sighandler_t ksa_handler;
446 	int		sa_flags;
447 	vki_sigset_t	sa_mask;
448 };
449 
450 typedef struct vki_sigaltstack {
451 	void		*ss_sp;
452 	vki_size_t	ss_size;
453 	int		ss_flags;
454 } vki_stack_t;
455 
456 typedef union vki_sigval {
457 	int sival_int;
458 	void *sival_ptr;
459 } vki_sigval_t;
460 
461 #if 0 	/* freebsd6 */
462 typedef struct vki_siginfo {
463 	int si_signo;
464 	int si_errno;
465 	int si_code;
466 	vki_pid_t si_pid;
467 	vki_uid_t si_uid;
468 	int si_status;
469 	void *si_addr;
470 	vki_sigval_t si_value;
471 
472 	union {
473 
474 		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
475 		struct {
476 			int _trapno;	/* TRAP # which caused the signal */
477 		} _sigfault;
478 
479 		/* POSIX.1b timers */
480 		struct {
481 			int _timerid;		/* timer id */
482 			int _overrun;		/* overrun count */
483 		} _timer;
484 
485 		struct {
486 			int _mqd;
487 		} _mesgq;
488 
489 		/* SIGPOLL */
490 		struct {
491 			long _band;	/* POLL_IN, POLL_OUT, POLL_MSG */
492 		} _sigpoll;
493 
494 		struct {
495 			long __spare1__;
496 			int __spare2[7];
497 		} __spare__;
498 	} _sifields;
499 } vki_siginfo_t;
500 #endif
501 typedef struct vki_siginfo {
502 	int si_signo;
503 	int si_errno;
504 	int si_code;
505 	vki_pid_t si_pid;
506 	vki_uid_t si_uid;
507 	int si_status;
508 	void *si_addr;
509 	vki_sigval_t si_value;
510 // 666: not valid. switch to above def
511 #ifdef si_band
512 #undef si_band
513 #endif
514 	long si_band;
515 	int __spare__[7];
516 } vki_siginfo_t;
517 
518 /*
519  * si_code values
520  */
521 #define VKI_SI_USER	0x10001		/* sent by kill, sigsend, raise */
522 #define VKI_SI_QUEUE	0x10002
523 #define VKI_SI_TIMER	0x10003
524 #define VKI_SI_ASYNCIO	0x10004
525 #define VKI_SI_MESGQ	0x10005
526 
527 /*
528  * SIGILL si_codes
529  */
530 #define VKI_ILL_ILLOPC	1	/* illegal opcode */
531 #define VKI_ILL_ILLOPN	2	/* illegal operand */
532 #define VKI_ILL_ILLADR	3	/* illegal addressing mode */
533 #define VKI_ILL_ILLTRP	4	/* illegal trap */
534 #define VKI_ILL_PRVOPC	5	/* privileged opcode */
535 #define VKI_ILL_PRVREG	6	/* privileged register */
536 #define VKI_ILL_COPROC	7	/* coprocessor error */
537 #define VKI_ILL_BADSTK	8	/* internal stack error */
538 
539 /*
540  * SIGFPE si_codes
541  */
542 #define VKI_FPE_INTOVF	1	/* integer overflow */
543 #define VKI_FPE_INTDIV	2	/* integer divide by zero */
544 #define VKI_FPE_FLTDIV	3	/* floating point divide by zero */
545 #define VKI_FPE_FLTOVF	4	/* floating point overflow */
546 #define VKI_FPE_FLTUND	5	/* floating point underflow */
547 #define VKI_FPE_FLTRES	6	/* floating point inexact result */
548 #define VKI_FPE_FLTINV	7	/* floating point invalid operation */
549 #define VKI_FPE_FLTSUB	8	/* subscript out of range */
550 
551 /*
552  * SIGSEGV si_codes
553  */
554 #define VKI_SEGV_MAPERR	1	/* address not mapped to object */
555 #define VKI_SEGV_ACCERR	2	/* invalid permissions for mapped object */
556 /* XXX i386 and amd64 specific */
557 #define	VKI_SEGV_PAGE_FAULT	12
558 
559 /*
560  * SIGBUS si_codes
561  */
562 #define VKI_BUS_ADRALN	1	/* invalid address alignment */
563 #define VKI_BUS_ADRERR	2	/* non-existant physical address */
564 #define VKI_BUS_OBJERR	3	/* object specific hardware error */
565 
566 /*
567  * SIGTRAP si_codes
568  */
569 #define VKI_TRAP_BRKPT	1	/* process breakpoint */
570 #define VKI_TRAP_TRACE	2	/* process trace trap */
571 
572 
573 #if 0	/* freebsd-6 */
574 typedef struct vki_sigevent {
575 	int sigev_notify;
576 	int sigev_signo;
577 	vki_sigval_t sigev_value;
578 	union {
579 		int _threadid;
580 
581 		struct {
582 			void (*_function)(vki_sigval_t);
583 			void *_attribute;	/* really pthread_attr_t */
584 		} _sigev_thread;
585 		long __spare__[8];
586 	} _sigev_un;
587 } vki_sigevent_t;
588 #endif
589 
590 struct vki_sigevent {
591 	int     sigev_notify;           /* Notification type */
592 	union {
593 		int	__sigev_signo;  /* Signal number */
594 		int	__sigev_notify_kqueue;
595 	} __sigev_u;
596 	vki_sigval_t sigev_value;       /* Signal value */
597 };
598 #if 0
599 #define sigev_signo             __sigev_u.__sigev_signo
600 #define sigev_notify_kqueue     __sigev_u.__sigev_notify_kqueue
601 #endif
602 
603 //----------------------------------------------------------------------
604 // From sys/_iovec.h
605 //----------------------------------------------------------------------
606 
607 struct vki_iovec
608 {
609 	void *iov_base;
610 	__vki_size_t iov_len;
611 };
612 
613 //----------------------------------------------------------------------
614 // From sys/socket.h
615 //----------------------------------------------------------------------
616 
617 typedef __vki_sa_family_t	vki_sa_family_t;
618 typedef __vki_socklen_t		vki_socklen_t;
619 
620 struct vki_sockaddr {
621 	vki_uint8_t	sa_len;
622 	vki_sa_family_t	sa_family;	/* address family, AF_xxx	*/
623 	char		sa_data[14];	/* 14 bytes of protocol address	*/
624 };
625 
626 struct vki_msghdr {
627 	void	*	msg_name;	/* Socket name			*/
628 	vki_socklen_t	msg_namelen;	/* Length of name		*/
629 	struct vki_iovec *	msg_iov;	/* Data blocks			*/
630 	int		msg_iovlen;	/* Number of blocks		*/
631 	void 	*	msg_control;	/* Per protocol magic (eg BSD file descriptor passing) */
632 	vki_socklen_t	msg_controllen;	/* Length of cmsg list */
633 	int		msg_flags;
634 };
635 
636 struct vki_cmsghdr {
637 	vki_socklen_t	cmsg_len;	/* data byte count, including hdr */
638         int		cmsg_level;	/* originating protocol */
639         int		cmsg_type;	/* protocol-specific type */
640 };
641 
642 #define __VKI_CMSG_NXTHDR(ctl, len, cmsg) __vki_cmsg_nxthdr((ctl),(len),(cmsg))
643 #define VKI_CMSG_NXTHDR(mhdr, cmsg) vki_cmsg_nxthdr((mhdr), (cmsg))
644 
645 #define VKI_CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) )
646 
647 #define VKI_CMSG_DATA(cmsg)	((void *)((char *)(cmsg) + VKI_CMSG_ALIGN(sizeof(struct vki_cmsghdr))))
648 
649 #define __VKI_CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct vki_cmsghdr) ? \
650 				  (struct vki_cmsghdr *)(ctl) : \
651 				  (struct vki_cmsghdr *)NULL)
652 #define VKI_CMSG_FIRSTHDR(msg)	__VKI_CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen)
653 
654 // [[Urgh, this is revolting...]
655 // QQQ check
__vki_cmsg_nxthdr(void * __ctl,vki_socklen_t __size,struct vki_cmsghdr * __cmsg)656 static __inline struct vki_cmsghdr * __vki_cmsg_nxthdr(void *__ctl, vki_socklen_t __size,
657 					       struct vki_cmsghdr *__cmsg)
658 {
659 	struct vki_cmsghdr * __ptr;
660 
661 	__ptr = (struct vki_cmsghdr*)(((unsigned char *) __cmsg) +  VKI_CMSG_ALIGN(__cmsg->cmsg_len));
662 	if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size)
663 		return (struct vki_cmsghdr *)0;
664 
665 	return __ptr;
666 }
667 
vki_cmsg_nxthdr(struct vki_msghdr * __msg,struct vki_cmsghdr * __cmsg)668 static __inline struct vki_cmsghdr * vki_cmsg_nxthdr (struct vki_msghdr *__msg, struct vki_cmsghdr *__cmsg)
669 {
670 	return __vki_cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg);
671 }
672 
673 #define	VKI_SCM_RIGHTS	0x01		/* rw: access rights (array of int) */
674 
675 #define VKI_AF_UNIX	1	/* Unix domain sockets 		*/
676 #define VKI_AF_INET	2	/* Internet IP Protocol		*/
677 #define VKI_AF_INET6	28	/* IP version 6			*/
678 
679 #define VKI_MSG_NOSIGNAL	0x20000	/* Do not generate SIGPIPE */
680 
681 #define VKI_SOL_SOCKET	0xffff
682 
683 #define VKI_SO_TYPE	0x1008
684 
685 #define VKI_SOCK_STREAM	1
686 
687 #include <netinet/tcp.h>
688 
689 #define VKI_TCP_NODELAY  TCP_NODELAY
690 
691 #include <netinet/in.h>
692 
693 #define VKI_IPPROTO_TCP  IPPROTO_TCP
694 
695 //----------------------------------------------------------------------
696 // From netinet/in.h
697 //----------------------------------------------------------------------
698 
699 struct vki_in_addr {
700 	vki_in_addr_t	s_addr;
701 };
702 
703 /* Structure describing an Internet (IP) socket address. */
704 #define __VKI_SOCK_SIZE__	16	/* sizeof(struct sockaddr)	*/
705 struct vki_sockaddr_in {
706   vki_uint8_t		sin_len;
707   vki_sa_family_t	sin_family;	/* Address family		*/
708   vki_in_port_t		sin_port;	/* Port number			*/
709   struct vki_in_addr	sin_addr;	/* Internet address		*/
710   char			sin_zero[8];
711 };
712 
713 //----------------------------------------------------------------------
714 // From netinet6/in6.h
715 //----------------------------------------------------------------------
716 
717 struct vki_in6_addr
718 {
719 	union
720 	{
721 		vki_uint8_t	u6_addr8[16];
722 		vki_uint16_t	u6_addr16[8];
723 		vki_uint32_t	u6_addr32[4];
724 	} vki_in6_u;
725 #define vki_s6_addr		vki_in6_u.u6_addr8
726 #define vki_s6_addr16		vki_in6_u.u6_addr16
727 #define vki_s6_addr32		vki_in6_u.u6_addr32
728 };
729 
730 struct vki_sockaddr_in6 {
731 	vki_uint8_t		sin6_len;
732 	vki_sa_family_t		sin6_family;    /* AF_INET6 */
733 	vki_uint16_t		sin6_port;      /* Transport layer port # */
734 	vki_uint32_t		sin6_flowinfo;  /* IPv6 flow information */
735 	struct vki_in6_addr	sin6_addr;      /* IPv6 address */
736 	vki_uint32_t		sin6_scope_id;  /* scope id (new in RFC2553) */
737 };
738 
739 //----------------------------------------------------------------------
740 // From sys/un.h
741 //----------------------------------------------------------------------
742 
743 #define VKI_UNIX_PATH_MAX	104	/* QQQ overridden by sun_len */
744 
745 struct vki_sockaddr_un {
746 	unsigned char sun_len;
747 	vki_sa_family_t sun_family;	/* AF_UNIX */
748 	char sun_path[VKI_UNIX_PATH_MAX];	/* pathname */
749 };
750 
751 #if 0
752 //----------------------------------------------------------------------
753 // From linux-2.6.8.1/include/linux/if.h
754 //----------------------------------------------------------------------
755 
756 #define	VKI_IFNAMSIZ	16
757 
758 struct vki_ifmap
759 {
760 	unsigned long mem_start;
761 	unsigned long mem_end;
762 	unsigned short base_addr;
763 	unsigned char irq;
764 	unsigned char dma;
765 	unsigned char port;
766 	/* 3 bytes spare */
767 };
768 
769 struct vki_if_settings
770 {
771 	unsigned int type;	/* Type of physical device or protocol */
772 	unsigned int size;	/* Size of the data allocated by the caller */
773 	union {
774                 // [[Nb: converted these all to void* to avoid pulling in
775                 //   unnecessary headers]]]
776 		/* {atm/eth/dsl}_settings anyone ? */
777 		void /*raw_hdlc_proto		*/__user *raw_hdlc;
778 		void /*cisco_proto		*/__user *cisco;
779 		void /*fr_proto			*/__user *fr;
780 		void /*fr_proto_pvc		*/__user *fr_pvc;
781 		void /*fr_proto_pvc_info	*/__user *fr_pvc_info;
782 
783 		/* interface settings */
784 		void /*sync_serial_settings	*/__user *sync;
785 		void /*te1_settings		*/__user *te1;
786 	} ifs_ifsu;
787 };
788 
789 struct vki_ifreq
790 {
791 #define VKI_IFHWADDRLEN	6
792 	union
793 	{
794 		char	ifrn_name[VKI_IFNAMSIZ];		/* if name, e.g. "en0" */
795 	} ifr_ifrn;
796 
797 	union {
798 		struct	vki_sockaddr ifru_addr;
799 		struct	vki_sockaddr ifru_dstaddr;
800 		struct	vki_sockaddr ifru_broadaddr;
801 		struct	vki_sockaddr ifru_netmask;
802 		struct  vki_sockaddr ifru_hwaddr;
803 		short	ifru_flags;
804 		int	ifru_ivalue;
805 		int	ifru_mtu;
806 		struct  vki_ifmap ifru_map;
807 		char	ifru_slave[VKI_IFNAMSIZ];	/* Just fits the size */
808 		char	ifru_newname[VKI_IFNAMSIZ];
809 		void __user *	ifru_data;
810 		struct	vki_if_settings ifru_settings;
811 	} ifr_ifru;
812 };
813 
814 #define vki_ifr_name	ifr_ifrn.ifrn_name	/* interface name 	*/
815 #define ifr_hwaddr	ifr_ifru.ifru_hwaddr	/* MAC address 		*/
816 #define	ifr_addr	ifr_ifru.ifru_addr	/* address		*/
817 #define	ifr_dstaddr	ifr_ifru.ifru_dstaddr	/* other end of p-p lnk	*/
818 #define	ifr_broadaddr	ifr_ifru.ifru_broadaddr	/* broadcast address	*/
819 #define	ifr_netmask	ifr_ifru.ifru_netmask	/* interface net mask	*/
820 #define	vki_ifr_flags	ifr_ifru.ifru_flags	/* flags		*/
821 #define	vki_ifr_metric	ifr_ifru.ifru_ivalue	/* metric		*/
822 #define	vki_ifr_mtu		ifr_ifru.ifru_mtu	/* mtu			*/
823 #define ifr_map		ifr_ifru.ifru_map	/* device map		*/
824 #define ifr_slave	ifr_ifru.ifru_slave	/* slave device		*/
825 #define	vki_ifr_data	ifr_ifru.ifru_data	/* for use by interface	*/
826 #define vki_ifr_ifindex	ifr_ifru.ifru_ivalue	/* interface index	*/
827 #define ifr_bandwidth	ifr_ifru.ifru_ivalue    /* link bandwidth	*/
828 #define ifr_qlen	ifr_ifru.ifru_ivalue	/* Queue length 	*/
829 #define ifr_newname	ifr_ifru.ifru_newname	/* New name		*/
830 #define ifr_settings	ifr_ifru.ifru_settings	/* Device/proto settings*/
831 
832 struct vki_ifconf
833 {
834 	int	ifc_len;			/* size of buffer	*/
835 	union
836 	{
837 		char __user *ifcu_buf;
838 		struct vki_ifreq __user *ifcu_req;
839 	} ifc_ifcu;
840 };
841 #define	vki_ifc_buf	ifc_ifcu.ifcu_buf	/* buffer address	*/
842 
843 //----------------------------------------------------------------------
844 // From linux-2.6.8.1/include/linux/if_arp.h
845 //----------------------------------------------------------------------
846 
847 struct vki_arpreq {
848   struct vki_sockaddr	arp_pa;		/* protocol address		*/
849   struct vki_sockaddr	arp_ha;		/* hardware address		*/
850   int			arp_flags;	/* flags			*/
851   struct vki_sockaddr   arp_netmask;    /* netmask (only for proxy arps) */
852   char			arp_dev[16];
853 };
854 
855 //----------------------------------------------------------------------
856 // From linux-2.6.8.1/include/linux/route.h
857 //----------------------------------------------------------------------
858 
859 struct vki_rtentry
860 {
861 	unsigned long	rt_pad1;
862 	struct vki_sockaddr	rt_dst;		/* target address		*/
863 	struct vki_sockaddr	rt_gateway;	/* gateway addr (RTF_GATEWAY)	*/
864 	struct vki_sockaddr	rt_genmask;	/* target network mask (IP)	*/
865 	unsigned short	rt_flags;
866 	short		rt_pad2;
867 	unsigned long	rt_pad3;
868 	void		*rt_pad4;
869 	short		rt_metric;	/* +1 for binary compatibility!	*/
870 	char __user	*rt_dev;	/* forcing the device at add	*/
871 	unsigned long	rt_mtu;		/* per route MTU/Window 	*/
872 // [[Not important for Valgrind]]
873 //#ifndef __KERNEL__
874 //#define rt_mss	rt_mtu		/* Compatibility :-(            */
875 //#endif
876 	unsigned long	rt_window;	/* Window clamping 		*/
877 	unsigned short	rt_irtt;	/* Initial RTT			*/
878 };
879 #endif
880 
881 // QQQ sort
882 
883 //----------------------------------------------------------------------
884 // From sys/mount.h
885 //----------------------------------------------------------------------
886 
887 typedef struct vki_fsid { vki_int32_t val[2]; } vki_fsid_t;
888 #define VKI_OMFSNAMELEN	16
889 #define VKI_OMNAMELEN	(88 - 2 * sizeof(long))
890 #define VKI_MFSNAMELEN	16
891 #define VKI_MNAMELEN	88
892 
893 struct vki_statfs4 {
894 	long		f_spare2;
895 	long		f_bsize;
896 	long		f_iosize;
897 	long		f_blocks;
898 	long		f_bfree;
899 	long		f_bavail;
900 	long		f_files;
901 	long		f_ffree;
902 	vki_fsid_t	f_fsid;
903 	vki_uid_t	f_owner;
904 	vki_int32_t	f_type;
905 	vki_int32_t	f_flags;
906 	long		f_syncwrites;
907 	long		f_asyncwrites;
908 	char		f_fstypename[VKI_OMFSNAMELEN];
909 	char		f_mntonname[VKI_OMNAMELEN];
910 	long		f_syncreads;
911 	long		f_asyncreads;
912 	vki_int16_t	f_spares1;
913 	char		f_mntfromnname[VKI_OMNAMELEN];
914 	vki_int16_t	f_spares2;
915 	long		f_spare[2];
916 };
917 
918 struct vki_statfs {
919 	vki_uint32_t	f_version;
920 	vki_uint32_t	f_type;
921 	vki_uint64_t	f_flags;
922 	vki_uint64_t	f_bsize;
923 	vki_uint64_t	f_iosize;
924 	vki_uint64_t	f_blocks;
925 	vki_uint64_t	f_bfree;
926 	vki_int64_t	f_bavail;
927 	vki_uint64_t	f_files;
928 	vki_int64_t	f_ffree;
929 	vki_uint64_t	f_syncwrites;
930 	vki_uint64_t	f_asyncwrites;
931 	vki_uint64_t	f_syncreads;
932 	vki_uint64_t	f_asyncreads;
933 	vki_uint64_t	f_spare[10];
934 	vki_uint32_t	f_namemax;
935 	vki_uid_t	f_owner;
936 	vki_fsid_t	f_fsid;
937 	char		f_charspare[80];
938 	char		f_fstypename[VKI_MFSNAMELEN];
939 	char		f_mntfromnname[VKI_MNAMELEN];
940 	char		f_mntonname[VKI_MNAMELEN];
941 };
942 
943 #define MAXFIDSZ        16
944 
945 struct vki_fid {
946         vki_uint16_t    fid_len;
947         vki_uint16_t    fid_reserved;
948         char            fid_data[MAXFIDSZ];
949 };
950 
951 struct vki_fhandle {
952 	vki_fsid_t	fh_fsid;
953 	struct vki_fid	fh_fid;
954 };
955 
956 #define VKI_MNAMELEN6	88
957 struct vki_statfs6 {
958 	vki_uint32_t	f_version;
959 	vki_uint32_t	f_type;
960 	vki_uint64_t	f_flags;
961 	vki_uint64_t	f_bsize;
962 	vki_uint64_t	f_iosize;
963 	vki_uint64_t	f_blocks;
964 	vki_uint64_t	f_bfree;
965 	vki_int64_t	f_bavail;
966 	vki_uint64_t	f_files;
967 	vki_int64_t	f_ffree;
968 	vki_int64_t	f_syncwrites;
969 	vki_int64_t	f_asyncwrites;
970 	vki_int64_t	f_syncreads;
971 	vki_int64_t	f_asyncreads;
972 	vki_uint64_t	f_spare[10];
973 	vki_uint32_t	f_namemax;
974 	vki_uid_t	f_owner;
975 	vki_fsid_t	f_fsid;
976 	char		f_charspare[80];
977 	char		f_fstypename[VKI_MFSNAMELEN];
978 	char		f_mntfromnname[VKI_MNAMELEN6];
979 	char		f_mntonname[VKI_MNAMELEN6];
980 };
981 
982 //----------------------------------------------------------------------
983 // From sys/ttycom.h
984 //----------------------------------------------------------------------
985 
986 struct vki_winsize {
987 	unsigned short ws_row;
988 	unsigned short ws_col;
989 	unsigned short ws_xpixel;
990 	unsigned short ws_ypixel;
991 };
992 
993 
994 //----------------------------------------------------------------------
995 // From sys/termios.h
996 //----------------------------------------------------------------------
997 
998 typedef unsigned int    vki_tcflag_t;
999 typedef unsigned char   vki_cc_t;
1000 typedef unsigned int    vki_speed_t;
1001 
1002 #define VKI_NCCS 20
1003 struct vki_termios {
1004 	vki_tcflag_t c_iflag;		/* input mode flags */
1005 	vki_tcflag_t c_oflag;		/* output mode flags */
1006 	vki_tcflag_t c_cflag;		/* control mode flags */
1007 	vki_tcflag_t c_lflag;		/* local mode flags */
1008 	vki_cc_t c_cc[VKI_NCCS];	/* control characters */
1009 	vki_speed_t c_ispeed;
1010 	vki_speed_t c_ospeed;
1011 };
1012 
1013 //----------------------------------------------------------------------
1014 // From sys/ioccom.h
1015 //----------------------------------------------------------------------
1016 
1017 /* QQQ keep linux's naming, but use our layout */
1018 
1019 /*
1020  * We actually have a 16 bit "base" ioctl, which may or may not be decoded
1021  * into number/group
1022  */
1023 #define	_VKI_IOC_BASEBITS	16
1024 #define _VKI_IOC_NRBITS		8	/* "num" on freebsd */
1025 #define _VKI_IOC_TYPEBITS	8	/* "group" on freebsd */
1026 
1027 #define _VKI_IOC_SIZEBITS	13
1028 #define _VKI_IOC_DIRBITS	3
1029 
1030 #define	_VKI_IOC_BASEMASK	((1ul << _VKI_IOC_BASEBITS)-1)
1031 #define _VKI_IOC_NRMASK		((1ul << _VKI_IOC_NRBITS)-1)
1032 #define _VKI_IOC_TYPEMASK	((1ul << _VKI_IOC_TYPEBITS)-1)
1033 #define _VKI_IOC_SIZEMASK	((1ul << _VKI_IOC_SIZEBITS)-1)
1034 #define _VKI_IOC_DIRMASK	((1ul << _VKI_IOC_DIRBITS)-1)
1035 
1036 #define	_VKI_IOC_BASESHIFT	0
1037 #define _VKI_IOC_NRSHIFT	0
1038 #define _VKI_IOC_TYPESHIFT	(_VKI_IOC_NRSHIFT+_VKI_IOC_NRBITS)
1039 #define _VKI_IOC_SIZESHIFT	(_VKI_IOC_TYPESHIFT+_VKI_IOC_TYPEBITS)
1040 #define _VKI_IOC_DIRSHIFT	(_VKI_IOC_SIZESHIFT+_VKI_IOC_SIZEBITS)
1041 
1042 #define _VKI_IOC_NONE	1U	/* "void" on freebsd, as a specific mode */
1043 #define _VKI_IOC_READ	2U	/* "out", copyout in reversed linux terminology */
1044 #define _VKI_IOC_WRITE	4U	/* "in", copyin in reversed linux terminology */
1045 #define _VKI_IOC_RDWR	6U	/* "inout", copyin and copyout */
1046 
1047 #define _VKI_IOC(dir,type,nr,size) \
1048 	(((dir)  << _VKI_IOC_DIRSHIFT) | \
1049 	 ((type) << _VKI_IOC_TYPESHIFT) | \
1050 	 ((nr)   << _VKI_IOC_NRSHIFT) | \
1051 	 ((size) << _VKI_IOC_SIZESHIFT))
1052 
1053 /* provoke compile error for invalid uses of size argument */
1054 extern unsigned int __vki_invalid_size_argument_for_IOC;
1055 #define _VKI_IOC_TYPECHECK(t) \
1056 	((sizeof(t) == sizeof(t[1]) && \
1057 	  sizeof(t) < (1 << _VKI_IOC_SIZEBITS)) ? \
1058 	  sizeof(t) : __vki_invalid_size_argument_for_IOC)
1059 
1060 /* used to create numbers */
1061 #define _VKI_IO(type,nr)	_VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
1062 #define _VKI_IOR(type,nr,size)	_VKI_IOC(_VKI_IOC_READ,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
1063 #define _VKI_IOW(type,nr,size)	_VKI_IOC(_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
1064 #define _VKI_IOWR(type,nr,size)	_VKI_IOC(_VKI_IOC_READ|_VKI_IOC_WRITE,(type),(nr),(_VKI_IOC_TYPECHECK(size)))
1065 
1066 /* used to decode ioctl numbers.. */
1067 #define _VKI_IOC_DIR(nr)	(((nr) >> _VKI_IOC_DIRSHIFT) & _VKI_IOC_DIRMASK)
1068 #define _VKI_IOC_TYPE(nr)	(((nr) >> _VKI_IOC_TYPESHIFT) & _VKI_IOC_TYPEMASK)
1069 #define _VKI_IOC_NR(nr)		(((nr) >> _VKI_IOC_NRSHIFT) & _VKI_IOC_NRMASK)
1070 #define _VKI_IOC_SIZE(nr)	(((nr) >> _VKI_IOC_SIZESHIFT) & _VKI_IOC_SIZEMASK)
1071 #define _VKI_IOC_BASE(nr)	(((nr) >> _VKI_IOC_BASESHIFT) & _VKI_IOC_BASEMASK)
1072 
1073 
1074 //----------------------------------------------------------------------
1075 // From sys/termios.h
1076 //----------------------------------------------------------------------
1077 
1078 #if 0
1079 #define VKI_TCGETS	0x5401
1080 #define VKI_TCSETS	0x5402 /* Clashes with SNDCTL_TMR_START sound ioctl */
1081 #define VKI_TCSETSW	0x5403
1082 #define VKI_TCSETSF	0x5404
1083 #define VKI_TCGETA	0x5405	y
1084 #define VKI_TCSETA	0x5406	y
1085 #define VKI_TCSETAW	0x5407	y
1086 #define VKI_TCSETAF	0x5408	y
1087 #define VKI_TCSBRK	0x5409
1088 #define VKI_TCXONC	0x540A
1089 #define VKI_TCFLSH	0x540B	y
1090 #define VKI_TIOCSCTTY	0x540E
1091 #define VKI_TIOCGPGRP	0x540F	y
1092 #define VKI_TIOCSPGRP	0x5410	y
1093 #define VKI_TIOCOUTQ	0x5411
1094 #define VKI_TIOCGWINSZ	0x5413	y
1095 #define VKI_TIOCSWINSZ	0x5414	y
1096 #define VKI_TIOCMGET	0x5415	y
1097 #define VKI_TIOCMBIS	0x5416	y
1098 #define VKI_TIOCMBIC	0x5417	y
1099 #define VKI_TIOCMSET	0x5418	y
1100 #define VKI_FIONREAD	0x541B
1101 #define VKI_TIOCLINUX	0x541C
1102 #define VKI_FIONBIO	0x5421
1103 #define VKI_TCSBRKP	0x5425	/* Needed for POSIX tcsendbreak() */
1104 #define VKI_TIOCGPTN	_VKI_IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
1105 #define VKI_TIOCSPTLCK	_VKI_IOW('T',0x31, int)  /* Lock/unlock Pty */
1106 
1107 #define VKI_FIOASYNC	0x5452
1108 #define VKI_TIOCSERGETLSR   0x5459 /* Get line status register */
1109 
1110 #define VKI_TIOCGICOUNT	0x545D	/* read serial port inline interrupt counts */
1111 #endif
1112 
1113 #define	VKI_TIOCFLUSH	_VKI_IOW('t', 16, int);
1114 #define	VKI_TIOCGETA	_VKI_IOR('t', 19, struct vki_termios)	/* get termios */
1115 #define	VKI_TIOCSETA	_VKI_IOR('t', 20, struct vki_termios)	/* set termios */
1116 #define	VKI_TIOCSETAW	_VKI_IOR('t', 21, struct vki_termios)	/* drain,set */
1117 #define	VKI_TIOCSETAF	_VKI_IOR('t', 22, struct vki_termios)	/* flush,set */
1118 
1119 #define	VKI_TIOCSBRK	_VKI_IO('t', 123)
1120 #define	VKI_TIOCCBRK	_VKI_IO('t', 122)
1121 #define	VKI_TIOCGPGRP	_VKI_IOR('t', 119, int)		/* get pgrp */
1122 #define	VKI_TIOCSPGRP	_VKI_IOW('t', 118, int)		/* set pgrp */
1123 
1124 #define VKI_TIOCGWINSZ	_VKI_IOR('t', 104, struct vki_winsize)  /* get window size */
1125 #define VKI_TIOCSWINSZ	_VKI_IOW('t', 103, struct vki_winsize)  /* set window size */
1126 
1127 #define VKI_TIOCMGET	_VKI_IOR('t', 106, int)	/* get all modem bits */
1128 #define VKI_TIOCMBIS	_VKI_IOW('t', 108, int)	/* bis modem bits */
1129 #define VKI_TIOCMBIC	_VKI_IOW('t', 107, int)	/* bic modem bits */
1130 #define VKI_TIOCMSET	_VKI_IOW('t', 109, int)	/* set all modem bits */
1131 
1132 
1133 //----------------------------------------------------------------------
1134 // From sys/filio.h
1135 //----------------------------------------------------------------------
1136 
1137 #define VKI_FIOCLEX	_VKI_IO('f', 1)		/* close on exec */
1138 #define VKI_FIONCLEX	_VKI_IO('f', 2)		/* no close on exec */
1139 #define VKI_FIONREAD	_VKI_IOR('f', 127, int)
1140 #define VKI_FIONBIO	_VKI_IOW('f', 126, int)
1141 #define VKI_FIOASYNC	_VKI_IOW('f', 125, int)
1142 #define VKI_FIOSETOWN	_VKI_IOW('f', 124, int)
1143 #define VKI_FIOGETOWN	_VKI_IOW('f', 123, int)
1144 
1145 //----------------------------------------------------------------------
1146 // From sys/poll.h
1147 //----------------------------------------------------------------------
1148 
1149 #define VKI_POLLIN		0x0001
1150 
1151 struct vki_pollfd {
1152 	int fd;
1153 	short events;
1154 	short revents;
1155 };
1156 
1157 //----------------------------------------------------------------------
1158 // From sys/kevent.h
1159 //----------------------------------------------------------------------
1160 struct vki_kevent {
1161 	vki_uintptr_t  ident;
1162 	vki_int16_t    filter;
1163 	vki_uint16_t   flags;
1164 	vki_uint32_t   fflags;
1165 	vki_intptr_t   data;
1166 	void           *udata;
1167 };
1168 
1169 
1170 // QQQ sort
1171 
1172 //----------------------------------------------------------------------
1173 // From sys/resource.h
1174 //----------------------------------------------------------------------
1175 
1176 struct	vki_rusage {
1177 	struct vki_timeval ru_utime;	/* user time used */
1178 	struct vki_timeval ru_stime;	/* system time used */
1179 	long	ru_maxrss;		/* maximum resident set size */
1180 	long	ru_ixrss;		/* integral shared memory size */
1181 	long	ru_idrss;		/* integral unshared data size */
1182 	long	ru_isrss;		/* integral unshared stack size */
1183 	long	ru_minflt;		/* page reclaims */
1184 	long	ru_majflt;		/* page faults */
1185 	long	ru_nswap;		/* swaps */
1186 	long	ru_inblock;		/* block input operations */
1187 	long	ru_oublock;		/* block output operations */
1188 	long	ru_msgsnd;		/* messages sent */
1189 	long	ru_msgrcv;		/* messages received */
1190 	long	ru_nsignals;		/* signals received */
1191 	long	ru_nvcsw;		/* voluntary context switches */
1192 	long	ru_nivcsw;		/* involuntary " */
1193 };
1194 
1195 struct vki_rlimit {
1196 	vki_rlim_t	rlim_cur;
1197 	vki_rlim_t	rlim_max;
1198 };
1199 
1200 #define VKI_RLIMIT_DATA		2	/* max data size */
1201 #define VKI_RLIMIT_STACK	3	/* max stack size */
1202 #define VKI_RLIMIT_CORE		4	/* max core file size */
1203 #define VKI_RLIMIT_NOFILE	8	/* max number of open files */
1204 
1205 //----------------------------------------------------------------------
1206 // From sys/procfs.h
1207 //----------------------------------------------------------------------
1208 
1209 #define VKI_PRSTATUS_VERSION	1
1210 struct vki_elf_prstatus
1211 {
1212 	int		pr_version;	/* version of struct - PRSTATUS_VERSION */
1213 	vki_size_t	pr_statussz;
1214 	vki_size_t	pr_gregsetsz;
1215 	vki_size_t	pr_fpregsetsz;
1216 	int		pr_osreldate;
1217 	short		pr_cursig;	/* Current signal */
1218 	vki_pid_t	pr_pid;
1219 	vki_elf_gregset_t pr_reg;	/* GP registers */
1220 };
1221 
1222 #define VKI_ELF_PRARGSZ	(80)	/* Number of chars for args */
1223 #define VKI_MAXCOMLEN	(16)
1224 
1225 #define	VKI_PRPSINFO_VERSION	1
1226 struct vki_elf_prpsinfo
1227 {
1228 	int	pr_version;	/* version of struct - PRPSINFO_VERSION */
1229 	vki_size_t	pr_psinfosz;
1230 	char	pr_fname[VKI_MAXCOMLEN+1];		/* filename of executable */
1231 	char	pr_psargs[VKI_ELF_PRARGSZ];	/* initial part of arg list */
1232 };
1233 
1234 //----------------------------------------------------------------------
1235 // From posix4/mqueue.h
1236 //----------------------------------------------------------------------
1237 
1238 struct vki_mq_attr {
1239 	long	mq_flags;	/* message queue flags			*/
1240 	long	mq_maxmsg;	/* maximum number of messages		*/
1241 	long	mq_msgsize;	/* maximum message size			*/
1242 	long	mq_curmsgs;	/* number of messages currently queued	*/
1243 };
1244 
1245 //----------------------------------------------------------------------
1246 // From sys/ucontext.h
1247 //----------------------------------------------------------------------
1248 
1249 #define	VKI_UCF_SWAPPED	1
1250 
1251 struct vki_ucontext {
1252 	vki_sigset_t		uc_sigmask;
1253 	struct vki_mcontext	uc_mcontext;
1254 	struct vki_ucontext	*uc_link;
1255 	vki_stack_t		uc_stack;
1256 	int			uc_flags;
1257 	unsigned int		__spare__[4];
1258 };
1259 
1260 //----------------------------------------------------------------------
1261 // From sys/utsname.h
1262 //----------------------------------------------------------------------
1263 
1264 #define VKI_SYS_NMLN        32
1265 
1266 struct vki_utsname {
1267         char    sysname[VKI_SYS_NMLN];      /* Name of this OS. */
1268         char    nodename[VKI_SYS_NMLN];     /* Name of this network node. */
1269         char    release[VKI_SYS_NMLN];      /* Release level. */
1270         char    version[VKI_SYS_NMLN];      /* Version level. */
1271         char    machine[VKI_SYS_NMLN];      /* Hardware type. */
1272 };
1273 
1274 #define VKI_IPC_CREAT  00001000   /* create if key is nonexistent */
1275 #define VKI_IPC_EXCL   00002000   /* fail if key exists */
1276 #define VKI_IPC_NOWAIT 00004000   /* return error on wait */
1277 
1278 #define VKI_IPC_RMID 0     /* remove resource */
1279 #define VKI_IPC_SET  1     /* set ipc_perm options */
1280 #define VKI_IPC_STAT 2     /* get ipc_perm options */
1281 #define VKI_IPC_INFO 3     /* see ipcs */
1282 
1283 struct vki_ipc_perm
1284 {
1285 	vki_uid_t	cuid;
1286 	vki_gid_t	cgid;
1287 	vki_uid_t	uid;
1288 	vki_gid_t	gid;
1289 	vki_mode_t	mode;
1290 	unsigned short	seq;
1291 	vki_key_t	key;
1292 };
1293 
1294 struct vki_ipc_perm7
1295 {
1296 	unsigned short	cuid;
1297 	unsigned short	cgid;
1298 	unsigned short	uid;
1299 	unsigned short	gid;
1300 	unsigned short	mode;
1301 	unsigned short	seq;
1302 	vki_key_t	key;
1303 };
1304 
1305 //----------------------------------------------------------------------
1306 // From sys/sem.h
1307 //----------------------------------------------------------------------
1308 
1309 #if 0
1310 #define VKI_SEMOP                1
1311 #define VKI_SEMGET               2
1312 #define VKI_SEMCTL               3
1313 #define VKI_SEMTIMEDOP           4
1314 #endif
1315 
1316 #define VKI_GETALL  6       /* get all semval's */
1317 #define VKI_SETVAL  8       /* set semval */
1318 #define VKI_SETALL  9       /* set all semval's */
1319 #define VKI_SEM_STAT 10
1320 #define VKI_SEM_INFO 11
1321 
1322 /* Obsolete, used only for backwards compatibility and libc5 compiles */
1323 struct vki_semid_ds {
1324 	struct vki_ipc_perm	sem_perm;		/* permissions .. see ipc.h */
1325         // [[Use void* to avoid excess header copying]]
1326 	void/*struct sem	*/*sem_base;		/* ptr to first semaphore in array */
1327 	unsigned short		sem_nsems;		/* no. of semaphores in array */
1328 	vki_time_t		sem_otime;		/* last semop time */
1329 	vki_time_t		sem_ctime;		/* last change time */
1330 	long			sem_pad2;
1331 	long			sem_pad3[4];
1332 };
1333 
1334 struct vki_sembuf {
1335 	vki_uint16_t	sem_num;	/* semaphore index in array */
1336 	vki_int16_t	sem_op;		/* semaphore operation */
1337 	vki_int16_t	sem_flg;	/* operation flags */
1338 };
1339 
1340 union vki_semun {
1341 	int val;			/* value for SETVAL */
1342 	struct vki_semid_ds *buf;	/* buffer for IPC_STAT & IPC_SET */
1343 	vki_uint16_t *array;	/* array for GETALL & SETALL */
1344 };
1345 
1346 
1347 //----------------------------------------------------------------------
1348 // From sys/errno.h
1349 //----------------------------------------------------------------------
1350 
1351 #define VKI_ERESTART	-1
1352 #define VKI_EPERM           1               /* Operation not permitted */
1353 #define VKI_ENOENT          2               /* No such file or directory */
1354 #define VKI_ESRCH           3               /* No such process */
1355 #define VKI_EINTR           4               /* Interrupted system call */
1356 #define VKI_EIO             5               /* Input/output error */
1357 #define VKI_ENXIO           6               /* Device not configured */
1358 #define VKI_E2BIG           7               /* Argument list too long */
1359 #define VKI_ENOEXEC         8               /* Exec format error */
1360 #define VKI_EBADF           9               /* Bad file descriptor */
1361 #define VKI_ECHILD          10              /* No child processes */
1362 #define VKI_EDEADLK         11              /* Resource deadlock avoided */
1363 #define VKI_ENOMEM          12              /* Cannot allocate memory */
1364 #define VKI_EACCES          13              /* Permission denied */
1365 #define VKI_EFAULT          14              /* Bad address */
1366 #define VKI_ENOTBLK         15              /* Block device required */
1367 #define VKI_EBUSY           16              /* Device busy */
1368 #define VKI_EEXIST          17              /* File exists */
1369 #define VKI_EXDEV           18              /* Cross-device link */
1370 #define VKI_ENODEV          19              /* Operation not supported by device */
1371 #define VKI_ENOTDIR         20              /* Not a directory */
1372 #define VKI_EISDIR          21              /* Is a directory */
1373 #define VKI_EINVAL          22              /* Invalid argument */
1374 #define VKI_ENFILE          23              /* Too many open files in system */
1375 #define VKI_EMFILE          24              /* Too many open files */
1376 #define VKI_ENOTTY          25              /* Inappropriate ioctl for device */
1377 #define VKI_ETXTBSY         26              /* Text file busy */
1378 #define VKI_EFBIG           27              /* File too large */
1379 #define VKI_ENOSPC          28              /* No space left on device */
1380 #define VKI_ESPIPE          29              /* Illegal seek */
1381 #define VKI_EROFS           30              /* Read-only filesystem */
1382 #define VKI_EMLINK          31              /* Too many links */
1383 #define VKI_EPIPE           32              /* Broken pipe */
1384 #define VKI_EDOM            33              /* Numerical argument out of domain */
1385 #define VKI_ERANGE          34              /* Result too large */
1386 #define VKI_EAGAIN          35              /* Resource temporarily unavailable */
1387 #define VKI_EWOULDBLOCK     VKI_EAGAIN          /* Operation would block */
1388 #define VKI_EINPROGRESS     36              /* Operation now in progress */
1389 #define VKI_EALREADY        37              /* Operation already in progress */
1390 #define VKI_ENOTSOCK        38              /* Socket operation on non-socket */
1391 #define VKI_EDESTADDRREQ    39              /* Destination address required */
1392 #define VKI_EMSGSIZE        40              /* Message too long */
1393 #define VKI_EPROTOTYPE      41              /* Protocol wrong type for socket */
1394 #define VKI_ENOPROTOOPT     42              /* Protocol not available */
1395 #define VKI_EPROTONOSUPPORT 43              /* Protocol not supported */
1396 #define VKI_ESOCKTNOSUPPORT 44              /* Socket type not supported */
1397 #define VKI_EOPNOTSUPP      45              /* Operation not supported */
1398 #define VKI_ENOTSUP         VKI_EOPNOTSUPP      /* Operation not supported */
1399 #define VKI_EPFNOSUPPORT    46              /* Protocol family not supported */
1400 #define VKI_EAFNOSUPPORT    47              /* Address family not supported by protocol family */
1401 #define VKI_EADDRINUSE      48              /* Address already in use */
1402 #define VKI_EADDRNOTAVAIL   49
1403 #define VKI_ENETDOWN        50              /* Network is down */
1404 #define VKI_ENETUNREACH     51              /* Network is unreachable */
1405 #define VKI_ENETRESET       52              /* Network dropped connection on reset */
1406 #define VKI_ECONNABORTED    53              /* Software caused connection abort */
1407 #define VKI_ECONNRESET      54              /* Connection reset by peer */
1408 #define VKI_ENOBUFS         55              /* No buffer space available */
1409 #define VKI_EISCONN         56              /* Socket is already connected */
1410 #define VKI_ENOTCONN        57              /* Socket is not connected */
1411 #define VKI_ESHUTDOWN       58              /* Can't send after socket shutdown */
1412 #define VKI_ETOOMANYREFS    59              /* Too many references: can't splice */
1413 #define VKI_ETIMEDOUT       60              /* Operation timed out */
1414 #define VKI_ECONNREFUSED    61              /* Connection refused */
1415 #define VKI_ELOOP           62              /* Too many levels of symbolic links */
1416 #define VKI_ENAMETOOLONG    63              /* File name too long */
1417 #define VKI_EHOSTDOWN       64              /* Host is down */
1418 #define VKI_EHOSTUNREACH    65              /* No route to host */
1419 #define VKI_ENOTEMPTY       66              /* Directory not empty */
1420 #define VKI_EPROCLIM        67              /* Too many processes */
1421 #define VKI_EUSERS          68              /* Too many users */
1422 #define VKI_EDQUOT          69              /* Disc quota exceeded */
1423 #define VKI_ESTALE          70              /* Stale NFS file handle */
1424 #define VKI_EREMOTE         71              /* Too many levels of remote in path */
1425 #define VKI_EBADRPC         72              /* RPC struct is bad */
1426 #define VKI_ERPCMISMATCH    73              /* RPC version wrong */
1427 #define VKI_EPROGUNAVAIL    74              /* RPC prog. not avail */
1428 #define VKI_EPROGMISMATCH   75              /* Program version wrong */
1429 #define VKI_EPROCUNAVAIL    76              /* Bad procedure for program */
1430 #define VKI_ENOLCK          77              /* No locks available */
1431 #define VKI_ENOSYS          78              /* Function not implemented */
1432 #define VKI_EFTYPE          79              /* Inappropriate file type or format */
1433 #define VKI_EAUTH           80              /* Authentication error */
1434 #define VKI_ENEEDAUTH       81              /* Need authenticator */
1435 #define VKI_EIDRM           82              /* Identifier removed */
1436 #define VKI_ENOMSG          83              /* No message of desired type */
1437 #define VKI_EOVERFLOW       84              /* Value too large to be stored in data type */
1438 #define VKI_ECANCELED       85              /* Operation canceled */
1439 #define VKI_EILSEQ          86              /* Illegal byte sequence */
1440 #define VKI_ENOATTR         87              /* Attribute not found */
1441 #define VKI_EDOOFUS         88              /* Programming error */
1442 #define VKI_EBADMSG         89              /* Bad message */
1443 #define VKI_EMULTIHOP       90              /* Multihop attempted */
1444 #define VKI_ENOLINK         91              /* Link has been severed */
1445 #define VKI_EPROTO          92              /* Protocol error */
1446 #define VKI_ENOTCAPABLE     93              /* Capabilities insufficient */
1447 #define VKI_ECAPMODE        94              /* Not permitted in capability mode */
1448 
1449 //----------------------------------------------------------------------
1450 // From sys/wait.h
1451 //----------------------------------------------------------------------
1452 
1453 #define VKI_WNOHANG	0x00000001
1454 
1455 //----------------------------------------------------------------------
1456 // From sys/mman.h
1457 //----------------------------------------------------------------------
1458 
1459 #define VKI_PROT_NONE	0x00		/* No page permissions */
1460 #define VKI_PROT_READ	0x01		/* page can be read */
1461 #define VKI_PROT_WRITE	0x02		/* page can be written */
1462 #define VKI_PROT_EXEC	0x04		/* page can be executed */
1463 
1464 #define VKI_MAP_SHARED	0x01		/* Share changes */
1465 #define VKI_MAP_PRIVATE	0x02		/* Changes are private */
1466 #define VKI_MAP_FIXED	0x10		/* Interpret addr exactly */
1467 #define VKI_MAP_NORESERVE	0x0040		/* don't check for reservations */
1468 #define	VKI_MAP_STACK	0x400
1469 #define VKI_MAP_ANON	0x1000	/* don't use a file */
1470 #define	VKI_MAP_ANONYMOUS	VKI_MAP_ANON
1471 
1472 //----------------------------------------------------------------------
1473 // From sys/stat.h
1474 //----------------------------------------------------------------------
1475 
1476 #define VKI_S_IFMT  00170000
1477 
1478 #define VKI_S_IFWHT  0160000
1479 #define VKI_S_IFSOCK 0140000
1480 #define VKI_S_IFLNK  0120000
1481 #define VKI_S_IFREG  0100000
1482 #define VKI_S_IFBLK  0060000
1483 #define VKI_S_IFDIR  0040000
1484 #define VKI_S_IFCHR  0020000
1485 #define VKI_S_IFIFO  0010000
1486 #define VKI_S_ISUID  0004000
1487 #define VKI_S_ISGID  0002000
1488 #define VKI_S_ISTXT  0001000
1489 
1490 #define VKI_S_ISLNK(m)	(((m) & VKI_S_IFMT) == VKI_S_IFLNK)
1491 #define VKI_S_ISREG(m)	(((m) & VKI_S_IFMT) == VKI_S_IFREG)
1492 #define VKI_S_ISDIR(m)	(((m) & VKI_S_IFMT) == VKI_S_IFDIR)
1493 #define VKI_S_ISCHR(m)	(((m) & VKI_S_IFMT) == VKI_S_IFCHR)
1494 #define VKI_S_ISBLK(m)	(((m) & VKI_S_IFMT) == VKI_S_IFBLK)
1495 #define VKI_S_ISFIFO(m)	(((m) & VKI_S_IFMT) == VKI_S_IFIFO)
1496 #define VKI_S_ISSOCK(m)	(((m) & VKI_S_IFMT) == VKI_S_IFSOCK)
1497 #define VKI_S_ISWHT(m)	(((m) & VKI_S_IFMT) == VKI_S_IFWHT)
1498 
1499 #define VKI_S_IRWXU 00700
1500 #define VKI_S_IRUSR 00400
1501 #define VKI_S_IWUSR 00200
1502 #define VKI_S_IXUSR 00100
1503 
1504 #define VKI_S_IRWXG 00070
1505 #define VKI_S_IRGRP 00040
1506 #define VKI_S_IWGRP 00020
1507 #define VKI_S_IXGRP 00010
1508 
1509 #define VKI_S_IRWXO 00007
1510 #define VKI_S_IROTH 00004
1511 #define VKI_S_IWOTH 00002
1512 #define VKI_S_IXOTH 00001
1513 
1514 
1515 //----------------------------------------------------------------------
1516 // From sys/dirent.h
1517 //----------------------------------------------------------------------
1518 
1519 struct vki_dirent {
1520 	vki_uint32_t	d_fileno;
1521 	vki_uint16_t	d_reclen;
1522 	vki_uint8_t	d_type;
1523 	vki_uint8_t	d_namelen;
1524 	char		d_name[256]; /* We must not include limits.h! */
1525 };
1526 
1527 //----------------------------------------------------------------------
1528 // From sys/fcntl.h
1529 //----------------------------------------------------------------------
1530 
1531 #define VKI_O_RDONLY	  O_RDONLY
1532 #define VKI_O_WRONLY	  O_WRONLY
1533 #define VKI_O_RDWR	  O_RDWR
1534 
1535 #define VKI_O_NONBLOCK	  O_NONBLOCK
1536 #define VKI_O_APPEND	  O_APPEND
1537 #define VKI_O_CREAT	  O_CREAT
1538 #define VKI_O_TRUNC	  O_TRUNC
1539 #define VKI_O_EXCL	  O_EXCL
1540 
1541 #define VKI_AT_FDCWD            AT_FDCWD
1542 
1543 #define VKI_F_DUPFD		0	/* dup */
1544 #define VKI_F_GETFD		1	/* get close_on_exec */
1545 #define VKI_F_SETFD		2	/* set/clear close_on_exec */
1546 #define VKI_F_GETFL		3	/* get file->f_flags */
1547 #define VKI_F_SETFL		4	/* set file->f_flags */
1548 #define VKI_F_SETOWN		5	/*  for sockets. */
1549 #define VKI_F_GETOWN		6	/*  for sockets. */
1550 #define VKI_F_OGETLK		7	/* get record locking information */
1551 #define VKI_F_OSETLK		8	/* set record locking information */
1552 #define VKI_F_OSETLKW		9	/* F_SETLK; wait if blocked */
1553 #define VKI_F_DUP2FD		10	/* duplicate file descriptor to arg */
1554 #define VKI_F_GETLK		11	/* get record locking information */
1555 #define VKI_F_SETLK		12	/* set record locking information */
1556 #define VKI_F_SETLKW		13	/* F_SETLK; wait if blocked */
1557 #define VKI_F_SETLK_REMOTE	14	/* debugging support for remote locks */
1558 #define VKI_F_DUPFD_CLOEXEC	17	/* dup close_on_exec */
1559 
1560 /* for F_[GET|SET]FL */
1561 #define VKI_FD_CLOEXEC	1	/* actually anything with low bit set goes */
1562 
1563 //----------------------------------------------------------------------
1564 // From sys/unistd.h
1565 //----------------------------------------------------------------------
1566 
1567 #define VKI_SEEK_SET              0
1568 #define VKI_SEEK_CUR              1
1569 #define VKI_SEEK_END              2
1570 
1571 #define VKI_F_OK	0       /* test for existence of file */
1572 #define VKI_X_OK	0x01    /* test for execute or search permission */
1573 #define VKI_W_OK	0x02    /* test for write permission */
1574 #define VKI_R_OK	0x04    /* test for read permission */
1575 
1576 //----------------------------------------------------------------------
1577 // From sys/msg.h
1578 //----------------------------------------------------------------------
1579 
1580 #if 0	/* not in freebsd */
1581 #define VKI_MSGSND              11
1582 #define VKI_MSGRCV              12
1583 #define VKI_MSGGET              13
1584 #define VKI_MSGCTL              14
1585 #endif
1586 
1587 struct vki_msqid_ds {
1588 	struct vki_ipc_perm msg_perm;
1589 	struct vki_msg *msg_first;		/* first message on queue,unused  */
1590 	struct vki_msg *msg_last;		/* last message in queue,unused */
1591 	vki_uint32_t msg_cbytes;	/* current number of bytes on queue */
1592 	vki_uint32_t msg_qnum;	/* number of messages in queue */
1593 	vki_uint32_t msg_qbytes;	/* max number of bytes on queue */
1594 	vki_pid_t	msg_lspid;	/* pid of last msgsnd */
1595 	vki_pid_t	msg_lrpid;	/* last receive pid */
1596 	vki_time_t	msg_stime;	/* last msgsnd time */
1597 	vki_uint32_t	msg_pad1;
1598 	vki_time_t	msg_rtime;	/* last msgrcv time */
1599 	vki_uint32_t	msg_pad2;
1600 	vki_time_t 	msg_ctime;	/* last change time */
1601 	vki_uint32_t	msg_pad3;
1602 	vki_uint32_t	msg_pad4[4];
1603 };
1604 
1605 struct vki_msgbuf {
1606 	long mtype;         /* type of message */
1607 	char mtext[1];      /* message text */
1608 };
1609 
1610 
1611 //----------------------------------------------------------------------
1612 // From sys/shm.h
1613 //----------------------------------------------------------------------
1614 
1615 struct vki_shmid_ds {
1616 	struct vki_ipc_perm	shm_perm;	/* operation perms */
1617 	vki_size_t		shm_segsz;	/* size of segment (bytes) */
1618 	vki_pid_t		shm_lpid;	/* pid of last operator */
1619 	vki_pid_t		shm_cpid;	/* pid of creator */
1620 	int			shm_nattch;	/* no. of current attaches */
1621 	vki_time_t		shm_atime;	/* last attach time */
1622 	vki_time_t		shm_dtime;	/* last detach time */
1623 	vki_time_t		shm_ctime;	/* last change time */
1624 };
1625 
1626 struct vki_shmid_ds7 {
1627 	struct vki_ipc_perm7	shm_perm;	/* operation perms */
1628 	int			shm_segsz;	/* size of segment (bytes) */
1629 	vki_pid_t		shm_lpid;	/* pid of last operator */
1630 	vki_pid_t		shm_cpid;	/* pid of creator */
1631 	short			shm_nattch;	/* no. of current attaches */
1632 	vki_time_t		shm_atime;	/* last attach time */
1633 	vki_time_t		shm_dtime;	/* last detach time */
1634 	vki_time_t		shm_ctime;	/* last change time */
1635 	void			*shm_internal;	/* sysv stupidity */
1636 };
1637 
1638 #define VKI_SHMLBA  VKI_PAGE_SIZE
1639 #define VKI_SHM_RDONLY  010000  /* read-only access */
1640 #define	VKI_SHM_ANON	(1UL)
1641 
1642 #if 0	/* not in freebsd abi */
1643 #define VKI_SHMAT               21
1644 #define VKI_SHMDT               22
1645 #define VKI_SHMGET              23
1646 #define VKI_SHMCTL              24
1647 #endif
1648 
1649 #if 0
1650 //----------------------------------------------------------------------
1651 // From linux-2.6.8.1/include/linux/sockios.h
1652 //----------------------------------------------------------------------
1653 
1654 #define VKI_SIOCOUTQ		VKI_TIOCOUTQ
1655 
1656 #define VKI_SIOCADDRT		0x890B	/* add routing table entry	*/
1657 #define VKI_SIOCDELRT		0x890C	/* delete routing table entry	*/
1658 
1659 #define VKI_SIOCGIFNAME		0x8910	/* get iface name		*/
1660 #define VKI_SIOCGIFCONF		0x8912	/* get iface list		*/
1661 #define VKI_SIOCGIFFLAGS	0x8913	/* get flags			*/
1662 #define VKI_SIOCSIFFLAGS	0x8914	/* set flags			*/
1663 #define VKI_SIOCGIFADDR		0x8915	/* get PA address		*/
1664 #define VKI_SIOCSIFADDR		0x8916	/* set PA address		*/
1665 #define VKI_SIOCGIFDSTADDR	0x8917	/* get remote PA address	*/
1666 #define VKI_SIOCSIFDSTADDR	0x8918	/* set remote PA address	*/
1667 #define VKI_SIOCGIFBRDADDR	0x8919	/* get broadcast PA address	*/
1668 #define VKI_SIOCSIFBRDADDR	0x891a	/* set broadcast PA address	*/
1669 #define VKI_SIOCGIFNETMASK	0x891b	/* get network PA mask		*/
1670 #define VKI_SIOCSIFNETMASK	0x891c	/* set network PA mask		*/
1671 #define VKI_SIOCGIFMETRIC	0x891d	/* get metric			*/
1672 #define VKI_SIOCSIFMETRIC	0x891e	/* set metric			*/
1673 #define VKI_SIOCGIFMTU		0x8921	/* get MTU size			*/
1674 #define VKI_SIOCSIFMTU		0x8922	/* set MTU size			*/
1675 #define	VKI_SIOCSIFHWADDR	0x8924	/* set hardware address 	*/
1676 #define VKI_SIOCGIFHWADDR	0x8927	/* Get hardware address		*/
1677 #define VKI_SIOCGIFINDEX	0x8933	/* name -> if_index mapping	*/
1678 
1679 #define VKI_SIOCGIFTXQLEN	0x8942	/* Get the tx queue length	*/
1680 #define VKI_SIOCSIFTXQLEN	0x8943	/* Set the tx queue length 	*/
1681 
1682 #define VKI_SIOCGMIIPHY		0x8947	/* Get address of MII PHY in use. */
1683 #define VKI_SIOCGMIIREG		0x8948	/* Read MII PHY register.	*/
1684 #define VKI_SIOCSMIIREG		0x8949	/* Write MII PHY register.	*/
1685 
1686 #define VKI_SIOCDARP		0x8953	/* delete ARP table entry	*/
1687 #define VKI_SIOCGARP		0x8954	/* get ARP table entry		*/
1688 #define VKI_SIOCSARP		0x8955	/* set ARP table entry		*/
1689 
1690 #define VKI_SIOCDRARP		0x8960	/* delete RARP table entry	*/
1691 #define VKI_SIOCGRARP		0x8961	/* get RARP table entry		*/
1692 #define VKI_SIOCSRARP		0x8962	/* set RARP table entry		*/
1693 
1694 #define VKI_SIOCGIFMAP		0x8970	/* Get device parameters	*/
1695 #define VKI_SIOCSIFMAP		0x8971	/* Set device parameters	*/
1696 
1697 //----------------------------------------------------------------------
1698 // From linux-2.6.9/include/linux/kb.h
1699 //----------------------------------------------------------------------
1700 
1701 #define VKI_GIO_FONT       0x4B60  /* gets font in expanded form */
1702 #define VKI_PIO_FONT       0x4B61  /* use font in expanded form */
1703 
1704 #define VKI_GIO_FONTX      0x4B6B  /* get font using struct consolefontdesc */
1705 #define VKI_PIO_FONTX      0x4B6C  /* set font using struct consolefontdesc */
1706 struct vki_consolefontdesc {
1707 	unsigned short charcount;	/* characters in font (256 or 512) */
1708 	unsigned short charheight;	/* scan lines per character (1-32) */
1709 	char __user *chardata;		/* font data in expanded form */
1710 };
1711 
1712 #define VKI_PIO_FONTRESET  0x4B6D  /* reset to default font */
1713 
1714 #define VKI_GIO_CMAP       0x4B70  /* gets colour palette on VGA+ */
1715 #define VKI_PIO_CMAP       0x4B71  /* sets colour palette on VGA+ */
1716 
1717 #define VKI_KIOCSOUND      0x4B2F  /* start sound generation (0 for off) */
1718 #define VKI_KDMKTONE       0x4B30  /* generate tone */
1719 
1720 #define VKI_KDGETLED       0x4B31  /* return current led state */
1721 #define VKI_KDSETLED       0x4B32  /* set led state [lights, not flags] */
1722 
1723 #define VKI_KDGKBTYPE      0x4B33  /* get keyboard type */
1724 
1725 #define VKI_KDADDIO        0x4B34  /* add i/o port as valid */
1726 #define VKI_KDDELIO        0x4B35  /* del i/o port as valid */
1727 #define VKI_KDENABIO       0x4B36  /* enable i/o to video board */
1728 #define VKI_KDDISABIO      0x4B37  /* disable i/o to video board */
1729 
1730 #define VKI_KDSETMODE      0x4B3A  /* set text/graphics mode */
1731 #define VKI_KDGETMODE      0x4B3B  /* get current mode */
1732 
1733 #define VKI_KDMAPDISP      0x4B3C  /* map display into address space */
1734 #define VKI_KDUNMAPDISP    0x4B3D  /* unmap display from address space */
1735 
1736 #define		VKI_E_TABSZ		256
1737 #define VKI_GIO_SCRNMAP    0x4B40  /* get screen mapping from kernel */
1738 #define VKI_PIO_SCRNMAP	   0x4B41  /* put screen mapping table in kernel */
1739 #define VKI_GIO_UNISCRNMAP 0x4B69  /* get full Unicode screen mapping */
1740 #define VKI_PIO_UNISCRNMAP 0x4B6A  /* set full Unicode screen mapping */
1741 
1742 #define VKI_GIO_UNIMAP     0x4B66  /* get unicode-to-font mapping from kernel */
1743 #define VKI_PIO_UNIMAP     0x4B67  /* put unicode-to-font mapping in kernel */
1744 #define VKI_PIO_UNIMAPCLR  0x4B68  /* clear table, possibly advise hash algorithm */
1745 
1746 #define VKI_KDGKBMODE      0x4B44  /* gets current keyboard mode */
1747 #define VKI_KDSKBMODE      0x4B45  /* sets current keyboard mode */
1748 
1749 #define VKI_KDGKBMETA      0x4B62  /* gets meta key handling mode */
1750 #define VKI_KDSKBMETA      0x4B63  /* sets meta key handling mode */
1751 
1752 #define VKI_KDGKBLED       0x4B64  /* get led flags (not lights) */
1753 #define VKI_KDSKBLED       0x4B65  /* set led flags (not lights) */
1754 
1755 struct vki_kbentry {
1756 	unsigned char kb_table;
1757 	unsigned char kb_index;
1758 	unsigned short kb_value;
1759 };
1760 #define VKI_KDGKBENT       0x4B46  /* gets one entry in translation table */
1761 #define VKI_KDSKBENT       0x4B47  /* sets one entry in translation table */
1762 
1763 struct vki_kbsentry {
1764 	unsigned char kb_func;
1765 	unsigned char kb_string[512];
1766 };
1767 #define VKI_KDGKBSENT      0x4B48  /* gets one function key string entry */
1768 #define VKI_KDSKBSENT      0x4B49  /* sets one function key string entry */
1769 
1770 struct vki_kbdiacr {
1771         unsigned char diacr, base, result;
1772 };
1773 struct vki_kbdiacrs {
1774         unsigned int kb_cnt;    /* number of entries in following array */
1775 	struct vki_kbdiacr kbdiacr[256];    /* MAX_DIACR from keyboard.h */
1776 };
1777 #define VKI_KDGKBDIACR     0x4B4A  /* read kernel accent table */
1778 #define VKI_KDSKBDIACR     0x4B4B  /* write kernel accent table */
1779 
1780 struct vki_kbkeycode {
1781 	unsigned int scancode, keycode;
1782 };
1783 #define VKI_KDGETKEYCODE   0x4B4C  /* read kernel keycode table entry */
1784 #define VKI_KDSETKEYCODE   0x4B4D  /* write kernel keycode table entry */
1785 
1786 #define VKI_KDSIGACCEPT    0x4B4E  /* accept kbd generated signals */
1787 
1788 struct vki_kbd_repeat {
1789 	int delay;	/* in msec; <= 0: don't change */
1790 	int period;	/* in msec; <= 0: don't change */
1791 			/* earlier this field was misnamed "rate" */
1792 };
1793 #define VKI_KDKBDREP       0x4B52  /* set keyboard delay/repeat rate;
1794                                     * actually used values are returned */
1795 
1796 #define VKI_KDFONTOP       0x4B72  /* font operations */
1797 
1798 //----------------------------------------------------------------------
1799 // From linux-2.6.9/include/linux/kb.h
1800 //----------------------------------------------------------------------
1801 
1802 typedef __vki_kernel_uid32_t vki_qid_t; /* Type in which we store ids in memory */
1803 
1804 #endif
1805 
1806 //----------------------------------------------------------------------
1807 // From sys/ptrace.h
1808 //----------------------------------------------------------------------
1809 
1810 #define VKI_PTRACE_TRACEME         0
1811 #define VKI_PTRACE_READ_I	   1
1812 #define VKI_PTRACE_READ_D	   2
1813 /* 3 - read user struct */
1814 #define VKI_PTRACE_WRITE_I	   4
1815 #define VKI_PTRACE_WRITE_D	   5
1816 /* 6 - write user struct */
1817 #define VKI_PTRACE_CONTINUE	   7
1818 #define VKI_PTRACE_KILL		   8
1819 #define VKI_PTRACE_STEP		   9
1820 #define VKI_PTRACE_ATTACH	   10
1821 #define VKI_PTRACE_DETACH	   11
1822 #define VKI_PTRACE_IO		   12
1823 #define VKI_PTRACE_LWPINFO	   13
1824 #define VKI_PTRACE_GETNUMLWPS	   14
1825 #define VKI_PTRACE_GETLWPLIST	   15
1826 #define VKI_PTRACE_CLEARSTEP	   16
1827 #define VKI_PTRACE_SETSTEP	   17
1828 #define VKI_PTRACE_SUSPEND	   18
1829 #define VKI_PTRACE_RESUME	   19
1830 #define VKI_PTRACE_TO_SCE	   20
1831 #define VKI_PTRACE_TO_SCX	   21
1832 #define VKI_PTRACE_SYSCALL	   22
1833 /* md */
1834 #define VKI_PTRACE_GETREGS	   33
1835 #define VKI_PTRACE_SETREGS	   34
1836 #define VKI_PTRACE_GETFPREGS	   35
1837 #define VKI_PTRACE_SETFPREGS	   36
1838 #define VKI_PTRACE_GETDBREGS	   37
1839 #define VKI_PTRACE_SETDBREGS	   38
1840 
1841 #define	VKI_PTRACE_VM_TIMESTAMP    40
1842 #define	VKI_PTRACE_VM_ENTRY        41
1843 
1844 #define VKI_PTRACE_FIRSTMACH	   64
1845 
1846 struct vki_ptrace_io_desc {
1847 	int		piod_op;
1848 	void *		piod_offs;
1849 	void *		piod_addr;
1850 	vki_size_t	piod_len;
1851 };
1852 #define VKI_PIOD_READ_D		1
1853 #define VKI_PIOD_WRITE_D	2
1854 #define VKI_PIOD_READ_I		3
1855 #define VKI_PIOD_WRITE_I	4
1856 
1857 struct vki_ptrace_lwpinfo {
1858 	vki_lwpid_t	pl_lwpid;
1859 	int		pl_event;
1860 #define	VKI_PL_EVENT_NONE	0
1861 #define	VKI_PL_EVENT_SIGNAL	1
1862 	int		pl_flags;
1863 #define VKI_FLAG_SA		0x01
1864 #define	VKI_FLAG_BOUND		0x02
1865 	vki_sigset_t pl_sigmask;
1866 	vki_sigset_t pl_siglist;
1867 };
1868 
1869 struct vki_ptrace_vm_entry {
1870 	int		pve_entry;	/* Entry number used for iteration. */
1871 	int		pve_timestamp;	/* Generation number of VM map. */
1872 	unsigned long	pve_start;	/* Start VA of range. */
1873 	unsigned long	pve_end;	/* End VA of range (incl). */
1874 	unsigned long	pve_offset;	/* Offset in backing object. */
1875 	unsigned int	pve_prot;	/* Protection of memory range. */
1876 	unsigned int	pve_pathlen;	/* Size of path. */
1877 	long		pve_fileid;	/* File ID. */
1878 	vki_uint32_t	pve_fsid;	/* File system ID. */
1879 	char		*pve_path;	/* Path name of object. */
1880 };
1881 
1882 #endif // __VKI_FREEBSD_H
1883 
1884 //----------------------------------------------------------------------
1885 // From i386/include/sysarch.h and amd64/include/sysarch.h (interchangeable)
1886 //----------------------------------------------------------------------
1887 
1888 #define VKI_I386_GET_FSBASE     7
1889 #define VKI_I386_SET_FSBASE     8
1890 #define VKI_I386_GET_GSBASE     9
1891 #define VKI_I386_SET_GSBASE     10
1892 #define VKI_I386_GET_XFPUSTATE  11
1893 
1894 #define VKI_AMD64_GET_FSBASE    128
1895 #define VKI_AMD64_SET_FSBASE    129
1896 #define VKI_AMD64_GET_GSBASE    130
1897 #define VKI_AMD64_SET_GSBASE    131
1898 #define VKI_AMD64_GET_XFPUSTATE	132
1899 
1900 //----------------------------------------------------------------------
1901 // From sys/module.h
1902 //----------------------------------------------------------------------
1903 
1904 #define VKI_MAXMODNAME 32
1905 
1906 typedef union vki_modspecific {
1907 	vki_int32_t	intval;
1908 	vki_uint32_t	u_intval;
1909 #if defined(VGP_x86_freebsd)
1910 	vki_int32_t	longval;
1911 	vki_uint32_t	u_longval;
1912 #elif defined(VGP_amd64_freebsd)
1913 	vki_int64_t	longval;
1914 	vki_uint64_t	u_longval;
1915 #else
1916 #error Unknown platform
1917 #endif
1918 } vki_modspecific_t;
1919 
1920 struct vki_module_stat {
1921 	int	version;
1922 	char	name[VKI_MAXMODNAME];
1923 	int	refs;
1924 	int	id;
1925 	vki_modspecific_t data;
1926 };
1927 
1928 //----------------------------------------------------------------------
1929 // From sys/rtprio.h
1930 //----------------------------------------------------------------------
1931 
1932 struct vki_rtprio {
1933 	vki_uint16_t	type;
1934 	vki_uint16_t	prio;
1935 };
1936 
1937 #define VKI_RTP_LOOKUP	0
1938 #define VKI_RTP_SET	1
1939 
1940 //----------------------------------------------------------------------
1941 // From sys/umtx.h
1942 //----------------------------------------------------------------------
1943 
1944 struct vki_umtx {
1945 	unsigned long	u_owner;
1946 };
1947 
1948 struct vki_umutex {
1949 	vki_lwpid_t	m_owner;
1950 	vki_uint32_t	m_flags;
1951 	vki_uint32_t	m_ceilings[2];
1952 	vki_uint32_t	m_spare[4];
1953 };
1954 
1955 struct vki_ucond {
1956 	vki_uint32_t	c_has_waiters;
1957 	vki_uint32_t 	c_flags;
1958 	vki_uint32_t	c_spare[2];
1959 };
1960 
1961 struct vki_urwlock {
1962 	vki_uint32_t	rw_state;
1963 	vki_uint32_t	rw_flags;
1964 	vki_uint32_t	rw_blocked_readers;
1965 	vki_uint32_t	rw_blocked_writers;
1966 	vki_uint32_t	rw_spare[4];
1967 };
1968 
1969 struct vki_usem {
1970 	vki_uint32_t	has_waiters;
1971 	vki_uint32_t	count;
1972 	vki_uint32_t	flags;
1973 };
1974 
1975 struct vki_umtx_time {
1976 	struct vki_timespec	timeout;
1977 	vki_uint32_t		flags;
1978 	vki_uint32_t		clockid;
1979 };
1980 
1981 #define	VKI_UMTX_OP_LOCK		0
1982 #define	VKI_UMTX_OP_UNLOCK		1
1983 #define	VKI_UMTX_OP_WAIT		2
1984 #define	VKI_UMTX_OP_WAKE		3
1985 #define	VKI_UMTX_OP_MUTEX_TRYLOCK	4
1986 #define	VKI_UMTX_OP_MUTEX_LOCK		5
1987 #define	VKI_UMTX_OP_MUTEX_UNLOCK	6
1988 #define	VKI_UMTX_OP_SET_CEILING		7
1989 #define	VKI_UMTX_OP_CV_WAIT		8
1990 #define	VKI_UMTX_OP_CV_SIGNAL		9
1991 #define	VKI_UMTX_OP_CV_BROADCAST	10
1992 #define	VKI_UMTX_OP_WAIT_UINT		11
1993 #define	VKI_UMTX_OP_RW_RDLOCK		12
1994 #define	VKI_UMTX_OP_RW_WRLOCK		13
1995 #define	VKI_UMTX_OP_RW_UNLOCK		14
1996 #define	VKI_UMTX_OP_WAIT_UINT_PRIVATE	15
1997 #define	VKI_UMTX_OP_WAKE_PRIVATE	16
1998 #define	VKI_UMTX_OP_MUTEX_WAIT		17
1999 #define	VKI_UMTX_OP_MUTEX_WAKE		18 /* deprecated */
2000 #define	VKI_UMTX_OP_SEM_WAIT		19
2001 #define	VKI_UMTX_OP_SEM_WAKE		20
2002 #define	VKI_UMTX_OP_NWAKE_PRIVATE	21
2003 #define	VKI_UMTX_OP_MUTEX_WAKE2		22
2004 #define	VKI_UMTX_OP_MAX			23
2005 
2006 
2007 //----------------------------------------------------------------------
2008 // From sys/acl.h
2009 //----------------------------------------------------------------------
2010 
2011 struct vki_acl_entry {
2012 	int		ae_tag;
2013 	vki_uid_t	ae_uid;
2014 	vki_mode_t	ae_perm;
2015 };
2016 
2017 #define VKI_ACL_MAX_ENTRIES 32
2018 struct vki_acl {
2019 	int		acl_cnt;
2020 	struct vki_acl_entry acl_entry[VKI_ACL_MAX_ENTRIES];
2021 };
2022 
2023 
2024 //----------------------------------------------------------------------
2025 // From sys/uuid.h
2026 //----------------------------------------------------------------------
2027 
2028 struct vki_uuid {
2029 	vki_uint32_t	time_low;
2030 	vki_uint16_t	time_mid;
2031 	vki_uint16_t	time_hi_and_version;
2032 	vki_uint8_t	clock_seq_hi_and_reserved;
2033 	vki_uint8_t	clock_seq_low;
2034 	vki_uint8_t	node[6];
2035 };
2036 
2037 //----------------------------------------------------------------------
2038 // From sys/user.h
2039 //----------------------------------------------------------------------
2040 
2041 #define VKI_KVME_TYPE_NONE          0
2042 #define VKI_KVME_TYPE_DEFAULT       1
2043 #define VKI_KVME_TYPE_VNODE         2
2044 #define VKI_KVME_TYPE_SWAP          3
2045 #define VKI_KVME_TYPE_DEVICE        4
2046 #define VKI_KVME_TYPE_PHYS          5
2047 #define VKI_KVME_TYPE_DEAD          6
2048 #define VKI_KVME_TYPE_UNKNOWN       255
2049 
2050 #define VKI_KVME_PROT_READ          0x00000001
2051 #define VKI_KVME_PROT_WRITE         0x00000002
2052 #define VKI_KVME_PROT_EXEC          0x00000004
2053 
2054 #define VKI_KVME_FLAG_COW           0x00000001
2055 #define VKI_KVME_FLAG_NEEDS_COPY    0x00000002
2056 
2057 struct vki_kinfo_vmentry {
2058 	int	kve_structsize;
2059 	int	kve_type;
2060 	ULong	kve_start;
2061 	ULong	kve_end;
2062 	Off64T	kve_offset;
2063 	ULong   kve_fileid;
2064 	UInt    kve_fsid;
2065 	int	kve_flags;
2066 	int	kve_resident;
2067 	int	kve_private_resident;
2068 	int	kve_protection;
2069 	int	kve_ref_count;
2070 	int	kve_shadow_count;
2071 	int	_kve_pad0;
2072 	int	kve_ispare[16];
2073 	char	kve_path[VKI_PATH_MAX];
2074 };
2075 
2076 struct vki_kinfo_file {
2077         int     kf_structsize;                  /* Variable size of record. */
2078         int     kf_type;                        /* Descriptor type. */
2079         int     kf_fd;                          /* Array index. */
2080         int     kf_ref_count;                   /* Reference count. */
2081         int     kf_flags;                       /* Flags. */
2082         int     _kf_pad0;                       /* Round to 64 bit alignment */
2083         Off64T  kf_offset;                      /* Seek location. */
2084         int     kf_vnode_type;                  /* Vnode type. */
2085         int     kf_sock_domain;                 /* Socket domain. */
2086         int     kf_sock_type;                   /* Socket type. */
2087         int     kf_sock_protocol;               /* Socket protocol. */
2088         char    kf_sa_local[128];               /* Socket address. */
2089         char    kf_sa_peer[128];                /* Peer address. */
2090         int     _kf_ispare[16];                 /* Space for more stuff. */
2091         /* Truncated before copyout in sysctl */
2092         char    kf_path[VKI_PATH_MAX];          /* Path to file, if any. */
2093 };
2094 
2095 //----------------------------------------------------------------------
2096 // From sys/kenv.h
2097 //----------------------------------------------------------------------
2098 #define VKI_KENV_GET		0
2099 #define VKI_KENV_SET		1
2100 #define VKI_KENV_UNSET		2
2101 #define VKI_KENV_DUMP		3
2102 
2103 //----------------------------------------------------------------------
2104 // From sys/sysctl.h (and related)
2105 //----------------------------------------------------------------------
2106 
2107 #include <sys/types.h>
2108 #include <sys/sysctl.h>
2109 
2110 #define VKI_CTL_KERN         CTL_KERN
2111 #define VKI_CTL_HW           CTL_HW
2112 #define VKI_KERN_PROC        KERN_PROC
2113 #define VKI_KERN_PROC_VMMAP  KERN_PROC_VMMAP
2114 #define VKI_KERN_PROC_FILEDESC KERN_PROC_FILEDESC
2115 #define VKI_HW_MACHINE       HW_MACHINE
2116 
2117 //----------------------------------------------------------------------
2118 // From sys/thr.h
2119 //----------------------------------------------------------------------
2120 
2121 struct vki_thr_param {
2122 	void	(*start_func)(void *);
2123 	void	*arg;
2124 	char	*stack_base;
2125 	vki_size_t	stack_size;
2126 	char	*tls_base;
2127 	vki_size_t	tls_size;
2128 	long	*child_tid;
2129 	long	*parent_tid;
2130 	int	flags;
2131 	struct vki_rtprio *rtp;
2132 	void	*spare[3];
2133 };
2134 
2135 //----------------------------------------------------------------------
2136 // From sys/linker.h
2137 //----------------------------------------------------------------------
2138 
2139 struct vki_kld_sym_lookup {
2140     int         version;        /* set to sizeof(struct kld_sym_lookup) */
2141     char        *symname;       /* Symbol name we are looking up */
2142     unsigned long symvalue;
2143     vki_size_t  symsize;
2144 };
2145 
2146 #if !defined(VKI_INIT_ARCH_ELF_STATE)
2147    /* This structure is used to preserve architecture specific data during
2148       the loading of an ELF file, throughout the checking of architecture
2149       specific ELF headers & through to the point where the ELF load is
2150       known to be proceeding. This implementation is a dummy for
2151       architectures which require no specific state. */
2152    struct vki_arch_elf_state {
2153    };
2154 
2155 #  define VKI_INIT_ARCH_ELF_STATE { }
2156 
2157 #endif
2158 /*--------------------------------------------------------------------*/
2159 /*--- end                                                          ---*/
2160 /*--------------------------------------------------------------------*/
2161