From: Paul Floyd Date: Sat, 17 Feb 2024 20:37:00 +0000 (+0100) Subject: Darwin: various fixes X-Git-Tag: VALGRIND_3_23_0~150 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=407c2da9bdab250d4c14f7d65deac2c262a0c351;p=thirdparty%2Fvalgrind.git Darwin: various fixes Fix building a couple of regtests. bmi.c - Apple clang puts a funky underscore before symbols which you have to add explicitly in asm. mmap_o_direct.c - there is no O_DIRECT on macOS syswrap - make csrctl messages a bit more userland-y rather than kernel-y --- diff --git a/coregrind/m_syswrap/syswrap-darwin.c b/coregrind/m_syswrap/syswrap-darwin.c index 61e7f6e6e..fd5cb93ce 100644 --- a/coregrind/m_syswrap/syswrap-darwin.c +++ b/coregrind/m_syswrap/syswrap-darwin.c @@ -9817,20 +9817,24 @@ PRE(bsdthread_ctl) void*, cmd, void*, arg1, void*, arg2, void*, arg3); } +// syscalls.master says +// int csrctl(uint32_t op, user_addr_t useraddr, user_addr_t usersize) NO_SYSCALL_STUB; +// but https://github.com/search?q=repo%3Aapple-open-source%2Fmacos%20__csrctl&type=code says +// int __csrctl(csr_op_t op, void *buffer, size_t size); PRE(csrctl) { 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_REG_READ3(int, "csrctl", + uint32_t, op, void*, useraddr, size_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); + uint32_t, op, void*, useraddr, size_t, usersize); PRE_MEM_WRITE( "csrctl(useraddr)", ARG2, ARG3 ); break; diff --git a/none/tests/amd64/bmi.c b/none/tests/amd64/bmi.c index 43c56f623..a0a62eba0 100644 --- a/none/tests/amd64/bmi.c +++ b/none/tests/amd64/bmi.c @@ -414,7 +414,11 @@ void do_rorx64 ( /*OUT*/ULong* res1, /*OUT*/ULong* res2, ULong arg ) "xorq $0x8d5, (%%rsp)" "\n\t" "movq (%%rsp), %1" "\n\t" "popfq" "\n\t" +#if defined(__APPLE__) + "rorx $67, _g_ulong_arg(%%rip), %0" "\n\t" +#else "rorx $67, g_ulong_arg(%%rip), %0" "\n\t" +#endif "pushfq" "\n\t" "movq (%%rsp), %2" "\n\t" "xorq $0x8d5, (%%rsp)" "\n\t" @@ -469,7 +473,11 @@ void do_rorx32 ( /*OUT*/ULong* res1, /*OUT*/ULong* res2, UInt arg ) "xorq $0x8d5, (%%rsp)" "\n\t" "movq (%%rsp), %1" "\n\t" "popfq" "\n\t" +#if defined(__APPLE__) + "rorx $67, _g_uint_arg(%%rip), %k0" "\n\t" +#else "rorx $67, g_uint_arg(%%rip), %k0" "\n\t" +#endif "pushfq" "\n\t" "movq (%%rsp), %2" "\n\t" "xorq $0x8d5, (%%rsp)" "\n\t" diff --git a/none/tests/mmap_o_direct.c b/none/tests/mmap_o_direct.c index b71339172..9a877f917 100644 --- a/none/tests/mmap_o_direct.c +++ b/none/tests/mmap_o_direct.c @@ -3,6 +3,9 @@ #include #include #include +#if !defined(O_DIRECT) +#define O_DIRECT 0 +#endif int main(void) {