From: Paul Floyd Date: Tue, 9 Dec 2025 07:58:46 +0000 (+0100) Subject: Darwin: add most of the missing bits for Darwin 18 support X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eca0ea6e9aa5914847f3f229c633b812ed5e1da8;p=thirdparty%2Fvalgrind.git Darwin: add most of the missing bits for Darwin 18 support Code merged from Louis Brunner. Also add a but of doc about the oldest OSX that we support. Unfortunately I don't know which version that is. --- diff --git a/coregrind/m_syswrap/priv_syswrap-darwin.h b/coregrind/m_syswrap/priv_syswrap-darwin.h index 579b3d8c6..a96ce36b4 100644 --- a/coregrind/m_syswrap/priv_syswrap-darwin.h +++ b/coregrind/m_syswrap/priv_syswrap-darwin.h @@ -646,6 +646,10 @@ DECL_TEMPLATE(darwin, abort_with_payload); // 521 // NYI ntp_gettime // 528 // NYI os_fault_with_payload // 529 #endif /* DARWIN_VERS >= DARWIN_10_13 */ +#if DARWIN_VERS >= DARWIN_10_14 +// NYI kqueue_workloop_ctl // 530 +// NYI __mach_bridge_remote_time // 531 +#endif /* DARWIN_VERS >= DARWIN_10_14 */ // Mach message helpers DECL_TEMPLATE(darwin, mach_port_set_context); @@ -786,6 +790,10 @@ DECL_TEMPLATE(darwin, iokit_user_client_trap); DECL_TEMPLATE(darwin, swtch); DECL_TEMPLATE(darwin, swtch_pri); +#if DARWIN_VERS >= DARWIN_10_14 +DECL_TEMPLATE(darwin, kernelrpc_mach_port_get_attributes_trap); +#endif /* DARWIN_VERS >= DARWIN_10_14 */ + // Machine-dependent traps DECL_TEMPLATE(darwin, thread_fast_set_cthread_self); diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index 0113d388d..80bd013f3 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -1776,6 +1776,9 @@ static const HChar *name_for_fcntl(UWord cmd) { F(F_ADDFILESIGS_FOR_DYLD_SIM); F(F_BARRIERFSYNC); F(F_ADDFILESIGS_RETURN); +# endif +# if DARWIN_VERS >= DARWIN_10_14 + F(F_CHECK_LV); # endif default: return "UNKNOWN"; @@ -1975,6 +1978,13 @@ PRE(fcntl) break; # endif +# if DARWIN_VERS >= DARWIN_10_14 + case VKI_F_CHECK_LV: /* Check if Library Validation allows this Mach-O file to be + mapped into the calling process */ + // FIXME: Dejan + break; +# endif + default: PRINT("fcntl ( %lu, %lu [??] )", ARG1, ARG2); log_decaying("UNKNOWN fcntl %lu!", ARG2); @@ -10916,9 +10926,29 @@ 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 */ + +/* --------------------------------------------------------------------- + Added for macOS 10.14 (Mojave) + ------------------------------------------------------------------ */ + +#if DARWIN_VERS >= DARWIN_10_14 +PRE(kernelrpc_mach_port_get_attributes_trap) +{ + PRINT("kernelrpc_mach_port_get_attributes_trap( %s, %s, %ld, %#lx, %#lx )", + name_for_port(ARG1), name_for_port(ARG2), SARG3, ARG4, ARG5); + PRE_REG_READ5(kern_return_t, "kernelrpc_mach_port_get_attributes_trap", + mach_port_name_t, target, mach_port_name_t, name, mach_port_flavor_t, flavor, + mach_port_info_t, port_info_out, mach_msg_type_number_t*, port_info_outCnt); + PRE_MEM_READ( "kernelrpc_mach_port_get_attributes_trap(port_info_outCnt)", ARG5, sizeof(mach_msg_type_number_t)); + PRE_MEM_WRITE( "kernelrpc_mach_port_get_attributes_trap(port_info_outCnt)", ARG5, sizeof(mach_msg_type_number_t)); + mach_msg_type_number_t count = *(mach_msg_type_number_t*)ARG5; + if (count > 0) { + PRE_MEM_WRITE( "kernelrpc_mach_port_get_attributes_trap(port_info_out)", ARG4, count * sizeof(integer_t)); + } +} +#endif /* DARWIN_VERS >= DARWIN_10_14 */ /* --------------------------------------------------------------------- syscall tables ------------------------------------------------------------------ */ @@ -11541,6 +11571,10 @@ const SyscallTableEntry ML_(syscall_table)[] = { // _____(__NR_ntp_adjtime), // 527 // _____(__NR_ntp_gettime), // 528 // _____(__NR_os_fault_with_payload), // 529 +#endif +#if DARWIN_VERS >= DARWIN_10_14 +// _____(__NR_kqueue_workloop_ctl), // 530 +// _____(__NR___mach_bridge_remote_time), // 531 #endif MACX_(__NR_darwin_fake_sigreturn, fake_sigreturn) @@ -11634,7 +11668,12 @@ const SyscallTableEntry ML_(mach_trap_table)[] = { 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), + +# if DARWIN_VERS >= DARWIN_10_14 + MACX_(__NR_kernelrpc_mach_port_get_attributes_trap, kernelrpc_mach_port_get_attributes_trap), +# else _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(40)), // -40 +# endif # if DARWIN_VERS >= DARWIN_10_9 MACX_(__NR_kernelrpc_mach_port_guard_trap, kernelrpc_mach_port_guard_trap), diff --git a/coregrind/m_syswrap/syswrap-x86-darwin.c b/coregrind/m_syswrap/syswrap-x86-darwin.c index a0bc1a1e7..76416b06d 100644 --- a/coregrind/m_syswrap/syswrap-x86-darwin.c +++ b/coregrind/m_syswrap/syswrap-x86-darwin.c @@ -430,8 +430,7 @@ void wqthread_hijack(Addr self, Addr kport, Addr stackaddr, Addr workitem, || DARWIN_VERS == DARWIN_10_10 \ || DARWIN_VERS == DARWIN_10_11 \ || DARWIN_VERS == DARWIN_10_12 \ - || DARWIN_VERS == DARWIN_10_13 \ - || DARWIN_VERS == DARWIN_10_14 + || DARWIN_VERS == DARWIN_10_13 UWord magic_delta = 0xB0; # else # error "magic_delta: to be computed on new OS version" diff --git a/docs/internals/Darwin-notes.txt b/docs/internals/Darwin-notes.txt index 61d1931ad..0cedd1698 100644 --- a/docs/internals/Darwin-notes.txt +++ b/docs/internals/Darwin-notes.txt @@ -58,6 +58,20 @@ storage.c to choose between symbol table names vs. Dwarf3 names. So this machinery was removed in r10155. +Mac OS X / macOS supported platforms +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Since January 2025 (and thus Valgrind 3.25) we have required a compiler +that supports C11. See 42eb19c0da3bb280de88b7f8fc9b7caaa44aedfem for +details. We also need an xcrun that supports --show-sdk-path (since +December 2025). I'm not sure when both of those became supported. +Definitely neither are on Mac OS 10.7 with XCode 4.6.3. And equally +definitely both are supported on macOS 10.13 with XCode 10.1. That +means that I don't know which is the oldest version of macOS that +will build Valgrind (as of December 2025). Somewhere between 10.8 (Darwin 12) +and 10.12 (Darwin 16). + + Valgrind-developer notes, todos re the MacOSX port ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/include/vki/vki-darwin.h b/include/vki/vki-darwin.h index e89888e65..056bd9e89 100644 --- a/include/vki/vki-darwin.h +++ b/include/vki/vki-darwin.h @@ -408,6 +408,9 @@ typedef uint32_t vki_u32; # define VKI_F_BARRIERFSYNC F_BARRIERFSYNC # define VKI_F_ADDFILESIGS_RETURN F_ADDFILESIGS_RETURN #endif +#if DARWIN_VERS >= DARWIN_10_14 +# define VKI_F_CHECK_LV F_CHECK_LV +#endif #define VKI_F_FULLFSYNC F_FULLFSYNC #define VKI_F_PATHPKG_CHECK F_PATHPKG_CHECK #define VKI_F_FREEZE_FS F_FREEZE_FS diff --git a/include/vki/vki-scnums-darwin.h b/include/vki/vki-scnums-darwin.h index 9e5c86964..70b110e81 100644 --- a/include/vki/vki-scnums-darwin.h +++ b/include/vki/vki-scnums-darwin.h @@ -174,6 +174,10 @@ #define __NR_semaphore_timedwait_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(38) #define __NR_semaphore_timedwait_signal_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(39) +#if DARWIN_VERS >= DARWIN_10_14 +#define __NR_kernelrpc_mach_port_get_attributes_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(40) +#endif + #if DARWIN_VERS >= DARWIN_10_9 #define __NR_kernelrpc_mach_port_guard_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(41) #define __NR_kernelrpc_mach_port_unguard_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(42) @@ -850,6 +854,11 @@ #define __NR_os_fault_with_payload VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(529) #endif /* DARWIN_VERS >= DARWIN_10_13 */ +#if DARWIN_VERS >= DARWIN_10_14 +#define __NR_kqueue_workloop_ctl VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(530) +#define __NR___mach_bridge_remote_time VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(531) +#endif /* DARWIN_VERS >= DARWIN_10_14 */ + #define __NR_darwin_fake_sigreturn VG_DARWIN_SYSCALL_CONSTRUCT_UNIX(1000) #endif diff --git a/shared/vg_replace_strmem.c b/shared/vg_replace_strmem.c index d9de90b41..aed02d151 100644 --- a/shared/vg_replace_strmem.c +++ b/shared/vg_replace_strmem.c @@ -388,7 +388,6 @@ static inline void my_exit ( int x ) #elif defined(VGO_darwin) STRNCAT(VG_Z_LIBSYSTEM_C_SONAME, strncat) STRNCAT(VG_Z_LIBSYSTEM_C_SONAME, __strncat_chk) - //STRNCAT(VG_Z_DYLD, strncat) #elif defined(VGO_solaris) STRNCAT(VG_Z_LIBC_SONAME, strncat)