From: Paul Floyd Date: Mon, 20 Nov 2023 20:37:10 +0000 (+0100) Subject: Darwin: try to fix csrctl syscall wrapper X-Git-Tag: VALGRIND_3_23_0~250 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b3672f4e1d342ddd4e7f8fd74b71c8d9f7552788;p=thirdparty%2Fvalgrind.git Darwin: try to fix csrctl syscall wrapper memcheck/tests/x86/xor-undef fails with +valgrind: m_syswrap/syswrap-darwin.c:9810 (void vgSysWrap_darwin_csrctl_before(ThreadId, SyscallArgLayout *, SyscallArgs *, SyscallStatus *, UWord *)): Assertion 'sizeof(user_addr_t) <= sizeof(RegWord)' failed. (on macOS 10.13) Change copied from https://github.com/LouisBrunner/valgrind-macos --- diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index ee7bbea099..8de5ae7379 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -9805,9 +9805,38 @@ PRE(bsdthread_ctl) PRE(csrctl) { - PRINT("csrctl(op:%ld, useraddr:%#lx, usersize:%#lx) FIXME", ARG1, ARG2, ARG3); + switch (ARG1) { + case VKI_CSR_CHECK: + PRINT("csrctl(op:CSR_CHECK, useraddr:%#lx, usersize:%#lx)", ARG2, ARG3); PRE_REG_READ3(int, "csrctl", uint32_t, op, user_addr_t, useraddr, user_addr_t, usersize); + PRE_MEM_READ( "csrctl(useraddr)", ARG2, ARG3 ); + break; + + case VKI_CSR_GET_ACTIVE_CONFIG: + PRINT("csrctl(op:CSR_GET_ACTIVE_CONFIG, useraddr:%#lx, usersize:%#lx)", ARG2, ARG3); + PRE_REG_READ3(int, "csrctl", + uint32_t, op, user_addr_t, useraddr, user_addr_t, usersize); + PRE_MEM_WRITE( "csrctl(useraddr)", ARG2, ARG3 ); + break; + + default: + PRINT("csrctl(op:%ld [??], useraddr:%#lx, usersize:%#lx)", ARG1, ARG2, ARG3); + log_decaying("UNKNOWN csrctl %ld!", ARG1); + break; + } +} +POST(csrctl) +{ + vg_assert(SUCCESS); + switch (ARG1) { + case VKI_CSR_GET_ACTIVE_CONFIG: + POST_MEM_WRITE( ARG2, ARG3 ); + break; + + default: + break; + } } PRE(guarded_open_dprotected_np)