blob: 34b0da744bd7a3172d2e0087b5c817d705814529 [file] [log] [blame]
njnf76d27a2009-05-28 01:53:07 +00001
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
sewardj0f157dd2013-10-18 14:27:36 +000010 Copyright (C) 2007-2013 Apple Inc.
njnf76d27a2009-05-28 01:53:07 +000011 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#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
njn28a9e232009-07-23 00:06:16 +000074#define vki_pthread_t pthread_t
njnf76d27a2009-05-28 01:53:07 +000075
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
90typedef 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
282#define VKI_F_CHKCLEAN F_CHKCLEAN
283#define VKI_F_PREALLOCATE F_PREALLOCATE
284#define VKI_F_SETSIZE F_SETSIZE
285#define VKI_F_RDADVISE F_RDADVISE
286#define VKI_F_RDAHEAD F_RDAHEAD
287#define VKI_F_READBOOTSTRAP F_READBOOTSTRAP
288#define VKI_F_WRITEBOOTSTRAP F_WRITEBOOTSTRAP
289#define VKI_F_NOCACHE F_NOCACHE
290#define VKI_F_LOG2PHYS F_LOG2PHYS
291#define VKI_F_GETPATH F_GETPATH
292#define VKI_F_ADDSIGS F_ADDSIGS
293#define VKI_F_FULLFSYNC F_FULLFSYNC
294#define VKI_F_PATHPKG_CHECK F_PATHPKG_CHECK
295#define VKI_F_FREEZE_FS F_FREEZE_FS
296#define VKI_F_THAW_FS F_THAW_FS
297#define VKI_F_GLOBAL_NOCACHE F_GLOBAL_NOCACHE
298
299#define VKI_FD_CLOEXEC FD_CLOEXEC
300
301#define vki_radvisory radvisory
302#define vki_fstore fstore
303#define vki_fbootstraptransfer fbootstraptransfer
304#define vki_log2phys log2phys
305#define vki_fsignatures_t fsignatures_t
306
307// These constants aren't in a standard header, they are from the kernel code:
308// xnu-1228.3.13/bsd/sys/codesign.h
309// Mac OS X 10.5.6 - Darwin 9.6
310#define VKI_CS_OPS_STATUS 0 /* return status */
311#define VKI_CS_OPS_MARKINVALID 1 /* invalidate process */
312#define VKI_CS_OPS_MARKHARD 2 /* set HARD flag */
313#define VKI_CS_OPS_MARKKILL 3 /* set KILL flag (sticky) */
314#define VKI_CS_OPS_PIDPATH 4 /* get executable's pathname */
315#define VKI_CS_OPS_CDHASH 5 /* get code directory hash */
316
317#include <sys/mman.h>
318
319#define VKI_PROT_NONE PROT_NONE
320#define VKI_PROT_READ PROT_READ
321#define VKI_PROT_WRITE PROT_WRITE
322#define VKI_PROT_EXEC PROT_EXEC
323
324#define VKI_MAP_SHARED MAP_SHARED
325#define VKI_MAP_PRIVATE MAP_PRIVATE
326#define VKI_MAP_FIXED MAP_FIXED
327#define VKI_MAP_RENAME MAP_RENAME
328#define VKI_MAP_NORESERVE MAP_NORESERVE
329#define VKI_MAP_RESERVED0080 MAP_RESERVED0080
330#define VKI_MAP_NOEXTEND MAP_NOEXTEND
331#define VKI_MAP_HASSEMAPHORE MAP_HASSEMAPHORE
332#define VKI_MAP_FILE MAP_FILE
333#define VKI_MAP_ANON MAP_ANON
334#define VKI_MAP_FAILED MAP_FAILED
335
336
337#include <mach/vm_param.h>
338
339#define VKI_PAGE_SHIFT PAGE_SHIFT
340#define VKI_PAGE_SIZE PAGE_SIZE
341#define VKI_PAGE_MASK PAGE_MASK
342
343
344#include <sys/vmparam.h>
345
346#define VKI_USRSTACK USRSTACK
347#define VKI_USRSTACK64 USRSTACK64
348
349
350#include <mach/mach_time.h>
351
352#define vki_mach_timebase_info mach_timebase_info
353
354
355#include <sys/syslimits.h>
356
357#define VKI_PATH_MAX PATH_MAX
358
359
360#include <sys/param.h>
361
362#define VKI_MAXPATHLEN MAXPATHLEN
363
364
365#include <sys/signal.h>
366
367/* While we fully intend to make 'vki_sigset_t' match the native
368 Darwin 'sigset_t', we can't just clone the Darwin sigset_t type,
369 because it isn't an array, and the VG_(sigfillset) etc functions
370 assume it is. So instead define another isomorphic type, and check
371 in VG_(vki_do_initial_consistency_checks) that it really is
372 correct. */
373/* #define vki_sigset_t sigset_t */
374#define _VKI_NSIG_BPW 32
375#define _VKI_NSIG 32
376#define _VKI_NSIG_WORDS (_VKI_NSIG / _VKI_NSIG_BPW)
377typedef struct {
378 UInt sig[_VKI_NSIG_WORDS];
379} vki_sigset_t;
380/* and now let VG_(vki_do_initial_consistency_checks) make sure it
381 matches 'sigset_t'. */
382
383
384#define VKI_SS_ONSTACK SS_ONSTACK
385#define VKI_SS_DISABLE SS_DISABLE
386#define VKI_MINSIGSTKSZ MINSIGSTKSZ
387#define VKI_SIGSTKSZ SIGSTKSZ
388
389#define vki_stack_t stack_t
390#define vki_siginfo_t siginfo_t
391
392/* There are two versions of this. 'struct __sigaction' is used for
393 passing sigactions to the kernel interface, and has the added
394 complexity of requiring an extra pointer to a new demultiplexing
395 function to be run in user space. 'struct sigaction' is used for
396 receiving old sigactions from the kernel, and lacks this
397 demux-function pointer. So the type of the second and third
398 parameters in Darwin's sys_sigaction appear to be different,
399 respectively 'struct __sigaction*' and 'struct sigaction*'.
400*/
401//#define vki_sigaction __sigaction
402//#define vki_user_sigaction sigaction
403//#define vki_sigaltstack sigaltstack
404//#define vki_sigval sigval
405//#define vki_sigaction_u sigaction_u
406//#define vki_sigaction sigaction
407
408//typedef struct __sigaction vki_sigaction_toK_t;
409//typedef struct sigaction vki_sigaction_fromK_t;
410
411typedef
412 struct {
413 void* ksa_handler;
414 void (*sa_tramp)(void*,UWord,UWord,void*,void*);
415 vki_sigset_t sa_mask;
416 int sa_flags;
417 }
418 vki_sigaction_toK_t;
419
420typedef
421 struct {
422 void* ksa_handler;
423 vki_sigset_t sa_mask;
424 int sa_flags;
425 }
426 vki_sigaction_fromK_t;
427
428
429
430/* and /usr/include/sys/signal.c in turn defines 'sa_handler' to
431 be '__sigaction_u.__sa_handler' */
432//#define ksa_handler sa_handler
433
434//#define vki_sa_sigaction sa_sigaction
435
436#define VKI_SA_ONSTACK SA_ONSTACK
437#define VKI_SA_RESTART SA_RESTART
438#define VKI_SA_DISABLE SA_DISABLE
439#define VKI_SA_RESETHAND SA_RESETHAND
440#define VKI_SA_NOCLDSTOP SA_NOCLDSTOP
441#define VKI_SA_NODEFER SA_NODEFER
442#define VKI_SA_NOCLDWAIT SA_NOCLDWAIT
443#define VKI_SA_SIGINFO SA_SIGINFO
444#define VKI_SA_USERTRAMP SA_USERTRAMP
445#define VKI_SA_64REGSET SA_64REGSET
446#define VKI_SA_RESTORER 0 /* Darwin doesn't have this */
447
448#define VKI_SIG_BLOCK SIG_BLOCK
449#define VKI_SIG_UNBLOCK SIG_UNBLOCK
450#define VKI_SIG_SETMASK SIG_SETMASK
451
452#define VKI_SIGHUP SIGHUP
453#define VKI_SIGINT SIGINT
454#define VKI_SIGQUIT SIGQUIT
455#define VKI_SIGILL SIGILL
456#define VKI_SIGTRAP SIGTRAP
457#define VKI_SIGABRT SIGABRT
458#define VKI_SIGPOLL SIGPOLL
459#define VKI_SIGFPE SIGFPE
460#define VKI_SIGKILL SIGKILL
461#define VKI_SIGBUS SIGBUS
462#define VKI_SIGSEGV SIGSEGV
463#define VKI_SIGSYS SIGSYS
464#define VKI_SIGPIPE SIGPIPE
465#define VKI_SIGALRM SIGALRM
466#define VKI_SIGTERM SIGTERM
467#define VKI_SIGURG SIGURG
468#define VKI_SIGSTOP SIGSTOP
469#define VKI_SIGTSTP SIGTSTP
470#define VKI_SIGCONT SIGCONT
471#define VKI_SIGCHLD SIGCHLD
472#define VKI_SIGTTIN SIGTTIN
473#define VKI_SIGTTOU SIGTTOU
474#define VKI_SIGIO SIGIO
475#define VKI_SIGXCPU SIGXCPU
476#define VKI_SIGXFSZ SIGXFSZ
477#define VKI_SIGVTALRM SIGVTALRM
478#define VKI_SIGPROF SIGPROF
479#define VKI_SIGWINCH SIGWINCH
480#define VKI_SIGINFO SIGINFO
481#define VKI_SIGUSR1 SIGUSR1
482#define VKI_SIGUSR2 SIGUSR2
483
484#define VKI_SIG_DFL SIG_DFL
485#define VKI_SIG_IGN SIG_IGN
486
487
488#define VKI_SI_USER SI_USER
489#define VKI_SEGV_MAPERR SEGV_MAPERR
490#define VKI_SEGV_ACCERR SEGV_ACCERR
491#define VKI_ILL_ILLOPC ILL_ILLOPC
492#define VKI_ILL_ILLOPN ILL_ILLOPN
493#define VKI_ILL_ILLADR ILL_ILLADR
494#define VKI_ILL_ILLTRP ILL_ILLTRP
495#define VKI_ILL_PRVOPC ILL_PRVOPC
496#define VKI_ILL_PRVREG ILL_PRVREG
497#define VKI_ILL_COPROC ILL_COPROC
498#define VKI_ILL_BADSTK ILL_BADSTK
499#define VKI_FPE_INTDIV FPE_INTDIV
500#define VKI_FPE_INTOVF FPE_INTOVF
501#define VKI_FPE_FLTDIV FPE_FLTDIV
502#define VKI_FPE_FLTOVF FPE_FLTOVF
503#define VKI_FPE_FLTUND FPE_FLTUND
504#define VKI_FPE_FLTRES FPE_FLTRES
505#define VKI_FPE_FLTINV FPE_FLTINV
506#define VKI_FPE_FLTSUB FPE_FLTSUB
507#define VKI_BUS_ADRALN BUS_ADRALN
508#define VKI_BUS_ADRERR BUS_ADRERR
509#define VKI_BUS_OBJERR BUS_OBJERR
510#define VKI_TRAP_BRKPT TRAP_BRKPT
511
512/* JRS: not 100% sure, but I think these two are correct */
513#define VKI_SA_ONESHOT SA_RESETHAND
514#define VKI_SA_NOMASK SA_NODEFER
515
516#define VKI_UC_SET_ALT_STACK 0x40000000
517#define VKI_UC_RESET_ALT_STACK 0x80000000
518
519
520#include <sys/errno.h>
521
522#define VKI_EPERM EPERM
523#define VKI_ENOENT ENOENT
524#define VKI_ESRCH ESRCH
525#define VKI_EINTR EINTR
526#define VKI_EIO EIO
527#define VKI_ENXIO ENXIO
528#define VKI_E2BIG E2BIG
529#define VKI_ENOEXEC ENOEXEC
530#define VKI_EBADF EBADF
531#define VKI_ECHILD ECHILD
532#define VKI_EDEADLK EDEADLK
533#define VKI_ENOMEM ENOMEM
534#define VKI_EACCES EACCES
535#define VKI_EFAULT EFAULT
536#define VKI_ENOTBLK ENOTBLK
537#define VKI_EBUSY EBUSY
538#define VKI_EEXIST EEXIST
539#define VKI_EXDEV EXDEV
540#define VKI_ENODEV ENODEV
541#define VKI_ENOTDIR ENOTDIR
542#define VKI_EISDIR EISDIR
543#define VKI_EINVAL EINVAL
544#define VKI_ENFILE ENFILE
545#define VKI_EMFILE EMFILE
546#define VKI_ENOTTY ENOTTY
547#define VKI_ETXTBSY ETXTBSY
548#define VKI_EFBIG EFBIG
549#define VKI_ENOSPC ENOSPC
550#define VKI_ESPIPE ESPIPE
551#define VKI_EROFS EROFS
552#define VKI_EMLINK EMLINK
553#define VKI_EPIPE EPIPE
554#define VKI_EDOM EDOM
555#define VKI_ERANGE ERANGE
556#define VKI_EAGAIN EAGAIN
557#define VKI_EWOULDBLOCK EAGAIN
558#define VKI_EINPROGRESS EINPROGRESS
559#define VKI_EALREADY EALREADY
560#define VKI_ENOTSOCK ENOTSOCK
561#define VKI_EDESTADDRREQ EDESTADDRREQ
562#define VKI_EMSGSIZE EMSGSIZE
563#define VKI_EPROTOTYPE EPROTOTYPE
564#define VKI_ENOPROTOOPT ENOPROTOOPT
565#define VKI_EPROTONOSUPPORT EPROTONOSUPPORT
566#define VKI_ESOCKTNOSUPPORT ESOCKTNOSUPPORT
567#define VKI_ENOTSUP ENOTSUP
568#define VKI_EPFNOSUPPORT EPFNOSUPPORT
569#define VKI_EAFNOSUPPORT EAFNOSUPPORT
570#define VKI_EADDRINUSE EADDRINUSE
571#define VKI_EADDRNOTAVAIL EADDRNOTAVAIL
572#define VKI_ENETDOWN ENETDOWN
573#define VKI_ENETUNREACH ENETUNREACH
574#define VKI_ENETRESET ENETRESET
575#define VKI_ECONNABORTED ECONNABORTED
576#define VKI_ECONNRESET ECONNRESET
577#define VKI_ENOBUFS ENOBUFS
578#define VKI_EISCONN EISCONN
579#define VKI_ENOTCONN ENOTCONN
580#define VKI_ESHUTDOWN ESHUTDOWN
581#define VKI_ETOOMANYREFS ETOOMANYREFS
582#define VKI_ETIMEDOUT ETIMEDOUT
583#define VKI_ECONNREFUSED ECONNREFUSED
584#define VKI_ELOOP ELOOP
585#define VKI_ENAMETOOLONG ENAMETOOLONG
586#define VKI_EHOSTDOWN EHOSTDOWN
587#define VKI_EHOSTUNREACH EHOSTUNREACH
588#define VKI_ENOTEMPTY ENOTEMPTY
589#define VKI_EPROCLIM EPROCLIM
590#define VKI_EUSERS EUSERS
591#define VKI_EDQUOT EDQUOT
592#define VKI_ESTALE ESTALE
593#define VKI_EREMOTE EREMOTE
594#define VKI_EBADRPC EBADRPC
595#define VKI_ERPCMISMATCH ERPCMISMATCH
596#define VKI_EPROGUNAVAIL EPROGUNAVAIL
597#define VKI_EPROGMISMATCH EPROGMISMATCH
598#define VKI_EPROCUNAVAIL EPROCUNAVAIL
599#define VKI_ENOLCK ENOLCK
600#define VKI_ENOSYS ENOSYS
601#define VKI_EFTYPE EFTYPE
602#define VKI_EAUTH EAUTH
603#define VKI_ENEEDAUTH ENEEDAUTH
604#define VKI_EPWROFF EPWROFF
605#define VKI_EDEVERR EDEVERR
606#define VKI_EOVERFLOW EOVERFLOW
607#define VKI_EBADEXEC EBADEXEC
608#define VKI_EBADARCH EBADARCH
609#define VKI_ESHLIBVERS ESHLIBVERS
610#define VKI_EBADMACHO EBADMACHO
611#define VKI_ECANCELED ECANCELED
612#define VKI_EIDRM EIDRM
613#define VKI_ENOMSG ENOMSG
614#define VKI_EILSEQ EILSEQ
615#define VKI_ENOATTR ENOATTR
616#define VKI_EBADMSG EBADMSG
617#define VKI_EMULTIHOP EMULTIHOP
618#define VKI_ENODATA ENODATA
619#define VKI_ENOLINK ENOLINK
620#define VKI_ENOSR ENOSR
621#define VKI_ENOSTR ENOSTR
622#define VKI_EPROTO EPROTO
623#define VKI_ETIME ETIME
624#define VKI_EOPNOTSUPP EOPNOTSUPP
625#define VKI_ELAST ELAST
626
627
628#include <sys/resource.h>
629
630#define VKI_RLIMIT_CPU RLIMIT_CPU
631#define VKI_RLIMIT_FSIZE RLIMIT_FSIZE
632#define VKI_RLIMIT_DATA RLIMIT_DATA
633#define VKI_RLIMIT_STACK RLIMIT_STACK
634#define VKI_RLIMIT_CORE RLIMIT_CORE
635#define VKI_RLIMIT_AS RLIMIT_AD
636#define VKI_RLIMIT_RSS RLIMIT_AS
637#define VKI_RLIMIT_MEMLOCK RLIMIT_MEMLOCK
638#define VKI_RLIMIT_NPROC RLIMIT_NPROC
639#define VKI_RLIMIT_NOFILE RLIMIT_NOFILE
640#define VKI_RLIM_NLIMITS RLIM_NLIMITS
641
642#define vki_rlim_t rlim_t
643#define vki_rlimit rlimit
644#define vki_rusage rusage
645
646
647#include <sys/poll.h>
648
649#define vki_pollfd pollfd
650
651
652#include <sys/ipc.h>
653
654#define VKI_IPC_RMID IPC_RMID
655#define VKI_IPC_SET IPC_SET
656#define VKI_IPC_STAT IPC_STAT
657
658#define vki_key_t key_t
659#define vki_ipc_perm ipc_perm
660
661
662#include <sys/sem.h>
663
664#define VKI_GETNCNT GETNCNT
665#define VKI_GETPID GETPID
666#define VKI_GETVAL GETVAL
667#define VKI_GETALL GETALL
668#define VKI_GETZCNT GETZCNT
669#define VKI_SETVAL SETVAL
670#define VKI_SETALL SETALL
671
672#define vki_sembuf sembuf
673#define vki_semid_ds semid_ds
674#define vki_semun semun
675
676
677#include <sys/semaphore.h>
678
679#define vki_sem_t sem_t
680
681
682#include <sys/mount.h>
683
684#define VKI_MFSNAMELEN MFSNAMELEN
685#define VKI_MNAMELEN MNAMELEN
686
687#define vki_fsid fsid
688#define vki_fsid_t fsid_t
689#define vki_statfs statfs
690#define vki_statfs64 statfs64
691
692
693#include <sys/select.h>
694
695#define vki_fd_set fd_set
696
697
698#include <sys/msgbuf.h>
699
700#define VKI_MSG_BSIZE MSG_BSIZE
701#define VKI_MSG_MAGIC MSG_MAGIC
702#define vki_msgbuf msgbuf
703
704
705#include <sys/shm.h>
706
707#define VKI_SHM_RDONLY SHM_RDONLY
708#define VKI_SHM_RND SHM_RND
sewardj19a00d32010-10-07 09:53:02 +0000709#define VKI_SHMLBA SHMLBA
njnf76d27a2009-05-28 01:53:07 +0000710
711#define vki_shmid_ds shmid_ds
712
713
714#include <sys/times.h>
715
716#define vki_tms tms
717
718
719#include <sys/utsname.h>
720
721#define _VKI_SYS_NAMELEN _SYS_NAMELEN
722#define vki_new_utsname utsname
723
724
725#include <sys/unistd.h>
726
727#define VKI_F_OK F_OK
728#define VKI_X_OK X_OK
729#define VKI_W_OK W_OK
730#define VKI_R_OK R_OK
731
njn3a1b9a22009-08-12 02:30:20 +0000732#define vki_accessx_descriptor accessx_descriptor
733#define VKI_ACCESSX_MAX_DESCRIPTORS ACCESSX_MAX_DESCRIPTORS
njnf76d27a2009-05-28 01:53:07 +0000734
735#include <sys/sysctl.h>
736
737#define VKI_CTL_MAXNAME CTL_MAXNAME
738
739#define VKI_CTL_UNSPEC CTL_UNSPEC
740#define VKI_CTL_KERN CTL_KERN
741#define VKI_CTL_VM CTL_VM
742#define VKI_CTL_VFS CTL_VFS
743#define VKI_CTL_NET CTL_NET
744#define VKI_CTL_DEBUG CTL_DEBUG
745#define VKI_CTL_HW CTL_HW
746#define VKI_CTL_MACHDEP CTL_MACHDEP
747#define VKI_CTL_USER CTL_USER
748#define VKI_CTL_MAXID CTL_MAXID
749
750#define VKI_HW_MACHINE HW_MACHINE
751#define VKI_HW_MODEL HW_MODEL
752#define VKI_HW_NCPU HW_NCPU
753#define VKI_HW_BYTEORDER HW_BYTEORDER
754#define VKI_HW_PHYSMEM HW_PHYSMEM
755#define VKI_HW_USERMEM HW_USERMEM
756#define VKI_HW_PAGESIZE HW_PAGESIZE
757#define VKI_HW_DISKNAMES HW_DISKNAMES
758#define VKI_HW_DISKSTATS HW_DISKSTATS
759#define VKI_HW_EPOCH HW_EPOCH
760#define VKI_HW_FLOATINGPT HW_FLOATINGPT
761#define VKI_HW_MACHINE_ARCH HW_MACHINE_ARCH
762#define VKI_HW_VECTORUNIT HW_VECTORUNIT
763#define VKI_HW_BUS_FREQ HW_BUS_FREQ
764#define VKI_HW_CPU_FREQ HW_CPU_FREQ
765#define VKI_HW_CACHELINE HW_CACHELINE
766#define VKI_HW_L1ICACHESIZE HW_L1ICACHESIZE
767#define VKI_HW_L1DCACHESIZE HW_L1DCACHESIZE
768#define VKI_HW_L2SETTINGS HW_L2SETTINGS
769#define VKI_HW_L2CACHESIZE HW_L2CACHESIZE
770#define VKI_HW_L3SETTINGS HW_L3SETTINGS
771#define VKI_HW_L3CACHESIZE HW_L3CACHESIZE
772#define VKI_HW_TB_FREQ HW_TB_FREQ
773#define VKI_HW_MEMSIZE HW_MEMSIZE
774#define VKI_HW_AVAILCPU MW_AVAILCPU
775#define VKI_HW_MAXID MW_MAXID
776
777#define VKI_KERN_USRSTACK32 KERN_USRSTACK32
778#define VKI_KERN_USRSTACK64 KERN_USRSTACK64
779
780
781#include <sys/attr.h>
782
783#define vki_attrlist attrlist
784
785
786#include <sys/event.h>
787
788#define vki_kevent kevent
789
790
791#include <sys/ev.h>
792
793typedef struct eventreq vki_eventreq;
794
795
njnea2d6fd2010-07-01 00:20:20 +0000796#include <sys/acl.h>
797
798#define vki_kauth_filesec kauth_filesec
799
800
njnf76d27a2009-05-28 01:53:07 +0000801#include <sys/ptrace.h>
802
803#define VKI_PTRACE_TRACEME PT_TRACE_ME
804#define VKI_PTRACE_DETACH PT_DETACH
805
806
807// sqlite/src/os_unix.c
808
809struct ByteRangeLockPB2
810{
811 unsigned long long offset; /* offset to first byte to lock */
812 unsigned long long length; /* nbr of bytes to lock */
813 unsigned long long retRangeStart; /* nbr of 1st byte locked if successful */
814 unsigned char unLockFlag; /* 1 = unlock, 0 = lock */
815 unsigned char startEndFlag; /* 1=rel to end of fork, 0=rel to start */
816 int fd; /* file desc to assoc this lock with */
817};
818
819#define afpfsByteRangeLock2FSCTL _IOWR('z', 23, struct ByteRangeLockPB2)
820
821#define vki_ByteRangeLockPB2 ByteRangeLockPB2
822#define VKI_afpfsByteRangeLock2FSCTL afpfsByteRangeLock2FSCTL
823
824
825// xnu/bsd/sys/fsctl.h
826
827#define VKI_FSIOC_SYNC_VOLUME _IOW('A', 1, uint32_t)
828
829
830// Libc/pthreads/pthread.c
831
sewardjae284e52012-08-02 18:25:04 +0000832#define VKI_WQOPS_QUEUE_ADD 1
833#define VKI_WQOPS_QUEUE_REMOVE 2
834#define VKI_WQOPS_THREAD_RETURN 4
835#define VKI_WQOPS_THREAD_SETCONC 8
836#define VKI_WQOPS_QUEUE_NEWSPISUPP 16 /* check for newer SPI support */
837#define VKI_WQOPS_QUEUE_REQTHREADS 32 /* request number of threads of a prio */
njnf76d27a2009-05-28 01:53:07 +0000838
839
840#include <sys/ttycom.h>
841
842#define vki_winsize winsize
843
844#define VKI_TIOCMODG TIOCMODG
845#define VKI_TIOCMODS TIOCMODS
846#define VKI_TIOCEXCL TIOCEXCL
847#define VKI_TIOCNXCL TIOCNXCL
848#define VKI_TIOCFLUSH TIOCFLUSH
849#define VKI_TIOCGETA TIOCGETA
850#define VKI_TIOCSETA TIOCSETA
851#define VKI_TIOCSETAW TIOCSETAW
852#define VKI_TIOCSETAF TIOCSETAF
853#define VKI_TIOCGETD TIOCGETD
854#define VKI_TIOCSETD TIOCSETD
855#define VKI_TIOCSBRK TIOCSBRK
856#define VKI_TIOCCBRK TIOCCBRK
857#define VKI_TIOCSDTR TIOCSDTR
858#define VKI_TIOCCDTR TIOCCDTR
859#define VKI_TIOCGPGRP TIOCGPGRP
860#define VKI_TIOCSPGRP TIOCSPGRP
861#define VKI_TIOCOUTQ TIOCOUTQ
862#define VKI_TIOCSTI TIOCSTI
863#define VKI_TIOCNOTTY TIOCNOTTY
864#define VKI_TIOCPKT TIOCPKT
865#define VKI_TIOCSTOP TIOCSTOP
866#define VKI_TIOCSTART TIOCSTART
867#define VKI_TIOCMSET TIOCMSET
868#define VKI_TIOCMBIS TIOCMBIS
869#define VKI_TIOCMBIC TIOCMBIC
870#define VKI_TIOCMGET TIOCMGET
871#define VKI_TIOCREMOTE TIOCREMOTE
872#define VKI_TIOCGWINSZ TIOCGWINSZ
873#define VKI_TIOCSWINSZ TIOCSWINSZ
874#define VKI_TIOCUCNTL TIOCUCNTL
875#define VKI_TIOCSTAT TIOCSTAT
876#define VKI_UIOCCMD(n) UIOCCMD(n)
877#define VKI_TIOCSCONS TIOCSCONS
878#define VKI_TIOCCONS TIOCCONS
879#define VKI_TIOCSCTTY TIOCSCTTY
880#define VKI_TIOCEXT TIOCEXT
881#define VKI_TIOCSIG TIOCSIG
882#define VKI_TIOCDRAIN TIOCDRAIN
883#define VKI_TIOCMSDTRWAIT TIOCMSDTRWAIT
884#define VKI_TIOCMGDTRWAIT TIOCMGDTRWAIT
885#define VKI_TIOCTIMESTAMP TIOCTIMESTAMP
886#define VKI_TIOCDCDTIMESTAMP TIOCDCDTIMESTAMP
887#define VKI_TIOCSDRAINWAIT TIOCSDRAINWAIT
888#define VKI_TIOCGDRAINWAIT TIOCGDRAINWAIT
889#define VKI_TIOCDSIMICROCODE TIOCDSIMICROCODE
890#define VKI_TIOCPTYGRANT TIOCPTYGRANT
891#define VKI_TIOCPTYGNAME TIOCPTYGNAME
892#define VKI_TIOCPTYUNLK TIOCPTYUNLK
893
894
895#include <sys/filio.h>
896
897#define VKI_FIOCLEX FIOCLEX
898#define VKI_FIONCLEX FIONCLEX
899#define VKI_FIONREAD FIONREAD
900#define VKI_FIONBIO FIONBIO
901#define VKI_FIOASYNC FIOASYNC
902#define VKI_FIOSETOWN FIOSETOWN
903#define VKI_FIOGETOWN FIOGETOWN
904#define VKI_FIODTYPE FIODTYPE
905
906
907#include <sys/sockio.h>
908
909#define VKI_SIOCSHIWAT SIOCSHIWAT
910#define VKI_SIOCGHIWAT SIOCGHIWAT
911#define VKI_SIOCSLOWAT SIOCSLOWAT
912#define VKI_SIOCGLOWAT SIOCGLOWAT
913#define VKI_SIOCATMARK SIOCATMARK
914#define VKI_SIOCSPGRP SIOCSPGRP
915#define VKI_SIOCGPGRP SIOCGPGRP
916
917#define VKI_SIOCSIFADDR SIOCSIFADDR
918#define VKI_OSIOCGIFADDR OSIOCGIFADDR
919#define VKI_SIOCSIFDSTADDR SIOCSIFDSTADDR
920#define VKI_OSIOCGIFDSTADDR OSIOCGIFDSTADDR
921#define VKI_SIOCSIFFLAGS SIOCSIFFLAGS
922#define VKI_SIOCGIFFLAGS SIOCGIFFLAGS
923#define VKI_OSIOCGIFBRDADDR OSIOCGIFBRDADDR
924#define VKI_SIOCSIFBRDADDR SIOCSIFBRDADDR
925#define VKI_OSIOCGIFCONF OSIOCGIFCONF
926#define VKI_OSIOCGIFNETMASK OSIOCGIFNETMASK
927#define VKI_SIOCSIFNETMASK SIOCSIFNETMASK
928#define VKI_SIOCGIFMETRIC SIOCGIFMETRIC
929#define VKI_SIOCSIFMETRIC SIOCSIFMETRIC
930#define VKI_SIOCDIFADDR SIOCDIFADDR
931#define VKI_SIOCAIFADDR SIOCAIFADDR
932#define VKI_SIOCGETVIFCNT SIOCGETVIFCNT
933#define VKI_SIOCGETSGCNT SIOCGETSGCNT
934#define VKI_SIOCALIFADDR SIOCALIFADDR
935#define VKI_SIOCGLIFADDR SIOCGLIFADDR
936#define VKI_SIOCDLIFADDR SIOCDLIFADDR
937
938#define VKI_SIOCGIFADDR SIOCGIFADDR
939#define VKI_SIOCGIFDSTADDR SIOCGIFDSTADDR
940#define VKI_SIOCGIFBRDADDR SIOCGIFBRDADDR
941#define VKI_SIOCGIFCONF SIOCGIFCONF
942#define VKI_SIOCGIFNETMASK SIOCGIFNETMASK
943#define VKI_SIOCAUTOADDR SIOCAUTOADDR
944#define VKI_SIOCAUTONETMASK SIOCAUTONETMASK
945#define VKI_SIOCARPIPLL SIOCARPIPLL
946
947#define VKI_SIOCADDMULTI SIOCADDMULTI
948#define VKI_SIOCDELMULTI SIOCDELMULTI
949#define VKI_SIOCGIFMTU SIOCGIFMTU
950#define VKI_SIOCSIFMTU SIOCSIFMTU
951#define VKI_SIOCGIFPHYS SIOCGIFPHYS
952#define VKI_SIOCSIFPHYS SIOCSIFPHYS
953#define VKI_SIOCSIFMEDIA SIOCSIFMEDIA
954#define VKI_SIOCGIFMEDIA SIOCGIFMEDIA
955#define VKI_SIOCSIFGENERIC SIOCSIFGENERIC
956#define VKI_SIOCGIFGENERIC SIOCGIFGENERIC
957#define VKI_SIOCRSLVMULTI SIOCRSLVMULTI
958
959#define VKI_SIOCSIFLLADDR SIOCSIFLLADDR
960#define VKI_SIOCGIFSTATUS SIOCGIFSTATUS
961#define VKI_SIOCSIFPHYADDR SIOCSIFPHYADDR
962#define VKI_SIOCGIFPSRCADDR SIOCGIFPSRCADDR
963#define VKI_SIOCGIFPDSTADDR SIOCGIFPDSTADDR
964#define VKI_SIOCDIFPHYADDR SIOCDIFPHYADDR
965#define VKI_SIOCSLIFPHYADDR SIOCSLIFPHYADDR
966#define VKI_SIOCGLIFPHYADDR SIOCGLIFPHYADDR
967
968#define VKI_SIOCGIFDEVMTU SIOCGIFDEVMTU
969#define VKI_SIOCSIFALTMTU SIOCSIFALTMTU
970#define VKI_SIOCGIFALTMTU SIOCGIFALTMTU
971#define VKI_SIOCSIFBOND SIOCSIFBOND
972#define VKI_SIOCGIFBOND SIOCGIFBOND
973#define VKI_SIOCIFCREATE SIOCIFCREATE
974#define VKI_SIOCIFDESTROY SIOCIFDESTROY
975#define VKI_SIOCSIFVLAN SIOCSIFVLAN
976#define VKI_SIOCGIFVLAN SIOCGIFVLAN
977
978#define VKI_SIOCSETVLAN SIOCSIFVLAN
979#define VKI_SIOCGETVLAN SIOCGIFVLAN
980
981#define VKI_SIOCGIFASYNCMAP SIOCGIFASYNCMAP
982#define VKI_SIOCSIFASYNCMAP SIOCSIGASYNCMAP
983
984
985#include <sys/dtrace.h>
986
987#define VKI_DTRACEHIOC_REMOVE DTRACEHIOC_REMOVE
988#define VKI_DTRACEHIOC_ADDDOF DTRACEHIOC_ADDDOF
989
990
991#include <sys/ucontext.h>
992
993/* quite why sys/ucontext.h provides a 'struct __darwin_ucontext'
994 but no 'struct ucontext' beats me. -- JRS */
995#define vki_ucontext __darwin_ucontext
996
997
998#include <sys/termios.h>
999
1000#define vki_termios termios
1001
1002
1003#include <uuid/uuid.h>
1004
1005#define vki_uuid_t uuid_t
1006
1007
1008#include <bsm/audit.h>
1009
1010#define VKI_A_GETPOLICY A_GETPOLICY
1011#define VKI_A_SETPOLICY A_SETPOLICY
1012#define VKI_A_GETKMASK A_GETKMASK
1013#define VKI_A_SETKMASK A_SETKMASK
1014#define VKI_A_GETQCTRL A_GETQCTRL
1015#define VKI_A_SETQCTRL A_SETQCTRL
1016#define VKI_A_GETCWD A_GETCWD
1017#define VKI_A_GETCAR A_GETCAR
1018#define VKI_A_GETSTAT A_GETSTAT
1019#define VKI_A_SETSTAT A_SETSTAT
1020#define VKI_A_SETUMASK A_SETUMASK
1021#define VKI_A_SETSMASK A_SETSMASK
1022#define VKI_A_GETCOND A_GETCOND
1023#define VKI_A_SETCOND A_SETCOND
1024#define VKI_A_GETCLASS A_GETCLASS
1025#define VKI_A_SETCLASS A_SETCLASS
1026#define VKI_A_GETPINFO A_GETPINFO
1027#define VKI_A_SETPMASK A_SETPMASK
1028#define VKI_A_SETFSIZE A_SETFSIZE
1029#define VKI_A_GETFSIZE A_GETFSIZE
1030#define VKI_A_GETPINFO_ADDR A_GETPINFO_ADDR
1031#define VKI_A_GETKAUDIT A_GETKAUDIT
1032#define VKI_A_SETKAUDIT A_SETKAUDIT
njnea2d6fd2010-07-01 00:20:20 +00001033#if DARWIN_VERS >= DARWIN_10_6
1034#define VKI_A_SENDTRIGGER A_SENDTRIGGER
1035#define VKI_A_GETSINFO_ADDR A_GETSINFO_ADDR
1036#endif
njnf76d27a2009-05-28 01:53:07 +00001037
1038
njn0111ec42009-06-24 06:25:36 +00001039#include <sys/aio.h>
1040
1041#define vki_aiocb aiocb
1042
njn3a1b9a22009-08-12 02:30:20 +00001043
sewardj5d616df2013-07-02 08:07:15 +00001044#include <netinet/tcp.h>
1045
1046#define VKI_TCP_NODELAY TCP_NODELAY
1047
1048
1049#include <netinet/in.h>
1050
1051#define VKI_IPPROTO_TCP IPPROTO_TCP
1052
1053
njn3a1b9a22009-08-12 02:30:20 +00001054// XXX: for some reason when I #include <sys/kernel_types.h> I get a syntax
1055// error. Hmm. So just define things ourselves.
1056//#include <sys/kernel_types.h>
1057
1058//#define vki_errno_t
1059typedef int vki_errno_t;
1060
njnf76d27a2009-05-28 01:53:07 +00001061#endif