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