]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
macos: Fix unhandled syscall: mach:43 (mach_generate_activity_id). bz#385279
authorRhys Kidd <rhyskidd@gmail.com>
Sun, 11 Feb 2018 22:16:38 +0000 (17:16 -0500)
committerRhys Kidd <rhyskidd@gmail.com>
Mon, 12 Feb 2018 00:56:58 +0000 (19:56 -0500)
Based upon a patch provided by Louis Brunner <louis.brunner.fr@gmail.com> and
tested by:
  FX           <fxcoudert@gcc.gnu.org>
  Chris Wilson <chris+kde@qwirx.com>

NEWS
coregrind/m_syswrap/priv_syswrap-darwin.h
coregrind/m_syswrap/syswrap-darwin.c
include/vki/vki-scnums-darwin.h

diff --git a/NEWS b/NEWS
index 4bdffbc3588c35f8fec432cd1817e96646858a7b..e05291f40d8fa18713c99cf0296548d6dea13bd3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -79,6 +79,7 @@ where XXXXXX is the bug number as listed below.
 385207  PPC64, generate_store_FPRF() generates too many Iops
 385208  PPC64, xxperm instruction exhausts temporary memory
 385210  PPC64, vpermr instruction could exhaust temporary memory
+385279  unhandled syscall: mach:43 (mach_generate_activity_id)
 385183  PPC64, Add support for xscmpeqdp, xscmpgtdp, xscmpgedp, xsmincdp instructions
 385334  PPC64, fix vpermr, xxperm, xxpermr mask value.
 385868  glibc ld.so _dl_runtime_resolve_avx_slow conditional jump warning.
index 29e491dc75cfccd18030ffbecf21bb9a59355a94..d344f078221cf38f91057a5567dc6e23e9e4398e 100644 (file)
@@ -772,6 +772,7 @@ DECL_TEMPLATE(darwin, pid_for_task);
 DECL_TEMPLATE(darwin, host_create_mach_voucher_trap);
 DECL_TEMPLATE(darwin, task_register_dyld_image_infos);
 DECL_TEMPLATE(darwin, task_register_dyld_shared_cache_image_info);
+DECL_TEMPLATE(darwin, mach_generate_activity_id);
 #endif /* DARWIN_VERS >= DARWIN_10_12 */
 
 DECL_TEMPLATE(darwin, mach_timebase_info);
index fe732b26cc8a22a39ae8405b3abfc4d121486fb9..9969afaf846081adf00388567de6a1e28c6471de 100644 (file)
@@ -9979,6 +9979,32 @@ POST(task_register_dyld_shared_cache_image_info)
     }
 }
 
+PRE(mach_generate_activity_id)
+{
+    // munge_www -- no need to call helper
+    PRINT("mach_generate_activity_id"
+        "(target:%s, count:%ld)",
+        name_for_port(ARG1), ARG2);
+    PRE_REG_READ3(long, "mach_generate_activity_id",
+                  mach_port_name_t, target, int, count, uint64_t *, activity_id);
+    if (ARG2 <= 0 || ARG2 > MACH_ACTIVITY_ID_COUNT_MAX) {
+       SET_STATUS_Failure( VKI_EINVAL );
+    }
+    if (ML_(safe_to_deref)( (void*)ARG3, sizeof(vki_uint64_t*) )) {
+       PRE_MEM_WRITE( "mach_generate_activity_id(activity_id)", ARG3, sizeof(vki_uint64_t) );
+    } else {
+       SET_STATUS_Failure( VKI_EFAULT );
+    }
+}
+
+POST(mach_generate_activity_id)
+{
+    if (ML_(safe_to_deref)( (void*)ARG3, sizeof(vki_uint64_t*) )) {
+       POST_MEM_WRITE( ARG3, sizeof(vki_uint64_t) );
+       PRINT("-> activity_id:%#llx", *(uint64_t*)ARG3);
+    }
+}
+
 #endif /* DARWIN_VERS >= DARWIN_10_12 */
 
 
@@ -10689,18 +10715,14 @@ const SyscallTableEntry ML_(mach_trap_table)[] = {
    _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(42)),
 #  endif
 
-#  if DARWIN_VERS >= DARWIN_10_10
+#  if DARWIN_VERS >= DARWIN_10_12
+   MACXY(__NR_mach_generate_activity_id, mach_generate_activity_id),
+#  elif DARWIN_VERS >= DARWIN_10_10
    _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(43)),
-#  else
-#    if DARWIN_VERS == DARWIN_10_9
+#  elif defined(VGA_x86) || DARWIN_VERS == DARWIN_10_9
 // _____(__NR_map_fd),
-#    else
-#      if defined(VGA_x86)
-// _____(__NR_map_fd), 
-#      else
+#  else
    _____(VG_DARWIN_SYSCALL_CONSTRUCT_MACH(43)),
-#      endif
-#    endif
 #  endif
 
 // _____(__NR_task_name_for_pid), 
index d600ed31cf57c414e9f502290110f8ccde0b0e21..99cb342fab454849fcdf504bd5d4b42a48f3c874 100644 (file)
 #define __NR_kernelrpc_mach_port_unguard_trap VG_DARWIN_SYSCALL_CONSTRUCT_MACH(42)
 #endif
 
-#if defined(VGA_x86) || DARWIN_VERS == DARWIN_10_9
+#if DARWIN_VERS >= DARWIN_10_12
+#define __NR_mach_generate_activity_id        VG_DARWIN_SYSCALL_CONSTRUCT_MACH(43)
+#elif defined(VGA_x86) || DARWIN_VERS == DARWIN_10_9
 #define __NR_map_fd                           VG_DARWIN_SYSCALL_CONSTRUCT_MACH(43)
 #endif