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