priv_syswrap-darwin.h revision 7c4f9e3285eb6a9201e88e3ba25e46572ff41f78
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
54Bool 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#if DARWIN_VERS >= DARWIN_10_7
348DECL_TEMPLATE(darwin, gettid);                  // 286
349#endif
350// NYI setsgroups 287
351// NYI getsgroups 288
352// NYI setwgroups 289
353// NYI getwgroups 290
354// NYI mkfifo_extended 291
355// NYI mkdir_extended 292
356// NYI identitysvc 293
357// NYI shared_region_check_np 294
358// NYI shared_region_map_np 295
359// old load_shared_file
360// old reset_shared_file
361// old new_system_shared_regions
362// old shared_region_map_file_np
363// old shared_region_make_private_np
364DECL_TEMPLATE(darwin, psynch_mutexwait);       // 301 // new in 10.7 ?
365DECL_TEMPLATE(darwin, psynch_mutexdrop);       // 302 // new in 10.7 ?
366DECL_TEMPLATE(darwin, psynch_cvbroad);         // 303 // new in 10.7 ?
367DECL_TEMPLATE(darwin, psynch_cvsignal);        // 304 // new in 10.7 ?
368DECL_TEMPLATE(darwin, psynch_cvwait);          // 305 // new in 10.7 ?
369DECL_TEMPLATE(darwin, psynch_rw_rdlock);       // 306 // new in 10.7 ?
370DECL_TEMPLATE(darwin, psynch_rw_wrlock);       // 307 // new in 10.7 ?
371DECL_TEMPLATE(darwin, psynch_rw_unlock);       // 308 // new in 10.7 ?
372// NYI __pthread_cond_signal 309
373// NYI getsid 310
374// NYI settid_with_pid 311
375DECL_TEMPLATE(darwin, psynch_cvclrprepost);    // 312 // new in 10.7 ?
376// NYI aio_fsync 313
377DECL_TEMPLATE(darwin, aio_return);             // 314
378DECL_TEMPLATE(darwin, aio_suspend);            // 315
379// NYI aio_cancel 316
380DECL_TEMPLATE(darwin, aio_error);              // 317
381DECL_TEMPLATE(darwin, aio_read);               // 318
382DECL_TEMPLATE(darwin, aio_write);              // 319
383// NYI lio_listio 320
384// NYI __pthread_cond_wait 321
385// NYI iopolicysys 322
386// 323
387// NYI mlockall 324
388// NYI munlockall 325
389// 326
390DECL_TEMPLATE(darwin, issetugid);               // 327
391DECL_TEMPLATE(darwin, __pthread_kill);          // 328
392DECL_TEMPLATE(darwin, __pthread_sigmask);       // 329
393// NYI __sigwait 330
394DECL_TEMPLATE(darwin, __disable_threadsignal);  // 331
395DECL_TEMPLATE(darwin, __pthread_markcancel);    // 332
396DECL_TEMPLATE(darwin, __pthread_canceled);      // 333
397DECL_TEMPLATE(darwin, __semwait_signal);        // 334
398// old utrace
399#if DARWIN_VERS >= DARWIN_10_6
400DECL_TEMPLATE(darwin, proc_info);               // 336
401#endif
402DECL_TEMPLATE(darwin, sendfile);                // 337
403DECL_TEMPLATE(darwin, stat64);                  // 338
404DECL_TEMPLATE(darwin, fstat64);                 // 339
405DECL_TEMPLATE(darwin, lstat64);                 // 340
406DECL_TEMPLATE(darwin, stat64_extended);         // 341
407DECL_TEMPLATE(darwin, lstat64_extended);        // 342
408DECL_TEMPLATE(darwin, fstat64_extended);        // 343
409DECL_TEMPLATE(darwin, getdirentries64);         // 344
410DECL_TEMPLATE(darwin, statfs64);                // 345
411DECL_TEMPLATE(darwin, fstatfs64);               // 346
412DECL_TEMPLATE(darwin, getfsstat64);             // 347
413// NYI __pthread_chdir 348
414// NYI __pthread_fchdir 349
415// NYI audit 350
416DECL_TEMPLATE(darwin, auditon);                 // 351
417// 352
418// NYI getauid 353
419// NYI setauid 354
420// NYI getaudit 355
421// NYI setaudit 356
422#if DARWIN_VERS >= DARWIN_10_7
423DECL_TEMPLATE(darwin, getaudit_addr)            // 357
424#endif
425// NYI setaudit_addr 358
426// NYI auditctl 359
427DECL_TEMPLATE(darwin, bsdthread_create);        // 360
428DECL_TEMPLATE(darwin, bsdthread_terminate);     // 361
429DECL_TEMPLATE(darwin, kqueue);                  // 362
430DECL_TEMPLATE(darwin, kevent);                  // 363
431// NYI lchown 364
432// NYI stack_snapshot 365
433DECL_TEMPLATE(darwin, bsdthread_register);      // 366
434DECL_TEMPLATE(darwin, workq_open);              // 367
435DECL_TEMPLATE(darwin, workq_ops);               // 368
436DECL_TEMPLATE(darwin, kevent64);                // 369
437// 370
438// 371
439DECL_TEMPLATE(darwin, __thread_selfid);         // 372
440// 373
441// 374
442// 375
443// 376
444// 377
445// 378
446// 379
447// NYI __mac_execve 380
448DECL_TEMPLATE(darwin, __mac_syscall);           // 381
449// NYI __mac_get_file 382
450// NYI __mac_set_file 383
451// NYI __mac_get_link 384
452// NYI __mac_set_link 385
453// NYI __mac_get_proc 386
454// NYI __mac_set_proc 387
455// NYI __mac_get_fd 388
456// NYI __mac_set_fd 389
457// NYI __mac_get_pid 390
458// NYI __mac_get_lcid 391
459// NYI __mac_get_lctx 392
460// NYI __mac_set_lctx 393
461// NYI setlcid 394
462// NYI getlcid 395
463// GEN read_nocancel 396
464// GEN write_nocancel 397
465// GEN open_nocancel 398
466// GEN close_nocancel 399
467// GEN wait4_nocancel 400
468// NOC recvmsg_nocancel 401
469// NOC sendmsg_nocancel 402
470// NOC recvfrom_nocancel 403
471// NOC accept_nocancel 404
472// GEN msync_nocancel 405
473// NOC fcntl_nocancel 406
474// GEN select_nocancel 407
475// GEN fsync_nocancel 408
476// NOC connect_nocancel 409
477// NYI sigsuspend_nocancel 410
478// GEN readv_nocancel 411
479// GEN writev_nocancel 412
480// NOC sendto_nocancel 413
481// GEN pread_nocancel 414
482// GEN pwrite_nocancel 415
483// NYI waitid_nocancel 416
484// GEN poll_nocancel 417
485// NYI msgsnd_nocancel 418
486// NYI msgrcv_nocancel 419
487// NOC sem_wait_nocancel 420
488// NYI aio_suspend_nocancel 421
489// NYI __sigwait_nocancel 422
490// NOC __semwait_signal_nocancel 423
491// NYI __mac_mount 424
492// NYI __mac_get_mount 425
493// NYI __mac_getfsstat 426
494DECL_TEMPLATE(darwin, fsgetpath);                // 427
495DECL_TEMPLATE(darwin, audit_session_self);       // 428
496// NYI audit_session_join 429
497DECL_TEMPLATE(darwin, fileport_makeport);        // 430
498
499// NYI shared_region_map_and_slide_np            // 438
500// NYI kas_info                                  // 439
501// NYI memorystatus_control                      // 440
502DECL_TEMPLATE(darwin, guarded_open_np);          // 441
503DECL_TEMPLATE(darwin, guarded_close_np);         // 442
504DECL_TEMPLATE(darwin, guarded_kqueue_np);        // 443
505DECL_TEMPLATE(darwin, change_fdguard_np);        // 444
506
507// NYI proc_rlimit_control                       // 446
508DECL_TEMPLATE(darwin, connectx);                 // 447
509DECL_TEMPLATE(darwin, disconnectx);              // 448
510
511// Mach message helpers
512DECL_TEMPLATE(darwin, mach_port_set_context);
513DECL_TEMPLATE(darwin, host_info);
514DECL_TEMPLATE(darwin, host_page_size);
515DECL_TEMPLATE(darwin, host_get_io_master);
516DECL_TEMPLATE(darwin, host_get_clock_service);
517DECL_TEMPLATE(darwin, host_request_notification);
518DECL_TEMPLATE(darwin, mach_port_type);
519DECL_TEMPLATE(darwin, mach_port_extract_member);
520DECL_TEMPLATE(darwin, mach_port_allocate);
521DECL_TEMPLATE(darwin, mach_port_deallocate);
522DECL_TEMPLATE(darwin, mach_port_get_refs);
523DECL_TEMPLATE(darwin, mach_port_mod_refs);
524DECL_TEMPLATE(darwin, mach_port_get_set_status);
525DECL_TEMPLATE(darwin, mach_port_move_member);
526DECL_TEMPLATE(darwin, mach_port_destroy);
527DECL_TEMPLATE(darwin, mach_port_request_notification);
528DECL_TEMPLATE(darwin, mach_port_insert_right);
529DECL_TEMPLATE(darwin, mach_port_extract_right);
530DECL_TEMPLATE(darwin, mach_port_get_attributes);
531DECL_TEMPLATE(darwin, mach_port_set_attributes);
532DECL_TEMPLATE(darwin, mach_port_insert_member);
533DECL_TEMPLATE(darwin, task_get_special_port);
534DECL_TEMPLATE(darwin, task_get_exception_ports);
535DECL_TEMPLATE(darwin, semaphore_create);
536DECL_TEMPLATE(darwin, semaphore_destroy);
537DECL_TEMPLATE(darwin, task_policy_set);
538DECL_TEMPLATE(darwin, mach_ports_lookup);
539DECL_TEMPLATE(darwin, task_threads);
540DECL_TEMPLATE(darwin, task_suspend);
541DECL_TEMPLATE(darwin, task_resume);
542DECL_TEMPLATE(darwin, vm_allocate);
543DECL_TEMPLATE(darwin, vm_deallocate);
544DECL_TEMPLATE(darwin, vm_protect);
545DECL_TEMPLATE(darwin, vm_inherit);
546DECL_TEMPLATE(darwin, vm_read);
547DECL_TEMPLATE(darwin, mach_vm_read);
548DECL_TEMPLATE(darwin, vm_copy);
549DECL_TEMPLATE(darwin, vm_read_overwrite);
550DECL_TEMPLATE(darwin, vm_map);
551DECL_TEMPLATE(darwin, vm_remap);
552DECL_TEMPLATE(darwin, mach_make_memory_entry_64);
553DECL_TEMPLATE(darwin, vm_purgable_control);
554DECL_TEMPLATE(darwin, mach_vm_purgable_control);
555DECL_TEMPLATE(darwin, mach_vm_allocate);
556DECL_TEMPLATE(darwin, mach_vm_deallocate);
557DECL_TEMPLATE(darwin, mach_vm_protect);
558DECL_TEMPLATE(darwin, mach_vm_copy);
559DECL_TEMPLATE(darwin, mach_vm_read_overwrite);
560DECL_TEMPLATE(darwin, mach_vm_inherit);
561DECL_TEMPLATE(darwin, mach_vm_map);
562DECL_TEMPLATE(darwin, mach_vm_remap);
563DECL_TEMPLATE(darwin, mach_vm_region_recurse);
564DECL_TEMPLATE(darwin, thread_terminate);
565DECL_TEMPLATE(darwin, thread_create);
566DECL_TEMPLATE(darwin, thread_create_running);
567DECL_TEMPLATE(darwin, thread_suspend);
568DECL_TEMPLATE(darwin, thread_get_state);
569DECL_TEMPLATE(darwin, thread_policy);
570DECL_TEMPLATE(darwin, thread_policy_set);
571DECL_TEMPLATE(darwin, thread_info);
572DECL_TEMPLATE(darwin, bootstrap_register);
573DECL_TEMPLATE(darwin, bootstrap_look_up);
574DECL_TEMPLATE(darwin, mach_msg_receive);
575DECL_TEMPLATE(darwin, mach_msg_bootstrap);
576DECL_TEMPLATE(darwin, mach_msg_host);
577DECL_TEMPLATE(darwin, mach_msg_task);
578DECL_TEMPLATE(darwin, mach_msg_thread);
579
580// Mach traps
581#if DARWIN_VERS == DARWIN_10_8 || DARWIN_VERS == DARWIN_10_9
582DECL_TEMPLATE(darwin, kernelrpc_mach_vm_allocate_trap);
583DECL_TEMPLATE(darwin, kernelrpc_mach_vm_deallocate_trap);
584DECL_TEMPLATE(darwin, kernelrpc_mach_vm_protect_trap);
585DECL_TEMPLATE(darwin, kernelrpc_mach_vm_map_trap);
586DECL_TEMPLATE(darwin, kernelrpc_mach_port_allocate_trap);
587DECL_TEMPLATE(darwin, kernelrpc_mach_port_destroy_trap);
588DECL_TEMPLATE(darwin, kernelrpc_mach_port_deallocate_trap);
589DECL_TEMPLATE(darwin, kernelrpc_mach_port_mod_refs_trap);
590DECL_TEMPLATE(darwin, kernelrpc_mach_port_move_member_trap);
591DECL_TEMPLATE(darwin, kernelrpc_mach_port_insert_right_trap);
592DECL_TEMPLATE(darwin, kernelrpc_mach_port_insert_member_trap);
593DECL_TEMPLATE(darwin, kernelrpc_mach_port_extract_member_trap);
594DECL_TEMPLATE(darwin, kernelrpc_mach_port_construct_trap);
595DECL_TEMPLATE(darwin, kernelrpc_mach_port_destruct_trap);
596DECL_TEMPLATE(darwin, kernelrpc_mach_port_guard_trap);
597DECL_TEMPLATE(darwin, kernelrpc_mach_port_unguard_trap);
598DECL_TEMPLATE(darwin, iopolicysys);
599DECL_TEMPLATE(darwin, process_policy);
600#endif /* DARWIN_VERS == DARWIN_10_8 || DARWIN_VERS == DARWIN_10_9 */
601DECL_TEMPLATE(darwin, mach_msg_unhandled);
602DECL_TEMPLATE(darwin, mach_msg_unhandled_check);
603DECL_TEMPLATE(darwin, mach_msg);
604DECL_TEMPLATE(darwin, mach_reply_port);
605DECL_TEMPLATE(darwin, mach_thread_self);
606DECL_TEMPLATE(darwin, mach_host_self);
607DECL_TEMPLATE(darwin, mach_task_self);
608DECL_TEMPLATE(darwin, syscall_thread_switch);
609DECL_TEMPLATE(darwin, semaphore_signal);
610DECL_TEMPLATE(darwin, semaphore_signal_all);
611DECL_TEMPLATE(darwin, semaphore_signal_thread);
612DECL_TEMPLATE(darwin, semaphore_wait);
613DECL_TEMPLATE(darwin, semaphore_wait_signal);
614DECL_TEMPLATE(darwin, semaphore_timedwait);
615DECL_TEMPLATE(darwin, semaphore_timedwait_signal);
616DECL_TEMPLATE(darwin, task_for_pid);
617DECL_TEMPLATE(darwin, pid_for_task);
618DECL_TEMPLATE(darwin, mach_timebase_info);
619DECL_TEMPLATE(darwin, mach_wait_until);
620DECL_TEMPLATE(darwin, mk_timer_create);
621DECL_TEMPLATE(darwin, mk_timer_destroy);
622DECL_TEMPLATE(darwin, mk_timer_arm);
623DECL_TEMPLATE(darwin, mk_timer_cancel);
624DECL_TEMPLATE(darwin, iokit_user_client_trap);
625DECL_TEMPLATE(darwin, swtch);
626DECL_TEMPLATE(darwin, swtch_pri);
627
628// Machine-dependent traps
629DECL_TEMPLATE(darwin, thread_fast_set_cthread_self);
630
631// syswrap-<arch>-darwin.c
632#include <mach/mach.h>
633extern
634void thread_state_from_vex(thread_state_t mach_generic,
635                           thread_state_flavor_t flavor,
636                           mach_msg_type_number_t count,
637                           VexGuestArchState *vex_generic);
638extern
639void thread_state_to_vex(const thread_state_t mach_generic,
640                         thread_state_flavor_t flavor,
641                         mach_msg_type_number_t count,
642                         VexGuestArchState *vex_generic);
643extern
644ThreadState *build_thread(const thread_state_t state,
645                          thread_state_flavor_t flavor,
646                          mach_msg_type_number_t count);
647extern
648void hijack_thread_state(thread_state_t mach_generic,
649                         thread_state_flavor_t flavor,
650                         mach_msg_type_number_t count,
651                         ThreadState *tst);
652extern
653__attribute__((noreturn))
654void call_on_new_stack_0_1 ( Addr stack,
655			     Addr retaddr,
656			     void (*f)(Word),
657                             Word arg1 );
658
659extern void pthread_hijack_asm(void);
660extern void pthread_hijack(Addr self, Addr kport, Addr func, Addr func_arg,
661                           Addr stacksize, Addr flags, Addr sp);
662extern void wqthread_hijack_asm(void);
663extern void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem, Int reuse, Addr sp);
664
665extern Addr pthread_starter;
666extern Addr wqthread_starter;
667extern SizeT pthread_structsize;
668
669
670#endif
671
672/*--------------------------------------------------------------------*/
673/*--- end                                                          ---*/
674/*--------------------------------------------------------------------*/
675