vki-darwin.h revision 0dc35261140f7612f1e516a9fa2a977f4e30e04e
1
2/*--------------------------------------------------------------------*/
3/*--- Darwin-specific kernel interface.               vki-darwin.h ---*/
4/*--------------------------------------------------------------------*/
5
6/*
7   This file is part of Valgrind, a dynamic binary instrumentation
8   framework.
9
10   Copyright (C) 2007-2013 Apple Inc.
11      Greg Parker  gparker@apple.com
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/* Unlike vki-linux, this Darwin kernel interface includes system headers
32   directly, to avoid copyright complexity. */
33
34#ifndef __VKI_DARWIN_H
35#define __VKI_DARWIN_H
36
37/* struct __darwin_ucontext isn't fully declared without
38 * this definition.  It's crazy but there it is.  */
39#ifndef _XOPEN_SOURCE
40#define _XOPEN_SOURCE 0500
41#endif
42
43#include <stdint.h>
44
45#define vki_int8_t int8_t
46#define vki_uint8_t uint8_t
47#define vki_int16_t int16_t
48#define vki_uint16_t uint16_t
49#define vki_int32_t int32_t
50#define vki_uint32_t uint32_t
51#define vki_int64_t int64_t
52#define vki_uint64_t uint64_t
53#define vki_intptr_t intptr_t
54#define vki_uintptr_t uintptr_t
55
56#include <sys/types.h>
57
58#define vki_dev_t dev_t
59#define vki_mode_t mode_t
60#define vki_ino_t ino_t
61#define vki_ino64_t ino64_t
62#define vki_nlink_t nlink_t
63#define vki_uid_t uid_t
64#define vki_gid_t gid_t
65#define vki_time_t time_t
66#define vki_off_t off_t
67#define vki_blkcnt_t blkcnt_t
68#define vki_blksize_t blksize_t
69#define vki_size_t size_t
70#define vki_ssize_t ssize_t
71#define vki_pid_t pid_t
72#define vki_socklen_t socklen_t
73#define vki_suseconds_t suseconds_t
74#define vki_caddr_t caddr_t
75#define vki_u_long u_long
76#define vki_u_short u_short
77#define vki_clock_t clock_t
78#define vki_u_int32_t u_int32_t
79#define vki_u_int16_t u_int16_t
80#define vki_pthread_t pthread_t
81
82
83// valgrind special
84
85// magic mmap() flags
86#define	VKI_MAP_ANONYMOUS MAP_ANON	// linux synonym
87
88// fds for mmap(MAP_ANON), displayed by vmmap
89#define VM_TAG_VALGRIND VM_MAKE_TAG(239)  // SkAnonV
90
91// page sizes
92#define VKI_MAX_PAGE_SHIFT VKI_PAGE_SHIFT
93#define VKI_MAX_PAGE_SIZE VKI_PAGE_SIZE
94
95// types
96typedef uint32_t vki_u32;
97
98// linux-like ioctl flags
99#define _VKI_IOC_DIR(x)		((x) & IOC_DIRMASK)
100#define _VKI_IOC_SIZE(x)	IOCPARM_LEN(x)
101#define _VKI_IOC_NONE		IOC_VOID  /* GrP fixme correct? */
102#define _VKI_IOC_READ		IOC_OUT
103#define _VKI_IOC_WRITE		IOC_IN
104
105
106#include <malloc/malloc.h>
107
108#define vki_malloc_zone_t malloc_zone_t
109
110
111#include <sys/time.h>
112
113#define vki_timeval timeval
114#define vki_timeval32 timeval32
115#define vki_timespec timespec
116#define vki_itimerval itimerval
117#define vki_timezone timezone
118
119
120#include <sys/stat.h>
121
122#define	VKI_S_ISBLK(m)	S_ISBLK(m)
123#define	VKI_S_ISCHR(m)	S_ISCHR(m)
124#define	VKI_S_ISDIR(m)	S_ISDIR(m)
125#define	VKI_S_ISFIFO(m)	S_ISFIFO(m)
126#define	VKI_S_ISREG(m)	S_ISREG(m)
127#define	VKI_S_ISLNK(m)	S_ISLNK(m)
128#define	VKI_S_ISSOCK(m)	S_ISSOCK(m)
129#define	VKI_S_ISWHT(m)	S_ISWHT(m)
130#define VKI_S_ISXATTR(m) S_ISXATTR(m)
131
132#define	VKI_S_IRWXU	S_IRWXU
133#define	VKI_S_IRUSR	S_IRUSR
134#define	VKI_S_IWUSR	S_IWUSR
135#define	VKI_S_IXUSR	S_IXUSR
136#define	VKI_S_IRWXG	S_IRWXG
137#define	VKI_S_IRGRP	S_IRGRP
138#define	VKI_S_IWGRP	S_IWGRP
139#define	VKI_S_IXGRP	S_IXGRP
140#define	VKI_S_IRWXO	S_IRWXO
141#define	VKI_S_IROTH	S_IROTH
142#define	VKI_S_IWOTH	S_IWOTH
143#define	VKI_S_IXOTH	S_IXOTH
144#define	VKI_S_ISUID	S_ISUID
145#define	VKI_S_ISGID	S_ISGID
146#define	VKI_S_ISVTX	S_ISVTX
147
148#define vki_stat stat
149#define vki_stat64 stat64
150
151#define st_atime      st_atimespec.tv_sec
152#define st_atime_nsec st_atimespec.tv_nsec
153#define st_mtime      st_mtimespec.tv_sec
154#define st_mtime_nsec st_mtimespec.tv_nsec
155#define st_ctime      st_ctimespec.tv_sec
156#define st_ctime_nsec st_ctimespec.tv_nsec
157
158
159#include <sys/dirent.h>
160
161#define VKI_MAXNAMLEN MAXNAMLEN
162#define vki_dirent dirent
163
164
165#include <sys/socket.h>
166#define	VKI_SOCK_STREAM	SOCK_STREAM
167#define	VKI_SOCK_DGRAM	SOCK_DGRAM
168#define	VKI_SOCK_RAW	SOCK_RAW
169
170#define	VKI_AF_UNIX	AF_UNIX
171#define	VKI_AF_INET	AF_INET
172#define	VKI_AF_INET6	AF_INET6
173
174#define	VKI_SOL_SOCKET	SOL_SOCKET
175
176#define	VKI_SO_REUSEADDR SO_REUSEADDR
177
178#define VKI_SO_SNDBUF	SO_SNDBUF
179#define VKI_SO_RCVBUF	SO_RCVBUF
180#define VKI_SO_SNDLOWAT	SO_SNDLOWAT
181#define VKI_SO_RCVLOWAT	SO_RCVLOWAT
182#define VKI_SO_SNDTIMEO	SO_SNDTIMEO
183#define VKI_SO_RCVTIMEO	SO_RCVTIMEO
184#define	VKI_SO_ERROR	SO_ERROR
185#define	VKI_SO_TYPE	SO_TYPE
186#define VKI_SO_NREAD	SO_NREAD
187#define VKI_SO_NKE	SO_NKE
188#define VKI_SO_NOSIGPIPE	SO_NOSIGPIPE
189#define VKI_SO_NOADDRERR	SO_NOADDRERR
190#define VKI_SO_NWRITE	SO_NWRITE
191#define VKI_SO_LINGER_SEC	SO_LINGER_SEC
192
193#define vki_sa_family_t sa_family_t
194#define vki_sockaddr sockaddr
195#define vki_iovec iovec
196#define vki_msghdr msghdr
197#define vki_cmsghdr cmsghdr
198
199
200#define VKI_CMSG_ALIGN(a) 	ALIGN(a)
201#define	VKI_CMSG_DATA(cmsg)	CMSG_DATA(cmsg)
202#define	VKI_CMSG_FIRSTHDR(mhdr)	CMSG_FIRSTHDR(mhdr)
203#define	VKI_CMSG_NXTHDR(mhdr, cmsg)	CMSG_NXTHDR(mhdr, cmsg)
204
205#define	VKI_SCM_RIGHTS		SCM_RIGHTS
206#define	VKI_SCM_TIMESTAMP	SCM_TIMESTAMP
207#define	VKI_SCM_CREDS		SCM_CREDS
208
209
210#include <sys/un.h>
211
212#define vki_sockaddr_un sockaddr_un
213
214
215#include <netinet/in.h>
216
217#define vki_in_addr_t in_addr_t
218#define vki_in_port_t in_port_t
219#define vki_in_addr in_addr
220#define vki_sockaddr_in sockaddr_in
221
222#define	VKI_INADDR_LOOPBACK	INADDR_LOOPBACK
223
224
225// #include <netinet6/in6.h>
226
227#define vki_in6_addr in6_addr
228#define vki_sockaddr_in6 sockaddr_in6
229
230
231#include <net/if.h>
232
233#define	VKI_IFNAMSIZ	IFNAMSIZ
234
235#define vki_ifdevmtu ifdevmtu
236#define vki_ifreq ifreq
237#define vki_ifr_name 	ifr_name
238#define	vki_ifr_addr	ifr_addr
239#define	vki_ifr_dstaddr	ifr_dstaddr
240#define	vki_ifr_broadaddr	ifr_broadaddr
241#define	vki_ifr_flags	ifr_flags
242#define	vki_ifr_metric	ifr_metric
243#define	vki_ifr_mtu	ifr_mtu
244#define vki_ifr_phys	ifr_phys
245#define vki_ifr_media	ifr_media
246#define	vki_ifr_data	ifr_data
247#define vki_ifr_devmtu	ifr_devmtu
248#define vki_ifr_intval	ifr_intval
249
250#define vki_ifconf ifconf
251#define vki_ifc_buf 	ifc_buf
252#define vki_ifc_req 	ifc_req
253
254
255#include <sys/fcntl.h>
256
257#define	VKI_SEEK_SET	SEEK_SET
258#define	VKI_SEEK_CUR	SEEK_CUR
259#define	VKI_SEEK_END	SEEK_END
260
261#define	VKI_O_RDONLY	O_RDONLY
262#define	VKI_O_WRONLY	O_WRONLY
263#define	VKI_O_RDWR	O_RDWR
264#define	VKI_O_ACCMODE	O_ACCMODE
265#define	VKI_O_NONBLOCK	O_NONBLOCK
266#define	VKI_O_APPEND	O_APPEND
267#define	VKI_O_SYNC	O_SYN
268#define	VKI_O_SHLOCK	O_SHLOCK
269#define	VKI_O_EXLOCK	O_EXLOCK
270#define	VKI_O_ASYNC	O_ASYNC
271#define VKI_O_NOFOLLOW  O_NOFOLLOW
272#define	VKI_O_CREAT	O_CREAT
273#define	VKI_O_TRUNC	O_TRUNC
274#define	VKI_O_EXCL	O_EXCL
275#define	VKI_O_EVTONLY	O_EVTONLY
276
277#define	VKI_F_DUPFD	F_DUPFD
278#define	VKI_F_GETFD	F_GETFD
279#define	VKI_F_SETFD	F_SETFD
280#define	VKI_F_GETFL	F_GETFL
281#define	VKI_F_SETFL	F_SETFL
282#define	VKI_F_GETOWN	F_GETOWN
283#define VKI_F_SETOWN	F_SETOWN
284#define	VKI_F_GETLK	F_GETLK
285#define	VKI_F_SETLK	F_SETLK
286#define	VKI_F_SETLKW	F_SETLKW
287#if DARWIN_VERS >= DARWIN_10_10
288#define	VKI_F_SETLKWTIMEOUT F_SETLKWTIMEOUT
289#endif
290
291#define VKI_F_CHKCLEAN	F_CHKCLEAN
292#define VKI_F_PREALLOCATE	F_PREALLOCATE
293#define VKI_F_SETSIZE	F_SETSIZE
294#define VKI_F_RDADVISE	F_RDADVISE
295#define VKI_F_RDAHEAD	F_RDAHEAD
296#define VKI_F_READBOOTSTRAP	F_READBOOTSTRAP
297#define VKI_F_WRITEBOOTSTRAP	F_WRITEBOOTSTRAP
298#define VKI_F_NOCACHE	F_NOCACHE
299#define VKI_F_LOG2PHYS	F_LOG2PHYS
300#define VKI_F_GETPATH	F_GETPATH
301#define VKI_F_ADDSIGS	F_ADDSIGS
302#if DARWIN_VERS >= DARWIN_10_9
303# define VKI_F_ADDFILESIGS  F_ADDFILESIGS
304#endif
305#define VKI_F_FULLFSYNC	F_FULLFSYNC
306#define VKI_F_PATHPKG_CHECK	F_PATHPKG_CHECK
307#define VKI_F_FREEZE_FS	F_FREEZE_FS
308#define VKI_F_THAW_FS	F_THAW_FS
309#define	VKI_F_GLOBAL_NOCACHE	F_GLOBAL_NOCACHE
310
311#define VKI_FD_CLOEXEC	FD_CLOEXEC
312
313#define vki_radvisory radvisory
314#define vki_fstore fstore
315#define vki_fbootstraptransfer fbootstraptransfer
316#define vki_log2phys log2phys
317#define vki_fsignatures_t fsignatures_t
318
319// These constants aren't in a standard header, they are from the kernel code:
320// xnu-1228.3.13/bsd/sys/codesign.h
321// Mac OS X 10.5.6 - Darwin 9.6
322#define VKI_CS_OPS_STATUS           0       /* return status */
323#define VKI_CS_OPS_MARKINVALID      1       /* invalidate process */
324#define VKI_CS_OPS_MARKHARD         2       /* set HARD flag */
325#define VKI_CS_OPS_MARKKILL         3       /* set KILL flag (sticky) */
326#define VKI_CS_OPS_PIDPATH          4       /* get executable's pathname */
327#define VKI_CS_OPS_CDHASH           5       /* get code directory hash */
328
329#include <sys/mman.h>
330
331#define	VKI_PROT_NONE	PROT_NONE
332#define	VKI_PROT_READ	PROT_READ
333#define	VKI_PROT_WRITE	PROT_WRITE
334#define	VKI_PROT_EXEC	PROT_EXEC
335
336#define	VKI_MAP_SHARED	MAP_SHARED
337#define	VKI_MAP_PRIVATE	MAP_PRIVATE
338#define	VKI_MAP_FIXED	MAP_FIXED
339#define	VKI_MAP_RENAME	MAP_RENAME
340#define	VKI_MAP_NORESERVE	MAP_NORESERVE
341#define	VKI_MAP_RESERVED0080	MAP_RESERVED0080
342#define	VKI_MAP_NOEXTEND	MAP_NOEXTEND
343#define	VKI_MAP_HASSEMAPHORE	MAP_HASSEMAPHORE
344#define	VKI_MAP_FILE	MAP_FILE
345#define	VKI_MAP_ANON	MAP_ANON
346#define VKI_MAP_FAILED	MAP_FAILED
347
348
349#include <mach/vm_param.h>
350
351#define VKI_PAGE_SHIFT PAGE_SHIFT
352#define VKI_PAGE_SIZE PAGE_SIZE
353#define VKI_PAGE_MASK PAGE_MASK
354
355
356#include <sys/vmparam.h>
357
358#define VKI_USRSTACK USRSTACK
359#define VKI_USRSTACK64 USRSTACK64
360
361
362#include <mach/mach_time.h>
363
364#define vki_mach_timebase_info mach_timebase_info
365
366
367#include <sys/syslimits.h>
368
369#define VKI_PATH_MAX PATH_MAX
370
371
372#include <sys/param.h>
373
374#define VKI_MAXPATHLEN MAXPATHLEN
375
376
377#include <sys/signal.h>
378
379/* While we fully intend to make 'vki_sigset_t' match the native
380   Darwin 'sigset_t', we can't just clone the Darwin sigset_t type,
381   because it isn't an array, and the VG_(sigfillset) etc functions
382   assume it is.  So instead define another isomorphic type, and check
383   in VG_(vki_do_initial_consistency_checks) that it really is
384   correct. */
385/* #define vki_sigset_t sigset_t */
386#define _VKI_NSIG_BPW   32
387#define _VKI_NSIG       32
388#define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
389typedef struct {
390   UInt sig[_VKI_NSIG_WORDS];
391} vki_sigset_t;
392/* and now let VG_(vki_do_initial_consistency_checks) make sure it
393   matches 'sigset_t'. */
394
395
396#define VKI_SS_ONSTACK	SS_ONSTACK
397#define	VKI_SS_DISABLE	SS_DISABLE
398#define	VKI_MINSIGSTKSZ	MINSIGSTKSZ
399#define	VKI_SIGSTKSZ	SIGSTKSZ
400
401#define vki_stack_t        stack_t
402#define vki_siginfo_t      siginfo_t
403
404/* There are two versions of this.  'struct __sigaction' is used for
405   passing sigactions to the kernel interface, and has the added
406   complexity of requiring an extra pointer to a new demultiplexing
407   function to be run in user space.  'struct sigaction' is used for
408   receiving old sigactions from the kernel, and lacks this
409   demux-function pointer.  So the type of the second and third
410   parameters in Darwin's sys_sigaction appear to be different,
411   respectively 'struct __sigaction*' and 'struct sigaction*'.
412*/
413//#define vki_sigaction      __sigaction
414//#define vki_user_sigaction sigaction
415//#define vki_sigaltstack    sigaltstack
416//#define vki_sigval         sigval
417//#define vki_sigaction_u    sigaction_u
418//#define vki_sigaction     sigaction
419
420//typedef  struct __sigaction  vki_sigaction_toK_t;
421//typedef  struct sigaction    vki_sigaction_fromK_t;
422
423typedef
424   struct {
425      void* ksa_handler;
426      void (*sa_tramp)(void*,UWord,UWord,void*,void*);
427      vki_sigset_t sa_mask;
428      int sa_flags;
429   }
430   vki_sigaction_toK_t;
431
432typedef
433   struct {
434      void* ksa_handler;
435      vki_sigset_t sa_mask;
436      int sa_flags;
437   }
438   vki_sigaction_fromK_t;
439
440
441
442/* and /usr/include/sys/signal.c in turn defines 'sa_handler' to
443   be '__sigaction_u.__sa_handler' */
444//#define	ksa_handler      sa_handler
445
446//#define	vki_sa_sigaction sa_sigaction
447
448#define VKI_SA_ONSTACK	SA_ONSTACK
449#define VKI_SA_RESTART	SA_RESTART
450#define	VKI_SA_DISABLE	SA_DISABLE
451#define	VKI_SA_RESETHAND	SA_RESETHAND
452#define VKI_SA_NOCLDSTOP	SA_NOCLDSTOP
453#define	VKI_SA_NODEFER	SA_NODEFER
454#define	VKI_SA_NOCLDWAIT	SA_NOCLDWAIT
455#define	VKI_SA_SIGINFO	SA_SIGINFO
456#define	VKI_SA_USERTRAMP	SA_USERTRAMP
457#define	VKI_SA_64REGSET	SA_64REGSET
458#define VKI_SA_RESTORER  0 /* Darwin doesn't have this */
459
460#define	VKI_SIG_BLOCK	SIG_BLOCK
461#define	VKI_SIG_UNBLOCK	SIG_UNBLOCK
462#define	VKI_SIG_SETMASK	SIG_SETMASK
463
464#define	VKI_SIGHUP	SIGHUP
465#define	VKI_SIGINT	SIGINT
466#define	VKI_SIGQUIT	SIGQUIT
467#define	VKI_SIGILL	SIGILL
468#define	VKI_SIGTRAP	SIGTRAP
469#define	VKI_SIGABRT	SIGABRT
470#define	VKI_SIGPOLL	SIGPOLL
471#define	VKI_SIGFPE	SIGFPE
472#define	VKI_SIGKILL	SIGKILL
473#define	VKI_SIGBUS	SIGBUS
474#define	VKI_SIGSEGV	SIGSEGV
475#define	VKI_SIGSYS	SIGSYS
476#define	VKI_SIGPIPE	SIGPIPE
477#define	VKI_SIGALRM	SIGALRM
478#define	VKI_SIGTERM	SIGTERM
479#define	VKI_SIGURG	SIGURG
480#define	VKI_SIGSTOP	SIGSTOP
481#define	VKI_SIGTSTP	SIGTSTP
482#define	VKI_SIGCONT	SIGCONT
483#define	VKI_SIGCHLD	SIGCHLD
484#define	VKI_SIGTTIN	SIGTTIN
485#define	VKI_SIGTTOU	SIGTTOU
486#define	VKI_SIGIO	SIGIO
487#define	VKI_SIGXCPU	SIGXCPU
488#define	VKI_SIGXFSZ	SIGXFSZ
489#define	VKI_SIGVTALRM	SIGVTALRM
490#define	VKI_SIGPROF	SIGPROF
491#define VKI_SIGWINCH	SIGWINCH
492#define VKI_SIGINFO	SIGINFO
493#define VKI_SIGUSR1	SIGUSR1
494#define VKI_SIGUSR2	SIGUSR2
495
496#define VKI_SIG_DFL     SIG_DFL
497#define VKI_SIG_IGN     SIG_IGN
498
499
500#define VKI_SI_USER      SI_USER
501#define VKI_SEGV_MAPERR  SEGV_MAPERR
502#define VKI_SEGV_ACCERR  SEGV_ACCERR
503#define VKI_ILL_ILLOPC   ILL_ILLOPC
504#define VKI_ILL_ILLOPN   ILL_ILLOPN
505#define VKI_ILL_ILLADR   ILL_ILLADR
506#define VKI_ILL_ILLTRP   ILL_ILLTRP
507#define VKI_ILL_PRVOPC   ILL_PRVOPC
508#define VKI_ILL_PRVREG   ILL_PRVREG
509#define VKI_ILL_COPROC   ILL_COPROC
510#define VKI_ILL_BADSTK   ILL_BADSTK
511#define VKI_FPE_INTDIV   FPE_INTDIV
512#define VKI_FPE_INTOVF   FPE_INTOVF
513#define VKI_FPE_FLTDIV   FPE_FLTDIV
514#define VKI_FPE_FLTOVF   FPE_FLTOVF
515#define VKI_FPE_FLTUND   FPE_FLTUND
516#define VKI_FPE_FLTRES   FPE_FLTRES
517#define VKI_FPE_FLTINV   FPE_FLTINV
518#define VKI_FPE_FLTSUB   FPE_FLTSUB
519#define VKI_BUS_ADRALN   BUS_ADRALN
520#define VKI_BUS_ADRERR   BUS_ADRERR
521#define VKI_BUS_OBJERR   BUS_OBJERR
522#define VKI_TRAP_BRKPT   TRAP_BRKPT
523
524/* JRS: not 100% sure, but I think these two are correct */
525#define VKI_SA_ONESHOT   SA_RESETHAND
526#define VKI_SA_NOMASK    SA_NODEFER
527
528#define VKI_UC_SET_ALT_STACK   0x40000000
529#define VKI_UC_RESET_ALT_STACK 0x80000000
530
531
532#include <sys/errno.h>
533
534#define VKI_EPERM		EPERM
535#define VKI_ENOENT		ENOENT
536#define VKI_ESRCH		ESRCH
537#define VKI_EINTR		EINTR
538#define VKI_EIO			EIO
539#define VKI_ENXIO		ENXIO
540#define VKI_E2BIG		E2BIG
541#define VKI_ENOEXEC		ENOEXEC
542#define VKI_EBADF		EBADF
543#define VKI_ECHILD		ECHILD
544#define VKI_EDEADLK		EDEADLK
545#define VKI_ENOMEM		ENOMEM
546#define VKI_EACCES		EACCES
547#define VKI_EFAULT		EFAULT
548#define VKI_ENOTBLK		ENOTBLK
549#define VKI_EBUSY		EBUSY
550#define VKI_EEXIST		EEXIST
551#define VKI_EXDEV		EXDEV
552#define VKI_ENODEV		ENODEV
553#define VKI_ENOTDIR		ENOTDIR
554#define VKI_EISDIR		EISDIR
555#define VKI_EINVAL		EINVAL
556#define VKI_ENFILE		ENFILE
557#define VKI_EMFILE		EMFILE
558#define VKI_ENOTTY		ENOTTY
559#define VKI_ETXTBSY		ETXTBSY
560#define VKI_EFBIG		EFBIG
561#define VKI_ENOSPC		ENOSPC
562#define VKI_ESPIPE		ESPIPE
563#define VKI_EROFS		EROFS
564#define VKI_EMLINK		EMLINK
565#define VKI_EPIPE		EPIPE
566#define VKI_EDOM		EDOM
567#define VKI_ERANGE		ERANGE
568#define VKI_EAGAIN		EAGAIN
569#define VKI_EWOULDBLOCK		EAGAIN
570#define VKI_EINPROGRESS		EINPROGRESS
571#define VKI_EALREADY		EALREADY
572#define VKI_ENOTSOCK		ENOTSOCK
573#define VKI_EDESTADDRREQ	EDESTADDRREQ
574#define VKI_EMSGSIZE		EMSGSIZE
575#define VKI_EPROTOTYPE		EPROTOTYPE
576#define VKI_ENOPROTOOPT		ENOPROTOOPT
577#define VKI_EPROTONOSUPPORT	EPROTONOSUPPORT
578#define VKI_ESOCKTNOSUPPORT	ESOCKTNOSUPPORT
579#define VKI_ENOTSUP		ENOTSUP
580#define VKI_EPFNOSUPPORT	EPFNOSUPPORT
581#define VKI_EAFNOSUPPORT	EAFNOSUPPORT
582#define VKI_EADDRINUSE		EADDRINUSE
583#define VKI_EADDRNOTAVAIL	EADDRNOTAVAIL
584#define VKI_ENETDOWN		ENETDOWN
585#define VKI_ENETUNREACH		ENETUNREACH
586#define VKI_ENETRESET		ENETRESET
587#define VKI_ECONNABORTED	ECONNABORTED
588#define VKI_ECONNRESET		ECONNRESET
589#define VKI_ENOBUFS		ENOBUFS
590#define VKI_EISCONN		EISCONN
591#define VKI_ENOTCONN		ENOTCONN
592#define VKI_ESHUTDOWN		ESHUTDOWN
593#define VKI_ETOOMANYREFS	ETOOMANYREFS
594#define VKI_ETIMEDOUT		ETIMEDOUT
595#define VKI_ECONNREFUSED	ECONNREFUSED
596#define VKI_ELOOP		ELOOP
597#define VKI_ENAMETOOLONG	ENAMETOOLONG
598#define VKI_EHOSTDOWN		EHOSTDOWN
599#define VKI_EHOSTUNREACH	EHOSTUNREACH
600#define VKI_ENOTEMPTY		ENOTEMPTY
601#define VKI_EPROCLIM		EPROCLIM
602#define VKI_EUSERS		EUSERS
603#define VKI_EDQUOT		EDQUOT
604#define VKI_ESTALE		ESTALE
605#define VKI_EREMOTE		EREMOTE
606#define VKI_EBADRPC		EBADRPC
607#define VKI_ERPCMISMATCH	ERPCMISMATCH
608#define VKI_EPROGUNAVAIL	EPROGUNAVAIL
609#define VKI_EPROGMISMATCH	EPROGMISMATCH
610#define VKI_EPROCUNAVAIL	EPROCUNAVAIL
611#define VKI_ENOLCK		ENOLCK
612#define VKI_ENOSYS		ENOSYS
613#define VKI_EFTYPE		EFTYPE
614#define VKI_EAUTH		EAUTH
615#define VKI_ENEEDAUTH		ENEEDAUTH
616#define VKI_EPWROFF		EPWROFF
617#define VKI_EDEVERR		EDEVERR
618#define VKI_EOVERFLOW		EOVERFLOW
619#define VKI_EBADEXEC		EBADEXEC
620#define VKI_EBADARCH		EBADARCH
621#define VKI_ESHLIBVERS		ESHLIBVERS
622#define VKI_EBADMACHO		EBADMACHO
623#define VKI_ECANCELED		ECANCELED
624#define VKI_EIDRM		EIDRM
625#define VKI_ENOMSG		ENOMSG
626#define VKI_EILSEQ		EILSEQ
627#define VKI_ENOATTR		ENOATTR
628#define VKI_EBADMSG		EBADMSG
629#define VKI_EMULTIHOP		EMULTIHOP
630#define VKI_ENODATA		ENODATA
631#define VKI_ENOLINK		ENOLINK
632#define VKI_ENOSR		ENOSR
633#define VKI_ENOSTR		ENOSTR
634#define VKI_EPROTO		EPROTO
635#define VKI_ETIME		ETIME
636#define VKI_EOPNOTSUPP		EOPNOTSUPP
637#define VKI_ELAST		ELAST
638
639
640#include <sys/resource.h>
641
642#define	VKI_RLIMIT_CPU		RLIMIT_CPU
643#define	VKI_RLIMIT_FSIZE	RLIMIT_FSIZE
644#define	VKI_RLIMIT_DATA		RLIMIT_DATA
645#define	VKI_RLIMIT_STACK	RLIMIT_STACK
646#define	VKI_RLIMIT_CORE		RLIMIT_CORE
647#define	VKI_RLIMIT_AS		RLIMIT_AD
648#define	VKI_RLIMIT_RSS		RLIMIT_AS
649#define	VKI_RLIMIT_MEMLOCK	RLIMIT_MEMLOCK
650#define	VKI_RLIMIT_NPROC	RLIMIT_NPROC
651#define	VKI_RLIMIT_NOFILE	RLIMIT_NOFILE
652#define	VKI_RLIM_NLIMITS	RLIM_NLIMITS
653
654#define vki_rlim_t rlim_t
655#define vki_rlimit rlimit
656#define vki_rusage rusage
657
658
659#include <sys/poll.h>
660
661#define vki_pollfd pollfd
662
663
664#include <sys/ipc.h>
665
666#define	VKI_IPC_RMID	IPC_RMID
667#define	VKI_IPC_SET	IPC_SET
668#define	VKI_IPC_STAT	IPC_STAT
669
670#define vki_key_t key_t
671#define vki_ipc_perm ipc_perm
672
673
674#include <sys/sem.h>
675
676#define VKI_GETNCNT	GETNCNT
677#define VKI_GETPID	GETPID
678#define VKI_GETVAL	GETVAL
679#define VKI_GETALL	GETALL
680#define VKI_GETZCNT	GETZCNT
681#define VKI_SETVAL	SETVAL
682#define VKI_SETALL	SETALL
683
684#define vki_sembuf sembuf
685#define vki_semid_ds semid_ds
686#define vki_semun semun
687
688
689#include <sys/semaphore.h>
690
691#define vki_sem_t sem_t
692
693
694#include <sys/mount.h>
695
696#define	VKI_MFSNAMELEN	MFSNAMELEN
697#define	VKI_MNAMELEN	MNAMELEN
698
699#define vki_fsid fsid
700#define vki_fsid_t fsid_t
701#define vki_statfs statfs
702#define vki_statfs64 statfs64
703
704
705#include <sys/select.h>
706
707#define vki_fd_set fd_set
708
709
710#include <sys/msgbuf.h>
711
712#define	VKI_MSG_BSIZE	MSG_BSIZE
713#define VKI_MSG_MAGIC	MSG_MAGIC
714#define vki_msgbuf msgbuf
715
716
717#include <sys/shm.h>
718
719#define VKI_SHM_RDONLY	SHM_RDONLY
720#define VKI_SHM_RND	SHM_RND
721#define VKI_SHMLBA	SHMLBA
722
723#define vki_shmid_ds shmid_ds
724
725
726#include <sys/times.h>
727
728#define vki_tms tms
729
730
731#include <sys/utsname.h>
732
733#define	_VKI_SYS_NAMELEN	_SYS_NAMELEN
734#define vki_new_utsname utsname
735
736
737#include <sys/unistd.h>
738
739#define	VKI_F_OK	F_OK
740#define	VKI_X_OK	X_OK
741#define	VKI_W_OK	W_OK
742#define	VKI_R_OK	R_OK
743
744#define vki_accessx_descriptor         accessx_descriptor
745#define VKI_ACCESSX_MAX_DESCRIPTORS    ACCESSX_MAX_DESCRIPTORS
746
747#include <sys/sysctl.h>
748
749#define VKI_CTL_MAXNAME		CTL_MAXNAME
750
751#define	VKI_CTL_UNSPEC		CTL_UNSPEC
752#define	VKI_CTL_KERN		CTL_KERN
753#define	VKI_CTL_VM		CTL_VM
754#define	VKI_CTL_VFS		CTL_VFS
755#define	VKI_CTL_NET		CTL_NET
756#define	VKI_CTL_DEBUG		CTL_DEBUG
757#define	VKI_CTL_HW		CTL_HW
758#define	VKI_CTL_MACHDEP		CTL_MACHDEP
759#define	VKI_CTL_USER		CTL_USER
760#define	VKI_CTL_MAXID		CTL_MAXID
761
762#define	VKI_HW_MACHINE		HW_MACHINE
763#define	VKI_HW_MODEL		HW_MODEL
764#define	VKI_HW_NCPU		HW_NCPU
765#define	VKI_HW_BYTEORDER	HW_BYTEORDER
766#define	VKI_HW_PHYSMEM		HW_PHYSMEM
767#define	VKI_HW_USERMEM		HW_USERMEM
768#define	VKI_HW_PAGESIZE		HW_PAGESIZE
769#define	VKI_HW_DISKNAMES	HW_DISKNAMES
770#define	VKI_HW_DISKSTATS	HW_DISKSTATS
771#define	VKI_HW_EPOCH  		HW_EPOCH
772#define VKI_HW_FLOATINGPT	HW_FLOATINGPT
773#define VKI_HW_MACHINE_ARCH	HW_MACHINE_ARCH
774#define VKI_HW_VECTORUNIT	HW_VECTORUNIT
775#define VKI_HW_BUS_FREQ		HW_BUS_FREQ
776#define VKI_HW_CPU_FREQ		HW_CPU_FREQ
777#define VKI_HW_CACHELINE	HW_CACHELINE
778#define VKI_HW_L1ICACHESIZE	HW_L1ICACHESIZE
779#define VKI_HW_L1DCACHESIZE	HW_L1DCACHESIZE
780#define VKI_HW_L2SETTINGS	HW_L2SETTINGS
781#define VKI_HW_L2CACHESIZE	HW_L2CACHESIZE
782#define VKI_HW_L3SETTINGS	HW_L3SETTINGS
783#define VKI_HW_L3CACHESIZE	HW_L3CACHESIZE
784#define VKI_HW_TB_FREQ		HW_TB_FREQ
785#define VKI_HW_MEMSIZE		HW_MEMSIZE
786#define VKI_HW_AVAILCPU		MW_AVAILCPU
787#define	VKI_HW_MAXID		MW_MAXID
788
789#define	VKI_KERN_USRSTACK32	KERN_USRSTACK32
790#define	VKI_KERN_USRSTACK64	KERN_USRSTACK64
791
792
793#include <sys/attr.h>
794
795#define vki_attrlist attrlist
796
797
798#include <sys/event.h>
799
800#define vki_kevent kevent
801#define vki_kevent64 kevent64_s
802
803
804#include <sys/ev.h>
805
806typedef struct eventreq vki_eventreq;
807
808
809#include <sys/acl.h>
810
811#define vki_kauth_filesec kauth_filesec
812
813
814#include <sys/ptrace.h>
815
816#define VKI_PTRACE_TRACEME   PT_TRACE_ME
817#define VKI_PTRACE_DETACH    PT_DETACH
818
819
820// sqlite/src/os_unix.c
821
822struct ByteRangeLockPB2
823{
824    unsigned long long offset;        /* offset to first byte to lock */
825    unsigned long long length;        /* nbr of bytes to lock */
826    unsigned long long retRangeStart; /* nbr of 1st byte locked if successful */
827    unsigned char unLockFlag;         /* 1 = unlock, 0 = lock */
828    unsigned char startEndFlag;       /* 1=rel to end of fork, 0=rel to start */
829    int fd;                           /* file desc to assoc this lock with */
830};
831
832#define afpfsByteRangeLock2FSCTL _IOWR('z', 23, struct ByteRangeLockPB2)
833
834#define vki_ByteRangeLockPB2 ByteRangeLockPB2
835#define VKI_afpfsByteRangeLock2FSCTL afpfsByteRangeLock2FSCTL
836
837
838// xnu/bsd/sys/fsctl.h
839
840#define VKI_FSIOC_SYNC_VOLUME        _IOW('A', 1, uint32_t)
841
842
843// Libc/pthreads/pthread.c
844
845#define VKI_WQOPS_QUEUE_ADD          1
846#define VKI_WQOPS_QUEUE_REMOVE       2
847#define VKI_WQOPS_THREAD_RETURN      4
848#define VKI_WQOPS_THREAD_SETCONC     8
849#define VKI_WQOPS_QUEUE_NEWSPISUPP  16  /* check for newer SPI support */
850#define VKI_WQOPS_QUEUE_REQTHREADS  32  /* request number of threads of a prio */
851
852
853#include <sys/ttycom.h>
854
855#define vki_winsize winsize
856
857#define	VKI_TIOCMODG	TIOCMODG
858#define	VKI_TIOCMODS	TIOCMODS
859#define	VKI_TIOCEXCL	TIOCEXCL
860#define	VKI_TIOCNXCL	TIOCNXCL
861#define	VKI_TIOCFLUSH	TIOCFLUSH
862#define	VKI_TIOCGETA	TIOCGETA
863#define	VKI_TIOCSETA	TIOCSETA
864#define	VKI_TIOCSETAW	TIOCSETAW
865#define	VKI_TIOCSETAF	TIOCSETAF
866#define	VKI_TIOCGETD	TIOCGETD
867#define	VKI_TIOCSETD	TIOCSETD
868#define	VKI_TIOCSBRK	TIOCSBRK
869#define	VKI_TIOCCBRK	TIOCCBRK
870#define	VKI_TIOCSDTR	TIOCSDTR
871#define	VKI_TIOCCDTR	TIOCCDTR
872#define	VKI_TIOCGPGRP	TIOCGPGRP
873#define	VKI_TIOCSPGRP	TIOCSPGRP
874#define	VKI_TIOCOUTQ	TIOCOUTQ
875#define	VKI_TIOCSTI	TIOCSTI
876#define	VKI_TIOCNOTTY	TIOCNOTTY
877#define	VKI_TIOCPKT	TIOCPKT
878#define	VKI_TIOCSTOP	TIOCSTOP
879#define	VKI_TIOCSTART	TIOCSTART
880#define	VKI_TIOCMSET	TIOCMSET
881#define	VKI_TIOCMBIS	TIOCMBIS
882#define	VKI_TIOCMBIC	TIOCMBIC
883#define	VKI_TIOCMGET	TIOCMGET
884#define	VKI_TIOCREMOTE	TIOCREMOTE
885#define	VKI_TIOCGWINSZ	TIOCGWINSZ
886#define	VKI_TIOCSWINSZ	TIOCSWINSZ
887#define	VKI_TIOCUCNTL	TIOCUCNTL
888#define	VKI_TIOCSTAT	TIOCSTAT
889#define	VKI_UIOCCMD(n)	UIOCCMD(n)
890#define	VKI_TIOCSCONS	TIOCSCONS
891#define	VKI_TIOCCONS	TIOCCONS
892#define	VKI_TIOCSCTTY	TIOCSCTTY
893#define	VKI_TIOCEXT	TIOCEXT
894#define	VKI_TIOCSIG	TIOCSIG
895#define	VKI_TIOCDRAIN	TIOCDRAIN
896#define	VKI_TIOCMSDTRWAIT	TIOCMSDTRWAIT
897#define	VKI_TIOCMGDTRWAIT	TIOCMGDTRWAIT
898#define	VKI_TIOCTIMESTAMP	TIOCTIMESTAMP
899#define	VKI_TIOCDCDTIMESTAMP	TIOCDCDTIMESTAMP
900#define	VKI_TIOCSDRAINWAIT	TIOCSDRAINWAIT
901#define	VKI_TIOCGDRAINWAIT	TIOCGDRAINWAIT
902#define	VKI_TIOCDSIMICROCODE	TIOCDSIMICROCODE
903#define VKI_TIOCPTYGRANT	TIOCPTYGRANT
904#define VKI_TIOCPTYGNAME	TIOCPTYGNAME
905#define VKI_TIOCPTYUNLK	TIOCPTYUNLK
906
907
908#include <sys/filio.h>
909
910#define	VKI_FIOCLEX	FIOCLEX
911#define	VKI_FIONCLEX	FIONCLEX
912#define	VKI_FIONREAD	FIONREAD
913#define	VKI_FIONBIO	FIONBIO
914#define	VKI_FIOASYNC	FIOASYNC
915#define	VKI_FIOSETOWN	FIOSETOWN
916#define	VKI_FIOGETOWN	FIOGETOWN
917#define	VKI_FIODTYPE	FIODTYPE
918
919
920#include <sys/sockio.h>
921
922#define	VKI_SIOCSHIWAT	SIOCSHIWAT
923#define	VKI_SIOCGHIWAT	SIOCGHIWAT
924#define	VKI_SIOCSLOWAT	SIOCSLOWAT
925#define	VKI_SIOCGLOWAT	SIOCGLOWAT
926#define	VKI_SIOCATMARK	SIOCATMARK
927#define	VKI_SIOCSPGRP	SIOCSPGRP
928#define	VKI_SIOCGPGRP	SIOCGPGRP
929
930#define	VKI_SIOCSIFADDR		SIOCSIFADDR
931#define	VKI_OSIOCGIFADDR	OSIOCGIFADDR
932#define	VKI_SIOCSIFDSTADDR	SIOCSIFDSTADDR
933#define	VKI_OSIOCGIFDSTADDR	OSIOCGIFDSTADDR
934#define	VKI_SIOCSIFFLAGS	SIOCSIFFLAGS
935#define	VKI_SIOCGIFFLAGS	SIOCGIFFLAGS
936#define	VKI_OSIOCGIFBRDADDR	OSIOCGIFBRDADDR
937#define	VKI_SIOCSIFBRDADDR	SIOCSIFBRDADDR
938#define	VKI_OSIOCGIFCONF	OSIOCGIFCONF
939#define	VKI_OSIOCGIFNETMASK	OSIOCGIFNETMASK
940#define	VKI_SIOCSIFNETMASK	SIOCSIFNETMASK
941#define	VKI_SIOCGIFMETRIC	SIOCGIFMETRIC
942#define	VKI_SIOCSIFMETRIC	SIOCSIFMETRIC
943#define	VKI_SIOCDIFADDR		SIOCDIFADDR
944#define	VKI_SIOCAIFADDR		SIOCAIFADDR
945#define	VKI_SIOCGETVIFCNT	SIOCGETVIFCNT
946#define	VKI_SIOCGETSGCNT	SIOCGETSGCNT
947#define VKI_SIOCALIFADDR	SIOCALIFADDR
948#define VKI_SIOCGLIFADDR	SIOCGLIFADDR
949#define VKI_SIOCDLIFADDR	SIOCDLIFADDR
950
951#define	VKI_SIOCGIFADDR		SIOCGIFADDR
952#define	VKI_SIOCGIFDSTADDR	SIOCGIFDSTADDR
953#define	VKI_SIOCGIFBRDADDR	SIOCGIFBRDADDR
954#define	VKI_SIOCGIFCONF		SIOCGIFCONF
955#define	VKI_SIOCGIFNETMASK	SIOCGIFNETMASK
956#define VKI_SIOCAUTOADDR	SIOCAUTOADDR
957#define VKI_SIOCAUTONETMASK	SIOCAUTONETMASK
958#define VKI_SIOCARPIPLL		SIOCARPIPLL
959
960#define	VKI_SIOCADDMULTI	SIOCADDMULTI
961#define	VKI_SIOCDELMULTI	SIOCDELMULTI
962#define	VKI_SIOCGIFMTU		SIOCGIFMTU
963#define	VKI_SIOCSIFMTU	 	SIOCSIFMTU
964#define	VKI_SIOCGIFPHYS		SIOCGIFPHYS
965#define	VKI_SIOCSIFPHYS	 	SIOCSIFPHYS
966#define	VKI_SIOCSIFMEDIA	SIOCSIFMEDIA
967#define	VKI_SIOCGIFMEDIA	SIOCGIFMEDIA
968#define	VKI_SIOCSIFGENERIC	SIOCSIFGENERIC
969#define	VKI_SIOCGIFGENERIC	SIOCGIFGENERIC
970#define VKI_SIOCRSLVMULTI   	SIOCRSLVMULTI
971
972#define	VKI_SIOCSIFLLADDR	SIOCSIFLLADDR
973#define	VKI_SIOCGIFSTATUS	SIOCGIFSTATUS
974#define	VKI_SIOCSIFPHYADDR   	SIOCSIFPHYADDR
975#define	VKI_SIOCGIFPSRCADDR	SIOCGIFPSRCADDR
976#define	VKI_SIOCGIFPDSTADDR	SIOCGIFPDSTADDR
977#define	VKI_SIOCDIFPHYADDR	SIOCDIFPHYADDR
978#define	VKI_SIOCSLIFPHYADDR	SIOCSLIFPHYADDR
979#define	VKI_SIOCGLIFPHYADDR	SIOCGLIFPHYADDR
980
981#define	VKI_SIOCGIFDEVMTU	SIOCGIFDEVMTU
982#define	VKI_SIOCSIFALTMTU	SIOCSIFALTMTU
983#define VKI_SIOCGIFALTMTU	SIOCGIFALTMTU
984#define VKI_SIOCSIFBOND	 	SIOCSIFBOND
985#define VKI_SIOCGIFBOND		SIOCGIFBOND
986#define	VKI_SIOCIFCREATE	SIOCIFCREATE
987#define	VKI_SIOCIFDESTROY	SIOCIFDESTROY
988#define	VKI_SIOCSIFVLAN	 	SIOCSIFVLAN
989#define	VKI_SIOCGIFVLAN		SIOCGIFVLAN
990
991#define	VKI_SIOCSETVLAN		SIOCSIFVLAN
992#define	VKI_SIOCGETVLAN		SIOCGIFVLAN
993
994#define	VKI_SIOCGIFASYNCMAP 	SIOCGIFASYNCMAP
995#define	VKI_SIOCSIFASYNCMAP 	SIOCSIGASYNCMAP
996
997
998#include <sys/dtrace.h>
999
1000#define VKI_DTRACEHIOC_REMOVE   DTRACEHIOC_REMOVE
1001#define VKI_DTRACEHIOC_ADDDOF   DTRACEHIOC_ADDDOF
1002
1003
1004#include <sys/ucontext.h>
1005
1006/* quite why sys/ucontext.h provides a 'struct __darwin_ucontext'
1007   but no 'struct ucontext' beats me. -- JRS */
1008#define vki_ucontext __darwin_ucontext
1009
1010
1011#include <sys/termios.h>
1012
1013#define vki_termios termios
1014
1015
1016#include <uuid/uuid.h>
1017
1018#define vki_uuid_t uuid_t
1019
1020
1021#include <bsm/audit.h>
1022
1023#define	VKI_A_GETPOLICY	A_GETPOLICY
1024#define	VKI_A_SETPOLICY	A_SETPOLICY
1025#define	VKI_A_GETKMASK	A_GETKMASK
1026#define	VKI_A_SETKMASK	A_SETKMASK
1027#define	VKI_A_GETQCTRL	A_GETQCTRL
1028#define	VKI_A_SETQCTRL	A_SETQCTRL
1029#define	VKI_A_GETCWD	A_GETCWD
1030#define	VKI_A_GETCAR	A_GETCAR
1031#define	VKI_A_GETSTAT	A_GETSTAT
1032#define	VKI_A_SETSTAT	A_SETSTAT
1033#define	VKI_A_SETUMASK	A_SETUMASK
1034#define	VKI_A_SETSMASK	A_SETSMASK
1035#define	VKI_A_GETCOND	A_GETCOND
1036#define	VKI_A_SETCOND	A_SETCOND
1037#define	VKI_A_GETCLASS	A_GETCLASS
1038#define	VKI_A_SETCLASS	A_SETCLASS
1039#define	VKI_A_GETPINFO	A_GETPINFO
1040#define	VKI_A_SETPMASK	A_SETPMASK
1041#define	VKI_A_SETFSIZE	A_SETFSIZE
1042#define	VKI_A_GETFSIZE	A_GETFSIZE
1043#define	VKI_A_GETPINFO_ADDR	A_GETPINFO_ADDR
1044#define	VKI_A_GETKAUDIT	A_GETKAUDIT
1045#define	VKI_A_SETKAUDIT	A_SETKAUDIT
1046#if DARWIN_VERS >= DARWIN_10_6
1047#define VKI_A_SENDTRIGGER A_SENDTRIGGER
1048#define VKI_A_GETSINFO_ADDR A_GETSINFO_ADDR
1049#endif
1050
1051
1052#include <sys/aio.h>
1053
1054#define vki_aiocb aiocb
1055
1056
1057#include <netinet/tcp.h>
1058
1059#define VKI_TCP_NODELAY  TCP_NODELAY
1060
1061
1062#include <netinet/in.h>
1063
1064#define VKI_IPPROTO_TCP  IPPROTO_TCP
1065
1066
1067// XXX: for some reason when I #include <sys/kernel_types.h> I get a syntax
1068// error.  Hmm.  So just define things ourselves.
1069//#include <sys/kernel_types.h>
1070
1071//#define vki_errno_t
1072typedef int vki_errno_t;
1073
1074
1075/* necp stuff.  This doesn't appear to exist in any user space include
1076   file. */
1077#if DARWIN_VERS == DARWIN_10_10
1078struct vki_necp_aggregate_result {
1079   vki_u_int32_t field1;
1080   unsigned int  field2;
1081   vki_u_int32_t field3;
1082   vki_u_int32_t field4;
1083   vki_uuid_t    field5;
1084   u_int32_t     field6;
1085   u_int32_t     field7;
1086};
1087#endif /* DARWIN_VERS == DARWIN_10_10 */
1088
1089
1090#endif
1091