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-2015 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, UWord 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
192DECL_TEMPLATE(darwin, 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
336#if DARWIN_VERS < DARWIN_10_10
337// NYI sem_getvalue 274
338#elif DARWIN_VERS >= DARWIN_10_10
339DECL_TEMPLATE(darwin, sysctlbyname);            // 274
340#endif
341
342DECL_TEMPLATE(darwin, sem_init);                // 275
343DECL_TEMPLATE(darwin, sem_destroy);             // 276
344DECL_TEMPLATE(darwin, open_extended)            // 277
345// NYI umask_extended 278
346DECL_TEMPLATE(darwin, stat_extended);           // 279
347DECL_TEMPLATE(darwin, lstat_extended);          // 280
348DECL_TEMPLATE(darwin, fstat_extended);          // 281
349DECL_TEMPLATE(darwin, chmod_extended);          // 282
350DECL_TEMPLATE(darwin, fchmod_extended);         // 283
351DECL_TEMPLATE(darwin, access_extended);         // 284
352DECL_TEMPLATE(darwin, settid);                  // 285
353#if DARWIN_VERS >= DARWIN_10_6
354DECL_TEMPLATE(darwin, gettid);                  // 286
355#endif
356// NYI setsgroups 287
357// NYI getsgroups 288
358// NYI setwgroups 289
359// NYI getwgroups 290
360// NYI mkfifo_extended 291
361// NYI mkdir_extended 292
362// NYI identitysvc 293
363// NYI shared_region_check_np 294
364// NYI shared_region_map_np 295
365#if DARWIN_VERS >= DARWIN_10_6
366// NYI vm_pressure_monitor 296
367// NYI psynch_rw_longrdlock 297
368// NYI psynch_rw_yieldwrlock 298
369// NYI psynch_rw_downgrade 299
370// NYI psynch_rw_upgrade 300
371DECL_TEMPLATE(darwin, psynch_mutexwait);       // 301
372DECL_TEMPLATE(darwin, psynch_mutexdrop);       // 302
373DECL_TEMPLATE(darwin, psynch_cvbroad);         // 303
374DECL_TEMPLATE(darwin, psynch_cvsignal);        // 304
375DECL_TEMPLATE(darwin, psynch_cvwait);          // 305
376DECL_TEMPLATE(darwin, psynch_rw_rdlock);       // 306
377DECL_TEMPLATE(darwin, psynch_rw_wrlock);       // 307
378DECL_TEMPLATE(darwin, psynch_rw_unlock);       // 308
379// NYI psynch_rw_unlock2 309
380#else
381// old load_shared_file
382// old reset_shared_file
383// old new_system_shared_regions
384// old shared_region_map_file_np
385// old shared_region_make_private_np
386// NYI __pthread_mutex_destroy 301
387// NYI __pthread_mutex_init 302
388// NYI __pthread_mutex_lock 303
389// NYI __pthread_mutex_trylock 304
390// NYI __pthread_mutex_unlock 305
391// NYI __pthread_cond_init 306
392// NYI __pthread_cond_destroy 307
393// NYI __pthread_cond_broadcast 308
394// NYI __pthread_cond_signal 309
395#endif
396// NYI getsid 310
397// NYI settid_with_pid 311
398#if DARWIN_VERS >= DARWIN_10_7
399DECL_TEMPLATE(darwin, psynch_cvclrprepost);    // 312
400#else
401// NYI __pthread_cond_timedwait 312
402#endif
403// NYI aio_fsync 313
404DECL_TEMPLATE(darwin, aio_return);             // 314
405DECL_TEMPLATE(darwin, aio_suspend);            // 315
406// NYI aio_cancel 316
407DECL_TEMPLATE(darwin, aio_error);              // 317
408DECL_TEMPLATE(darwin, aio_read);               // 318
409DECL_TEMPLATE(darwin, aio_write);              // 319
410// NYI lio_listio 320
411// NYI __pthread_cond_wait 321
412// NYI iopolicysys 322
413// NYI process_policy 323
414// NYI mlockall 324
415// NYI munlockall 325
416// 326
417DECL_TEMPLATE(darwin, issetugid);               // 327
418DECL_TEMPLATE(darwin, __pthread_kill);          // 328
419DECL_TEMPLATE(darwin, __pthread_sigmask);       // 329
420// NYI __sigwait 330
421DECL_TEMPLATE(darwin, __disable_threadsignal);  // 331
422DECL_TEMPLATE(darwin, __pthread_markcancel);    // 332
423DECL_TEMPLATE(darwin, __pthread_canceled);      // 333
424DECL_TEMPLATE(darwin, __semwait_signal);        // 334
425// old utrace
426DECL_TEMPLATE(darwin, proc_info);               // 336
427DECL_TEMPLATE(darwin, sendfile);                // 337
428DECL_TEMPLATE(darwin, stat64);                  // 338
429DECL_TEMPLATE(darwin, fstat64);                 // 339
430DECL_TEMPLATE(darwin, lstat64);                 // 340
431DECL_TEMPLATE(darwin, stat64_extended);         // 341
432DECL_TEMPLATE(darwin, lstat64_extended);        // 342
433DECL_TEMPLATE(darwin, fstat64_extended);        // 343
434DECL_TEMPLATE(darwin, getdirentries64);         // 344
435DECL_TEMPLATE(darwin, statfs64);                // 345
436DECL_TEMPLATE(darwin, fstatfs64);               // 346
437DECL_TEMPLATE(darwin, getfsstat64);             // 347
438DECL_TEMPLATE(darwin, __pthread_chdir);         // 348
439DECL_TEMPLATE(darwin, __pthread_fchdir);        // 349
440// NYI audit 350
441DECL_TEMPLATE(darwin, auditon);                 // 351
442// 352
443// NYI getauid 353
444// NYI setauid 354
445// NYI getaudit 355
446// NYI setaudit 356
447DECL_TEMPLATE(darwin, getaudit_addr)            // 357
448// NYI setaudit_addr 358
449// NYI auditctl 359
450DECL_TEMPLATE(darwin, bsdthread_create);        // 360
451DECL_TEMPLATE(darwin, bsdthread_terminate);     // 361
452DECL_TEMPLATE(darwin, kqueue);                  // 362
453DECL_TEMPLATE(darwin, kevent);                  // 363
454// NYI lchown 364
455// NYI stack_snapshot 365
456DECL_TEMPLATE(darwin, bsdthread_register);      // 366
457DECL_TEMPLATE(darwin, workq_open);              // 367
458DECL_TEMPLATE(darwin, workq_ops);               // 368
459DECL_TEMPLATE(darwin, kevent64);                // 369
460// 370
461// 371
462#if DARWIN_VERS >= DARWIN_10_6
463DECL_TEMPLATE(darwin, __thread_selfid);         // 372
464#endif
465// 373
466// 374
467// 375
468// 376
469// 377
470// 378
471// 379
472// NYI __mac_execve 380
473DECL_TEMPLATE(darwin, __mac_syscall);           // 381
474// NYI __mac_get_file 382
475// NYI __mac_set_file 383
476// NYI __mac_get_link 384
477// NYI __mac_set_link 385
478// NYI __mac_get_proc 386
479// NYI __mac_set_proc 387
480// NYI __mac_get_fd 388
481// NYI __mac_set_fd 389
482// NYI __mac_get_pid 390
483// NYI __mac_get_lcid 391
484// NYI __mac_get_lctx 392
485// NYI __mac_set_lctx 393
486// NYI setlcid 394
487// NYI getlcid 395
488// GEN read_nocancel 396
489// GEN write_nocancel 397
490// GEN open_nocancel 398
491// GEN close_nocancel 399
492// GEN wait4_nocancel 400
493// NOC recvmsg_nocancel 401
494// NOC sendmsg_nocancel 402
495// NOC recvfrom_nocancel 403
496// NOC accept_nocancel 404
497// GEN msync_nocancel 405
498// NOC fcntl_nocancel 406
499// GEN select_nocancel 407
500// GEN fsync_nocancel 408
501// NOC connect_nocancel 409
502// NYI sigsuspend_nocancel 410
503// GEN readv_nocancel 411
504// GEN writev_nocancel 412
505// NOC sendto_nocancel 413
506// GEN pread_nocancel 414
507// GEN pwrite_nocancel 415
508// NYI waitid_nocancel 416
509// GEN poll_nocancel 417
510// NYI msgsnd_nocancel 418
511// NYI msgrcv_nocancel 419
512// NOC sem_wait_nocancel 420
513// NYI aio_suspend_nocancel 421
514// NYI __sigwait_nocancel 422
515// NOC __semwait_signal_nocancel 423
516// NYI __mac_mount 424
517// NYI __mac_get_mount 425
518// NYI __mac_getfsstat 426
519DECL_TEMPLATE(darwin, fsgetpath);                // 427
520DECL_TEMPLATE(darwin, audit_session_self);       // 428
521// NYI audit_session_join 429
522DECL_TEMPLATE(darwin, fileport_makeport);        // 430
523
524// NYI fileport_makefd 431
525// NYI audit_session_port 432
526// NYI pid_suspend 433
527// NYI pid_resume 434
528#if DARWIN_VERS >= DARWIN_10_10
529// NYI pid_hibernate 435
530// NYI pid_shutdown_sockets 436
531#endif /* DARWIN_VERS >= DARWIN_10_10 */
532// old old shared_region_slide_np 437
533// NYI shared_region_map_and_slide_np            // 438
534// NYI kas_info                                  // 439
535// NYI memorystatus_control                      // 440
536DECL_TEMPLATE(darwin, guarded_open_np);          // 441
537DECL_TEMPLATE(darwin, guarded_close_np);         // 442
538DECL_TEMPLATE(darwin, guarded_kqueue_np);        // 443
539DECL_TEMPLATE(darwin, change_fdguard_np);        // 444
540// old __proc_suppress 445
541// NYI proc_rlimit_control                       // 446
542DECL_TEMPLATE(darwin, connectx);                 // 447
543DECL_TEMPLATE(darwin, disconnectx);              // 448
544// NYI peeloff // 449
545// NYI socket_delegate // 450
546// NYI telemetry // 451
547// NYI proc_uuid_policy // 452
548// NYI memorystatus_get_level // 453
549// NYI system_override // 454
550// NYI vfs_purge // 455
551#if DARWIN_VERS >= DARWIN_10_10
552// NYI sfi_ctl         // 456
553// NYI sfi_pidctl      // 457
554// NYI coalition       // 458
555// NYI coalition_info  // 459
556DECL_TEMPLATE(darwin, necp_match_policy);        // 460
557DECL_TEMPLATE(darwin, getattrlistbulk);          // 461
558// 462
559// NYI openat          // 463
560// NYI openat_nocancel // 464
561// NYI renameat        // 465
562// NYI faccessat       // 466
563// NYI fchmodat        // 467
564// NYI fchownat        // 468
565// NYI fstatat         // 469
566// NYI fstatat64       // 470
567// NYI linkat          // 471
568// NYI unlinkat        // 472
569DECL_TEMPLATE(darwin, readlinkat);               // 473
570// NYI symlinkat       // 474
571// NYI mkdirat         // 475
572// NYI getattrlistat   // 476
573// NYI proc_trace_log  // 477
574DECL_TEMPLATE(darwin, bsdthread_ctl);            // 478
575// NYI openbyid_np     // 479
576// NYI recvmsg_x       // 480
577// NYI sendmsg_x       // 481
578// NYI thread_selfusage  // 482
579// NYI csrctl          // 483
580DECL_TEMPLATE(darwin, guarded_open_dprotected_np);  // 484
581DECL_TEMPLATE(darwin, guarded_write_np);            // 485
582DECL_TEMPLATE(darwin, guarded_pwrite_np);           // 486
583DECL_TEMPLATE(darwin, guarded_writev_np);           // 487
584// NYI rename_ext      // 488
585// NYI mremap_encrypted  // 489
586#endif /* DARWIN_VERS >= DARWIN_10_10 */
587
588// Mach message helpers
589DECL_TEMPLATE(darwin, mach_port_set_context);
590DECL_TEMPLATE(darwin, host_info);
591DECL_TEMPLATE(darwin, host_page_size);
592DECL_TEMPLATE(darwin, host_get_io_master);
593DECL_TEMPLATE(darwin, host_get_clock_service);
594DECL_TEMPLATE(darwin, host_request_notification);
595DECL_TEMPLATE(darwin, host_create_mach_voucher);
596DECL_TEMPLATE(darwin, host_get_special_port);
597DECL_TEMPLATE(darwin, mach_port_type);
598DECL_TEMPLATE(darwin, mach_port_extract_member);
599DECL_TEMPLATE(darwin, mach_port_allocate);
600DECL_TEMPLATE(darwin, mach_port_deallocate);
601DECL_TEMPLATE(darwin, mach_port_get_refs);
602DECL_TEMPLATE(darwin, mach_port_mod_refs);
603DECL_TEMPLATE(darwin, mach_port_get_set_status);
604DECL_TEMPLATE(darwin, mach_port_move_member);
605DECL_TEMPLATE(darwin, mach_port_destroy);
606DECL_TEMPLATE(darwin, mach_port_request_notification);
607DECL_TEMPLATE(darwin, mach_port_insert_right);
608DECL_TEMPLATE(darwin, mach_port_extract_right);
609DECL_TEMPLATE(darwin, mach_port_get_attributes);
610DECL_TEMPLATE(darwin, mach_port_set_attributes);
611DECL_TEMPLATE(darwin, mach_port_insert_member);
612DECL_TEMPLATE(darwin, task_get_special_port);
613DECL_TEMPLATE(darwin, task_set_special_port);
614DECL_TEMPLATE(darwin, task_get_exception_ports);
615DECL_TEMPLATE(darwin, semaphore_create);
616DECL_TEMPLATE(darwin, semaphore_destroy);
617DECL_TEMPLATE(darwin, task_policy_set);
618DECL_TEMPLATE(darwin, mach_ports_register);
619DECL_TEMPLATE(darwin, mach_ports_lookup);
620DECL_TEMPLATE(darwin, task_info);
621DECL_TEMPLATE(darwin, task_set_info);
622DECL_TEMPLATE(darwin, task_threads);
623DECL_TEMPLATE(darwin, task_suspend);
624DECL_TEMPLATE(darwin, task_resume);
625DECL_TEMPLATE(darwin, vm_allocate);
626DECL_TEMPLATE(darwin, vm_deallocate);
627DECL_TEMPLATE(darwin, vm_protect);
628DECL_TEMPLATE(darwin, vm_inherit);
629DECL_TEMPLATE(darwin, vm_read);
630DECL_TEMPLATE(darwin, mach_vm_read);
631DECL_TEMPLATE(darwin, vm_copy);
632DECL_TEMPLATE(darwin, vm_read_overwrite);
633DECL_TEMPLATE(darwin, vm_map);
634DECL_TEMPLATE(darwin, vm_remap);
635DECL_TEMPLATE(darwin, mach_make_memory_entry_64);
636DECL_TEMPLATE(darwin, vm_purgable_control);
637DECL_TEMPLATE(darwin, mach_vm_purgable_control);
638DECL_TEMPLATE(darwin, mach_vm_allocate);
639DECL_TEMPLATE(darwin, mach_vm_deallocate);
640DECL_TEMPLATE(darwin, mach_vm_protect);
641DECL_TEMPLATE(darwin, mach_vm_copy);
642DECL_TEMPLATE(darwin, mach_vm_read_overwrite);
643DECL_TEMPLATE(darwin, mach_vm_inherit);
644DECL_TEMPLATE(darwin, mach_vm_map);
645DECL_TEMPLATE(darwin, mach_vm_remap);
646DECL_TEMPLATE(darwin, mach_vm_region_recurse);
647DECL_TEMPLATE(darwin, thread_terminate);
648DECL_TEMPLATE(darwin, thread_create);
649DECL_TEMPLATE(darwin, thread_create_running);
650DECL_TEMPLATE(darwin, thread_suspend);
651DECL_TEMPLATE(darwin, thread_resume);
652DECL_TEMPLATE(darwin, thread_get_state);
653DECL_TEMPLATE(darwin, thread_policy);
654DECL_TEMPLATE(darwin, thread_policy_set);
655DECL_TEMPLATE(darwin, thread_info);
656DECL_TEMPLATE(darwin, bootstrap_register);
657DECL_TEMPLATE(darwin, bootstrap_look_up);
658DECL_TEMPLATE(darwin, mach_msg_receive);
659DECL_TEMPLATE(darwin, mach_msg_bootstrap);
660DECL_TEMPLATE(darwin, mach_msg_host);
661DECL_TEMPLATE(darwin, mach_msg_task);
662DECL_TEMPLATE(darwin, mach_msg_thread);
663
664// Mach traps
665#if DARWIN_VERS >= DARWIN_10_8
666DECL_TEMPLATE(darwin, kernelrpc_mach_vm_allocate_trap);
667DECL_TEMPLATE(darwin, kernelrpc_mach_vm_deallocate_trap);
668DECL_TEMPLATE(darwin, kernelrpc_mach_vm_protect_trap);
669DECL_TEMPLATE(darwin, kernelrpc_mach_vm_map_trap);
670DECL_TEMPLATE(darwin, kernelrpc_mach_port_allocate_trap);
671DECL_TEMPLATE(darwin, kernelrpc_mach_port_destroy_trap);
672DECL_TEMPLATE(darwin, kernelrpc_mach_port_deallocate_trap);
673DECL_TEMPLATE(darwin, kernelrpc_mach_port_mod_refs_trap);
674DECL_TEMPLATE(darwin, kernelrpc_mach_port_move_member_trap);
675DECL_TEMPLATE(darwin, kernelrpc_mach_port_insert_right_trap);
676DECL_TEMPLATE(darwin, kernelrpc_mach_port_insert_member_trap);
677DECL_TEMPLATE(darwin, kernelrpc_mach_port_extract_member_trap);
678DECL_TEMPLATE(darwin, kernelrpc_mach_port_construct_trap);
679DECL_TEMPLATE(darwin, kernelrpc_mach_port_destruct_trap);
680DECL_TEMPLATE(darwin, kernelrpc_mach_port_guard_trap);
681DECL_TEMPLATE(darwin, kernelrpc_mach_port_unguard_trap);
682DECL_TEMPLATE(darwin, iopolicysys);
683DECL_TEMPLATE(darwin, process_policy);
684#endif /* DARWIN_VERS >= DARWIN_10_8 */
685DECL_TEMPLATE(darwin, mach_msg_unhandled);
686DECL_TEMPLATE(darwin, mach_msg_unhandled_check);
687DECL_TEMPLATE(darwin, mach_msg);
688DECL_TEMPLATE(darwin, mach_reply_port);
689DECL_TEMPLATE(darwin, mach_thread_self);
690DECL_TEMPLATE(darwin, mach_host_self);
691DECL_TEMPLATE(darwin, mach_task_self);
692DECL_TEMPLATE(darwin, syscall_thread_switch);
693DECL_TEMPLATE(darwin, semaphore_signal);
694DECL_TEMPLATE(darwin, semaphore_signal_all);
695DECL_TEMPLATE(darwin, semaphore_signal_thread);
696DECL_TEMPLATE(darwin, semaphore_wait);
697DECL_TEMPLATE(darwin, semaphore_wait_signal);
698DECL_TEMPLATE(darwin, semaphore_timedwait);
699DECL_TEMPLATE(darwin, semaphore_timedwait_signal);
700DECL_TEMPLATE(darwin, task_for_pid);
701DECL_TEMPLATE(darwin, pid_for_task);
702DECL_TEMPLATE(darwin, mach_timebase_info);
703DECL_TEMPLATE(darwin, mach_wait_until);
704DECL_TEMPLATE(darwin, mk_timer_create);
705DECL_TEMPLATE(darwin, mk_timer_destroy);
706DECL_TEMPLATE(darwin, mk_timer_arm);
707DECL_TEMPLATE(darwin, mk_timer_cancel);
708DECL_TEMPLATE(darwin, iokit_user_client_trap);
709DECL_TEMPLATE(darwin, swtch);
710DECL_TEMPLATE(darwin, swtch_pri);
711
712// Machine-dependent traps
713DECL_TEMPLATE(darwin, thread_fast_set_cthread_self);
714
715// syswrap-<arch>-darwin.c
716#include <mach/mach.h>
717extern
718void thread_state_from_vex(thread_state_t mach_generic,
719                           thread_state_flavor_t flavor,
720                           mach_msg_type_number_t count,
721                           VexGuestArchState *vex_generic);
722extern
723void thread_state_to_vex(const thread_state_t mach_generic,
724                         thread_state_flavor_t flavor,
725                         mach_msg_type_number_t count,
726                         VexGuestArchState *vex_generic);
727extern
728ThreadState *build_thread(const thread_state_t state,
729                          thread_state_flavor_t flavor,
730                          mach_msg_type_number_t count);
731extern
732void hijack_thread_state(thread_state_t mach_generic,
733                         thread_state_flavor_t flavor,
734                         mach_msg_type_number_t count,
735                         ThreadState *tst);
736extern
737__attribute__((noreturn))
738void call_on_new_stack_0_1 ( Addr stack,
739			     Addr retaddr,
740			     void (*f)(Word),
741                             Word arg1 );
742
743extern void pthread_hijack_asm(void);
744extern void pthread_hijack(Addr self, Addr kport, Addr func, Addr func_arg,
745                           Addr stacksize, Addr flags, Addr sp);
746extern void wqthread_hijack_asm(void);
747extern void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem, Int reuse, Addr sp);
748
749extern Addr pthread_starter;
750extern Addr wqthread_starter;
751extern SizeT pthread_structsize;
752
753
754#endif
755
756/*--------------------------------------------------------------------*/
757/*--- end                                                          ---*/
758/*--------------------------------------------------------------------*/
759