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-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#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 38Addr allocstack ( ThreadId tid ); 39void find_stack_segment ( ThreadId tid, Addr sp ); 40void start_thread_NORETURN ( Word arg ); 41void assign_port_name(mach_port_t port, const char *name); 42void record_named_port(ThreadId tid, mach_port_t port, mach_port_right_t right, const char *name); 43 44extern const SyscallTableEntry ML_(mach_trap_table)[]; 45extern const SyscallTableEntry ML_(syscall_table)[]; 46extern const SyscallTableEntry ML_(mdep_trap_table)[]; 47 48extern const UInt ML_(syscall_table_size); 49extern const UInt ML_(mach_trap_table_size); 50extern const UInt ML_(mdep_trap_table_size); 51 52void VG_(show_open_ports)(void); 53 54void ML_(sync_mappings)(const HChar *when, const HChar *where, Int 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 61DECL_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 78DECL_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 86DECL_TEMPLATE(darwin, ptrace); // 26 87DECL_TEMPLATE(darwin, recvmsg); // 27 88DECL_TEMPLATE(darwin, sendmsg); // 28 89DECL_TEMPLATE(darwin, recvfrom); // 29 90DECL_TEMPLATE(darwin, accept); // 30 91DECL_TEMPLATE(darwin, getpeername); // 31 92DECL_TEMPLATE(darwin, getsockname); // 32 93// GEN access 33 94DECL_TEMPLATE(darwin, chflags); // 34 95DECL_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 102DECL_TEMPLATE(darwin, pipe); // 42 103// GEN getegid 43 104// NYI profil 105// old ktrace 106DECL_TEMPLATE(darwin, sigaction); // 46 107// GEN getgid 47 108DECL_TEMPLATE(darwin, sigprocmask); // 48 109DECL_TEMPLATE(darwin, getlogin); // 49 110// NYI setlogin 50 111// NYI acct 51 112DECL_TEMPLATE(darwin, sigpending); // 52 113// GEN sigaltstack 53 114DECL_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 149DECL_TEMPLATE(darwin, getdtablesize); // 89 150// GEN dup2 90 151// old getdopt 152DECL_TEMPLATE(darwin, fcntl); // 92 153// GEN select 93 154// old setdopt 155// GEN fsync 95 156// GEN setpriority 96 157DECL_TEMPLATE(darwin, socket); // 97 158DECL_TEMPLATE(darwin, connect); // 98 159// old accept 160// GEN getpriority 100 161// old send 162// old recv 163// old sigreturn 164DECL_TEMPLATE(darwin, bind); // 104 165DECL_TEMPLATE(darwin, setsockopt); // 105 166DECL_TEMPLATE(darwin, listen); // 106 167// old vtimes 168// old sigvec 169// old sigblock 170// old sigsetmask 171DECL_TEMPLATE(darwin, sigsuspend); // 111 172// old sigstack 173// old recvmsg 174// old sendmsg 175// old vtrace 176// GEN gettimeofday 116 177// GEN getrusage 117 178DECL_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// NYI mkfifo 132 193DECL_TEMPLATE(darwin, sendto); // 133 194DECL_TEMPLATE(darwin, shutdown); // 134 195DECL_TEMPLATE(darwin, socketpair); // 135 196// GEN mkdir 136 197// GEN rmdir 137 198// GEN utimes 138 199DECL_TEMPLATE(darwin, futimes); // 139 200// NYI adjtime 140 201// old getpeername 202DECL_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 227DECL_TEMPLATE(darwin, mount); // 167 228// old ustat 229DECL_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// 177 238// 178 239// 179 240DECL_TEMPLATE(darwin, kdebug_trace); // 180 241// GEN setgid 181 242DECL_TEMPLATE(darwin, setegid); // 182 243DECL_TEMPLATE(darwin, seteuid); // 183 244DECL_TEMPLATE(darwin, sigreturn); // 184 245DECL_TEMPLATE(darwin, FAKE_SIGRETURN); 246// NYI chud 185 247// 186 248// 187 249// GEN stat 188 250// GEN fstat 189 251// GEN lstat 190 252DECL_TEMPLATE(darwin, pathconf); // 191 253DECL_TEMPLATE(darwin, fpathconf); // 192 254// 193 255// GEN getrlimit 194 256// GEN setrlimit 195 257DECL_TEMPLATE(darwin, getdirentries); // 196 258DECL_TEMPLATE(darwin, mmap); // 197 259// 198 __syscall 260DECL_TEMPLATE(darwin, lseek); // 199 (was UX64) 261// GEN truncate 200 262// GEN ftruncate 201 263DECL_TEMPLATE(darwin, __sysctl); // 202 264// GEN mlock 203 265// GEN munlock 204 266// NYI undelete 205 267// NYI ATsocket 206 268// NYI ATgetmsg 207 269// NYI ATputmsg 208 270// NYI ATPsndreq 209 271// NYI ATPsndrsp 210 272// NYI ATPgetreq 211 273// NYI ATPgetrsp 212 274// 213 Reserved for AppleTalk 275// NYI kqueue_from_portset_np 214 276// NYI kqueue_portset_np 215 277// NYI mkcomplex 216 278// NYI statv 217 279// NYI lstatv 218 280// NYI fstatv 219 281DECL_TEMPLATE(darwin, getattrlist); // 220 282DECL_TEMPLATE(darwin, setattrlist); // 221 283DECL_TEMPLATE(darwin, getdirentriesattr); // 222 284DECL_TEMPLATE(darwin, exchangedata); // 223 285// 224 checkuseraccess 286// NYI searchfs 225 287// GEN delete 226 288// NYI copyfile 226 289// 228 290// 229 291// GEN poll 230 292DECL_TEMPLATE(darwin, watchevent); // 231 293DECL_TEMPLATE(darwin, waitevent); // 232 294DECL_TEMPLATE(darwin, modwatch); // 233 295DECL_TEMPLATE(darwin, getxattr); // 234 296DECL_TEMPLATE(darwin, fgetxattr); // 235 297DECL_TEMPLATE(darwin, setxattr); // 236 298DECL_TEMPLATE(darwin, fsetxattr); // 237 299DECL_TEMPLATE(darwin, removexattr); // 238 300DECL_TEMPLATE(darwin, fremovexattr); // 239 301DECL_TEMPLATE(darwin, listxattr); // 240 302DECL_TEMPLATE(darwin, flistxattr); // 241 303DECL_TEMPLATE(darwin, fsctl); // 242 304DECL_TEMPLATE(darwin, initgroups); // 243 305DECL_TEMPLATE(darwin, posix_spawn); // 244 306// 245 307// 246 308// NYI nfsclnt 247 309// NYI fhopen 248 310// 249 311// NYI minherit 250 312// NYI semsys 251 313// NYI msgsys 252 314// NYI shmsys 253 315DECL_TEMPLATE(darwin, semctl); // 254 316DECL_TEMPLATE(darwin, semget); // 255 317DECL_TEMPLATE(darwin, semop); // 256 318// 257 319// NYI msgctl 258 320// NYI msgget 259 321// NYI msgsnd 260 322// NYI msgrcv 261 323DECL_TEMPLATE(darwin, shmat); // 262 324DECL_TEMPLATE(darwin, shmctl); // 263 325DECL_TEMPLATE(darwin, shmdt); // 264 326DECL_TEMPLATE(darwin, shmget); // 265 327DECL_TEMPLATE(darwin, shm_open); // 266 328DECL_TEMPLATE(darwin, shm_unlink); // 267 329DECL_TEMPLATE(darwin, sem_open); // 268 330DECL_TEMPLATE(darwin, sem_close); // 269 331DECL_TEMPLATE(darwin, sem_unlink); // 270 332DECL_TEMPLATE(darwin, sem_wait); // 271 333DECL_TEMPLATE(darwin, sem_trywait); // 272 334DECL_TEMPLATE(darwin, sem_post); // 273 335// NYI sem_getvalue 274 336DECL_TEMPLATE(darwin, sem_init); // 275 337DECL_TEMPLATE(darwin, sem_destroy); // 276 338DECL_TEMPLATE(darwin, open_extended) // 277 339// NYI umask_extended 278 340DECL_TEMPLATE(darwin, stat_extended); // 279 341DECL_TEMPLATE(darwin, lstat_extended); // 280 342DECL_TEMPLATE(darwin, fstat_extended); // 281 343DECL_TEMPLATE(darwin, chmod_extended); // 282 344DECL_TEMPLATE(darwin, fchmod_extended); // 283 345DECL_TEMPLATE(darwin, access_extended); // 284 346DECL_TEMPLATE(darwin, settid); // 285 347// NYI gettid 286 348// NYI setsgroups 287 349// NYI getsgroups 288 350// NYI setwgroups 289 351// NYI getwgroups 290 352// NYI mkfifo_extended 291 353// NYI mkdir_extended 292 354// NYI identitysvc 293 355// NYI shared_region_check_np 294 356// NYI shared_region_map_np 295 357// old load_shared_file 358// old reset_shared_file 359// old new_system_shared_regions 360// old shared_region_map_file_np 361// old shared_region_make_private_np 362DECL_TEMPLATE(darwin, psynch_mutexwait); // 301 // new in 10.7 ? 363DECL_TEMPLATE(darwin, psynch_mutexdrop); // 302 // new in 10.7 ? 364DECL_TEMPLATE(darwin, psynch_cvbroad); // 303 // new in 10.7 ? 365DECL_TEMPLATE(darwin, psynch_cvsignal); // 304 // new in 10.7 ? 366DECL_TEMPLATE(darwin, psynch_cvwait); // 305 // new in 10.7 ? 367DECL_TEMPLATE(darwin, psynch_rw_rdlock); // 306 // new in 10.7 ? 368DECL_TEMPLATE(darwin, psynch_rw_wrlock); // 307 // new in 10.7 ? 369DECL_TEMPLATE(darwin, psynch_rw_unlock); // 308 // new in 10.7 ? 370// NYI __pthread_cond_signal 309 371// NYI getsid 310 372// NYI settid_with_pid 311 373DECL_TEMPLATE(darwin, psynch_cvclrprepost); // 312 // new in 10.7 ? 374// NYI aio_fsync 313 375DECL_TEMPLATE(darwin, aio_return); // 314 376DECL_TEMPLATE(darwin, aio_suspend); // 315 377// NYI aio_cancel 316 378DECL_TEMPLATE(darwin, aio_error); // 317 379DECL_TEMPLATE(darwin, aio_read); // 318 380DECL_TEMPLATE(darwin, aio_write); // 319 381// NYI lio_listio 320 382// NYI __pthread_cond_wait 321 383// NYI iopolicysys 322 384// 323 385// NYI mlockall 324 386// NYI munlockall 325 387// 326 388DECL_TEMPLATE(darwin, issetugid); // 327 389DECL_TEMPLATE(darwin, __pthread_kill); // 328 390DECL_TEMPLATE(darwin, __pthread_sigmask); // 329 391// NYI __sigwait 330 392DECL_TEMPLATE(darwin, __disable_threadsignal); // 331 393DECL_TEMPLATE(darwin, __pthread_markcancel); // 332 394DECL_TEMPLATE(darwin, __pthread_canceled); // 333 395DECL_TEMPLATE(darwin, __semwait_signal); // 334 396// old utrace 397#if DARWIN_VERS >= DARWIN_10_6 398DECL_TEMPLATE(darwin, proc_info); // 336 399#endif 400DECL_TEMPLATE(darwin, sendfile); // 337 401DECL_TEMPLATE(darwin, stat64); // 338 402DECL_TEMPLATE(darwin, fstat64); // 339 403DECL_TEMPLATE(darwin, lstat64); // 340 404DECL_TEMPLATE(darwin, stat64_extended); // 341 405DECL_TEMPLATE(darwin, lstat64_extended); // 342 406DECL_TEMPLATE(darwin, fstat64_extended); // 343 407DECL_TEMPLATE(darwin, getdirentries64); // 344 408DECL_TEMPLATE(darwin, statfs64); // 345 409DECL_TEMPLATE(darwin, fstatfs64); // 346 410DECL_TEMPLATE(darwin, getfsstat64); // 347 411// NYI __pthread_chdir 348 412// NYI __pthread_fchdir 349 413// NYI audit 350 414DECL_TEMPLATE(darwin, auditon); // 351 415// 352 416// NYI getauid 353 417// NYI setauid 354 418// NYI getaudit 355 419// NYI setaudit 356 420#if DARWIN_VERS >= DARWIN_10_7 421DECL_TEMPLATE(darwin, getaudit_addr) // 357 422#endif 423// NYI setaudit_addr 358 424// NYI auditctl 359 425DECL_TEMPLATE(darwin, bsdthread_create); // 360 426DECL_TEMPLATE(darwin, bsdthread_terminate); // 361 427DECL_TEMPLATE(darwin, kqueue); // 362 428DECL_TEMPLATE(darwin, kevent); // 363 429// NYI lchown 364 430// NYI stack_snapshot 365 431DECL_TEMPLATE(darwin, bsdthread_register); // 366 432DECL_TEMPLATE(darwin, workq_open); // 367 433DECL_TEMPLATE(darwin, workq_ops); // 368 434// 369 435// 370 436// 371 437DECL_TEMPLATE(darwin, __thread_selfid); // 372 438// 373 439// 374 440// 375 441// 376 442// 377 443// 378 444// 379 445// NYI __mac_execve 380 446DECL_TEMPLATE(darwin, __mac_syscall); // 381 447// NYI __mac_get_file 382 448// NYI __mac_set_file 383 449// NYI __mac_get_link 384 450// NYI __mac_set_link 385 451// NYI __mac_get_proc 386 452// NYI __mac_set_proc 387 453// NYI __mac_get_fd 388 454// NYI __mac_set_fd 389 455// NYI __mac_get_pid 390 456// NYI __mac_get_lcid 391 457// NYI __mac_get_lctx 392 458// NYI __mac_set_lctx 393 459// NYI setlcid 394 460// NYI getlcid 395 461// GEN read_nocancel 396 462// GEN write_nocancel 397 463// GEN open_nocancel 398 464// GEN close_nocancel 399 465// GEN wait4_nocancel 400 466// NOC recvmsg_nocancel 401 467// NOC sendmsg_nocancel 402 468// NOC recvfrom_nocancel 403 469// NOC accept_nocancel 404 470// GEN msync_nocancel 405 471// NOC fcntl_nocancel 406 472// GEN select_nocancel 407 473// GEN fsync_nocancel 408 474// NOC connect_nocancel 409 475// NYI sigsuspend_nocancel 410 476// GEN readv_nocancel 411 477// GEN writev_nocancel 412 478// NOC sendto_nocancel 413 479// GEN pread_nocancel 414 480// GEN pwrite_nocancel 415 481// NYI waitid_nocancel 416 482// GEN poll_nocancel 417 483// NYI msgsnd_nocancel 418 484// NYI msgrcv_nocancel 419 485// NOC sem_wait_nocancel 420 486// NYI aio_suspend_nocancel 421 487// NYI __sigwait_nocancel 422 488// NOC __semwait_signal_nocancel 423 489// NYI __mac_mount 424 490// NYI __mac_get_mount 425 491// NYI __mac_getfsstat 426 492DECL_TEMPLATE(darwin, fsgetpath); // 427 493DECL_TEMPLATE(darwin, audit_session_self); // 428 494// NYI audit_session_join 429 495 496// Mach message helpers 497DECL_TEMPLATE(darwin, mach_port_set_context); 498DECL_TEMPLATE(darwin, host_info); 499DECL_TEMPLATE(darwin, host_page_size); 500DECL_TEMPLATE(darwin, host_get_io_master); 501DECL_TEMPLATE(darwin, host_get_clock_service); 502DECL_TEMPLATE(darwin, host_request_notification); 503DECL_TEMPLATE(darwin, mach_port_type); 504DECL_TEMPLATE(darwin, mach_port_extract_member); 505DECL_TEMPLATE(darwin, mach_port_allocate); 506DECL_TEMPLATE(darwin, mach_port_deallocate); 507DECL_TEMPLATE(darwin, mach_port_get_refs); 508DECL_TEMPLATE(darwin, mach_port_mod_refs); 509DECL_TEMPLATE(darwin, mach_port_get_set_status); 510DECL_TEMPLATE(darwin, mach_port_move_member); 511DECL_TEMPLATE(darwin, mach_port_destroy); 512DECL_TEMPLATE(darwin, mach_port_request_notification); 513DECL_TEMPLATE(darwin, mach_port_insert_right); 514DECL_TEMPLATE(darwin, mach_port_extract_right); 515DECL_TEMPLATE(darwin, mach_port_get_attributes); 516DECL_TEMPLATE(darwin, mach_port_set_attributes); 517DECL_TEMPLATE(darwin, mach_port_insert_member); 518DECL_TEMPLATE(darwin, task_get_special_port); 519DECL_TEMPLATE(darwin, task_get_exception_ports); 520DECL_TEMPLATE(darwin, semaphore_create); 521DECL_TEMPLATE(darwin, semaphore_destroy); 522DECL_TEMPLATE(darwin, mach_ports_lookup); 523DECL_TEMPLATE(darwin, task_threads); 524DECL_TEMPLATE(darwin, task_suspend); 525DECL_TEMPLATE(darwin, task_resume); 526DECL_TEMPLATE(darwin, vm_allocate); 527DECL_TEMPLATE(darwin, vm_deallocate); 528DECL_TEMPLATE(darwin, vm_protect); 529DECL_TEMPLATE(darwin, vm_inherit); 530DECL_TEMPLATE(darwin, vm_read); 531DECL_TEMPLATE(darwin, mach_vm_read); 532DECL_TEMPLATE(darwin, vm_copy); 533DECL_TEMPLATE(darwin, vm_read_overwrite); 534DECL_TEMPLATE(darwin, vm_map); 535DECL_TEMPLATE(darwin, vm_remap); 536DECL_TEMPLATE(darwin, mach_make_memory_entry_64); 537DECL_TEMPLATE(darwin, vm_purgable_control); 538DECL_TEMPLATE(darwin, mach_vm_purgable_control); 539DECL_TEMPLATE(darwin, mach_vm_allocate); 540DECL_TEMPLATE(darwin, mach_vm_deallocate); 541DECL_TEMPLATE(darwin, mach_vm_protect); 542DECL_TEMPLATE(darwin, mach_vm_copy); 543DECL_TEMPLATE(darwin, mach_vm_inherit); 544DECL_TEMPLATE(darwin, mach_vm_map); 545DECL_TEMPLATE(darwin, mach_vm_region_recurse); 546DECL_TEMPLATE(darwin, thread_terminate); 547DECL_TEMPLATE(darwin, thread_create); 548DECL_TEMPLATE(darwin, thread_create_running); 549DECL_TEMPLATE(darwin, thread_suspend); 550DECL_TEMPLATE(darwin, thread_get_state); 551DECL_TEMPLATE(darwin, thread_policy); 552DECL_TEMPLATE(darwin, thread_policy_set); 553DECL_TEMPLATE(darwin, thread_info); 554DECL_TEMPLATE(darwin, bootstrap_register); 555DECL_TEMPLATE(darwin, bootstrap_look_up); 556DECL_TEMPLATE(darwin, mach_msg_receive); 557DECL_TEMPLATE(darwin, mach_msg_bootstrap); 558DECL_TEMPLATE(darwin, mach_msg_host); 559DECL_TEMPLATE(darwin, mach_msg_task); 560DECL_TEMPLATE(darwin, mach_msg_thread); 561 562// Mach traps 563#if DARWIN_VERS == DARWIN_10_8 564DECL_TEMPLATE(darwin, mach__10); 565DECL_TEMPLATE(darwin, mach__12); 566DECL_TEMPLATE(darwin, mach__14); 567DECL_TEMPLATE(darwin, mach__16); 568DECL_TEMPLATE(darwin, mach__18); 569DECL_TEMPLATE(darwin, mach__19); 570DECL_TEMPLATE(darwin, mach__20); 571DECL_TEMPLATE(darwin, mach__21); 572#endif /* DARWIN_VERS == DARWIN_10_8 */ 573DECL_TEMPLATE(darwin, mach_msg_unhandled); 574DECL_TEMPLATE(darwin, mach_msg); 575DECL_TEMPLATE(darwin, mach_reply_port); 576DECL_TEMPLATE(darwin, mach_thread_self); 577DECL_TEMPLATE(darwin, mach_host_self); 578DECL_TEMPLATE(darwin, mach_task_self); 579DECL_TEMPLATE(darwin, syscall_thread_switch); 580DECL_TEMPLATE(darwin, semaphore_signal); 581DECL_TEMPLATE(darwin, semaphore_signal_all); 582DECL_TEMPLATE(darwin, semaphore_signal_thread); 583DECL_TEMPLATE(darwin, semaphore_wait); 584DECL_TEMPLATE(darwin, semaphore_wait_signal); 585DECL_TEMPLATE(darwin, semaphore_timedwait); 586DECL_TEMPLATE(darwin, semaphore_timedwait_signal); 587DECL_TEMPLATE(darwin, task_for_pid); 588DECL_TEMPLATE(darwin, pid_for_task); 589DECL_TEMPLATE(darwin, mach_timebase_info); 590DECL_TEMPLATE(darwin, mach_wait_until); 591DECL_TEMPLATE(darwin, mk_timer_create); 592DECL_TEMPLATE(darwin, mk_timer_destroy); 593DECL_TEMPLATE(darwin, mk_timer_arm); 594DECL_TEMPLATE(darwin, mk_timer_cancel); 595DECL_TEMPLATE(darwin, iokit_user_client_trap); 596DECL_TEMPLATE(darwin, swtch); 597DECL_TEMPLATE(darwin, swtch_pri); 598 599// Machine-dependent traps 600DECL_TEMPLATE(darwin, thread_fast_set_cthread_self); 601 602// syswrap-<arch>-darwin.c 603#include <mach/mach.h> 604extern 605void thread_state_from_vex(thread_state_t mach_generic, 606 thread_state_flavor_t flavor, 607 mach_msg_type_number_t count, 608 VexGuestArchState *vex_generic); 609extern 610void thread_state_to_vex(const thread_state_t mach_generic, 611 thread_state_flavor_t flavor, 612 mach_msg_type_number_t count, 613 VexGuestArchState *vex_generic); 614extern 615ThreadState *build_thread(const thread_state_t state, 616 thread_state_flavor_t flavor, 617 mach_msg_type_number_t count); 618extern 619void hijack_thread_state(thread_state_t mach_generic, 620 thread_state_flavor_t flavor, 621 mach_msg_type_number_t count, 622 ThreadState *tst); 623extern 624__attribute__((noreturn)) 625void call_on_new_stack_0_1 ( Addr stack, 626 Addr retaddr, 627 void (*f)(Word), 628 Word arg1 ); 629 630extern void pthread_hijack_asm(void); 631extern void pthread_hijack(Addr self, Addr kport, Addr func, Addr func_arg, 632 Addr stacksize, Addr flags, Addr sp); 633extern void wqthread_hijack_asm(void); 634extern void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem, Int reuse, Addr sp); 635 636extern Addr pthread_starter; 637extern Addr wqthread_starter; 638extern SizeT pthread_structsize; 639 640 641#endif 642 643/*--------------------------------------------------------------------*/ 644/*--- end ---*/ 645/*--------------------------------------------------------------------*/ 646