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