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