]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
macos: Fix UNKNOWN task message [id 3444, to mach_task_self(), reply 0x603] (task_reg...
authorRhys Kidd <rhyskidd@gmail.com>
Mon, 1 May 2017 00:41:40 +0000 (00:41 +0000)
committerRhys Kidd <rhyskidd@gmail.com>
Mon, 1 May 2017 00:41:40 +0000 (00:41 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16327

NEWS
coregrind/m_syswrap/priv_syswrap-darwin.h
coregrind/m_syswrap/syswrap-darwin.c

diff --git a/NEWS b/NEWS
index cdd31798ff956bf82b5b9df628730e9468d94668..57fc0d961cafa89bec32b14a0490f2ae8d2d0907 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -158,6 +158,8 @@ where XXXXXX is the bug number as listed below.
 378673  Update libiberty demangler
 379039  syscall wrapper for prctl(PR_SET_NAME) must not check more than 16 bytes
 379094  Valgrind reports INTERNAL ERROR in rt_sigsuspend syscall wrapper
+379371  UNKNOWN task message [id 3444, to mach_task_self(), reply 0x603]
+        (task_register_dyld_image_infos)
 379390  unhandled syscall: mach:70 (host_create_mach_voucher_trap)
 
 Release 3.12.0 (20 October 2016)
index e5cd024e92e73bd2a0f5a18a632d1822e9bedb63..5942104f7f9b82bcdaa117ba596d07754913ee6f 100644 (file)
@@ -748,6 +748,7 @@ DECL_TEMPLATE(darwin, pid_for_task);
 
 #if DARWIN_VERS >= DARWIN_10_12
 DECL_TEMPLATE(darwin, host_create_mach_voucher_trap);
+DECL_TEMPLATE(darwin, task_register_dyld_image_infos);
 #endif /* DARWIN_VERS >= DARWIN_10_12 */
 
 DECL_TEMPLATE(darwin, mach_timebase_info);
index eae022402e1f28439a091433315d068a04de14fa..6023302b558644bc2b891f0ae95c1aaee30973c5 100644 (file)
@@ -8207,6 +8207,12 @@ PRE(mach_msg_task)
    case 3420:
       CALL_PRE(task_policy_set);
       return;
+
+#if DARWIN_VERS >= DARWIN_10_12
+   case 3444:
+      CALL_PRE(task_register_dyld_image_infos);
+      return;
+#endif /* DARWIN_VERS >= DARWIN_10_12 */
       
    case 3801:
       CALL_PRE(vm_allocate);
@@ -9812,6 +9818,44 @@ PRE(host_create_mach_voucher_trap)
         ARG1, ARG2, ARG3, ARG4);
 }
 
+PRE(task_register_dyld_image_infos)
+{
+#pragma pack(4)
+    typedef struct {
+       mach_msg_header_t Head;
+       /* start of the kernel processed data */
+       mach_msg_body_t msgh_body;
+       mach_msg_ool_descriptor_t dyld_images;
+       /* end of the kernel processed data */
+       NDR_record_t NDR;
+       mach_msg_type_number_t dyld_imagesCnt;
+    } Request;
+#pragma pack()
+    
+    // Request *req = (Request *)ARG1;
+    
+    PRINT("task_register_dyld_image_infos(%s)", name_for_port(MACH_REMOTE));
+    
+    AFTER = POST_FN(task_register_dyld_image_infos);
+}
+
+POST(task_register_dyld_image_infos)
+{
+#pragma pack(4)
+    typedef struct {
+       mach_msg_header_t Head;
+       NDR_record_t NDR;
+       kern_return_t RetCode;
+    } Reply;
+#pragma pack()
+    
+    Reply *reply = (Reply *)ARG1;
+    if (!reply->RetCode) {
+    } else {
+        PRINT("mig return %d", reply->RetCode);
+    }
+}
+
 #endif /* DARWIN_VERS >= DARWIN_10_12 */