]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Darwin: try to fix csrctl syscall wrapper
authorPaul Floyd <pjfloyd@wanadoo.fr>
Mon, 20 Nov 2023 20:37:10 +0000 (21:37 +0100)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Mon, 20 Nov 2023 20:39:04 +0000 (21:39 +0100)
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

coregrind/m_syswrap/syswrap-darwin.c

index ee7bbea099091f4e1e0a2da7b0ff210f36529be1..8de5ae737947f66f1d03b5999a1ccddda8428e11 100644 (file)
@@ -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)