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-2012 Apple Inc. 11 Greg Parker gparker (at) apple.com 12 13 This program is free software; you can redistribute it and/or 14 modify it under the terms of the GNU General Public License as 15 published by the Free Software Foundation; either version 2 of the 16 License, or (at your option) any later version. 17 18 This program is distributed in the hope that it will be useful, but 19 WITHOUT ANY WARRANTY; without even the implied warranty of 20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 21 General Public License for more details. 22 23 You should have received a copy of the GNU General Public License 24 along with this program; if not, write to the Free Software 25 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 26 02111-1307, USA. 27 28 The GNU General Public License is contained in the file COPYING. 29 */ 30 31 #ifndef __PRIV_SYSWRAP_DARWIN_H 32 #define __PRIV_SYSWRAP_DARWIN_H 33 34 /* requires #include "priv_types_n_macros.h" */ 35 36 // syswrap-darwin.c 37 Addr allocstack ( ThreadId tid ); 38 void find_stack_segment ( ThreadId tid, Addr sp ); 39 void start_thread_NORETURN ( Word arg ); 40 void assign_port_name(mach_port_t port, const char *name); 41 void record_named_port(ThreadId tid, mach_port_t port, mach_port_right_t right, const char *name); 42 43 extern const SyscallTableEntry ML_(mach_trap_table)[]; 44 extern const SyscallTableEntry ML_(syscall_table)[]; 45 extern const SyscallTableEntry ML_(mdep_trap_table)[]; 46 47 extern const UInt ML_(syscall_table_size); 48 extern const UInt ML_(mach_trap_table_size); 49 extern const UInt ML_(mdep_trap_table_size); 50 51 void VG_(show_open_ports)(void); 52 53 void ML_(sync_mappings)(const HChar *when, const HChar *where, Int num); 54 55 // Unix syscalls. 56 // GEN = it uses the generic wrapper 57 // NYI = wrapper not yet implemented in Valgrind 58 // NOC = the non-"_nocancel" wrapper is used 59 // old = the syscall no longer exists in Darwin 60 DECL_TEMPLATE(darwin, exit); // 1 61 // GEN fork 2 62 // GEN read 3 63 // GEN write 4 64 // GEN open 5 65 // GEN close 6 66 // GEN wait4 7 67 // old creat 8 68 // GEN link 9 69 // GEN unlink 10 70 // old execv 11 71 // GEN chdir 12 72 // GEN fchdir 13 73 // GEN mknod 14 74 // GEN chmod 15 75 // GEN chown 16 76 // old break 17 77 DECL_TEMPLATE(darwin, getfsstat); // 18 78 // old lseek 19 79 // GEN getpid 20 80 // old mount 21 81 // old umount 22 82 // GEN setuid 23 83 // GEN getuid 24 84 // GEN geteuid 25 85 DECL_TEMPLATE(darwin, ptrace); // 26 86 DECL_TEMPLATE(darwin, recvmsg); // 27 87 DECL_TEMPLATE(darwin, sendmsg); // 28 88 DECL_TEMPLATE(darwin, recvfrom); // 29 89 DECL_TEMPLATE(darwin, accept); // 30 90 DECL_TEMPLATE(darwin, getpeername); // 31 91 DECL_TEMPLATE(darwin, getsockname); // 32 92 // GEN access 33 93 DECL_TEMPLATE(darwin, chflags); // 34 94 DECL_TEMPLATE(darwin, fchflags); // 35 95 // GEN sync 36 96 // GEN kill 37 97 // old stat 38 98 // GEN getppid 39 99 // old lstat 40 100 // GEN dup 41 101 DECL_TEMPLATE(darwin, pipe); // 42 102 // GEN getegid 43 103 // NYI profil 104 // old ktrace 105 DECL_TEMPLATE(darwin, sigaction); // 46 106 // GEN getgid 47 107 DECL_TEMPLATE(darwin, sigprocmask); // 48 108 DECL_TEMPLATE(darwin, getlogin); // 49 109 // NYI setlogin 50 110 // NYI acct 51 111 DECL_TEMPLATE(darwin, sigpending); // 52 112 // GEN sigaltstack 53 113 DECL_TEMPLATE(darwin, ioctl); // 54 114 // NYI reboot 55 115 // NYI revoke 56 116 // NYI symlink 57 117 // GEN readlink 58 118 // GEN execve 59 119 // GEN umask 60 120 // GEN chroot 61 121 // old fstat 122 // 63 used internally, reserved 123 // old getpagesize 64 124 // GEN msync 65 125 // GEN vfork 66 126 // old vread 127 // old vwrite 128 // old sbrk 129 // old sstk 130 // old mmap 131 // old vadvise 132 // GEN munmap 73 133 // GEN mprotect 74 134 // GEN madvise 75 135 // old vhangup 136 // old vlimit 137 // NYI mincore 78 138 // GEN getgroups 79 139 // NYI setgroups 80 140 // GEN getpgrp 81 141 // NYI setpgid 82 142 // GEN setitimer 83 143 // old wait 144 // NYI swapon 85 145 // GEN getitimer 86 146 // old gethostname 147 // old sethostname 148 DECL_TEMPLATE(darwin, getdtablesize); // 89 149 // GEN dup2 90 150 // old getdopt 151 DECL_TEMPLATE(darwin, fcntl); // 92 152 // GEN select 93 153 // old setdopt 154 // GEN fsync 95 155 // GEN setpriority 96 156 DECL_TEMPLATE(darwin, socket); // 97 157 DECL_TEMPLATE(darwin, connect); // 98 158 // old accept 159 // GEN getpriority 100 160 // old send 161 // old recv 162 // old sigreturn 163 DECL_TEMPLATE(darwin, bind); // 104 164 DECL_TEMPLATE(darwin, setsockopt); // 105 165 DECL_TEMPLATE(darwin, listen); // 106 166 // old vtimes 167 // old sigvec 168 // old sigblock 169 // old sigsetmask 170 DECL_TEMPLATE(darwin, sigsuspend); // 111 171 // old sigstack 172 // old recvmsg 173 // old sendmsg 174 // old vtrace 175 // GEN gettimeofday 116 176 // GEN getrusage 117 177 DECL_TEMPLATE(darwin, getsockopt); // 118 178 // old resuba 179 // GEN readv 120 180 // GEN writev 121 181 // NYI settimeofday 122 182 // GEN fchown 123 183 // GEN fchmod 124 184 // old recvfrom 185 // NYI setreuid 126 186 // NYI setregid 127 187 // GEN rename 128 188 // old truncate 189 // old ftruncate 190 // GEN flock 131 191 // NYI mkfifo 132 192 DECL_TEMPLATE(darwin, sendto); // 133 193 DECL_TEMPLATE(darwin, shutdown); // 134 194 DECL_TEMPLATE(darwin, socketpair); // 135 195 // GEN mkdir 136 196 // GEN rmdir 137 197 // GEN utimes 138 198 DECL_TEMPLATE(darwin, futimes); // 139 199 // NYI adjtime 140 200 // old getpeername 201 DECL_TEMPLATE(darwin, gethostuuid); // 142 202 // old sethostid 203 // old getrlimit 204 // old setrlimit 205 // old killpg 206 // GEN setsid 147 207 // old setquota 208 // old qquota 209 // old getsockname 210 // NYI getpgid 151 211 // NYI setprivexec 152 212 // GEN pread 153 213 // GEN pwrite 154 214 // NYI nfssvc 155 215 // old getdirentries 216 // GEN statfs 157 217 // GEN fstatfs 158 218 // NYI unmount 159 219 // old async_daemon 220 // NYI getfh 161 221 // old getdomainname 222 // old setdomainname 223 // 164 224 // NYI quotactl 165 225 // old exportfs 226 DECL_TEMPLATE(darwin, mount); // 167 227 // old ustat 228 DECL_TEMPLATE(darwin, csops); // 169 229 // old table 230 // old wait3 231 // old rpause 232 // NYI waitid 173 233 // old getdents 234 // old gc_control 235 // NYI add_profil 176 236 // 177 237 // 178 238 // 179 239 DECL_TEMPLATE(darwin, kdebug_trace); // 180 240 // GEN setgid 181 241 DECL_TEMPLATE(darwin, setegid); // 182 242 DECL_TEMPLATE(darwin, seteuid); // 183 243 DECL_TEMPLATE(darwin, sigreturn); // 184 244 DECL_TEMPLATE(darwin, FAKE_SIGRETURN); 245 // NYI chud 185 246 // 186 247 // 187 248 // GEN stat 188 249 // GEN fstat 189 250 // GEN lstat 190 251 DECL_TEMPLATE(darwin, pathconf); // 191 252 DECL_TEMPLATE(darwin, fpathconf); // 192 253 // 193 254 // GEN getrlimit 194 255 // GEN setrlimit 195 256 DECL_TEMPLATE(darwin, getdirentries); // 196 257 DECL_TEMPLATE(darwin, mmap); // 197 258 // 198 __syscall 259 DECL_TEMPLATE(darwin, lseek); // 199 (was UX64) 260 // GEN truncate 200 261 // GEN ftruncate 201 262 DECL_TEMPLATE(darwin, __sysctl); // 202 263 // GEN mlock 203 264 // GEN munlock 204 265 // NYI undelete 205 266 // NYI ATsocket 206 267 // NYI ATgetmsg 207 268 // NYI ATputmsg 208 269 // NYI ATPsndreq 209 270 // NYI ATPsndrsp 210 271 // NYI ATPgetreq 211 272 // NYI ATPgetrsp 212 273 // 213 Reserved for AppleTalk 274 // NYI kqueue_from_portset_np 214 275 // NYI kqueue_portset_np 215 276 // NYI mkcomplex 216 277 // NYI statv 217 278 // NYI lstatv 218 279 // NYI fstatv 219 280 DECL_TEMPLATE(darwin, getattrlist); // 220 281 DECL_TEMPLATE(darwin, setattrlist); // 221 282 DECL_TEMPLATE(darwin, getdirentriesattr); // 222 283 DECL_TEMPLATE(darwin, exchangedata); // 223 284 // 224 checkuseraccess 285 // NYI searchfs 225 286 // GEN delete 226 287 // NYI copyfile 226 288 // 228 289 // 229 290 // GEN poll 230 291 DECL_TEMPLATE(darwin, watchevent); // 231 292 DECL_TEMPLATE(darwin, waitevent); // 232 293 DECL_TEMPLATE(darwin, modwatch); // 233 294 DECL_TEMPLATE(darwin, getxattr); // 234 295 DECL_TEMPLATE(darwin, fgetxattr); // 235 296 DECL_TEMPLATE(darwin, setxattr); // 236 297 DECL_TEMPLATE(darwin, fsetxattr); // 237 298 DECL_TEMPLATE(darwin, removexattr); // 238 299 DECL_TEMPLATE(darwin, fremovexattr); // 239 300 DECL_TEMPLATE(darwin, listxattr); // 240 301 DECL_TEMPLATE(darwin, flistxattr); // 241 302 DECL_TEMPLATE(darwin, fsctl); // 242 303 DECL_TEMPLATE(darwin, initgroups); // 243 304 DECL_TEMPLATE(darwin, posix_spawn); // 244 305 // 245 306 // 246 307 // NYI nfsclnt 247 308 // NYI fhopen 248 309 // 249 310 // NYI minherit 250 311 // NYI semsys 251 312 // NYI msgsys 252 313 // NYI shmsys 253 314 DECL_TEMPLATE(darwin, semctl); // 254 315 DECL_TEMPLATE(darwin, semget); // 255 316 DECL_TEMPLATE(darwin, semop); // 256 317 // 257 318 // NYI msgctl 258 319 // NYI msgget 259 320 // NYI msgsnd 260 321 // NYI msgrcv 261 322 DECL_TEMPLATE(darwin, shmat); // 262 323 DECL_TEMPLATE(darwin, shmctl); // 263 324 DECL_TEMPLATE(darwin, shmdt); // 264 325 DECL_TEMPLATE(darwin, shmget); // 265 326 DECL_TEMPLATE(darwin, shm_open); // 266 327 DECL_TEMPLATE(darwin, shm_unlink); // 267 328 DECL_TEMPLATE(darwin, sem_open); // 268 329 DECL_TEMPLATE(darwin, sem_close); // 269 330 DECL_TEMPLATE(darwin, sem_unlink); // 270 331 DECL_TEMPLATE(darwin, sem_wait); // 271 332 DECL_TEMPLATE(darwin, sem_trywait); // 272 333 DECL_TEMPLATE(darwin, sem_post); // 273 334 // NYI sem_getvalue 274 335 DECL_TEMPLATE(darwin, sem_init); // 275 336 DECL_TEMPLATE(darwin, sem_destroy); // 276 337 DECL_TEMPLATE(darwin, open_extended) // 277 338 // NYI umask_extended 278 339 DECL_TEMPLATE(darwin, stat_extended); // 279 340 DECL_TEMPLATE(darwin, lstat_extended); // 280 341 DECL_TEMPLATE(darwin, fstat_extended); // 281 342 DECL_TEMPLATE(darwin, chmod_extended); // 282 343 DECL_TEMPLATE(darwin, fchmod_extended); // 283 344 DECL_TEMPLATE(darwin, access_extended); // 284 345 DECL_TEMPLATE(darwin, settid); // 285 346 // NYI gettid 286 347 // NYI setsgroups 287 348 // NYI getsgroups 288 349 // NYI setwgroups 289 350 // NYI getwgroups 290 351 // NYI mkfifo_extended 291 352 // NYI mkdir_extended 292 353 // NYI identitysvc 293 354 // NYI shared_region_check_np 294 355 // NYI shared_region_map_np 295 356 // old load_shared_file 357 // old reset_shared_file 358 // old new_system_shared_regions 359 // old shared_region_map_file_np 360 // old shared_region_make_private_np 361 DECL_TEMPLATE(darwin, psynch_mutexwait); // 301 // new in 10.7 ? 362 DECL_TEMPLATE(darwin, psynch_mutexdrop); // 302 // new in 10.7 ? 363 DECL_TEMPLATE(darwin, psynch_cvbroad); // 303 // new in 10.7 ? 364 DECL_TEMPLATE(darwin, psynch_cvsignal); // 304 // new in 10.7 ? 365 DECL_TEMPLATE(darwin, psynch_cvwait); // 305 // new in 10.7 ? 366 DECL_TEMPLATE(darwin, psynch_rw_rdlock); // 306 // new in 10.7 ? 367 DECL_TEMPLATE(darwin, psynch_rw_wrlock); // 307 // new in 10.7 ? 368 DECL_TEMPLATE(darwin, psynch_rw_unlock); // 308 // new in 10.7 ? 369 // NYI __pthread_cond_signal 309 370 // NYI getsid 310 371 // NYI settid_with_pid 311 372 DECL_TEMPLATE(darwin, psynch_cvclrprepost); // 312 // new in 10.7 ? 373 // NYI aio_fsync 313 374 DECL_TEMPLATE(darwin, aio_return); // 314 375 DECL_TEMPLATE(darwin, aio_suspend); // 315 376 // NYI aio_cancel 316 377 DECL_TEMPLATE(darwin, aio_error); // 317 378 DECL_TEMPLATE(darwin, aio_read); // 318 379 DECL_TEMPLATE(darwin, aio_write); // 319 380 // NYI lio_listio 320 381 // NYI __pthread_cond_wait 321 382 // NYI iopolicysys 322 383 // 323 384 // NYI mlockall 324 385 // NYI munlockall 325 386 // 326 387 DECL_TEMPLATE(darwin, issetugid); // 327 388 DECL_TEMPLATE(darwin, __pthread_kill); // 328 389 DECL_TEMPLATE(darwin, __pthread_sigmask); // 329 390 // NYI __sigwait 330 391 DECL_TEMPLATE(darwin, __disable_threadsignal); // 331 392 DECL_TEMPLATE(darwin, __pthread_markcancel); // 332 393 DECL_TEMPLATE(darwin, __pthread_canceled); // 333 394 DECL_TEMPLATE(darwin, __semwait_signal); // 334 395 // old utrace 396 #if DARWIN_VERS >= DARWIN_10_6 397 DECL_TEMPLATE(darwin, proc_info); // 336 398 #endif 399 DECL_TEMPLATE(darwin, sendfile); // 337 400 DECL_TEMPLATE(darwin, stat64); // 338 401 DECL_TEMPLATE(darwin, fstat64); // 339 402 DECL_TEMPLATE(darwin, lstat64); // 340 403 DECL_TEMPLATE(darwin, stat64_extended); // 341 404 DECL_TEMPLATE(darwin, lstat64_extended); // 342 405 DECL_TEMPLATE(darwin, fstat64_extended); // 343 406 DECL_TEMPLATE(darwin, getdirentries64); // 344 407 DECL_TEMPLATE(darwin, statfs64); // 345 408 DECL_TEMPLATE(darwin, fstatfs64); // 346 409 DECL_TEMPLATE(darwin, getfsstat64); // 347 410 // NYI __pthread_chdir 348 411 // NYI __pthread_fchdir 349 412 // NYI audit 350 413 DECL_TEMPLATE(darwin, auditon); // 351 414 // 352 415 // NYI getauid 353 416 // NYI setauid 354 417 // NYI getaudit 355 418 // NYI setaudit 356 419 #if DARWIN_VERS >= DARWIN_10_7 420 DECL_TEMPLATE(darwin, getaudit_addr) // 357 421 #endif 422 // NYI setaudit_addr 358 423 // NYI auditctl 359 424 DECL_TEMPLATE(darwin, bsdthread_create); // 360 425 DECL_TEMPLATE(darwin, bsdthread_terminate); // 361 426 DECL_TEMPLATE(darwin, kqueue); // 362 427 DECL_TEMPLATE(darwin, kevent); // 363 428 // NYI lchown 364 429 // NYI stack_snapshot 365 430 DECL_TEMPLATE(darwin, bsdthread_register); // 366 431 DECL_TEMPLATE(darwin, workq_open); // 367 432 DECL_TEMPLATE(darwin, workq_ops); // 368 433 // 369 434 // 370 435 // 371 436 DECL_TEMPLATE(darwin, __thread_selfid); // 372 437 // 373 438 // 374 439 // 375 440 // 376 441 // 377 442 // 378 443 // 379 444 // NYI __mac_execve 380 445 DECL_TEMPLATE(darwin, __mac_syscall); // 381 446 // NYI __mac_get_file 382 447 // NYI __mac_set_file 383 448 // NYI __mac_get_link 384 449 // NYI __mac_set_link 385 450 // NYI __mac_get_proc 386 451 // NYI __mac_set_proc 387 452 // NYI __mac_get_fd 388 453 // NYI __mac_set_fd 389 454 // NYI __mac_get_pid 390 455 // NYI __mac_get_lcid 391 456 // NYI __mac_get_lctx 392 457 // NYI __mac_set_lctx 393 458 // NYI setlcid 394 459 // NYI getlcid 395 460 // GEN read_nocancel 396 461 // GEN write_nocancel 397 462 // GEN open_nocancel 398 463 // GEN close_nocancel 399 464 // GEN wait4_nocancel 400 465 // NOC recvmsg_nocancel 401 466 // NOC sendmsg_nocancel 402 467 // NOC recvfrom_nocancel 403 468 // NOC accept_nocancel 404 469 // GEN msync_nocancel 405 470 // NOC fcntl_nocancel 406 471 // GEN select_nocancel 407 472 // GEN fsync_nocancel 408 473 // NOC connect_nocancel 409 474 // NYI sigsuspend_nocancel 410 475 // GEN readv_nocancel 411 476 // GEN writev_nocancel 412 477 // NOC sendto_nocancel 413 478 // GEN pread_nocancel 414 479 // GEN pwrite_nocancel 415 480 // NYI waitid_nocancel 416 481 // GEN poll_nocancel 417 482 // NYI msgsnd_nocancel 418 483 // NYI msgrcv_nocancel 419 484 // NOC sem_wait_nocancel 420 485 // NYI aio_suspend_nocancel 421 486 // NYI __sigwait_nocancel 422 487 // NOC __semwait_signal_nocancel 423 488 // NYI __mac_mount 424 489 // NYI __mac_get_mount 425 490 // NYI __mac_getfsstat 426 491 DECL_TEMPLATE(darwin, fsgetpath); // 427 492 DECL_TEMPLATE(darwin, audit_session_self); // 428 493 // NYI audit_session_join 429 494 495 // Mach message helpers 496 DECL_TEMPLATE(darwin, mach_port_set_context); 497 DECL_TEMPLATE(darwin, host_info); 498 DECL_TEMPLATE(darwin, host_page_size); 499 DECL_TEMPLATE(darwin, host_get_io_master); 500 DECL_TEMPLATE(darwin, host_get_clock_service); 501 DECL_TEMPLATE(darwin, host_request_notification); 502 DECL_TEMPLATE(darwin, mach_port_type); 503 DECL_TEMPLATE(darwin, mach_port_extract_member); 504 DECL_TEMPLATE(darwin, mach_port_allocate); 505 DECL_TEMPLATE(darwin, mach_port_deallocate); 506 DECL_TEMPLATE(darwin, mach_port_get_refs); 507 DECL_TEMPLATE(darwin, mach_port_mod_refs); 508 DECL_TEMPLATE(darwin, mach_port_get_set_status); 509 DECL_TEMPLATE(darwin, mach_port_move_member); 510 DECL_TEMPLATE(darwin, mach_port_destroy); 511 DECL_TEMPLATE(darwin, mach_port_request_notification); 512 DECL_TEMPLATE(darwin, mach_port_insert_right); 513 DECL_TEMPLATE(darwin, mach_port_extract_right); 514 DECL_TEMPLATE(darwin, mach_port_get_attributes); 515 DECL_TEMPLATE(darwin, mach_port_set_attributes); 516 DECL_TEMPLATE(darwin, mach_port_insert_member); 517 DECL_TEMPLATE(darwin, task_get_special_port); 518 DECL_TEMPLATE(darwin, task_get_exception_ports); 519 DECL_TEMPLATE(darwin, semaphore_create); 520 DECL_TEMPLATE(darwin, semaphore_destroy); 521 DECL_TEMPLATE(darwin, mach_ports_lookup); 522 DECL_TEMPLATE(darwin, task_threads); 523 DECL_TEMPLATE(darwin, task_suspend); 524 DECL_TEMPLATE(darwin, task_resume); 525 DECL_TEMPLATE(darwin, vm_allocate); 526 DECL_TEMPLATE(darwin, vm_deallocate); 527 DECL_TEMPLATE(darwin, vm_protect); 528 DECL_TEMPLATE(darwin, vm_inherit); 529 DECL_TEMPLATE(darwin, vm_read); 530 DECL_TEMPLATE(darwin, mach_vm_read); 531 DECL_TEMPLATE(darwin, vm_copy); 532 DECL_TEMPLATE(darwin, vm_read_overwrite); 533 DECL_TEMPLATE(darwin, vm_map); 534 DECL_TEMPLATE(darwin, vm_remap); 535 DECL_TEMPLATE(darwin, mach_make_memory_entry_64); 536 DECL_TEMPLATE(darwin, vm_purgable_control); 537 DECL_TEMPLATE(darwin, mach_vm_purgable_control); 538 DECL_TEMPLATE(darwin, mach_vm_allocate); 539 DECL_TEMPLATE(darwin, mach_vm_deallocate); 540 DECL_TEMPLATE(darwin, mach_vm_protect); 541 DECL_TEMPLATE(darwin, mach_vm_copy); 542 DECL_TEMPLATE(darwin, mach_vm_inherit); 543 DECL_TEMPLATE(darwin, mach_vm_map); 544 DECL_TEMPLATE(darwin, mach_vm_region_recurse); 545 DECL_TEMPLATE(darwin, thread_terminate); 546 DECL_TEMPLATE(darwin, thread_create); 547 DECL_TEMPLATE(darwin, thread_create_running); 548 DECL_TEMPLATE(darwin, thread_suspend); 549 DECL_TEMPLATE(darwin, thread_get_state); 550 DECL_TEMPLATE(darwin, thread_policy); 551 DECL_TEMPLATE(darwin, thread_policy_set); 552 DECL_TEMPLATE(darwin, thread_info); 553 DECL_TEMPLATE(darwin, bootstrap_register); 554 DECL_TEMPLATE(darwin, bootstrap_look_up); 555 DECL_TEMPLATE(darwin, mach_msg_receive); 556 DECL_TEMPLATE(darwin, mach_msg_bootstrap); 557 DECL_TEMPLATE(darwin, mach_msg_host); 558 DECL_TEMPLATE(darwin, mach_msg_task); 559 DECL_TEMPLATE(darwin, mach_msg_thread); 560 561 // Mach traps 562 #if DARWIN_VERS == DARWIN_10_8 563 DECL_TEMPLATE(darwin, mach__10); 564 DECL_TEMPLATE(darwin, mach__12); 565 DECL_TEMPLATE(darwin, mach__14); 566 DECL_TEMPLATE(darwin, mach__16); 567 DECL_TEMPLATE(darwin, mach__18); 568 DECL_TEMPLATE(darwin, mach__19); 569 DECL_TEMPLATE(darwin, mach__20); 570 DECL_TEMPLATE(darwin, mach__21); 571 #endif /* DARWIN_VERS == DARWIN_10_8 */ 572 DECL_TEMPLATE(darwin, mach_msg_unhandled); 573 DECL_TEMPLATE(darwin, mach_msg); 574 DECL_TEMPLATE(darwin, mach_reply_port); 575 DECL_TEMPLATE(darwin, mach_thread_self); 576 DECL_TEMPLATE(darwin, mach_host_self); 577 DECL_TEMPLATE(darwin, mach_task_self); 578 DECL_TEMPLATE(darwin, syscall_thread_switch); 579 DECL_TEMPLATE(darwin, semaphore_signal); 580 DECL_TEMPLATE(darwin, semaphore_signal_all); 581 DECL_TEMPLATE(darwin, semaphore_signal_thread); 582 DECL_TEMPLATE(darwin, semaphore_wait); 583 DECL_TEMPLATE(darwin, semaphore_wait_signal); 584 DECL_TEMPLATE(darwin, semaphore_timedwait); 585 DECL_TEMPLATE(darwin, semaphore_timedwait_signal); 586 DECL_TEMPLATE(darwin, task_for_pid); 587 DECL_TEMPLATE(darwin, pid_for_task); 588 DECL_TEMPLATE(darwin, mach_timebase_info); 589 DECL_TEMPLATE(darwin, mach_wait_until); 590 DECL_TEMPLATE(darwin, mk_timer_create); 591 DECL_TEMPLATE(darwin, mk_timer_destroy); 592 DECL_TEMPLATE(darwin, mk_timer_arm); 593 DECL_TEMPLATE(darwin, mk_timer_cancel); 594 DECL_TEMPLATE(darwin, iokit_user_client_trap); 595 DECL_TEMPLATE(darwin, swtch); 596 DECL_TEMPLATE(darwin, swtch_pri); 597 598 // Machine-dependent traps 599 DECL_TEMPLATE(darwin, thread_fast_set_cthread_self); 600 601 // syswrap-<arch>-darwin.c 602 #include <mach/mach.h> 603 extern 604 void thread_state_from_vex(thread_state_t mach_generic, 605 thread_state_flavor_t flavor, 606 mach_msg_type_number_t count, 607 VexGuestArchState *vex_generic); 608 extern 609 void thread_state_to_vex(const thread_state_t mach_generic, 610 thread_state_flavor_t flavor, 611 mach_msg_type_number_t count, 612 VexGuestArchState *vex_generic); 613 extern 614 ThreadState *build_thread(const thread_state_t state, 615 thread_state_flavor_t flavor, 616 mach_msg_type_number_t count); 617 extern 618 void hijack_thread_state(thread_state_t mach_generic, 619 thread_state_flavor_t flavor, 620 mach_msg_type_number_t count, 621 ThreadState *tst); 622 extern 623 __attribute__((noreturn)) 624 void call_on_new_stack_0_1 ( Addr stack, 625 Addr retaddr, 626 void (*f)(Word), 627 Word arg1 ); 628 629 extern void pthread_hijack_asm(void); 630 extern void pthread_hijack(Addr self, Addr kport, Addr func, Addr func_arg, 631 Addr stacksize, Addr flags, Addr sp); 632 extern void wqthread_hijack_asm(void); 633 extern void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem, Int reuse, Addr sp); 634 635 extern Addr pthread_starter; 636 extern Addr wqthread_starter; 637 extern SizeT pthread_structsize; 638 639 640 #endif 641 642 /*--------------------------------------------------------------------*/ 643 /*--- end ---*/ 644 /*--------------------------------------------------------------------*/ 645