|
From: <sv...@va...> - 2010-06-07 15:51:27
|
Author: sewardj Date: 2010-06-07 13:35:24 +0100 (Mon, 07 Jun 2010) New Revision: 11156 Log: Syscall wrapper and VKI changes for MacOSX 10.6. (Part of a patch to add support for MacOSX 10.6, by Greg Parker, updated by Alexander Potapenko. See https://bugs.kde.org/show_bug.cgi?id=205241#c27) Modified: branches/MACOSX106/coregrind/m_syswrap/priv_syswrap-darwin.h branches/MACOSX106/coregrind/m_syswrap/syswrap-amd64-darwin.c branches/MACOSX106/coregrind/m_syswrap/syswrap-darwin.c branches/MACOSX106/include/vki/vki-darwin.h branches/MACOSX106/include/vki/vki-scnums-darwin.h Modified: branches/MACOSX106/coregrind/m_syswrap/priv_syswrap-darwin.h =================================================================== --- branches/MACOSX106/coregrind/m_syswrap/priv_syswrap-darwin.h 2010-06-07 12:32:10 UTC (rev 11155) +++ branches/MACOSX106/coregrind/m_syswrap/priv_syswrap-darwin.h 2010-06-07 12:35:24 UTC (rev 11156) @@ -429,7 +429,7 @@ // 369 // 370 // 371 -// 372 +DECL_TEMPLATE(darwin, __thread_selfid); // 372 // 373 // 374 // 375 @@ -484,6 +484,9 @@ // NYI __mac_mount 424 // NYI __mac_get_mount 425 // NYI __mac_getfsstat 426 +DECL_TEMPLATE(darwin, fsgetpath); // 427 +// NYI audit_session_self 428 +// NYI audit_session_join 429 // Mach message helpers DECL_TEMPLATE(darwin, host_info); @@ -498,9 +501,11 @@ DECL_TEMPLATE(darwin, mach_port_get_refs); DECL_TEMPLATE(darwin, mach_port_mod_refs); DECL_TEMPLATE(darwin, mach_port_get_set_status); +DECL_TEMPLATE(darwin, mach_port_move_member); DECL_TEMPLATE(darwin, mach_port_destroy); DECL_TEMPLATE(darwin, mach_port_request_notification); DECL_TEMPLATE(darwin, mach_port_insert_right); +DECL_TEMPLATE(darwin, mach_port_extract_right); DECL_TEMPLATE(darwin, mach_port_get_attributes); DECL_TEMPLATE(darwin, mach_port_set_attributes); DECL_TEMPLATE(darwin, mach_port_insert_member); @@ -537,6 +542,7 @@ DECL_TEMPLATE(darwin, thread_suspend); DECL_TEMPLATE(darwin, thread_get_state); DECL_TEMPLATE(darwin, thread_policy); +DECL_TEMPLATE(darwin, thread_policy_set); DECL_TEMPLATE(darwin, thread_info); DECL_TEMPLATE(darwin, bootstrap_register); DECL_TEMPLATE(darwin, bootstrap_look_up); Modified: branches/MACOSX106/coregrind/m_syswrap/syswrap-amd64-darwin.c =================================================================== --- branches/MACOSX106/coregrind/m_syswrap/syswrap-amd64-darwin.c 2010-06-07 12:32:10 UTC (rev 11155) +++ branches/MACOSX106/coregrind/m_syswrap/syswrap-amd64-darwin.c 2010-06-07 12:35:24 UTC (rev 11156) @@ -378,7 +378,23 @@ VexGuestAMD64State *vex; Addr stack; SizeT stacksize; + vki_sigset_t blockall; + /* When we enter here we hold no lock (!), so we better acquire it + pronto. Why do we hold no lock? Because (presumably) the only + way to get here is as a result of a SfMayBlock syscall + "workq_ops(WQOPS_THREAD_RETURN)", which will have dropped the + lock. At least that's clear for the 'reuse' case. The + non-reuse case? Dunno, perhaps it's a new thread the kernel + pulled out of a hat. In any case we still need to take a + lock. */ + VG_(acquire_BigLock_LL)("wqthread_hijack"); + + /* Start the thread with all signals blocked. VG_(scheduler) will + set the mask correctly when we finally get there. */ + VG_(sigfillset)(&blockall); + VG_(sigprocmask)(VKI_SIG_SETMASK, &blockall, NULL); + if (reuse) { // This thread already exists; we're merely re-entering // after leaving via workq_ops(WQOPS_THREAD_RETURN). @@ -418,6 +434,15 @@ if (reuse) { // Continue V's thread back in the scheduler. // The client thread is of course in another location entirely. + + /* Drop the lock before going into + ML_(wqthread_continue_NORETURN). The latter will immediately + attempt to reacquire it in non-LL mode, which is a bit + wasteful but I don't think is harmful. A better solution + would be to not drop the lock but instead "upgrade" it from a + LL lock to a full lock, but that's too much like hard work + right now. */ + VG_(release_BigLock_LL)("wqthread_hijack(1)"); ML_(wqthread_continue_NORETURN)(tst->tid); } else { @@ -450,6 +475,16 @@ VG_(am_do_sync_check)("after", "wqthread_hijack", 0); // Go! + /* Same comments as the 'release' in the then-clause. + start_thread_NORETURN calls run_thread_NORETURN calls + thread_wrapper which acquires the lock before continuing. + Let's hope nothing non-thread-local happens until that point. + + DDD: I think this is plain wrong .. if we get to + thread_wrapper not holding the lock, and someone has recycled + this thread slot in the meantime, we're hosed. Is that + possible, though? */ + VG_(release_BigLock_LL)("wqthread_hijack(2)"); call_on_new_stack_0_1(tst->os_state.valgrind_stack_init_SP, 0, start_thread_NORETURN, (Word)tst); } Modified: branches/MACOSX106/coregrind/m_syswrap/syswrap-darwin.c =================================================================== --- branches/MACOSX106/coregrind/m_syswrap/syswrap-darwin.c 2010-06-07 12:32:10 UTC (rev 11155) +++ branches/MACOSX106/coregrind/m_syswrap/syswrap-darwin.c 2010-06-07 12:35:24 UTC (rev 11156) @@ -66,7 +66,6 @@ #include <mach/mach.h> #include <mach/mach_vm.h> #include <semaphore.h> -#include <sys/acl.h> /* struct kauth_filesec */ /* --- !!! --- EXTERNAL HEADERS end --- !!! --- */ #define msgh_request_port msgh_remote_port @@ -1240,7 +1239,9 @@ { PRINT("futimes ( %ld, %#lx )", ARG1,ARG2); PRE_REG_READ2(long, "futimes", int, fd, struct timeval *, tvp); - if (ARG2 != 0) { + if (!ML_(fd_allowed)(ARG1, "futimes", tid, False)) { + SET_STATUS_Failure( VKI_EBADF ); + } else if (ARG2 != 0) { PRE_timeval_READ( "futimes(tvp[0])", ARG2 ); PRE_timeval_READ( "futimes(tvp[1])", ARG2+sizeof(struct vki_timeval) ); } @@ -1635,10 +1636,12 @@ { PRINT("kdebug_trace(%ld, %ld, %ld, %ld, %ld, %ld)", ARG1, ARG2, ARG3, ARG4, ARG5, ARG6); + /* + Don't check anything - some clients pass fewer arguments. PRE_REG_READ6(long, "kdebug_trace", int,"code", int,"arg1", int,"arg2", int,"arg3", int,"arg4", int,"arg5"); - // GrP fixme anything else? + */ } @@ -2018,7 +2021,7 @@ is just way wrong. [The trouble is with the size, which depends on a non-trival kernel computation] */ PRE_MEM_READ( "fchmod_extended(xsecurity)", ARG5, - sizeof(struct kauth_filesec) ); + sizeof(struct vki_kauth_filesec) ); } PRE(chmod_extended) @@ -2038,7 +2041,7 @@ is just way wrong. [The trouble is with the size, which depends on a non-trival kernel computation] */ PRE_MEM_READ( "chmod_extended(xsecurity)", ARG5, - sizeof(struct kauth_filesec) ); + sizeof(struct vki_kauth_filesec) ); } @@ -2241,6 +2244,9 @@ } attrspec; static const attrspec commonattr[] = { // This order is important. +#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) }, @@ -2263,8 +2269,14 @@ { 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 { 0, 0 } }; static const attrspec volattr[] = { @@ -2288,6 +2300,9 @@ { ATTR_VOL_MOUNTEDDEVICE, -1 }, { ATTR_VOL_ENCODINGSUSED, sizeof(uint64_t) }, { ATTR_VOL_CAPABILITIES, sizeof(vol_capabilities_attr_t) }, +#if DARWIN_VERS >= DARWIN_10_6 + { ATTR_VOL_UUID, sizeof(uuid_t) }, +#endif { ATTR_VOL_ATTRIBUTES, sizeof(vol_attributes_attr_t) }, { 0, 0 } }; @@ -2336,6 +2351,16 @@ d = attrBuf; dend = d + attrBufSize; +#if DARWIN_VERS >= DARWIN_10_6 + // ATTR_CMN_RETURNED_ATTRS tells us what's really here, if set + if (a[0] & ATTR_CMN_RETURNED_ATTRS) { + // fixme range check this? + a[0] &= ~ATTR_CMN_RETURNED_ATTRS; + fn(tid, d, sizeof(attribute_set_t)); + VG_(memcpy)(a, d, sizeof(a)); + } +#endif + for (g = 0; g < 5; g++) { for (i = 0; attrdefs[g][i].attrBit; i++) { uint32_t bit = attrdefs[g][i].attrBit; @@ -2398,10 +2423,15 @@ POST(getattrlist) { if (ARG4 > sizeof(vki_uint32_t)) { - // attrBuf is uint32_t bytes written followed by attr data + // 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)); - scan_attrlist(tid, (struct vki_attrlist *)ARG2, sizep+1, *sizep, &get1attr); + 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); } } @@ -2457,10 +2487,36 @@ POST_MEM_WRITE(ARG3, p - (char *)ARG3); - PRINT("got %d records, %d/%lu bytes\n", count, p-(char *)ARG3, ARG4); + PRINT("got %d records, %ld/%lu bytes\n", count, p-(char *)ARG3, ARG4); } +PRE(fsgetpath) +{ +#if VG_WORDSIZE == 4 + PRINT("fsgetpath(%#lx, %ld, %#lx {%lu,%lu}, %llu)", + ARG1, ARG2, ARG3, ((unsigned int *)ARG3)[0], ((unsigned int *)ARG3)[1], LOHI64(ARG4, ARG5)); + PRE_REG_READ5(ssize_t, "fsgetpath", + void*,"buf", size_t,"bufsize", + fsid_t *,"fsid", + vki_uint32_t, "objid_low32", vki_uint32_t, "objid_high32"); +#else + PRINT("fsgetpath(%#lx, %ld, %#lx {%u,%u}, %llu)", + ARG1, ARG2, ARG3, ((unsigned int *)ARG3)[0], ((unsigned int *)ARG3)[1], ARG4); + PRE_REG_READ4(ssize_t, "fsgetpath", + void*,"buf", size_t,"bufsize", + fsid_t *,"fsid", uint64_t,"objid"); +#endif + PRE_MEM_READ("fsgetpath(fsid)", ARG3, sizeof(fsid_t)); + PRE_MEM_WRITE("fsgetpath(buf)", ARG1, ARG2); +} + +POST(fsgetpath) +{ + POST_MEM_WRITE(ARG1, RES); +} + + PRE(exchangedata) { PRINT("exchangedata(%#lx(%s), %#lx(%s), %lu)", @@ -3248,6 +3304,9 @@ case VKI_A_SETCLASS: case VKI_A_SETPMASK: case VKI_A_SETFSIZE: +#if DARWIN_VERS >= DARWIN_10_6 + case VKI_A_SENDTRIGGER: +#endif // kernel reads data..data+length PRE_MEM_READ("auditon(data)", ARG2, ARG3); break; @@ -3266,6 +3325,9 @@ case VKI_A_GETCLASS: case VKI_A_GETPINFO: case VKI_A_GETPINFO_ADDR: +#if DARWIN_VERS >= DARWIN_10_6 + case VKI_A_GETSINFO_ADDR: +#endif // kernel reads and writes data..data+length // GrP fixme be precise about what gets read and written PRE_MEM_READ("auditon(data)", ARG2, ARG3); @@ -3299,6 +3361,9 @@ case VKI_A_SETCLASS: case VKI_A_SETPMASK: case VKI_A_SETFSIZE: +#if DARWIN_VERS >= DARWIN_10_6 + case VKI_A_SENDTRIGGER: +#endif // kernel reads data..data+length break; @@ -3316,6 +3381,9 @@ case VKI_A_GETCLASS: case VKI_A_GETPINFO: case VKI_A_GETPINFO_ADDR: +#if DARWIN_VERS >= DARWIN_10_6 + case VKI_A_GETSINFO_ADDR: +#endif // kernel reads and writes data..data+length // GrP fixme be precise about what gets read and written POST_MEM_WRITE(ARG2, ARG3); @@ -4384,6 +4452,51 @@ } +PRE(mach_port_move_member) +{ +#pragma pack(4) + typedef struct { + mach_msg_header_t Head; + NDR_record_t NDR; + mach_port_name_t member; + mach_port_name_t after; + } Request; +#pragma pack() + + Request *req = (Request *)ARG1; + + PRINT("mach_port_move_member(%s, %s, %s)", + name_for_port(MACH_REMOTE), + name_for_port(req->member), + name_for_port(req->after)); + /* + MACH_ARG(mach_port_move_member.member) = req->member; + MACH_ARG(mach_port_move_member.after) = req->after; + */ + AFTER = POST_FN(mach_port_move_member); +} + +POST(mach_port_move_member) +{ +#pragma pack(4) + typedef struct { + mach_msg_header_t Head; + NDR_record_t NDR; + kern_return_t RetCode; + mach_msg_trailer_t trailer; + } Reply; +#pragma pack() + + Reply *reply = (Reply *)ARG1; + + if (!reply->RetCode) { + // fixme port set tracker? + } else { + PRINT("mig return %d", reply->RetCode); + } +} + + PRE(mach_port_destroy) { #pragma pack(4) @@ -4504,6 +4617,34 @@ } +PRE(mach_port_extract_right) +{ +#pragma pack(4) + typedef struct { + mach_msg_header_t Head; + NDR_record_t NDR; + mach_port_name_t name; + mach_msg_type_name_t msgt_name; + } Request; +#pragma pack() + + Request *req = (Request *)ARG1; + + PRINT("mach_port_extract_right(%s, %s, %d)", + name_for_port(MACH_REMOTE), + name_for_port(req->name), req->msgt_name); + + AFTER = POST_FN(mach_port_extract_right); + + // fixme port tracker? +} + +POST(mach_port_extract_right) +{ + // fixme import_complex_message handles the returned result, right? +} + + PRE(mach_port_get_attributes) { #pragma pack(4) @@ -6092,6 +6233,7 @@ // GrP fixme semaphore destroy needed when thread creation fails // GrP fixme probably other cleanup too + // GrP fixme spinlocks might be good enough? // DDD: I'm not at all sure this is the right spot for this. It probably // should be in pthread_hijack instead, just before the call to @@ -6210,10 +6352,6 @@ } -POST(thread_policy) -{ -} - PRE(thread_policy) { mach_msg_header_t *mh = (mach_msg_header_t *)ARG1; @@ -6228,7 +6366,25 @@ AFTER = POST_FN(thread_policy); } +POST(thread_policy) +{ +} + +PRE(thread_policy_set) +{ + mach_msg_header_t *mh = (mach_msg_header_t *)ARG1; + + PRINT("thread_policy_set(%s, ...)", name_for_port(mh->msgh_request_port)); + + AFTER = POST_FN(thread_policy_set); +} + +POST(thread_policy_set) +{ +} + + PRE(thread_info) { mach_msg_header_t *mh = (mach_msg_header_t *)ARG1; @@ -6455,12 +6611,18 @@ case 3211: CALL_PRE(mach_port_get_set_status); return; + case 3212: + CALL_PRE(mach_port_move_member); + return; case 3213: CALL_PRE(mach_port_request_notification); return; case 3214: CALL_PRE(mach_port_insert_right); return; + case 3215: + CALL_PRE(mach_port_extract_right); + return; case 3217: CALL_PRE(mach_port_get_attributes); return; @@ -6602,6 +6764,9 @@ case 3616: CALL_PRE(thread_policy); return; + case 3617: + CALL_PRE(thread_policy_set); + return; default: // unknown message to a thread VG_(printf)("UNKNOWN thread message [id %d, to %s, reply 0x%x]\n", @@ -6766,7 +6931,7 @@ POST(mach_msg_unhandled) { - ML_(sync_mappings)("after", "mach_msg_unhandled", 0); + ML_(sync_mappings)("after", "mach_msg_receive (unhandled)", 0); } @@ -6906,11 +7071,12 @@ } +#if DARWIN_VERS <= DARWIN_10_5 PRE(__semwait_signal) { - /* args: int cond_sem, int mutex_sem, - int timeout, int relative, - time_t tv_sec, time_t tv_nsec */ + /* 10.5 args: int cond_sem, int mutex_sem, + int timeout, int relative, + time_t tv_sec, time_t tv_nsec */ PRINT("__semwait_signal(wait %s, signal %s, %ld, %ld, %lds:%ldns)", name_for_port(ARG1), name_for_port(ARG2), ARG3, ARG4, ARG5, ARG6); PRE_REG_READ6(long, "__semwait_signal", @@ -6920,8 +7086,33 @@ *flags |= SfMayBlock; } +#else +PRE(__semwait_signal) +{ + /* 10.5 args: int cond_sem, int mutex_sem, + int timeout, int relative, + const timespec *ts */ + PRINT("__semwait_signal(wait %s, signal %s, %ld, %ld, %#lx)", + name_for_port(ARG1), name_for_port(ARG2), ARG3, ARG4, ARG5); + PRE_REG_READ5(int, "__semwait_signal", + int,cond_sem, int,mutex_sem, + int,timeout, int,relative, + const struct vki_timespec *,ts); + + if (ARG5) PRE_MEM_READ ("__semwait_signal(ts)", + ARG5, sizeof(struct vki_timespec)); + + *flags |= SfMayBlock; +} +#endif +PRE(__thread_selfid) +{ + PRINT("__thread_selfid ()"); + PRE_REG_READ0(vki_uint64_t, "__thread_selfid"); +} + PRE(task_for_pid) { PRINT("task_for_pid(%s, %ld, %#lx)", name_for_port(ARG1), ARG2, ARG3); @@ -7474,7 +7665,11 @@ MACX_(__NR_sigreturn, sigreturn), // _____(__NR_chud), _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(186)), // ??? +#if DARWIN_VERS >= DARWIN_10_6 +// _____(__NR_fdatasync), +#else _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(187)), // ??? +#endif GENXY(__NR_stat, sys_newstat), GENXY(__NR_fstat, sys_newfstat), GENXY(__NR_lstat, sys_newlstat), @@ -7501,8 +7696,13 @@ // _____(__NR_ATPgetreq), // _____(__NR_ATPgetrsp), _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(213)), // Reserved for AppleTalk +#if DARWIN_VERS >= DARWIN_10_6 + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(214)), // old kqueue_from_portset_np + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(215)), // old kqueue_portset_np +#else // _____(__NR_kqueue_from_portset_np), // _____(__NR_kqueue_portset_np), +#endif // _____(__NR_mkcomplex), // _____(__NR_statv), // _____(__NR_lstatv), @@ -7515,8 +7715,13 @@ // _____(__NR_searchfs), GENX_(__NR_delete, sys_unlink), // _____(__NR_copyfile), +#if DARWIN_VERS >= DARWIN_10_6 +// _____(__NR_fgetattrlist), +// _____(__NR_fsetattrlist), +#else _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(228)), // ?? _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(229)), // ?? +#endif GENXY(__NR_poll, sys_poll), MACX_(__NR_watchevent, watchevent), MACXY(__NR_waitevent, waitevent), @@ -7532,7 +7737,11 @@ MACXY(__NR_fsctl, fsctl), MACX_(__NR_initgroups, initgroups), MACXY(__NR_posix_spawn, posix_spawn), +#if DARWIN_VERS >= DARWIN_10_6 +// _____(__NR_ffsctl), +#else _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(245)), // ??? +#endif _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(246)), // ??? // _____(__NR_nfsclnt), // _____(__NR_fhopen), @@ -7583,23 +7792,27 @@ // _____(__NR_identitysvc), // _____(__NR_shared_region_check_np), // _____(__NR_shared_region_map_np), +#if DARWIN_VERS >= DARWIN_10_6 +// _____(__NR_vm_pressure_monitor), +#else _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(296)), // old load_shared_file +#endif _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(297)), // old reset_shared_file _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(298)), // old new_system_shared_regions _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(299)), // old shared_region_map_file_np _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(300)), // old shared_region_make_private_np -// _____(__NR___pthread_mutex_destroy), -// _____(__NR___pthread_mutex_init), -// _____(__NR___pthread_mutex_lock), -// _____(__NR___pthread_mutex_trylock), -// _____(__NR___pthread_mutex_unlock), -// _____(__NR___pthread_cond_init), -// _____(__NR___pthread_cond_destroy), -// _____(__NR___pthread_cond_broadcast), -// _____(__NR___pthread_cond_signal), + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(301)), // ??? + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(302)), // ??? + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(303)), // ??? + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(304)), // ??? + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(305)), // ??? + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(306)), // ??? + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(307)), // ??? + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(308)), // ??? + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(309)), // ??? // _____(__NR_getsid), // _____(__NR_settid_with_pid), -// _____(__NR___pthread_cond_timedwait), + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(312)), // ??? // _____(__NR_aio_fsync), MACXY(__NR_aio_return, aio_return), MACX_(__NR_aio_suspend, aio_suspend), @@ -7608,7 +7821,7 @@ MACXY(__NR_aio_read, aio_read), MACX_(__NR_aio_write, aio_write), // _____(__NR_lio_listio), // 320 -// _____(__NR___pthread_cond_wait), + _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(321)), // ??? // _____(__NR_iopolicysys), _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(323)), // ??? // _____(__NR_mlockall), @@ -7651,15 +7864,23 @@ MACX_(__NR_bsdthread_terminate, bsdthread_terminate), MACXY(__NR_kqueue, kqueue), MACXY(__NR_kevent, kevent), -// _____(__NR_lchown), + GENX_(__NR_lchown, sys_lchown), // _____(__NR_stack_snapshot), MACX_(__NR_bsdthread_register, bsdthread_register), MACX_(__NR_workq_open, workq_open), MACXY(__NR_workq_ops, workq_ops), +#if DARWIN_VERS >= DARWIN_10_6 +// _____(__NR_kevent64), +#else _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(369)), // ??? +#endif _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(370)), // ??? _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(371)), // ??? +#if DARWIN_VERS >= DARWIN_10_6 + MACX_(__NR___thread_selfid, __thread_selfid), +#else _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(372)), // ??? +#endif _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(373)), // ??? _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(374)), // ??? _____(VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(375)), // ??? @@ -7715,6 +7936,12 @@ // _____(__NR___mac_mount), // _____(__NR___mac_get_mount), // _____(__NR___mac_getfsstat), +#if DARWIN_VERS >= DARWIN_10_6 + MACXY(__NR_fsgetpath, fsgetpath), +// _____(__NR_audit_session_self), +// _____(__NR_audit_session_join), +#endif + // _____(__NR_MAXSYSCALL) MACX_(__NR_DARWIN_FAKE_SIGRETURN, FAKE_SIGRETURN) }; Modified: branches/MACOSX106/include/vki/vki-darwin.h =================================================================== --- branches/MACOSX106/include/vki/vki-darwin.h 2010-06-07 12:32:10 UTC (rev 11155) +++ branches/MACOSX106/include/vki/vki-darwin.h 2010-06-07 12:35:24 UTC (rev 11156) @@ -792,6 +792,11 @@ typedef struct eventreq vki_eventreq; +#include <sys/acl.h> + +#define vki_kauth_filesec kauth_filesec + + #include <sys/ptrace.h> #define VKI_PTRACE_TRACEME PT_TRACE_ME @@ -1021,6 +1026,10 @@ #define VKI_A_GETPINFO_ADDR A_GETPINFO_ADDR #define VKI_A_GETKAUDIT A_GETKAUDIT #define VKI_A_SETKAUDIT A_SETKAUDIT +#if DARWIN_VERS >= DARWIN_10_6 +#define VKI_A_SENDTRIGGER A_SENDTRIGGER +#define VKI_A_GETSINFO_ADDR A_GETSINFO_ADDR +#endif #include <sys/aio.h> Modified: branches/MACOSX106/include/vki/vki-scnums-darwin.h =================================================================== --- branches/MACOSX106/include/vki/vki-scnums-darwin.h 2010-06-07 12:32:10 UTC (rev 11155) +++ branches/MACOSX106/include/vki/vki-scnums-darwin.h 2010-06-07 12:35:24 UTC (rev 11156) @@ -32,6 +32,9 @@ #define __VKI_SCNUMS_DARWIN_H +// need DARWIN_10_x definitions +#include "config.h" + // osfmk/mach/i386/syscall_sw.h // There are two syscall number encodings in Darwin. @@ -376,7 +379,11 @@ #define __NR_sigreturn VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(184) #define __NR_chud VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(185) /* 186 */ +#if DARWIN_VERS >= DARWIN_10_6 +#define __NR_fdatasync VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(187) +#else /* 187 */ +#endif #define __NR_stat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(188) #define __NR_fstat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(189) #define __NR_lstat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(190) @@ -403,8 +410,13 @@ #define __NR_ATPgetreq VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(211) #define __NR_ATPgetrsp VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(212) /* 213 Reserved for AppleTalk */ -#define __NR_kqueue_from_portset_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(214) -#define __NR_kqueue_portset_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(215) +#if DARWIN_VERS >= DARWIN_10_6 + /* 214 old kqueue_from_portset_np*/ + /* 215 old kqueue_portset_np*/ +#else +#define __NR_kqueue_from_portset_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(214) +#define __NR_kqueue_portset_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(215) +#endif #define __NR_mkcomplex VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(216) #define __NR_statv VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(217) #define __NR_lstatv VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(218) @@ -413,12 +425,17 @@ #define __NR_setattrlist VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(221) #define __NR_getdirentriesattr VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(222) #define __NR_exchangedata VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(223) - /* 224 checkuseraccess */ + /* 224 old checkuseraccess */ #define __NR_searchfs VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(225) #define __NR_delete VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(226) #define __NR_copyfile VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(227) +#if DARWIN_VERS >= DARWIN_10_6 +#define __NR_fgetattrlist VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(228) +#define __NR_fsetattrlist VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(229) +#else /* 228 */ /* 229 */ +#endif #define __NR_poll VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(230) #define __NR_watchevent VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(231) #define __NR_waitevent VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(232) @@ -434,7 +451,11 @@ #define __NR_fsctl VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(242) #define __NR_initgroups VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(243) #define __NR_posix_spawn VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(244) +#if DARWIN_VERS >= DARWIN_10_6 +#define __NR_ffsctl VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(245) +#else /* 245 */ +#endif /* 246 */ #define __NR_nfsclnt VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(247) #define __NR_fhopen VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(248) @@ -485,23 +506,27 @@ #define __NR_identitysvc VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(293) #define __NR_shared_region_check_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(294) #define __NR_shared_region_map_np VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(295) +#if DARWIN_VERS >= DARWIN_10_6 +#define __NR_vm_pressure_monitor VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(296) +#else /* 296 old load_shared_file */ +#endif /* 297 old reset_shared_file */ /* 298 old new_system_shared_regions */ /* 299 old shared_region_map_file_np */ /* 300 old shared_region_make_private_np */ -#define __NR___pthread_mutex_destroy VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(301) -#define __NR___pthread_mutex_init VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(302) -#define __NR___pthread_mutex_lock VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(303) -#define __NR___pthread_mutex_trylock VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(304) -#define __NR___pthread_mutex_unlock VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(305) -#define __NR___pthread_cond_init VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(306) -#define __NR___pthread_cond_destroy VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(307) -#define __NR___pthread_cond_broadcast VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(308) -#define __NR___pthread_cond_signal VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(309) + /* 301 */ + /* 302 */ + /* 303 */ + /* 304 */ + /* 305 */ + /* 306 */ + /* 307 */ + /* 308 */ + /* 309 */ #define __NR_getsid VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(310) #define __NR_settid_with_pid VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(311) -#define __NR___pthread_cond_timedwait VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(312) + /* 312 */ #define __NR_aio_fsync VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(313) #define __NR_aio_return VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(314) #define __NR_aio_suspend VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(315) @@ -510,7 +535,7 @@ #define __NR_aio_read VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(318) #define __NR_aio_write VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(319) #define __NR_lio_listio VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(320) -#define __NR___pthread_cond_wait VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(321) + /* 321 */ #define __NR_iopolicysys VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(322) /* 323 */ #define __NR_mlockall VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(324) @@ -559,10 +584,18 @@ #define __NR_bsdthread_register VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(366) #define __NR_workq_open VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(367) #define __NR_workq_ops VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(368) +#if DARWIN_VERS >= DARWIN_10_6 +#define __NR_kevent64 VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(369) +#else /* 369 */ +#endif /* 370 */ /* 371 */ +#if DARWIN_VERS >= DARWIN_10_6 +#define __NR___thread_selfid VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(372) // was UX64 +#else /* 372 */ +#endif /* 373 */ /* 374 */ /* 375 */ @@ -617,7 +650,19 @@ #define __NR___mac_mount VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(424) #define __NR___mac_get_mount VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(425) #define __NR___mac_getfsstat VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(426) +#if DARWIN_VERS >= DARWIN_10_6 +#define __NR_fsgetpath VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(427) +#define __NR_audit_session_self VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(428) +#define __NR_audit_session_join VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(429) +#endif + +#if DARWIN_VERS < DARWIN_10_6 #define __NR_MAXSYSCALL VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(427) +#elif DARWIN_VERSION < DARWIN_10_7 +#define __NR_MAXSYSCALL VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(430) +#else +#error unknown darwin version +#endif #define __NR_DARWIN_FAKE_SIGRETURN (1 + __NR_MAXSYSCALL) |