From: Rhys Kidd Date: Mon, 1 May 2017 00:41:40 +0000 (+0000) Subject: macos: Fix UNKNOWN task message [id 3444, to mach_task_self(), reply 0x603] (task_reg... X-Git-Tag: svn/VALGRIND_3_13_0~107 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=77dfe595effa9be833bd852d18394ab732fa7882;p=thirdparty%2Fvalgrind.git macos: Fix UNKNOWN task message [id 3444, to mach_task_self(), reply 0x603] (task_register_dyld_image_infos). bz#379371 git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16327 --- diff --git a/NEWS b/NEWS index cdd31798ff..57fc0d961c 100644 --- 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) diff --git a/coregrind/m_syswrap/priv_syswrap-darwin.h b/coregrind/m_syswrap/priv_syswrap-darwin.h index e5cd024e92..5942104f7f 100644 --- a/coregrind/m_syswrap/priv_syswrap-darwin.h +++ b/coregrind/m_syswrap/priv_syswrap-darwin.h @@ -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); diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index eae022402e..6023302b55 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -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 */