Home | History | Annotate | Download | only in m_syswrap
      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-2011 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 // NYI 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 DECL_TEMPLATE(darwin, mach_msg_unhandled);
    563 DECL_TEMPLATE(darwin, mach_msg);
    564 DECL_TEMPLATE(darwin, mach_reply_port);
    565 DECL_TEMPLATE(darwin, mach_thread_self);
    566 DECL_TEMPLATE(darwin, mach_host_self);
    567 DECL_TEMPLATE(darwin, mach_task_self);
    568 DECL_TEMPLATE(darwin, syscall_thread_switch);
    569 DECL_TEMPLATE(darwin, semaphore_signal);
    570 DECL_TEMPLATE(darwin, semaphore_signal_all);
    571 DECL_TEMPLATE(darwin, semaphore_signal_thread);
    572 DECL_TEMPLATE(darwin, semaphore_wait);
    573 DECL_TEMPLATE(darwin, semaphore_wait_signal);
    574 DECL_TEMPLATE(darwin, semaphore_timedwait);
    575 DECL_TEMPLATE(darwin, semaphore_timedwait_signal);
    576 DECL_TEMPLATE(darwin, task_for_pid);
    577 DECL_TEMPLATE(darwin, pid_for_task);
    578 DECL_TEMPLATE(darwin, mach_timebase_info);
    579 DECL_TEMPLATE(darwin, mach_wait_until);
    580 DECL_TEMPLATE(darwin, mk_timer_create);
    581 DECL_TEMPLATE(darwin, mk_timer_destroy);
    582 DECL_TEMPLATE(darwin, mk_timer_arm);
    583 DECL_TEMPLATE(darwin, mk_timer_cancel);
    584 DECL_TEMPLATE(darwin, iokit_user_client_trap);
    585 DECL_TEMPLATE(darwin, swtch);
    586 DECL_TEMPLATE(darwin, swtch_pri);
    587 
    588 // Machine-dependent traps
    589 DECL_TEMPLATE(darwin, thread_fast_set_cthread_self);
    590 
    591 // syswrap-<arch>-darwin.c
    592 #include <mach/mach.h>
    593 extern
    594 void thread_state_from_vex(thread_state_t mach_generic,
    595                            thread_state_flavor_t flavor,
    596                            mach_msg_type_number_t count,
    597                            VexGuestArchState *vex_generic);
    598 extern
    599 void thread_state_to_vex(const thread_state_t mach_generic,
    600                          thread_state_flavor_t flavor,
    601                          mach_msg_type_number_t count,
    602                          VexGuestArchState *vex_generic);
    603 extern
    604 ThreadState *build_thread(const thread_state_t state,
    605                           thread_state_flavor_t flavor,
    606                           mach_msg_type_number_t count);
    607 extern
    608 void hijack_thread_state(thread_state_t mach_generic,
    609                          thread_state_flavor_t flavor,
    610                          mach_msg_type_number_t count,
    611                          ThreadState *tst);
    612 extern
    613 __attribute__((noreturn))
    614 void call_on_new_stack_0_1 ( Addr stack,
    615 			     Addr retaddr,
    616 			     void (*f)(Word),
    617                              Word arg1 );
    618 
    619 extern void pthread_hijack_asm(void);
    620 extern void pthread_hijack(Addr self, Addr kport, Addr func, Addr func_arg,
    621                            Addr stacksize, Addr flags, Addr sp);
    622 extern void wqthread_hijack_asm(void);
    623 extern void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem, Int reuse, Addr sp);
    624 
    625 extern Addr pthread_starter;
    626 extern Addr wqthread_starter;
    627 extern SizeT pthread_structsize;
    628 
    629 
    630 #endif
    631 
    632 /*--------------------------------------------------------------------*/
    633 /*--- end                                                          ---*/
    634 /*--------------------------------------------------------------------*/
    635