• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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-2017 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
38 Addr allocstack ( ThreadId tid );
39 void find_stack_segment ( ThreadId tid, Addr sp );
40 void start_thread_NORETURN ( Word arg );
41 void assign_port_name(mach_port_t port, const char *name);
42 void record_named_port(ThreadId tid, mach_port_t port, mach_port_right_t right, const char *name);
43 
44 extern const SyscallTableEntry ML_(mach_trap_table)[];
45 extern const SyscallTableEntry ML_(syscall_table)[];
46 extern const SyscallTableEntry ML_(mdep_trap_table)[];
47 
48 extern const UInt ML_(syscall_table_size);
49 extern const UInt ML_(mach_trap_table_size);
50 extern const UInt ML_(mdep_trap_table_size);
51 
52 void VG_(show_open_ports)(void);
53 
54 Bool 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
61 DECL_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
78 DECL_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
86 DECL_TEMPLATE(darwin, ptrace);                  // 26
87 DECL_TEMPLATE(darwin, recvmsg);                 // 27
88 DECL_TEMPLATE(darwin, sendmsg);                 // 28
89 DECL_TEMPLATE(darwin, recvfrom);                // 29
90 DECL_TEMPLATE(darwin, accept);                  // 30
91 DECL_TEMPLATE(darwin, getpeername);             // 31
92 DECL_TEMPLATE(darwin, getsockname);             // 32
93 // GEN access 33
94 DECL_TEMPLATE(darwin, chflags);                 // 34
95 DECL_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
102 DECL_TEMPLATE(darwin, pipe);                    // 42
103 // GEN getegid 43
104 // NYI profil
105 // old ktrace
106 DECL_TEMPLATE(darwin, sigaction);               // 46
107 // GEN getgid 47
108 DECL_TEMPLATE(darwin, sigprocmask);             // 48
109 DECL_TEMPLATE(darwin, getlogin);                // 49
110 // NYI setlogin 50
111 // NYI acct 51
112 DECL_TEMPLATE(darwin, sigpending);              // 52
113 // GEN sigaltstack 53
114 DECL_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
149 DECL_TEMPLATE(darwin, getdtablesize);           // 89
150 // GEN dup2 90
151 // old getdopt
152 DECL_TEMPLATE(darwin, fcntl);                   // 92
153 // GEN select 93
154 // old setdopt
155 // GEN fsync 95
156 // GEN setpriority 96
157 DECL_TEMPLATE(darwin, socket);                  // 97
158 DECL_TEMPLATE(darwin, connect);                 // 98
159 // old accept
160 // GEN getpriority 100
161 // old send
162 // old recv
163 // old sigreturn
164 DECL_TEMPLATE(darwin, bind);                    // 104
165 DECL_TEMPLATE(darwin, setsockopt);              // 105
166 DECL_TEMPLATE(darwin, listen);                  // 106
167 // old vtimes
168 // old sigvec
169 // old sigblock
170 // old sigsetmask
171 DECL_TEMPLATE(darwin, sigsuspend);              // 111
172 // old sigstack
173 // old recvmsg
174 // old sendmsg
175 // old vtrace
176 // GEN gettimeofday 116
177 // GEN getrusage 117
178 DECL_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 DECL_TEMPLATE(darwin, mkfifo);                  // 132
193 DECL_TEMPLATE(darwin, sendto);                  // 133
194 DECL_TEMPLATE(darwin, shutdown);                // 134
195 DECL_TEMPLATE(darwin, socketpair);              // 135
196 // GEN mkdir 136
197 // GEN rmdir 137
198 // GEN utimes 138
199 DECL_TEMPLATE(darwin, futimes);                 // 139
200 // NYI adjtime 140
201 // old getpeername
202 DECL_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
227 DECL_TEMPLATE(darwin, mount);                   // 167
228 // old ustat
229 DECL_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 #if DARWIN_VERS >= DARWIN_10_12
238 // NYI kdebug_typefilter                        // 177
239 #endif /* DARWIN_VERS >= DARWIN_10_12 */
240 #if DARWIN_VERS >= DARWIN_10_11
241 // NYI kdebug_trace_string                      // 178
242 #endif /* DARWIN_VERS >= DARWIN_10_11 */
243 // 179
244 DECL_TEMPLATE(darwin, kdebug_trace);            // 180
245 // GEN setgid 181
246 DECL_TEMPLATE(darwin, setegid);                 // 182
247 DECL_TEMPLATE(darwin, seteuid);                 // 183
248 DECL_TEMPLATE(darwin, sigreturn);               // 184
249 DECL_TEMPLATE(darwin, FAKE_SIGRETURN);
250 // NYI chud 185
251 // 186
252 // 187
253 // GEN stat 188
254 // GEN fstat 189
255 // GEN lstat 190
256 DECL_TEMPLATE(darwin, pathconf);            // 191
257 DECL_TEMPLATE(darwin, fpathconf);           // 192
258 // 193
259 // GEN getrlimit 194
260 // GEN setrlimit 195
261 DECL_TEMPLATE(darwin, getdirentries);       // 196
262 DECL_TEMPLATE(darwin, mmap);                // 197
263 // 198  __syscall
264 DECL_TEMPLATE(darwin, lseek);               // 199 (was UX64)
265 // GEN truncate 200
266 // GEN ftruncate 201
267 DECL_TEMPLATE(darwin, __sysctl);                // 202
268 // GEN mlock 203
269 // GEN munlock 204
270 // NYI undelete 205
271 // NYI ATsocket 206
272 // NYI ATgetmsg 207
273 // NYI ATputmsg 208
274 // NYI ATPsndreq 209
275 // NYI ATPsndrsp 210
276 // NYI ATPgetreq 211
277 // NYI ATPgetrsp 212
278 // 213  Reserved for AppleTalk
279 // NYI kqueue_from_portset_np 214
280 // NYI kqueue_portset_np 215
281 // NYI mkcomplex 216
282 // NYI statv 217
283 // NYI lstatv 218
284 // NYI fstatv 219
285 DECL_TEMPLATE(darwin, getattrlist);             // 220
286 DECL_TEMPLATE(darwin, setattrlist);             // 221
287 DECL_TEMPLATE(darwin, getdirentriesattr);       // 222
288 DECL_TEMPLATE(darwin, exchangedata);            // 223
289 // 224 checkuseraccess
290 // NYI searchfs 225
291 // GEN delete 226
292 // NYI copyfile 226
293 // 228
294 // 229
295 // GEN poll 230
296 DECL_TEMPLATE(darwin, watchevent);              // 231
297 DECL_TEMPLATE(darwin, waitevent);               // 232
298 DECL_TEMPLATE(darwin, modwatch);                // 233
299 DECL_TEMPLATE(darwin, getxattr);                // 234
300 DECL_TEMPLATE(darwin, fgetxattr);               // 235
301 DECL_TEMPLATE(darwin, setxattr);                // 236
302 DECL_TEMPLATE(darwin, fsetxattr);               // 237
303 DECL_TEMPLATE(darwin, removexattr);             // 238
304 DECL_TEMPLATE(darwin, fremovexattr);            // 239
305 DECL_TEMPLATE(darwin, listxattr);               // 240
306 DECL_TEMPLATE(darwin, flistxattr);              // 241
307 DECL_TEMPLATE(darwin, fsctl);                   // 242
308 DECL_TEMPLATE(darwin, initgroups);              // 243
309 DECL_TEMPLATE(darwin, posix_spawn);             // 244
310 // 245
311 // 246
312 // NYI nfsclnt 247
313 // NYI fhopen 248
314 // 249
315 // NYI minherit 250
316 // NYI semsys 251
317 // NYI msgsys 252
318 // NYI shmsys 253
319 DECL_TEMPLATE(darwin, semctl);                  // 254
320 DECL_TEMPLATE(darwin, semget);                  // 255
321 DECL_TEMPLATE(darwin, semop);                   // 256
322 // 257
323 // NYI msgctl 258
324 // NYI msgget 259
325 // NYI msgsnd 260
326 // NYI msgrcv 261
327 DECL_TEMPLATE(darwin, shmat);                   // 262
328 DECL_TEMPLATE(darwin, shmctl);                  // 263
329 DECL_TEMPLATE(darwin, shmdt);                   // 264
330 DECL_TEMPLATE(darwin, shmget);                  // 265
331 DECL_TEMPLATE(darwin, shm_open);                // 266
332 DECL_TEMPLATE(darwin, shm_unlink);              // 267
333 DECL_TEMPLATE(darwin, sem_open);                // 268
334 DECL_TEMPLATE(darwin, sem_close);               // 269
335 DECL_TEMPLATE(darwin, sem_unlink);              // 270
336 DECL_TEMPLATE(darwin, sem_wait);                // 271
337 DECL_TEMPLATE(darwin, sem_trywait);             // 272
338 DECL_TEMPLATE(darwin, sem_post);                // 273
339 
340 #if DARWIN_VERS < DARWIN_10_10
341 // NYI sem_getvalue 274
342 #elif DARWIN_VERS >= DARWIN_10_10
343 DECL_TEMPLATE(darwin, sysctlbyname);            // 274
344 #endif
345 
346 DECL_TEMPLATE(darwin, sem_init);                // 275
347 DECL_TEMPLATE(darwin, sem_destroy);             // 276
348 DECL_TEMPLATE(darwin, open_extended)            // 277
349 // NYI umask_extended 278
350 DECL_TEMPLATE(darwin, stat_extended);           // 279
351 DECL_TEMPLATE(darwin, lstat_extended);          // 280
352 DECL_TEMPLATE(darwin, fstat_extended);          // 281
353 DECL_TEMPLATE(darwin, chmod_extended);          // 282
354 DECL_TEMPLATE(darwin, fchmod_extended);         // 283
355 DECL_TEMPLATE(darwin, access_extended);         // 284
356 DECL_TEMPLATE(darwin, settid);                  // 285
357 #if DARWIN_VERS >= DARWIN_10_6
358 DECL_TEMPLATE(darwin, gettid);                  // 286
359 #endif
360 // NYI setsgroups 287
361 // NYI getsgroups 288
362 // NYI setwgroups 289
363 // NYI getwgroups 290
364 // NYI mkfifo_extended 291
365 // NYI mkdir_extended 292
366 // NYI identitysvc 293
367 // NYI shared_region_check_np 294
368 // NYI shared_region_map_np 295
369 #if DARWIN_VERS >= DARWIN_10_6
370 // NYI vm_pressure_monitor 296
371 // NYI psynch_rw_longrdlock 297
372 // NYI psynch_rw_yieldwrlock 298
373 // NYI psynch_rw_downgrade 299
374 // NYI psynch_rw_upgrade 300
375 DECL_TEMPLATE(darwin, psynch_mutexwait);       // 301
376 DECL_TEMPLATE(darwin, psynch_mutexdrop);       // 302
377 DECL_TEMPLATE(darwin, psynch_cvbroad);         // 303
378 DECL_TEMPLATE(darwin, psynch_cvsignal);        // 304
379 DECL_TEMPLATE(darwin, psynch_cvwait);          // 305
380 DECL_TEMPLATE(darwin, psynch_rw_rdlock);       // 306
381 DECL_TEMPLATE(darwin, psynch_rw_wrlock);       // 307
382 DECL_TEMPLATE(darwin, psynch_rw_unlock);       // 308
383 // NYI psynch_rw_unlock2 309
384 #else
385 // old load_shared_file
386 // old reset_shared_file
387 // old new_system_shared_regions
388 // old shared_region_map_file_np
389 // old shared_region_make_private_np
390 // NYI __pthread_mutex_destroy 301
391 // NYI __pthread_mutex_init 302
392 // NYI __pthread_mutex_lock 303
393 // NYI __pthread_mutex_trylock 304
394 // NYI __pthread_mutex_unlock 305
395 // NYI __pthread_cond_init 306
396 // NYI __pthread_cond_destroy 307
397 // NYI __pthread_cond_broadcast 308
398 // NYI __pthread_cond_signal 309
399 #endif
400 // NYI getsid 310
401 // NYI settid_with_pid 311
402 #if DARWIN_VERS >= DARWIN_10_7
403 DECL_TEMPLATE(darwin, psynch_cvclrprepost);    // 312
404 #else
405 // NYI __pthread_cond_timedwait 312
406 #endif
407 // NYI aio_fsync 313
408 DECL_TEMPLATE(darwin, aio_return);             // 314
409 DECL_TEMPLATE(darwin, aio_suspend);            // 315
410 // NYI aio_cancel 316
411 DECL_TEMPLATE(darwin, aio_error);              // 317
412 DECL_TEMPLATE(darwin, aio_read);               // 318
413 DECL_TEMPLATE(darwin, aio_write);              // 319
414 // NYI lio_listio 320
415 // NYI __pthread_cond_wait 321
416 // NYI iopolicysys 322
417 // NYI process_policy 323
418 // NYI mlockall 324
419 // NYI munlockall 325
420 // 326
421 DECL_TEMPLATE(darwin, issetugid);               // 327
422 DECL_TEMPLATE(darwin, __pthread_kill);          // 328
423 DECL_TEMPLATE(darwin, __pthread_sigmask);       // 329
424 // NYI __sigwait 330
425 DECL_TEMPLATE(darwin, __disable_threadsignal);  // 331
426 DECL_TEMPLATE(darwin, __pthread_markcancel);    // 332
427 DECL_TEMPLATE(darwin, __pthread_canceled);      // 333
428 DECL_TEMPLATE(darwin, __semwait_signal);        // 334
429 // old utrace
430 DECL_TEMPLATE(darwin, proc_info);               // 336
431 DECL_TEMPLATE(darwin, sendfile);                // 337
432 DECL_TEMPLATE(darwin, stat64);                  // 338
433 DECL_TEMPLATE(darwin, fstat64);                 // 339
434 DECL_TEMPLATE(darwin, lstat64);                 // 340
435 DECL_TEMPLATE(darwin, stat64_extended);         // 341
436 DECL_TEMPLATE(darwin, lstat64_extended);        // 342
437 DECL_TEMPLATE(darwin, fstat64_extended);        // 343
438 DECL_TEMPLATE(darwin, getdirentries64);         // 344
439 DECL_TEMPLATE(darwin, statfs64);                // 345
440 DECL_TEMPLATE(darwin, fstatfs64);               // 346
441 DECL_TEMPLATE(darwin, getfsstat64);             // 347
442 DECL_TEMPLATE(darwin, __pthread_chdir);         // 348
443 DECL_TEMPLATE(darwin, __pthread_fchdir);        // 349
444 // NYI audit 350
445 DECL_TEMPLATE(darwin, auditon);                 // 351
446 // 352
447 // NYI getauid 353
448 // NYI setauid 354
449 // NYI getaudit 355
450 // NYI setaudit 356
451 DECL_TEMPLATE(darwin, getaudit_addr)            // 357
452 // NYI setaudit_addr 358
453 // NYI auditctl 359
454 DECL_TEMPLATE(darwin, bsdthread_create);        // 360
455 DECL_TEMPLATE(darwin, bsdthread_terminate);     // 361
456 DECL_TEMPLATE(darwin, kqueue);                  // 362
457 DECL_TEMPLATE(darwin, kevent);                  // 363
458 // NYI lchown 364
459 // NYI stack_snapshot 365
460 DECL_TEMPLATE(darwin, bsdthread_register);      // 366
461 DECL_TEMPLATE(darwin, workq_open);              // 367
462 DECL_TEMPLATE(darwin, workq_ops);               // 368
463 DECL_TEMPLATE(darwin, kevent64);                // 369
464 // 370
465 // 371
466 #if DARWIN_VERS >= DARWIN_10_6
467 DECL_TEMPLATE(darwin, __thread_selfid);         // 372
468 #endif
469 // 373
470 #if DARWIN_VERS >= DARWIN_10_11
471 // NYI kevent_qos                               // 374
472 #endif /* DARWIN_VERS >= DARWIN_10_11 */
473 // 375
474 // 376
475 // 377
476 // 378
477 // 379
478 // NYI __mac_execve 380
479 DECL_TEMPLATE(darwin, __mac_syscall);           // 381
480 // NYI __mac_get_file 382
481 // NYI __mac_set_file 383
482 // NYI __mac_get_link 384
483 // NYI __mac_set_link 385
484 // NYI __mac_get_proc 386
485 // NYI __mac_set_proc 387
486 // NYI __mac_get_fd 388
487 // NYI __mac_set_fd 389
488 // NYI __mac_get_pid 390
489 // NYI __mac_get_lcid 391
490 // NYI __mac_get_lctx 392
491 // NYI __mac_set_lctx 393
492 // NYI setlcid 394
493 // NYI getlcid 395
494 // GEN read_nocancel 396
495 // GEN write_nocancel 397
496 // GEN open_nocancel 398
497 // GEN close_nocancel 399
498 // GEN wait4_nocancel 400
499 // NOC recvmsg_nocancel 401
500 // NOC sendmsg_nocancel 402
501 // NOC recvfrom_nocancel 403
502 // NOC accept_nocancel 404
503 // GEN msync_nocancel 405
504 // NOC fcntl_nocancel 406
505 // GEN select_nocancel 407
506 // GEN fsync_nocancel 408
507 // NOC connect_nocancel 409
508 // NYI sigsuspend_nocancel 410
509 // GEN readv_nocancel 411
510 // GEN writev_nocancel 412
511 // NOC sendto_nocancel 413
512 // GEN pread_nocancel 414
513 // GEN pwrite_nocancel 415
514 // NYI waitid_nocancel 416
515 // GEN poll_nocancel 417
516 // NYI msgsnd_nocancel 418
517 // NYI msgrcv_nocancel 419
518 // NOC sem_wait_nocancel 420
519 // NYI aio_suspend_nocancel 421
520 // NYI __sigwait_nocancel 422
521 // NOC __semwait_signal_nocancel 423
522 // NYI __mac_mount 424
523 // NYI __mac_get_mount 425
524 // NYI __mac_getfsstat 426
525 DECL_TEMPLATE(darwin, fsgetpath);                // 427
526 DECL_TEMPLATE(darwin, audit_session_self);       // 428
527 // NYI audit_session_join 429
528 DECL_TEMPLATE(darwin, fileport_makeport);        // 430
529 
530 // NYI fileport_makefd 431
531 // NYI audit_session_port 432
532 // NYI pid_suspend 433
533 // NYI pid_resume 434
534 #if DARWIN_VERS >= DARWIN_10_10
535 // NYI pid_hibernate 435
536 // NYI pid_shutdown_sockets 436
537 #endif /* DARWIN_VERS >= DARWIN_10_10 */
538 // old old shared_region_slide_np 437
539 // NYI shared_region_map_and_slide_np            // 438
540 // NYI kas_info                                  // 439
541 // NYI memorystatus_control                      // 440
542 DECL_TEMPLATE(darwin, guarded_open_np);          // 441
543 DECL_TEMPLATE(darwin, guarded_close_np);         // 442
544 DECL_TEMPLATE(darwin, guarded_kqueue_np);        // 443
545 DECL_TEMPLATE(darwin, change_fdguard_np);        // 444
546 // old __proc_suppress 445
547 // NYI proc_rlimit_control                       // 446
548 DECL_TEMPLATE(darwin, connectx);                 // 447
549 DECL_TEMPLATE(darwin, disconnectx);              // 448
550 // NYI peeloff // 449
551 // NYI socket_delegate // 450
552 // NYI telemetry // 451
553 // NYI proc_uuid_policy // 452
554 // NYI memorystatus_get_level // 453
555 // NYI system_override // 454
556 // NYI vfs_purge // 455
557 #if DARWIN_VERS >= DARWIN_10_10
558 // NYI sfi_ctl         // 456
559 // NYI sfi_pidctl      // 457
560 // NYI coalition       // 458
561 // NYI coalition_info  // 459
562 DECL_TEMPLATE(darwin, necp_match_policy);        // 460
563 DECL_TEMPLATE(darwin, getattrlistbulk);          // 461
564 #endif /* DARWIN_VERS >= DARWIN_10_10 */
565 #if DARWIN_VERS >= DARWIN_10_12
566 // NYI clonefileat     // 462
567 #endif /* DARWIN_VERS >= DARWIN_10_12 */
568 #if DARWIN_VERS >= DARWIN_10_10
569 // NYI openat          // 463
570 // NYI openat_nocancel // 464
571 // NYI renameat        // 465
572 DECL_TEMPLATE(darwin, faccessat);                // 466
573 // NYI fchmodat        // 467
574 // NYI fchownat        // 468
575 // NYI fstatat         // 469
576 DECL_TEMPLATE(darwin, fstatat64);                // 470
577 // NYI linkat          // 471
578 // NYI unlinkat        // 472
579 DECL_TEMPLATE(darwin, readlinkat);               // 473
580 // NYI symlinkat       // 474
581 // NYI mkdirat         // 475
582 // NYI getattrlistat   // 476
583 // NYI proc_trace_log  // 477
584 DECL_TEMPLATE(darwin, bsdthread_ctl);            // 478
585 // NYI openbyid_np     // 479
586 // NYI recvmsg_x       // 480
587 // NYI sendmsg_x       // 481
588 // NYI thread_selfusage  // 482
589 DECL_TEMPLATE(darwin, csrctl);                      // 483
590 DECL_TEMPLATE(darwin, guarded_open_dprotected_np);  // 484
591 DECL_TEMPLATE(darwin, guarded_write_np);            // 485
592 DECL_TEMPLATE(darwin, guarded_pwrite_np);           // 486
593 DECL_TEMPLATE(darwin, guarded_writev_np);           // 487
594 // NYI renameatx_np                                 // 488
595 // NYI mremap_encrypted  // 489
596 #endif /* DARWIN_VERS >= DARWIN_10_10 */
597 #if DARWIN_VERS >= DARWIN_10_11
598 // NYI netagent_trigger                             // 490
599 // NYI stack_snapshot_with_config                   // 491
600 // NYI microstackshot                               // 492
601 // NYI grab_pgo_data                                // 493
602 // NYI persona                                      // 494
603 // 495
604 // 496
605 // 497
606 // 498
607 // NYI work_interval_ctl                            // 499
608 #endif /* DARWIN_VERS >= DARWIN_10_11 */
609 #if DARWIN_VERS >= DARWIN_10_12
610 DECL_TEMPLATE(darwin, getentropy);                  // 500
611 // NYI necp_open                                    // 501
612 // NYI necp_client_action                           // 502
613 // 503
614 // 504
615 // 505
616 // 506
617 // 507
618 // 508
619 // 509
620 // 510
621 // 511
622 // 512
623 // 513
624 // 514
625 // NYI ulock_wait                                   // 515
626 DECL_TEMPLATE(darwin, ulock_wake);                  // 516
627 // NYI fclonefileat                                 // 517
628 // NYI fs_snapshot                                  // 518
629 // 519
630 // NYI terminate_with_payload                       // 520
631 // NYI abort_with_payload                           // 521
632 #endif /* DARWIN_VERS >= DARWIN_10_12 */
633 
634 // Mach message helpers
635 DECL_TEMPLATE(darwin, mach_port_set_context);
636 DECL_TEMPLATE(darwin, host_info);
637 DECL_TEMPLATE(darwin, host_page_size);
638 DECL_TEMPLATE(darwin, host_get_io_master);
639 DECL_TEMPLATE(darwin, host_get_clock_service);
640 DECL_TEMPLATE(darwin, host_request_notification);
641 DECL_TEMPLATE(darwin, host_create_mach_voucher);
642 DECL_TEMPLATE(darwin, host_get_special_port);
643 DECL_TEMPLATE(darwin, mach_port_type);
644 DECL_TEMPLATE(darwin, mach_port_extract_member);
645 DECL_TEMPLATE(darwin, mach_port_allocate);
646 DECL_TEMPLATE(darwin, mach_port_deallocate);
647 DECL_TEMPLATE(darwin, mach_port_get_refs);
648 DECL_TEMPLATE(darwin, mach_port_mod_refs);
649 DECL_TEMPLATE(darwin, mach_port_get_set_status);
650 DECL_TEMPLATE(darwin, mach_port_move_member);
651 DECL_TEMPLATE(darwin, mach_port_destroy);
652 DECL_TEMPLATE(darwin, mach_port_request_notification);
653 DECL_TEMPLATE(darwin, mach_port_insert_right);
654 DECL_TEMPLATE(darwin, mach_port_extract_right);
655 DECL_TEMPLATE(darwin, mach_port_get_attributes);
656 DECL_TEMPLATE(darwin, mach_port_set_attributes);
657 DECL_TEMPLATE(darwin, mach_port_insert_member);
658 DECL_TEMPLATE(darwin, task_get_special_port);
659 DECL_TEMPLATE(darwin, task_set_special_port);
660 DECL_TEMPLATE(darwin, task_get_exception_ports);
661 DECL_TEMPLATE(darwin, semaphore_create);
662 DECL_TEMPLATE(darwin, semaphore_destroy);
663 DECL_TEMPLATE(darwin, task_policy_set);
664 DECL_TEMPLATE(darwin, mach_ports_register);
665 DECL_TEMPLATE(darwin, mach_ports_lookup);
666 DECL_TEMPLATE(darwin, task_info);
667 DECL_TEMPLATE(darwin, task_set_info);
668 DECL_TEMPLATE(darwin, task_threads);
669 DECL_TEMPLATE(darwin, task_suspend);
670 DECL_TEMPLATE(darwin, task_resume);
671 DECL_TEMPLATE(darwin, vm_allocate);
672 DECL_TEMPLATE(darwin, vm_deallocate);
673 DECL_TEMPLATE(darwin, vm_protect);
674 DECL_TEMPLATE(darwin, vm_inherit);
675 DECL_TEMPLATE(darwin, vm_read);
676 DECL_TEMPLATE(darwin, mach_vm_read);
677 DECL_TEMPLATE(darwin, vm_copy);
678 DECL_TEMPLATE(darwin, vm_read_overwrite);
679 DECL_TEMPLATE(darwin, vm_map);
680 DECL_TEMPLATE(darwin, vm_remap);
681 DECL_TEMPLATE(darwin, mach_make_memory_entry_64);
682 DECL_TEMPLATE(darwin, vm_purgable_control);
683 DECL_TEMPLATE(darwin, mach_vm_purgable_control);
684 DECL_TEMPLATE(darwin, mach_vm_allocate);
685 DECL_TEMPLATE(darwin, mach_vm_deallocate);
686 DECL_TEMPLATE(darwin, mach_vm_protect);
687 DECL_TEMPLATE(darwin, mach_vm_copy);
688 DECL_TEMPLATE(darwin, mach_vm_read_overwrite);
689 DECL_TEMPLATE(darwin, mach_vm_inherit);
690 DECL_TEMPLATE(darwin, mach_vm_map);
691 DECL_TEMPLATE(darwin, mach_vm_remap);
692 DECL_TEMPLATE(darwin, mach_vm_region_recurse);
693 DECL_TEMPLATE(darwin, thread_terminate);
694 DECL_TEMPLATE(darwin, thread_create);
695 DECL_TEMPLATE(darwin, thread_create_running);
696 DECL_TEMPLATE(darwin, thread_suspend);
697 DECL_TEMPLATE(darwin, thread_resume);
698 DECL_TEMPLATE(darwin, thread_get_state);
699 DECL_TEMPLATE(darwin, thread_policy);
700 DECL_TEMPLATE(darwin, thread_policy_set);
701 DECL_TEMPLATE(darwin, thread_info);
702 DECL_TEMPLATE(darwin, bootstrap_register);
703 DECL_TEMPLATE(darwin, bootstrap_look_up);
704 DECL_TEMPLATE(darwin, mach_msg_receive);
705 DECL_TEMPLATE(darwin, mach_msg_bootstrap);
706 DECL_TEMPLATE(darwin, mach_msg_host);
707 DECL_TEMPLATE(darwin, mach_msg_task);
708 DECL_TEMPLATE(darwin, mach_msg_thread);
709 
710 // Mach traps
711 #if DARWIN_VERS >= DARWIN_10_8
712 DECL_TEMPLATE(darwin, kernelrpc_mach_vm_allocate_trap);
713 DECL_TEMPLATE(darwin, kernelrpc_mach_vm_deallocate_trap);
714 DECL_TEMPLATE(darwin, kernelrpc_mach_vm_protect_trap);
715 DECL_TEMPLATE(darwin, kernelrpc_mach_vm_map_trap);
716 DECL_TEMPLATE(darwin, kernelrpc_mach_port_allocate_trap);
717 DECL_TEMPLATE(darwin, kernelrpc_mach_port_destroy_trap);
718 DECL_TEMPLATE(darwin, kernelrpc_mach_port_deallocate_trap);
719 DECL_TEMPLATE(darwin, kernelrpc_mach_port_mod_refs_trap);
720 DECL_TEMPLATE(darwin, kernelrpc_mach_port_move_member_trap);
721 DECL_TEMPLATE(darwin, kernelrpc_mach_port_insert_right_trap);
722 DECL_TEMPLATE(darwin, kernelrpc_mach_port_insert_member_trap);
723 DECL_TEMPLATE(darwin, kernelrpc_mach_port_extract_member_trap);
724 DECL_TEMPLATE(darwin, kernelrpc_mach_port_construct_trap);
725 DECL_TEMPLATE(darwin, kernelrpc_mach_port_destruct_trap);
726 DECL_TEMPLATE(darwin, kernelrpc_mach_port_guard_trap);
727 DECL_TEMPLATE(darwin, kernelrpc_mach_port_unguard_trap);
728 DECL_TEMPLATE(darwin, iopolicysys);
729 DECL_TEMPLATE(darwin, process_policy);
730 #endif /* DARWIN_VERS >= DARWIN_10_8 */
731 DECL_TEMPLATE(darwin, mach_msg_unhandled);
732 DECL_TEMPLATE(darwin, mach_msg_unhandled_check);
733 DECL_TEMPLATE(darwin, mach_msg);
734 DECL_TEMPLATE(darwin, mach_reply_port);
735 DECL_TEMPLATE(darwin, mach_thread_self);
736 DECL_TEMPLATE(darwin, mach_host_self);
737 DECL_TEMPLATE(darwin, mach_task_self);
738 DECL_TEMPLATE(darwin, syscall_thread_switch);
739 DECL_TEMPLATE(darwin, semaphore_signal);
740 DECL_TEMPLATE(darwin, semaphore_signal_all);
741 DECL_TEMPLATE(darwin, semaphore_signal_thread);
742 DECL_TEMPLATE(darwin, semaphore_wait);
743 DECL_TEMPLATE(darwin, semaphore_wait_signal);
744 DECL_TEMPLATE(darwin, semaphore_timedwait);
745 DECL_TEMPLATE(darwin, semaphore_timedwait_signal);
746 DECL_TEMPLATE(darwin, task_for_pid);
747 DECL_TEMPLATE(darwin, pid_for_task);
748 
749 #if DARWIN_VERS >= DARWIN_10_12
750 DECL_TEMPLATE(darwin, host_create_mach_voucher_trap);
751 DECL_TEMPLATE(darwin, task_register_dyld_image_infos);
752 DECL_TEMPLATE(darwin, task_register_dyld_shared_cache_image_info);
753 #endif /* DARWIN_VERS >= DARWIN_10_12 */
754 
755 DECL_TEMPLATE(darwin, mach_timebase_info);
756 DECL_TEMPLATE(darwin, mach_wait_until);
757 DECL_TEMPLATE(darwin, mk_timer_create);
758 DECL_TEMPLATE(darwin, mk_timer_destroy);
759 DECL_TEMPLATE(darwin, mk_timer_arm);
760 DECL_TEMPLATE(darwin, mk_timer_cancel);
761 DECL_TEMPLATE(darwin, iokit_user_client_trap);
762 DECL_TEMPLATE(darwin, swtch);
763 DECL_TEMPLATE(darwin, swtch_pri);
764 
765 // Machine-dependent traps
766 DECL_TEMPLATE(darwin, thread_fast_set_cthread_self);
767 
768 // syswrap-<arch>-darwin.c
769 #include <mach/mach.h>
770 extern
771 void thread_state_from_vex(thread_state_t mach_generic,
772                            thread_state_flavor_t flavor,
773                            mach_msg_type_number_t count,
774                            VexGuestArchState *vex_generic);
775 extern
776 void thread_state_to_vex(const thread_state_t mach_generic,
777                          thread_state_flavor_t flavor,
778                          mach_msg_type_number_t count,
779                          VexGuestArchState *vex_generic);
780 extern
781 ThreadState *build_thread(const thread_state_t state,
782                           thread_state_flavor_t flavor,
783                           mach_msg_type_number_t count);
784 extern
785 void hijack_thread_state(thread_state_t mach_generic,
786                          thread_state_flavor_t flavor,
787                          mach_msg_type_number_t count,
788                          ThreadState *tst);
789 extern
790 __attribute__((noreturn))
791 void call_on_new_stack_0_1 ( Addr stack,
792 			     Addr retaddr,
793 			     void (*f)(Word),
794                              Word arg1 );
795 
796 extern void pthread_hijack_asm(void);
797 extern void pthread_hijack(Addr self, Addr kport, Addr func, Addr func_arg,
798                            Addr stacksize, Addr flags, Addr sp);
799 extern void wqthread_hijack_asm(void);
800 extern void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem, Int reuse, Addr sp);
801 
802 extern Addr pthread_starter;
803 extern Addr wqthread_starter;
804 extern SizeT pthread_structsize;
805 
806 
807 #endif
808 
809 /*--------------------------------------------------------------------*/
810 /*--- end                                                          ---*/
811 /*--------------------------------------------------------------------*/
812