1 2 /*--------------------------------------------------------------------*/ 3 /*--- Private syscalls header for Darwin. priv_syswrap-darwin.h ---*/ 4 /*--------------------------------------------------------------------*/ 5 6 /* 7 This file is part of Valgrind, a dynamic binary instrumentation 8 framework. 9 10 Copyright (C) 2005-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 #ifndef __PRIV_SYSWRAP_DARWIN_H 32 #define __PRIV_SYSWRAP_DARWIN_H 33 34 #include "pub_core_basics.h" // ThreadId 35 #include "priv_types_n_macros.h" // DECL_TEMPLATE 36 37 // syswrap-darwin.c 38 Addr allocstack ( ThreadId tid ); 39 void find_stack_segment ( ThreadId tid, Addr sp ); 40 void start_thread_NORETURN ( Word arg ); 41 void assign_port_name(mach_port_t port, const char *name); 42 void record_named_port(ThreadId tid, mach_port_t port, mach_port_right_t right, const char *name); 43 44 extern const SyscallTableEntry ML_(mach_trap_table)[]; 45 extern const SyscallTableEntry ML_(syscall_table)[]; 46 extern const SyscallTableEntry ML_(mdep_trap_table)[]; 47 48 extern const UInt ML_(syscall_table_size); 49 extern const UInt ML_(mach_trap_table_size); 50 extern const UInt ML_(mdep_trap_table_size); 51 52 void VG_(show_open_ports)(void); 53 54 Bool ML_(sync_mappings)(const HChar *when, const HChar *where, UWord num); 55 56 // Unix syscalls. 57 // GEN = it uses the generic wrapper 58 // NYI = wrapper not yet implemented in Valgrind 59 // NOC = the non-"_nocancel" wrapper is used 60 // old = the syscall no longer exists in Darwin 61 DECL_TEMPLATE(darwin, exit); // 1 62 // GEN fork 2 63 // GEN read 3 64 // GEN write 4 65 // GEN open 5 66 // GEN close 6 67 // GEN wait4 7 68 // old creat 8 69 // GEN link 9 70 // GEN unlink 10 71 // old execv 11 72 // GEN chdir 12 73 // GEN fchdir 13 74 // GEN mknod 14 75 // GEN chmod 15 76 // GEN chown 16 77 // old break 17 78 DECL_TEMPLATE(darwin, getfsstat); // 18 79 // old lseek 19 80 // GEN getpid 20 81 // old mount 21 82 // old umount 22 83 // GEN setuid 23 84 // GEN getuid 24 85 // GEN geteuid 25 86 DECL_TEMPLATE(darwin, ptrace); // 26 87 DECL_TEMPLATE(darwin, recvmsg); // 27 88 DECL_TEMPLATE(darwin, sendmsg); // 28 89 DECL_TEMPLATE(darwin, recvfrom); // 29 90 DECL_TEMPLATE(darwin, accept); // 30 91 DECL_TEMPLATE(darwin, getpeername); // 31 92 DECL_TEMPLATE(darwin, getsockname); // 32 93 // GEN access 33 94 DECL_TEMPLATE(darwin, chflags); // 34 95 DECL_TEMPLATE(darwin, fchflags); // 35 96 // GEN sync 36 97 // GEN kill 37 98 // old stat 38 99 // GEN getppid 39 100 // old lstat 40 101 // GEN dup 41 102 DECL_TEMPLATE(darwin, pipe); // 42 103 // GEN getegid 43 104 // NYI profil 105 // old ktrace 106 DECL_TEMPLATE(darwin, sigaction); // 46 107 // GEN getgid 47 108 DECL_TEMPLATE(darwin, sigprocmask); // 48 109 DECL_TEMPLATE(darwin, getlogin); // 49 110 // NYI setlogin 50 111 // NYI acct 51 112 DECL_TEMPLATE(darwin, sigpending); // 52 113 // GEN sigaltstack 53 114 DECL_TEMPLATE(darwin, ioctl); // 54 115 // NYI reboot 55 116 // NYI revoke 56 117 // NYI symlink 57 118 // GEN readlink 58 119 // GEN execve 59 120 // GEN umask 60 121 // GEN chroot 61 122 // old fstat 123 // 63 used internally, reserved 124 // old getpagesize 64 125 // GEN msync 65 126 // GEN vfork 66 127 // old vread 128 // old vwrite 129 // old sbrk 130 // old sstk 131 // old mmap 132 // old vadvise 133 // GEN munmap 73 134 // GEN mprotect 74 135 // GEN madvise 75 136 // old vhangup 137 // old vlimit 138 // NYI mincore 78 139 // GEN getgroups 79 140 // NYI setgroups 80 141 // GEN getpgrp 81 142 // NYI setpgid 82 143 // GEN setitimer 83 144 // old wait 145 // NYI swapon 85 146 // GEN getitimer 86 147 // old gethostname 148 // old sethostname 149 DECL_TEMPLATE(darwin, getdtablesize); // 89 150 // GEN dup2 90 151 // old getdopt 152 DECL_TEMPLATE(darwin, fcntl); // 92 153 // GEN select 93 154 // old setdopt 155 // GEN fsync 95 156 // GEN setpriority 96 157 DECL_TEMPLATE(darwin, socket); // 97 158 DECL_TEMPLATE(darwin, connect); // 98 159 // old accept 160 // GEN getpriority 100 161 // old send 162 // old recv 163 // old sigreturn 164 DECL_TEMPLATE(darwin, bind); // 104 165 DECL_TEMPLATE(darwin, setsockopt); // 105 166 DECL_TEMPLATE(darwin, listen); // 106 167 // old vtimes 168 // old sigvec 169 // old sigblock 170 // old sigsetmask 171 DECL_TEMPLATE(darwin, sigsuspend); // 111 172 // old sigstack 173 // old recvmsg 174 // old sendmsg 175 // old vtrace 176 // GEN gettimeofday 116 177 // GEN getrusage 117 178 DECL_TEMPLATE(darwin, getsockopt); // 118 179 // old resuba 180 // GEN readv 120 181 // GEN writev 121 182 // NYI settimeofday 122 183 // GEN fchown 123 184 // GEN fchmod 124 185 // old recvfrom 186 // NYI setreuid 126 187 // NYI setregid 127 188 // GEN rename 128 189 // old truncate 190 // old ftruncate 191 // GEN flock 131 192 DECL_TEMPLATE(darwin, mkfifo); // 132 193 DECL_TEMPLATE(darwin, sendto); // 133 194 DECL_TEMPLATE(darwin, shutdown); // 134 195 DECL_TEMPLATE(darwin, socketpair); // 135 196 // GEN mkdir 136 197 // GEN rmdir 137 198 // GEN utimes 138 199 DECL_TEMPLATE(darwin, futimes); // 139 200 // NYI adjtime 140 201 // old getpeername 202 DECL_TEMPLATE(darwin, gethostuuid); // 142 203 // old sethostid 204 // old getrlimit 205 // old setrlimit 206 // old killpg 207 // GEN setsid 147 208 // old setquota 209 // old qquota 210 // old getsockname 211 // NYI getpgid 151 212 // NYI setprivexec 152 213 // GEN pread 153 214 // GEN pwrite 154 215 // NYI nfssvc 155 216 // old getdirentries 217 // GEN statfs 157 218 // GEN fstatfs 158 219 // NYI unmount 159 220 // old async_daemon 221 // NYI getfh 161 222 // old getdomainname 223 // old setdomainname 224 // 164 225 // NYI quotactl 165 226 // old exportfs 227 DECL_TEMPLATE(darwin, mount); // 167 228 // old ustat 229 DECL_TEMPLATE(darwin, csops); // 169 230 // old table 231 // old wait3 232 // old rpause 233 // NYI waitid 173 234 // old getdents 235 // old gc_control 236 // NYI add_profil 176 237 #if DARWIN_VERS >= DARWIN_10_12 238 // NYI kdebug_typefilter // 177 239 #endif /* DARWIN_VERS >= DARWIN_10_12 */ 240 #if DARWIN_VERS >= DARWIN_10_11 241 // NYI kdebug_trace_string // 178 242 #endif /* DARWIN_VERS >= DARWIN_10_11 */ 243 // 179 244 DECL_TEMPLATE(darwin, kdebug_trace); // 180 245 // GEN setgid 181 246 DECL_TEMPLATE(darwin, setegid); // 182 247 DECL_TEMPLATE(darwin, seteuid); // 183 248 DECL_TEMPLATE(darwin, sigreturn); // 184 249 DECL_TEMPLATE(darwin, FAKE_SIGRETURN); 250 // NYI chud 185 251 // 186 252 // 187 253 // GEN stat 188 254 // GEN fstat 189 255 // GEN lstat 190 256 DECL_TEMPLATE(darwin, pathconf); // 191 257 DECL_TEMPLATE(darwin, fpathconf); // 192 258 // 193 259 // GEN getrlimit 194 260 // GEN setrlimit 195 261 DECL_TEMPLATE(darwin, getdirentries); // 196 262 DECL_TEMPLATE(darwin, mmap); // 197 263 // 198 __syscall 264 DECL_TEMPLATE(darwin, lseek); // 199 (was UX64) 265 // GEN truncate 200 266 // GEN ftruncate 201 267 DECL_TEMPLATE(darwin, __sysctl); // 202 268 // GEN mlock 203 269 // GEN munlock 204 270 // NYI undelete 205 271 // NYI ATsocket 206 272 // NYI ATgetmsg 207 273 // NYI ATputmsg 208 274 // NYI ATPsndreq 209 275 // NYI ATPsndrsp 210 276 // NYI ATPgetreq 211 277 // NYI ATPgetrsp 212 278 // 213 Reserved for AppleTalk 279 // NYI kqueue_from_portset_np 214 280 // NYI kqueue_portset_np 215 281 // NYI mkcomplex 216 282 // NYI statv 217 283 // NYI lstatv 218 284 // NYI fstatv 219 285 DECL_TEMPLATE(darwin, getattrlist); // 220 286 DECL_TEMPLATE(darwin, setattrlist); // 221 287 DECL_TEMPLATE(darwin, getdirentriesattr); // 222 288 DECL_TEMPLATE(darwin, exchangedata); // 223 289 // 224 checkuseraccess 290 // NYI searchfs 225 291 // GEN delete 226 292 // NYI copyfile 226 293 // 228 294 // 229 295 // GEN poll 230 296 DECL_TEMPLATE(darwin, watchevent); // 231 297 DECL_TEMPLATE(darwin, waitevent); // 232 298 DECL_TEMPLATE(darwin, modwatch); // 233 299 DECL_TEMPLATE(darwin, getxattr); // 234 300 DECL_TEMPLATE(darwin, fgetxattr); // 235 301 DECL_TEMPLATE(darwin, setxattr); // 236 302 DECL_TEMPLATE(darwin, fsetxattr); // 237 303 DECL_TEMPLATE(darwin, removexattr); // 238 304 DECL_TEMPLATE(darwin, fremovexattr); // 239 305 DECL_TEMPLATE(darwin, listxattr); // 240 306 DECL_TEMPLATE(darwin, flistxattr); // 241 307 DECL_TEMPLATE(darwin, fsctl); // 242 308 DECL_TEMPLATE(darwin, initgroups); // 243 309 DECL_TEMPLATE(darwin, posix_spawn); // 244 310 // 245 311 // 246 312 // NYI nfsclnt 247 313 // NYI fhopen 248 314 // 249 315 // NYI minherit 250 316 // NYI semsys 251 317 // NYI msgsys 252 318 // NYI shmsys 253 319 DECL_TEMPLATE(darwin, semctl); // 254 320 DECL_TEMPLATE(darwin, semget); // 255 321 DECL_TEMPLATE(darwin, semop); // 256 322 // 257 323 // NYI msgctl 258 324 // NYI msgget 259 325 // NYI msgsnd 260 326 // NYI msgrcv 261 327 DECL_TEMPLATE(darwin, shmat); // 262 328 DECL_TEMPLATE(darwin, shmctl); // 263 329 DECL_TEMPLATE(darwin, shmdt); // 264 330 DECL_TEMPLATE(darwin, shmget); // 265 331 DECL_TEMPLATE(darwin, shm_open); // 266 332 DECL_TEMPLATE(darwin, shm_unlink); // 267 333 DECL_TEMPLATE(darwin, sem_open); // 268 334 DECL_TEMPLATE(darwin, sem_close); // 269 335 DECL_TEMPLATE(darwin, sem_unlink); // 270 336 DECL_TEMPLATE(darwin, sem_wait); // 271 337 DECL_TEMPLATE(darwin, sem_trywait); // 272 338 DECL_TEMPLATE(darwin, sem_post); // 273 339 340 #if DARWIN_VERS < DARWIN_10_10 341 // NYI sem_getvalue 274 342 #elif DARWIN_VERS >= DARWIN_10_10 343 DECL_TEMPLATE(darwin, sysctlbyname); // 274 344 #endif 345 346 DECL_TEMPLATE(darwin, sem_init); // 275 347 DECL_TEMPLATE(darwin, sem_destroy); // 276 348 DECL_TEMPLATE(darwin, open_extended) // 277 349 // NYI umask_extended 278 350 DECL_TEMPLATE(darwin, stat_extended); // 279 351 DECL_TEMPLATE(darwin, lstat_extended); // 280 352 DECL_TEMPLATE(darwin, fstat_extended); // 281 353 DECL_TEMPLATE(darwin, chmod_extended); // 282 354 DECL_TEMPLATE(darwin, fchmod_extended); // 283 355 DECL_TEMPLATE(darwin, access_extended); // 284 356 DECL_TEMPLATE(darwin, settid); // 285 357 #if DARWIN_VERS >= DARWIN_10_6 358 DECL_TEMPLATE(darwin, gettid); // 286 359 #endif 360 // NYI setsgroups 287 361 // NYI getsgroups 288 362 // NYI setwgroups 289 363 // NYI getwgroups 290 364 // NYI mkfifo_extended 291 365 // NYI mkdir_extended 292 366 // NYI identitysvc 293 367 // NYI shared_region_check_np 294 368 // NYI shared_region_map_np 295 369 #if DARWIN_VERS >= DARWIN_10_6 370 // NYI vm_pressure_monitor 296 371 // NYI psynch_rw_longrdlock 297 372 // NYI psynch_rw_yieldwrlock 298 373 // NYI psynch_rw_downgrade 299 374 // NYI psynch_rw_upgrade 300 375 DECL_TEMPLATE(darwin, psynch_mutexwait); // 301 376 DECL_TEMPLATE(darwin, psynch_mutexdrop); // 302 377 DECL_TEMPLATE(darwin, psynch_cvbroad); // 303 378 DECL_TEMPLATE(darwin, psynch_cvsignal); // 304 379 DECL_TEMPLATE(darwin, psynch_cvwait); // 305 380 DECL_TEMPLATE(darwin, psynch_rw_rdlock); // 306 381 DECL_TEMPLATE(darwin, psynch_rw_wrlock); // 307 382 DECL_TEMPLATE(darwin, psynch_rw_unlock); // 308 383 // NYI psynch_rw_unlock2 309 384 #else 385 // old load_shared_file 386 // old reset_shared_file 387 // old new_system_shared_regions 388 // old shared_region_map_file_np 389 // old shared_region_make_private_np 390 // NYI __pthread_mutex_destroy 301 391 // NYI __pthread_mutex_init 302 392 // NYI __pthread_mutex_lock 303 393 // NYI __pthread_mutex_trylock 304 394 // NYI __pthread_mutex_unlock 305 395 // NYI __pthread_cond_init 306 396 // NYI __pthread_cond_destroy 307 397 // NYI __pthread_cond_broadcast 308 398 // NYI __pthread_cond_signal 309 399 #endif 400 // NYI getsid 310 401 // NYI settid_with_pid 311 402 #if DARWIN_VERS >= DARWIN_10_7 403 DECL_TEMPLATE(darwin, psynch_cvclrprepost); // 312 404 #else 405 // NYI __pthread_cond_timedwait 312 406 #endif 407 // NYI aio_fsync 313 408 DECL_TEMPLATE(darwin, aio_return); // 314 409 DECL_TEMPLATE(darwin, aio_suspend); // 315 410 // NYI aio_cancel 316 411 DECL_TEMPLATE(darwin, aio_error); // 317 412 DECL_TEMPLATE(darwin, aio_read); // 318 413 DECL_TEMPLATE(darwin, aio_write); // 319 414 // NYI lio_listio 320 415 // NYI __pthread_cond_wait 321 416 // NYI iopolicysys 322 417 // NYI process_policy 323 418 // NYI mlockall 324 419 // NYI munlockall 325 420 // 326 421 DECL_TEMPLATE(darwin, issetugid); // 327 422 DECL_TEMPLATE(darwin, __pthread_kill); // 328 423 DECL_TEMPLATE(darwin, __pthread_sigmask); // 329 424 // NYI __sigwait 330 425 DECL_TEMPLATE(darwin, __disable_threadsignal); // 331 426 DECL_TEMPLATE(darwin, __pthread_markcancel); // 332 427 DECL_TEMPLATE(darwin, __pthread_canceled); // 333 428 DECL_TEMPLATE(darwin, __semwait_signal); // 334 429 // old utrace 430 DECL_TEMPLATE(darwin, proc_info); // 336 431 DECL_TEMPLATE(darwin, sendfile); // 337 432 DECL_TEMPLATE(darwin, stat64); // 338 433 DECL_TEMPLATE(darwin, fstat64); // 339 434 DECL_TEMPLATE(darwin, lstat64); // 340 435 DECL_TEMPLATE(darwin, stat64_extended); // 341 436 DECL_TEMPLATE(darwin, lstat64_extended); // 342 437 DECL_TEMPLATE(darwin, fstat64_extended); // 343 438 DECL_TEMPLATE(darwin, getdirentries64); // 344 439 DECL_TEMPLATE(darwin, statfs64); // 345 440 DECL_TEMPLATE(darwin, fstatfs64); // 346 441 DECL_TEMPLATE(darwin, getfsstat64); // 347 442 DECL_TEMPLATE(darwin, __pthread_chdir); // 348 443 DECL_TEMPLATE(darwin, __pthread_fchdir); // 349 444 // NYI audit 350 445 DECL_TEMPLATE(darwin, auditon); // 351 446 // 352 447 // NYI getauid 353 448 // NYI setauid 354 449 // NYI getaudit 355 450 // NYI setaudit 356 451 DECL_TEMPLATE(darwin, getaudit_addr) // 357 452 // NYI setaudit_addr 358 453 // NYI auditctl 359 454 DECL_TEMPLATE(darwin, bsdthread_create); // 360 455 DECL_TEMPLATE(darwin, bsdthread_terminate); // 361 456 DECL_TEMPLATE(darwin, kqueue); // 362 457 DECL_TEMPLATE(darwin, kevent); // 363 458 // NYI lchown 364 459 // NYI stack_snapshot 365 460 DECL_TEMPLATE(darwin, bsdthread_register); // 366 461 DECL_TEMPLATE(darwin, workq_open); // 367 462 DECL_TEMPLATE(darwin, workq_ops); // 368 463 DECL_TEMPLATE(darwin, kevent64); // 369 464 // 370 465 // 371 466 #if DARWIN_VERS >= DARWIN_10_6 467 DECL_TEMPLATE(darwin, __thread_selfid); // 372 468 #endif 469 // 373 470 #if DARWIN_VERS >= DARWIN_10_11 471 // NYI kevent_qos // 374 472 #endif /* DARWIN_VERS >= DARWIN_10_11 */ 473 // 375 474 // 376 475 // 377 476 // 378 477 // 379 478 // NYI __mac_execve 380 479 DECL_TEMPLATE(darwin, __mac_syscall); // 381 480 // NYI __mac_get_file 382 481 // NYI __mac_set_file 383 482 // NYI __mac_get_link 384 483 // NYI __mac_set_link 385 484 // NYI __mac_get_proc 386 485 // NYI __mac_set_proc 387 486 // NYI __mac_get_fd 388 487 // NYI __mac_set_fd 389 488 // NYI __mac_get_pid 390 489 // NYI __mac_get_lcid 391 490 // NYI __mac_get_lctx 392 491 // NYI __mac_set_lctx 393 492 // NYI setlcid 394 493 // NYI getlcid 395 494 // GEN read_nocancel 396 495 // GEN write_nocancel 397 496 // GEN open_nocancel 398 497 // GEN close_nocancel 399 498 // GEN wait4_nocancel 400 499 // NOC recvmsg_nocancel 401 500 // NOC sendmsg_nocancel 402 501 // NOC recvfrom_nocancel 403 502 // NOC accept_nocancel 404 503 // GEN msync_nocancel 405 504 // NOC fcntl_nocancel 406 505 // GEN select_nocancel 407 506 // GEN fsync_nocancel 408 507 // NOC connect_nocancel 409 508 // NYI sigsuspend_nocancel 410 509 // GEN readv_nocancel 411 510 // GEN writev_nocancel 412 511 // NOC sendto_nocancel 413 512 // GEN pread_nocancel 414 513 // GEN pwrite_nocancel 415 514 // NYI waitid_nocancel 416 515 // GEN poll_nocancel 417 516 // NYI msgsnd_nocancel 418 517 // NYI msgrcv_nocancel 419 518 // NOC sem_wait_nocancel 420 519 // NYI aio_suspend_nocancel 421 520 // NYI __sigwait_nocancel 422 521 // NOC __semwait_signal_nocancel 423 522 // NYI __mac_mount 424 523 // NYI __mac_get_mount 425 524 // NYI __mac_getfsstat 426 525 DECL_TEMPLATE(darwin, fsgetpath); // 427 526 DECL_TEMPLATE(darwin, audit_session_self); // 428 527 // NYI audit_session_join 429 528 DECL_TEMPLATE(darwin, fileport_makeport); // 430 529 530 // NYI fileport_makefd 431 531 // NYI audit_session_port 432 532 // NYI pid_suspend 433 533 // NYI pid_resume 434 534 #if DARWIN_VERS >= DARWIN_10_10 535 // NYI pid_hibernate 435 536 // NYI pid_shutdown_sockets 436 537 #endif /* DARWIN_VERS >= DARWIN_10_10 */ 538 // old old shared_region_slide_np 437 539 // NYI shared_region_map_and_slide_np // 438 540 // NYI kas_info // 439 541 // NYI memorystatus_control // 440 542 DECL_TEMPLATE(darwin, guarded_open_np); // 441 543 DECL_TEMPLATE(darwin, guarded_close_np); // 442 544 DECL_TEMPLATE(darwin, guarded_kqueue_np); // 443 545 DECL_TEMPLATE(darwin, change_fdguard_np); // 444 546 // old __proc_suppress 445 547 // NYI proc_rlimit_control // 446 548 DECL_TEMPLATE(darwin, connectx); // 447 549 DECL_TEMPLATE(darwin, disconnectx); // 448 550 // NYI peeloff // 449 551 // NYI socket_delegate // 450 552 // NYI telemetry // 451 553 // NYI proc_uuid_policy // 452 554 // NYI memorystatus_get_level // 453 555 // NYI system_override // 454 556 // NYI vfs_purge // 455 557 #if DARWIN_VERS >= DARWIN_10_10 558 // NYI sfi_ctl // 456 559 // NYI sfi_pidctl // 457 560 // NYI coalition // 458 561 // NYI coalition_info // 459 562 DECL_TEMPLATE(darwin, necp_match_policy); // 460 563 DECL_TEMPLATE(darwin, getattrlistbulk); // 461 564 #endif /* DARWIN_VERS >= DARWIN_10_10 */ 565 #if DARWIN_VERS >= DARWIN_10_12 566 // NYI clonefileat // 462 567 #endif /* DARWIN_VERS >= DARWIN_10_12 */ 568 #if DARWIN_VERS >= DARWIN_10_10 569 // NYI openat // 463 570 // NYI openat_nocancel // 464 571 // NYI renameat // 465 572 DECL_TEMPLATE(darwin, faccessat); // 466 573 // NYI fchmodat // 467 574 // NYI fchownat // 468 575 // NYI fstatat // 469 576 DECL_TEMPLATE(darwin, fstatat64); // 470 577 // NYI linkat // 471 578 // NYI unlinkat // 472 579 DECL_TEMPLATE(darwin, readlinkat); // 473 580 // NYI symlinkat // 474 581 // NYI mkdirat // 475 582 // NYI getattrlistat // 476 583 // NYI proc_trace_log // 477 584 DECL_TEMPLATE(darwin, bsdthread_ctl); // 478 585 // NYI openbyid_np // 479 586 // NYI recvmsg_x // 480 587 // NYI sendmsg_x // 481 588 // NYI thread_selfusage // 482 589 DECL_TEMPLATE(darwin, csrctl); // 483 590 DECL_TEMPLATE(darwin, guarded_open_dprotected_np); // 484 591 DECL_TEMPLATE(darwin, guarded_write_np); // 485 592 DECL_TEMPLATE(darwin, guarded_pwrite_np); // 486 593 DECL_TEMPLATE(darwin, guarded_writev_np); // 487 594 // NYI renameatx_np // 488 595 // NYI mremap_encrypted // 489 596 #endif /* DARWIN_VERS >= DARWIN_10_10 */ 597 #if DARWIN_VERS >= DARWIN_10_11 598 // NYI netagent_trigger // 490 599 // NYI stack_snapshot_with_config // 491 600 // NYI microstackshot // 492 601 // NYI grab_pgo_data // 493 602 // NYI persona // 494 603 // 495 604 // 496 605 // 497 606 // 498 607 // NYI work_interval_ctl // 499 608 #endif /* DARWIN_VERS >= DARWIN_10_11 */ 609 #if DARWIN_VERS >= DARWIN_10_12 610 DECL_TEMPLATE(darwin, getentropy); // 500 611 // NYI necp_open // 501 612 // NYI necp_client_action // 502 613 // 503 614 // 504 615 // 505 616 // 506 617 // 507 618 // 508 619 // 509 620 // 510 621 // 511 622 // 512 623 // 513 624 // 514 625 // NYI ulock_wait // 515 626 DECL_TEMPLATE(darwin, ulock_wake); // 516 627 // NYI fclonefileat // 517 628 // NYI fs_snapshot // 518 629 // 519 630 // NYI terminate_with_payload // 520 631 // NYI abort_with_payload // 521 632 #endif /* DARWIN_VERS >= DARWIN_10_12 */ 633 634 // Mach message helpers 635 DECL_TEMPLATE(darwin, mach_port_set_context); 636 DECL_TEMPLATE(darwin, host_info); 637 DECL_TEMPLATE(darwin, host_page_size); 638 DECL_TEMPLATE(darwin, host_get_io_master); 639 DECL_TEMPLATE(darwin, host_get_clock_service); 640 DECL_TEMPLATE(darwin, host_request_notification); 641 DECL_TEMPLATE(darwin, host_create_mach_voucher); 642 DECL_TEMPLATE(darwin, host_get_special_port); 643 DECL_TEMPLATE(darwin, mach_port_type); 644 DECL_TEMPLATE(darwin, mach_port_extract_member); 645 DECL_TEMPLATE(darwin, mach_port_allocate); 646 DECL_TEMPLATE(darwin, mach_port_deallocate); 647 DECL_TEMPLATE(darwin, mach_port_get_refs); 648 DECL_TEMPLATE(darwin, mach_port_mod_refs); 649 DECL_TEMPLATE(darwin, mach_port_get_set_status); 650 DECL_TEMPLATE(darwin, mach_port_move_member); 651 DECL_TEMPLATE(darwin, mach_port_destroy); 652 DECL_TEMPLATE(darwin, mach_port_request_notification); 653 DECL_TEMPLATE(darwin, mach_port_insert_right); 654 DECL_TEMPLATE(darwin, mach_port_extract_right); 655 DECL_TEMPLATE(darwin, mach_port_get_attributes); 656 DECL_TEMPLATE(darwin, mach_port_set_attributes); 657 DECL_TEMPLATE(darwin, mach_port_insert_member); 658 DECL_TEMPLATE(darwin, task_get_special_port); 659 DECL_TEMPLATE(darwin, task_set_special_port); 660 DECL_TEMPLATE(darwin, task_get_exception_ports); 661 DECL_TEMPLATE(darwin, semaphore_create); 662 DECL_TEMPLATE(darwin, semaphore_destroy); 663 DECL_TEMPLATE(darwin, task_policy_set); 664 DECL_TEMPLATE(darwin, mach_ports_register); 665 DECL_TEMPLATE(darwin, mach_ports_lookup); 666 DECL_TEMPLATE(darwin, task_info); 667 DECL_TEMPLATE(darwin, task_set_info); 668 DECL_TEMPLATE(darwin, task_threads); 669 DECL_TEMPLATE(darwin, task_suspend); 670 DECL_TEMPLATE(darwin, task_resume); 671 DECL_TEMPLATE(darwin, vm_allocate); 672 DECL_TEMPLATE(darwin, vm_deallocate); 673 DECL_TEMPLATE(darwin, vm_protect); 674 DECL_TEMPLATE(darwin, vm_inherit); 675 DECL_TEMPLATE(darwin, vm_read); 676 DECL_TEMPLATE(darwin, mach_vm_read); 677 DECL_TEMPLATE(darwin, vm_copy); 678 DECL_TEMPLATE(darwin, vm_read_overwrite); 679 DECL_TEMPLATE(darwin, vm_map); 680 DECL_TEMPLATE(darwin, vm_remap); 681 DECL_TEMPLATE(darwin, mach_make_memory_entry_64); 682 DECL_TEMPLATE(darwin, vm_purgable_control); 683 DECL_TEMPLATE(darwin, mach_vm_purgable_control); 684 DECL_TEMPLATE(darwin, mach_vm_allocate); 685 DECL_TEMPLATE(darwin, mach_vm_deallocate); 686 DECL_TEMPLATE(darwin, mach_vm_protect); 687 DECL_TEMPLATE(darwin, mach_vm_copy); 688 DECL_TEMPLATE(darwin, mach_vm_read_overwrite); 689 DECL_TEMPLATE(darwin, mach_vm_inherit); 690 DECL_TEMPLATE(darwin, mach_vm_map); 691 DECL_TEMPLATE(darwin, mach_vm_remap); 692 DECL_TEMPLATE(darwin, mach_vm_region_recurse); 693 DECL_TEMPLATE(darwin, thread_terminate); 694 DECL_TEMPLATE(darwin, thread_create); 695 DECL_TEMPLATE(darwin, thread_create_running); 696 DECL_TEMPLATE(darwin, thread_suspend); 697 DECL_TEMPLATE(darwin, thread_resume); 698 DECL_TEMPLATE(darwin, thread_get_state); 699 DECL_TEMPLATE(darwin, thread_policy); 700 DECL_TEMPLATE(darwin, thread_policy_set); 701 DECL_TEMPLATE(darwin, thread_info); 702 DECL_TEMPLATE(darwin, bootstrap_register); 703 DECL_TEMPLATE(darwin, bootstrap_look_up); 704 DECL_TEMPLATE(darwin, mach_msg_receive); 705 DECL_TEMPLATE(darwin, mach_msg_bootstrap); 706 DECL_TEMPLATE(darwin, mach_msg_host); 707 DECL_TEMPLATE(darwin, mach_msg_task); 708 DECL_TEMPLATE(darwin, mach_msg_thread); 709 710 // Mach traps 711 #if DARWIN_VERS >= DARWIN_10_8 712 DECL_TEMPLATE(darwin, kernelrpc_mach_vm_allocate_trap); 713 DECL_TEMPLATE(darwin, kernelrpc_mach_vm_deallocate_trap); 714 DECL_TEMPLATE(darwin, kernelrpc_mach_vm_protect_trap); 715 DECL_TEMPLATE(darwin, kernelrpc_mach_vm_map_trap); 716 DECL_TEMPLATE(darwin, kernelrpc_mach_port_allocate_trap); 717 DECL_TEMPLATE(darwin, kernelrpc_mach_port_destroy_trap); 718 DECL_TEMPLATE(darwin, kernelrpc_mach_port_deallocate_trap); 719 DECL_TEMPLATE(darwin, kernelrpc_mach_port_mod_refs_trap); 720 DECL_TEMPLATE(darwin, kernelrpc_mach_port_move_member_trap); 721 DECL_TEMPLATE(darwin, kernelrpc_mach_port_insert_right_trap); 722 DECL_TEMPLATE(darwin, kernelrpc_mach_port_insert_member_trap); 723 DECL_TEMPLATE(darwin, kernelrpc_mach_port_extract_member_trap); 724 DECL_TEMPLATE(darwin, kernelrpc_mach_port_construct_trap); 725 DECL_TEMPLATE(darwin, kernelrpc_mach_port_destruct_trap); 726 DECL_TEMPLATE(darwin, kernelrpc_mach_port_guard_trap); 727 DECL_TEMPLATE(darwin, kernelrpc_mach_port_unguard_trap); 728 DECL_TEMPLATE(darwin, iopolicysys); 729 DECL_TEMPLATE(darwin, process_policy); 730 #endif /* DARWIN_VERS >= DARWIN_10_8 */ 731 DECL_TEMPLATE(darwin, mach_msg_unhandled); 732 DECL_TEMPLATE(darwin, mach_msg_unhandled_check); 733 DECL_TEMPLATE(darwin, mach_msg); 734 DECL_TEMPLATE(darwin, mach_reply_port); 735 DECL_TEMPLATE(darwin, mach_thread_self); 736 DECL_TEMPLATE(darwin, mach_host_self); 737 DECL_TEMPLATE(darwin, mach_task_self); 738 DECL_TEMPLATE(darwin, syscall_thread_switch); 739 DECL_TEMPLATE(darwin, semaphore_signal); 740 DECL_TEMPLATE(darwin, semaphore_signal_all); 741 DECL_TEMPLATE(darwin, semaphore_signal_thread); 742 DECL_TEMPLATE(darwin, semaphore_wait); 743 DECL_TEMPLATE(darwin, semaphore_wait_signal); 744 DECL_TEMPLATE(darwin, semaphore_timedwait); 745 DECL_TEMPLATE(darwin, semaphore_timedwait_signal); 746 DECL_TEMPLATE(darwin, task_for_pid); 747 DECL_TEMPLATE(darwin, pid_for_task); 748 749 #if DARWIN_VERS >= DARWIN_10_12 750 DECL_TEMPLATE(darwin, host_create_mach_voucher_trap); 751 DECL_TEMPLATE(darwin, task_register_dyld_image_infos); 752 DECL_TEMPLATE(darwin, task_register_dyld_shared_cache_image_info); 753 #endif /* DARWIN_VERS >= DARWIN_10_12 */ 754 755 DECL_TEMPLATE(darwin, mach_timebase_info); 756 DECL_TEMPLATE(darwin, mach_wait_until); 757 DECL_TEMPLATE(darwin, mk_timer_create); 758 DECL_TEMPLATE(darwin, mk_timer_destroy); 759 DECL_TEMPLATE(darwin, mk_timer_arm); 760 DECL_TEMPLATE(darwin, mk_timer_cancel); 761 DECL_TEMPLATE(darwin, iokit_user_client_trap); 762 DECL_TEMPLATE(darwin, swtch); 763 DECL_TEMPLATE(darwin, swtch_pri); 764 765 // Machine-dependent traps 766 DECL_TEMPLATE(darwin, thread_fast_set_cthread_self); 767 768 // syswrap-<arch>-darwin.c 769 #include <mach/mach.h> 770 extern 771 void thread_state_from_vex(thread_state_t mach_generic, 772 thread_state_flavor_t flavor, 773 mach_msg_type_number_t count, 774 VexGuestArchState *vex_generic); 775 extern 776 void thread_state_to_vex(const thread_state_t mach_generic, 777 thread_state_flavor_t flavor, 778 mach_msg_type_number_t count, 779 VexGuestArchState *vex_generic); 780 extern 781 ThreadState *build_thread(const thread_state_t state, 782 thread_state_flavor_t flavor, 783 mach_msg_type_number_t count); 784 extern 785 void hijack_thread_state(thread_state_t mach_generic, 786 thread_state_flavor_t flavor, 787 mach_msg_type_number_t count, 788 ThreadState *tst); 789 extern 790 __attribute__((noreturn)) 791 void call_on_new_stack_0_1 ( Addr stack, 792 Addr retaddr, 793 void (*f)(Word), 794 Word arg1 ); 795 796 extern void pthread_hijack_asm(void); 797 extern void pthread_hijack(Addr self, Addr kport, Addr func, Addr func_arg, 798 Addr stacksize, Addr flags, Addr sp); 799 extern void wqthread_hijack_asm(void); 800 extern void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem, Int reuse, Addr sp); 801 802 extern Addr pthread_starter; 803 extern Addr wqthread_starter; 804 extern SizeT pthread_structsize; 805 806 807 #endif 808 809 /*--------------------------------------------------------------------*/ 810 /*--- end ---*/ 811 /*--------------------------------------------------------------------*/ 812