]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Darwin: add most of the missing bits for Darwin 18 support
authorPaul Floyd <pjfloyd@wanadoo.fr>
Tue, 9 Dec 2025 07:58:46 +0000 (08:58 +0100)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Tue, 9 Dec 2025 07:58:46 +0000 (08:58 +0100)
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.

coregrind/m_syswrap/priv_syswrap-darwin.h
coregrind/m_syswrap/syswrap-darwin.c
coregrind/m_syswrap/syswrap-x86-darwin.c
docs/internals/Darwin-notes.txt
include/vki/vki-darwin.h
include/vki/vki-scnums-darwin.h
shared/vg_replace_strmem.c

index 579b3d8c6f803a8305de5366465bc9e49bdf8c4e..a96ce36b495221c301a015384e296caa49de6a1e 100644 (file)
@@ -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);
 
index 0113d388dee46f39252d2a5b415e816ef9c26dc6..80bd013f36bb1b8416fe828dd39625acccc8fe94 100644 (file)
@@ -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),
index a0bc1a1e7a13bb732c0fe7d47a6f9a5052273f35..76416b06d9a0acc12e30ca8a4e28d9e7cf090693 100644 (file)
@@ -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"
index 61d1931ad52c5999cc7ddaa61f0aff534e656d79..0cedd16981c09bedfa34312f669f9a95a65b6b1e 100644 (file)
@@ -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
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
index e89888e65a4f971db14692c01d5dff0472d46a7e..056bd9e8905621263d3babf8a6079299ff1441a1 100644 (file)
@@ -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
index 9e5c8696456792b599386343ef687937b4dda524..70b110e816e397c2aca524afa1d3034da5a157bc 100644 (file)
 #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)
 #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
index d9de90b41160ef8d3ebc6efe6fa141ced54a5c05..aed02d15195a1952989a0dae47afd71dba50a9a9 100644 (file)
@@ -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)