Addr pthread_starter = 0;
Addr wqthread_starter = 0;
SizeT pthread_structsize = 0;
+SizeT pthread_tsd_offset = 0;
PRE(bsdthread_register)
{
+#if DARWIN_VERS >= DARWIN_10_12
+ PRINT("bsdthread_register( %#lx, %#lx, %lu, %#lx, %#lx, %#lx, %#lx )",
+ ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7);
+ PRE_REG_READ7(int,"__bsdthread_register", void *,"threadstart",
+ void *,"wqthread", size_t,"pthsize",
+ void *,"stack_addr_hint", void *,"targetconc_ptr",
+ uint32_t,"dispatchqueue_offset", uint32_t,"tsd_offset");
+#else
PRINT("bsdthread_register( %#lx, %#lx, %lu )", ARG1, ARG2, ARG3);
PRE_REG_READ3(int,"__bsdthread_register", void *,"threadstart",
void *,"wqthread", size_t,"pthsize");
+#endif
pthread_starter = ARG1;
wqthread_starter = ARG2;
pthread_structsize = ARG3;
+ #if DARWIN_VERS >= DARWIN_10_12
+ typedef struct {
+ uint64_t version;
+ uint64_t dispatch_queue_offset;
+ uint64_t main_qos;
+ uint32_t tsd_offset;
+ uint32_t return_to_kernel_offset;
+ uint32_t mach_thread_self_offset;
+ } __attribute__ ((packed)) _pthread_registration_data;
+
+ pthread_tsd_offset = ((_pthread_registration_data*) ARG4)->tsd_offset;
+ #endif
ARG1 = (Word)&pthread_hijack_asm;
ARG2 = (Word)&wqthread_hijack_asm;
}
PRE(exit)
{
ThreadId t;
- ThreadState* tst;
PRINT("darwin exit( %ld )", SARG1);
PRE_REG_READ1(void, "exit", int, status);
- tst = VG_(get_ThreadState)(tid);
-
/* A little complex; find all the threads with the same threadgroup
as this one (including this one), and mark them to exit */
for (t = 1; t < VG_N_THREADS; t++) {
#if DARWIN_VERS >= DARWIN_10_6
{ ATTR_CMN_RETURNED_ATTRS, sizeof(attribute_set_t) },
#endif
- { ATTR_CMN_NAME, -1 },
- { ATTR_CMN_DEVID, sizeof(dev_t) },
- { ATTR_CMN_FSID, sizeof(fsid_t) },
- { ATTR_CMN_OBJTYPE, sizeof(fsobj_type_t) },
- { ATTR_CMN_OBJTAG, sizeof(fsobj_tag_t) },
- { ATTR_CMN_OBJID, sizeof(fsobj_id_t) },
- { ATTR_CMN_OBJPERMANENTID, sizeof(fsobj_id_t) },
- { ATTR_CMN_PAROBJID, sizeof(fsobj_id_t) },
- { ATTR_CMN_SCRIPT, sizeof(text_encoding_t) },
- { ATTR_CMN_CRTIME, sizeof(struct timespec) },
- { ATTR_CMN_MODTIME, sizeof(struct timespec) },
- { ATTR_CMN_CHGTIME, sizeof(struct timespec) },
- { ATTR_CMN_ACCTIME, sizeof(struct timespec) },
- { ATTR_CMN_BKUPTIME, sizeof(struct timespec) },
- { ATTR_CMN_FNDRINFO, 32 /*FileInfo+ExtendedFileInfo, or FolderInfo+ExtendedFolderInfo*/ },
- { ATTR_CMN_OWNERID, sizeof(uid_t) },
- { ATTR_CMN_GRPID, sizeof(gid_t) },
- { ATTR_CMN_ACCESSMASK, sizeof(uint32_t) },
- { ATTR_CMN_NAMEDATTRCOUNT, sizeof(uint32_t) },
- { ATTR_CMN_NAMEDATTRLIST, -1 },
- { ATTR_CMN_FLAGS, sizeof(uint32_t) },
- { ATTR_CMN_USERACCESS, sizeof(uint32_t) },
- { ATTR_CMN_EXTENDED_SECURITY, -1 },
- { ATTR_CMN_UUID, sizeof(guid_t) },
- { ATTR_CMN_GRPUUID, sizeof(guid_t) },
- { ATTR_CMN_FILEID, sizeof(uint64_t) },
- { ATTR_CMN_PARENTID, sizeof(uint64_t) },
+ { ATTR_CMN_NAME, -1 },
+ { ATTR_CMN_DEVID, sizeof(dev_t) },
+ { ATTR_CMN_FSID, sizeof(fsid_t) },
+ { ATTR_CMN_OBJTYPE, sizeof(fsobj_type_t) },
+ { ATTR_CMN_OBJTAG, sizeof(fsobj_tag_t) },
+ { ATTR_CMN_OBJID, sizeof(fsobj_id_t) },
+ { ATTR_CMN_OBJPERMANENTID, sizeof(fsobj_id_t) },
+ { ATTR_CMN_PAROBJID, sizeof(fsobj_id_t) },
+ { ATTR_CMN_SCRIPT, sizeof(text_encoding_t) },
+ { ATTR_CMN_CRTIME, sizeof(struct timespec) },
+ { ATTR_CMN_MODTIME, sizeof(struct timespec) },
+ { ATTR_CMN_CHGTIME, sizeof(struct timespec) },
+ { ATTR_CMN_ACCTIME, sizeof(struct timespec) },
+ { ATTR_CMN_BKUPTIME, sizeof(struct timespec) },
+ { ATTR_CMN_FNDRINFO, 32 /*FileInfo+ExtendedFileInfo, or FolderInfo+ExtendedFolderInfo*/ },
+ { ATTR_CMN_OWNERID, sizeof(uid_t) },
+ { ATTR_CMN_GRPID, sizeof(gid_t) },
+ { ATTR_CMN_ACCESSMASK, sizeof(uint32_t) },
+ { ATTR_CMN_NAMEDATTRCOUNT, sizeof(uint32_t) },
+ { ATTR_CMN_NAMEDATTRLIST, -1 },
+ { ATTR_CMN_FLAGS, sizeof(uint32_t) },
+ { ATTR_CMN_USERACCESS, sizeof(uint32_t) },
+ { ATTR_CMN_EXTENDED_SECURITY, -1 },
+ { ATTR_CMN_UUID, sizeof(guid_t) },
+ { ATTR_CMN_GRPUUID, sizeof(guid_t) },
+ { ATTR_CMN_FILEID, sizeof(uint64_t) },
+ { ATTR_CMN_PARENTID, sizeof(uint64_t) },
#if DARWIN_VERS >= DARWIN_10_6
{ ATTR_CMN_FULLPATH, -1 },
#endif
#if DARWIN_VERS >= DARWIN_10_8
- { ATTR_CMN_ADDEDTIME, -1 },
+ { ATTR_CMN_ADDEDTIME, -1 },
#endif
{ 0, 0 }
};
#if DARWIN_VERS >= DARWIN_10_6
{ ATTR_VOL_UUID, sizeof(uuid_t) },
#endif
- { ATTR_VOL_ATTRIBUTES, sizeof(vol_attributes_attr_t) },
+ { ATTR_VOL_ATTRIBUTES, sizeof(vol_attributes_attr_t) },
{ 0, 0 }
};
static const attrspec dirattr[] = {
// This order is important.
- { ATTR_DIR_LINKCOUNT, sizeof(uint32_t) },
- { ATTR_DIR_ENTRYCOUNT, sizeof(uint32_t) },
- { ATTR_DIR_MOUNTSTATUS, sizeof(uint32_t) },
+ { ATTR_DIR_LINKCOUNT, sizeof(uint32_t) },
+ { ATTR_DIR_ENTRYCOUNT, sizeof(uint32_t) },
+ { ATTR_DIR_MOUNTSTATUS, sizeof(uint32_t) },
{ 0, 0 }
};
static const attrspec fileattr[] = {
};
static const attrspec forkattr[] = {
// This order is important.
- { ATTR_FORK_TOTALSIZE, sizeof(off_t) },
- { ATTR_FORK_ALLOCSIZE, sizeof(off_t) },
+ { ATTR_FORK_TOTALSIZE, sizeof(off_t) },
+ { ATTR_FORK_ALLOCSIZE, sizeof(off_t) },
{ 0, 0 }
};
// mach_port_t rcv_name = (mach_port_t)ARG5;
size_t complex_header_size = 0;
- PRE_REG_READ7(long, "mach_msg",
- mach_msg_header_t*,"msg", mach_msg_option_t,"option",
- mach_msg_size_t,"send_size", mach_msg_size_t,"rcv_size",
- mach_port_t,"rcv_name", mach_msg_timeout_t,"timeout",
+ PRE_REG_READ7(long, "mach_msg",
+ mach_msg_header_t*,"msg", mach_msg_option_t,"option",
+ mach_msg_size_t,"send_size", mach_msg_size_t,"rcv_size",
+ mach_port_t,"rcv_name", mach_msg_timeout_t,"timeout",
mach_port_t,"notify");
// Assume default POST handler until specified otherwise
PRINT("audit-session %#lx", RES);
}
+PRE(fgetattrlist)
+{
+ PRINT("fgetattrlist(%ld, %#lx, %#lx, %lu, %lu)",
+ ARG1, ARG2, ARG3, ARG4, ARG5);
+ PRE_REG_READ5(int, "fgetattrlist",
+ int,fd, struct vki_attrlist *,attrList,
+ void *,attrBuf, vki_size_t,attrBufSize, unsigned int,options);
+ PRE_MEM_READ("fgetattrlist(attrList)", ARG2, sizeof(struct vki_attrlist));
+ PRE_MEM_WRITE("fgetattrlist(attrBuf)", ARG3, ARG4);
+}
+POST(fgetattrlist)
+{
+ if (ARG4 > sizeof(vki_uint32_t)) {
+ // attrBuf is uint32_t size followed by attr data
+ vki_uint32_t *sizep = (vki_uint32_t *)ARG3;
+ POST_MEM_WRITE(ARG3, sizeof(vki_uint32_t));
+ if (ARG5 & FSOPT_REPORT_FULLSIZE) {
+ // *sizep is bytes required for return value, including *sizep
+ } else {
+ // *sizep is actual bytes returned, including *sizep
+ }
+ scan_attrlist(tid, (struct vki_attrlist *)ARG2, sizep+1, MIN(*sizep, ARG4), &get1attr);
+ }
+}
+
#endif /* DARWIN_VERS >= DARWIN_10_6 */
// munge_???
}
+PRE(csops_audittoken)
+{
+ PRINT("csops_audittoken(%ld, %#lx, %#lx, %lu, %#lx)", SARG1, ARG2, ARG3, ARG4, ARG5);
+ PRE_REG_READ5(int, "csops_audittoken",
+ vki_pid_t, pid, uint32_t, ops,
+ void *, useraddr, vki_size_t, usersize, void *, uaudittoken);
+
+ if (ARG5 == 0) {
+ SET_STATUS_Failure( VKI_EINVAL );
+ return;
+ }
+
+ PRE_MEM_WRITE( "csops_audittoken(useraddr)", ARG3, ARG4 );
+
+ // If the pid is ours, don't mark the program as KILL or HARD
+ // Maybe we should keep track of this for later calls to STATUS
+ if (!ARG1 || VG_(getpid)() == ARG1) {
+ switch (ARG2) {
+ case VKI_CS_OPS_MARKINVALID:
+ case VKI_CS_OPS_MARKHARD:
+ case VKI_CS_OPS_MARKKILL:
+ SET_STATUS_Success(0);
+ }
+ }
+}
+
+POST(csops_audittoken)
+{
+ POST_MEM_WRITE( ARG3, ARG4 );
+}
+
#endif /* DARWIN_VERS >= DARWIN_10_8 */
PRE(faccessat)
{
- PRINT("faccessat(FIXME)(fd:%ld, path:%#lx(%s), amode:%#lx, flag:%#lx)",
- ARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
+ uint32_t fd = ARG1;
+ PRINT("faccessat(fd:%d, path:%#lx(%s), amode:%#lx, flag:%#lx)",
+ fd, ARG2, ARG2 ? (HChar*)ARG2 : "null", ARG3, ARG4);
PRE_REG_READ4(int, "faccessat",
int, fd, user_addr_t, path, int, amode, int, flag);
+
+ if (fd != VKI_AT_FDCWD && !ML_(fd_allowed)(fd, "faccessat", tid, False)) {
+ SET_STATUS_Failure( VKI_EBADF );
+ }
+ PRE_MEM_RASCIIZ( "faccessat(path)", ARG2 );
}
PRE(fstatat64)
{
- PRINT("fstatat64(FIXME)(fd:%ld, path:%#lx(%s), ub:%#lx, flag:%#lx)",
- ARG1, ARG2, (HChar*)ARG2, ARG3, ARG4);
+ uint32_t fd = ARG1;
+ PRINT("fstatat64(fd:%d, path:%#lx(%s), ub:%#lx, flag:%#lx)",
+ fd, ARG2, ARG2 ? (HChar*)ARG2 : "null", ARG3, ARG4);
PRE_REG_READ4(int, "fstatat64",
int, fd, user_addr_t, path, user_addr_t, ub, int, flag);
+
+ if (fd != VKI_AT_FDCWD && !ML_(fd_allowed)(fd, "fstatat64", tid, False)) {
+ SET_STATUS_Failure( VKI_EBADF );
+ }
+ PRE_MEM_RASCIIZ( "fstatat64(path)", ARG2 );
+ PRE_MEM_WRITE( "fstatat64(ub)", ARG3, sizeof(struct vki_stat64) );
+}
+POST(fstatat64)
+{
+ POST_MEM_WRITE( ARG3, sizeof(struct vki_stat64) );
}
PRE(readlinkat)
PRE(getentropy)
{
- PRINT("getentropy(buffer:%#lx, size:%ld) FIXME", ARG1, ARG2);
+ PRINT("getentropy(buffer:%#lx, size:%ld)", ARG1, ARG2);
PRE_REG_READ2(int, "getentropy",
void*, buffer, size_t, size);
+ PRE_MEM_WRITE( "getentropy(buffer)", ARG1, ARG2 );
+}
+POST(getentropy)
+{
+ vg_assert(SUCCESS);
+ POST_MEM_WRITE( ARG1, ARG2 );
}
static const HChar *ulop_name(int op)
PRE(ulock_wake)
{
- PRINT("ulock_wake(operation:%ld, addr:%#lx, wake_value:%ld) FIXME",
- ARG1, ARG2, ARG3);
+ uint ul_opcode = ARG1 & VKI_UL_OPCODE_MASK;
+ uint ul_flags = ARG1 & VKI_UL_FLAGS_MASK;
+ switch (ul_opcode) {
+ case VKI_UL_UNFAIR_LOCK:
+ case VKI_UL_COMPARE_AND_WAIT: {
+ const char* name = ulop_name(ul_opcode);
+ if (ul_flags & VKI_ULF_WAKE_THREAD) {
+ PRINT("ulock_wake(operation:%s (flags: %#x), addr:%#lx, wake_value:%s)",
+ name, ul_flags, ARG2, name_for_port(ARG3));
+ } else {
+ PRINT("ulock_wake(operation:%s (flags: %#x), addr:%#lx, wake_value:%ld /*unused*/)",
+ name, ul_flags, ARG2, ARG3);
+ }
PRE_REG_READ3(int, "ulock_wake",
uint32_t, operation, void*, addr, uint64_t, wake_value);
+ break;
+}
+
+ default:
+ PRINT("ulock_wake(operation:%ld (opcode: %u [??], flags: %#x), addr:%#lx, wake_value:%ld)", ARG1, ul_opcode, ul_flags, ARG2, ARG3);
+ log_decaying("UNKNOWN ulock_wake %ld (opcode: %u [??], flags: %#x)!", ARG1, ul_opcode, ul_flags);
+ break;
+ }
}
PRE(ulock_wait)
log_decaying("UNKNOWN ulock_wait %ld (opcode: %u [??], flags: %#x)!", ARG1, ul_opcode, ul_flags);
break;
}
+
+ *flags |= SfMayBlock;
+}
+
+PRE(terminate_with_payload)
+{
+ PRINT("terminate_with_payload"
+ "(pid: %ld, reason_namespace:%ld, reason_code:%ld, payload:%#lx, payload_size:%ld, reason_string:%s, reason_flags:%#x)",
+ ARG1, ARG2, ARG3, ARG4, ARG5, (char*)ARG6, (uint)ARG7);
+ PRE_REG_READ7(int, "terminate_with_payload", int, pid,
+ uint32_t, reason_namespace, uint64_t, reason_code, void*, payload,
+ uint32_t, payload_size, const char*, reason_string, uint64_t, reason_flags);
+ PRE_MEM_READ("abort_with_payload(payload)", ARG4, ARG5);
+ PRE_MEM_RASCIIZ("abort_with_payload(reason_string)", ARG6);
+}
+
+PRE(abort_with_payload)
+{
+ PRINT("abort_with_payload"
+ "(reason_namespace:%ld, reason_code:%ld, payload:%#lx, payload_size:%ld, reason_string:%s, reason_flags:%#x)",
+ ARG1, ARG2, ARG3, ARG4, (char*)ARG5, (uint)ARG6);
+ PRE_REG_READ6(uint32_t, "abort_with_payload",
+ uint32_t, reason_namespace, uint64_t, reason_code, void*, payload,
+ uint32_t, payload_size, const char*, reason_string, uint64_t, reason_flags);
+ PRE_MEM_READ("abort_with_payload(payload)", ARG3, ARG4);
+ PRE_MEM_RASCIIZ("abort_with_payload(reason_string)", ARG5);
}
PRE(host_create_mach_voucher_trap)
{
// munge_wwww -- no need to call helper
PRINT("host_create_mach_voucher_trap"
- "(host:%#lx, recipes:%#lx, recipes_size:%ld, voucher:%#lx) FIXME",
- ARG1, ARG2, ARG3, ARG4);
+ "(host:%s, recipes:%#lx, recipes_size:%ld, voucher:%#lx)",
+ name_for_port(ARG1), ARG2, ARG3, ARG4);
+ PRE_MEM_READ( "host_create_mach_voucher_trap(recipes)", ARG2, ARG3 );
+ PRE_MEM_WRITE( "host_create_mach_voucher_trap(voucher)", ARG4, sizeof(mach_port_name_t) );
+}
+POST(host_create_mach_voucher_trap)
+{
+ vg_assert(SUCCESS);
+ POST_MEM_WRITE( ARG4, sizeof(mach_port_name_t) );
}
PRE(task_register_dyld_image_infos)
}
}
+PRE(kevent_id)
+{
+ PRINT("kevent_id(id:%ld, changelist:%#lx, nchanges:%ld, eventlist:%#lx, nevents:%ld, data_out:%#lx, data_available:%ld, flags:%lx)",
+ ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7, ARG8);
+ PRE_REG_READ8(int,"kevent_id",
+ uint64_t,id,
+ const struct vki_kevent_qos_s *,changelist,
+ int,nchanges,
+ struct vki_kevent_qos_s *,eventlist,
+ int,nevents,
+ void*,data_out,
+ size_t*,data_available,
+ unsigned int,flags);
+
+ if (ARG3) PRE_MEM_READ ("kevent_id(changelist)",
+ ARG2, ARG3 * sizeof(struct vki_kevent_qos_s));
+ if (ARG5) PRE_MEM_WRITE("kevent_id(eventlist)",
+ ARG4, ARG5 * sizeof(struct vki_kevent_qos_s));
+ if (ARG7) PRE_MEM_WRITE ("kevent_id(data_out)",
+ ARG6, ARG7 * sizeof(void*));
+
+ *flags |= SfMayBlock;
+}
+
+POST(kevent_id)
+{
+ PRINT("kevent_id ret %ld dst %#lx (%zu)", RES, ARG4, sizeof(struct vki_kevent_qos_s));
+ if (RES > 0) {
+ POST_MEM_WRITE(ARG4, RES * sizeof(struct vki_kevent_qos_s));
+ }
+}
+
+PRE(thread_get_special_reply_port)
+{
+ PRINT("thread_get_special_reply_port()");
+}
+
+POST(thread_get_special_reply_port)
+{
+ record_named_port(tid, RES, MACH_PORT_RIGHT_RECEIVE, "special-reply-%p");
+ PRINT("special reply port %s", name_for_port(RES));
+}
+
#endif /* DARWIN_VERS >= DARWIN_10_13 */
/* ---------------------------------------------------------------------
MACX_(__NR_mount, mount),
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(168)), // old ustat
MACXY(__NR_csops, csops), // code-signing ops
+#if DARWIN_VERS >= DARWIN_10_8
+ MACXY(__NR_csops_audittoken, csops_audittoken), // 170
+#else
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(170)), // old table
+#endif
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(171)), // old wait3
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(172)), // old rpause
// _____(__NR_waitid),
GENX_(__NR_delete, sys_unlink),
// _____(__NR_copyfile),
#if DARWIN_VERS >= DARWIN_10_6
-// _____(__NR_fgetattrlist),
-// _____(__NR_fsetattrlist),
+ MACX_(__NR_fgetattrlist, fgetattrlist), // 228
+// _____(__NR_fsetattrlist),
#else
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(228)), // ??
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(229)), // ??
#if DARWIN_VERS >= DARWIN_10_8
MACX_(__NR_gettid, gettid), // 286
#endif
-// _____(__NR_setsgroups),
-// _____(__NR_getsgroups),
-// _____(__NR_setwgroups),
-// _____(__NR_getwgroups),
-// _____(__NR_mkfifo_extended),
-// _____(__NR_mkdir_extended),
-// _____(__NR_identitysvc),
-// _____(__NR_shared_region_check_np),
-// _____(__NR_shared_region_map_np),
+// _____(__NR_setsgroups),
+// _____(__NR_getsgroups),
+// _____(__NR_setwgroups),
+// _____(__NR_getwgroups),
+// _____(__NR_mkfifo_extended),
+// _____(__NR_mkdir_extended),
+// _____(__NR_identitysvc),
+// _____(__NR_shared_region_check_np),
+// _____(__NR_shared_region_map_np),
#if DARWIN_VERS >= DARWIN_10_6
// _____(__NR_vm_pressure_monitor),
// _____(__NR_psynch_rw_longrdlock),
#else
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(308)), // old __pthread_cond_timedwait
#endif
-// _____(__NR_aio_fsync),
+// _____(__NR_aio_fsync),
MACX_(__NR_aio_return, aio_return),
- MACX_(__NR_aio_suspend, aio_suspend),
-// _____(__NR_aio_cancel),
- MACX_(__NR_aio_error, aio_error),
- MACXY(__NR_aio_read, aio_read),
- MACX_(__NR_aio_write, aio_write),
+ MACX_(__NR_aio_suspend, aio_suspend),
+// _____(__NR_aio_cancel),
+ MACX_(__NR_aio_error, aio_error),
+ MACXY(__NR_aio_read, aio_read),
+ MACX_(__NR_aio_write, aio_write),
// _____(__NR_lio_listio), // 320
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(321)), // ???
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(326)), // ???
MACX_(__NR_issetugid, issetugid),
MACX_(__NR___pthread_kill, __pthread_kill),
- MACX_(__NR___pthread_sigmask, __pthread_sigmask),
+ MACX_(__NR___pthread_sigmask, __pthread_sigmask),
MACXY(__NR___sigwait, __sigwait), // 330
- MACX_(__NR___disable_threadsignal, __disable_threadsignal),
- MACX_(__NR___pthread_markcancel, __pthread_markcancel),
+ MACX_(__NR___disable_threadsignal, __disable_threadsignal),
+ MACX_(__NR___pthread_markcancel, __pthread_markcancel),
MACX_(__NR___pthread_canceled, __pthread_canceled),
MACX_(__NR___semwait_signal, __semwait_signal),
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(335)), // old utrace
#if DARWIN_VERS < DARWIN_10_11
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(374)), // ???
#endif
+#if DARWIN_VERS < DARWIN_10_13
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(375)), // ???
+#endif
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(376)), // ???
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(377)), // ???
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(378)), // ???
MACXY(__NR_openat_nocancel, openat_nocancel), // 464
#endif
MACX_(__NR_faccessat, faccessat), // 466
- MACX_(__NR_fstatat64, fstatat64), // 470
+ MACXY(__NR_fstatat64, fstatat64), // 470
MACX_(__NR_readlinkat, readlinkat), // 473
MACX_(__NR_bsdthread_ctl, bsdthread_ctl), // 478
- MACX_(__NR_csrctl, csrctl), // 483
+ MACXY(__NR_csrctl, csrctl), // 483
MACX_(__NR_guarded_open_dprotected_np, guarded_open_dprotected_np), // 484
MACX_(__NR_guarded_write_np, guarded_write_np), // 485
MACX_(__NR_guarded_pwrite_np, guarded_pwrite_np), // 486
// _____(__NR_kdebug_typefilter), // 177
// _____(__NR_clonefileat), // 462
// _____(__NR_renameatx_np), // 488
- MACX_(__NR_getentropy, getentropy), // 500
+ MACXY(__NR_getentropy, getentropy), // 500
// _____(__NR_necp_open), // 501
// _____(__NR_necp_client_action), // 502
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(503)), // ???
// _____(__NR_fclonefileat), // 517
// _____(__NR_fs_snapshot), // 518
_____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(519)), // ???
-// _____(__NR_terminate_with_payload), // 520
-// _____(__NR_abort_with_payload), // 521
+ MACX_(__NR_terminate_with_payload, terminate_with_payload), // 520
+ MACX_(__NR_abort_with_payload, abort_with_payload), // 521
#endif
#if DARWIN_VERS >= DARWIN_10_13
// _____(__NR_thread_selfcounts), // 186
-// _____(__NR_kevent_id, // 375
+ MACXY(__NR_kevent_id, kevent_id), // 375
// _____(__NR_necp_session_open), // 522
// _____(__NR_necp_session_action), // 523
// _____(__NR_setattrlistat), // 524
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(25)),
# endif
- MACXY(__NR_mach_reply_port, mach_reply_port),
- MACXY(__NR_thread_self_trap, mach_thread_self),
- MACXY(__NR_task_self_trap, mach_task_self),
- MACXY(__NR_host_self_trap, mach_host_self),
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(30)),
- MACXY(__NR_mach_msg_trap, mach_msg),
-// _____(__NR_mach_msg_overwrite_trap),
- MACX_(__NR_semaphore_signal_trap, semaphore_signal),
- MACX_(__NR_semaphore_signal_all_trap, semaphore_signal_all),
- MACX_(__NR_semaphore_signal_thread_trap, semaphore_signal_thread),
- MACX_(__NR_semaphore_wait_trap, semaphore_wait),
- MACX_(__NR_semaphore_wait_signal_trap, semaphore_wait_signal),
- MACX_(__NR_semaphore_timedwait_trap, semaphore_timedwait),
- MACX_(__NR_semaphore_timedwait_signal_trap, semaphore_timedwait_signal),
+ MACXY(__NR_mach_reply_port, mach_reply_port),
+ MACXY(__NR_thread_self_trap, mach_thread_self),
+ MACXY(__NR_task_self_trap, mach_task_self),
+ MACXY(__NR_host_self_trap, mach_host_self),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(30)),
+ MACXY(__NR_mach_msg_trap, mach_msg),
+// _____(__NR_mach_msg_overwrite_trap),
+ MACX_(__NR_semaphore_signal_trap, semaphore_signal),
+ MACX_(__NR_semaphore_signal_all_trap, semaphore_signal_all),
+ MACX_(__NR_semaphore_signal_thread_trap, semaphore_signal_thread),
+ MACX_(__NR_semaphore_wait_trap, semaphore_wait),
+ MACX_(__NR_semaphore_wait_signal_trap, semaphore_wait_signal),
+ MACX_(__NR_semaphore_timedwait_trap, semaphore_timedwait),
+ MACX_(__NR_semaphore_timedwait_signal_trap, semaphore_timedwait_signal),
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(40)), // -40
# if DARWIN_VERS >= DARWIN_10_9
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(43)),
# endif
-// _____(__NR_task_name_for_pid),
- MACXY(__NR_task_for_pid, task_for_pid),
- MACXY(__NR_pid_for_task, pid_for_task),
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(47)),
+// _____(__NR_task_name_for_pid),
+ MACXY(__NR_task_for_pid, task_for_pid),
+ MACXY(__NR_pid_for_task, pid_for_task),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(47)),
#if defined(VGA_x86)
-// _____(__NR_macx_swapon),
-// _____(__NR_macx_swapoff),
+// _____(__NR_macx_swapon),
+// _____(__NR_macx_swapoff),
#else
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(48)),
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(49)),
#endif
#if DARWIN_VERS >= DARWIN_10_13
-// _____(__NR_thread_get_special_reply_port, // 50
+ MACXY(__NR_thread_get_special_reply_port, thread_get_special_reply_port),
#else
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(50)),
#endif /* DARWIN_VERS >= DARWIN_10_13 */
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(68)),
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(69)),
#if DARWIN_VERS >= DARWIN_10_12
- MACX_(__NR_host_create_mach_voucher_trap, host_create_mach_voucher_trap),
-#else
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(70)),
+ MACXY(__NR_host_create_mach_voucher_trap, host_create_mach_voucher_trap),
+#else
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(70)),
#endif
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(71)),
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(72)),
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(73)),
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(74)),
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(75)),
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(76)),
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(77)),
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(78)),
- _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(79)),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(71)),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(72)),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(73)),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(74)),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(75)),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(76)),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(77)),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(78)),
+ _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(79)),
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(80)), // -80
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(81)),
_____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(82)),