From: Rhys Kidd Date: Sun, 11 Feb 2018 22:16:38 +0000 (-0500) Subject: macos: Fix unhandled syscall: mach:43 (mach_generate_activity_id). bz#385279 X-Git-Tag: VALGRIND_3_14_0~160 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dcb83cf846b529104cd528cd749b61f35deda476;p=thirdparty%2Fvalgrind.git macos: Fix unhandled syscall: mach:43 (mach_generate_activity_id). bz#385279 Based upon a patch provided by Louis Brunner and tested by: FX Chris Wilson --- diff --git a/NEWS b/NEWS index 4bdffbc358..e05291f40d 100644 --- 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. diff --git a/coregrind/m_syswrap/priv_syswrap-darwin.h b/coregrind/m_syswrap/priv_syswrap-darwin.h index 29e491dc75..d344f07822 100644 --- a/coregrind/m_syswrap/priv_syswrap-darwin.h +++ b/coregrind/m_syswrap/priv_syswrap-darwin.h @@ -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); diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index fe732b26cc..9969afaf84 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -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), diff --git a/include/vki/vki-scnums-darwin.h b/include/vki/vki-scnums-darwin.h index d600ed31cf..99cb342fab 100644 --- a/include/vki/vki-scnums-darwin.h +++ b/include/vki/vki-scnums-darwin.h @@ -180,7 +180,9 @@ #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