From 28f9575b41ce5a184baeaab95f5db74fb3ad176f Mon Sep 17 00:00:00 2001 From: Dmitry Chestnykh Date: Tue, 30 Jul 2024 09:18:01 +0300 Subject: [PATCH] [compiler-rt] Require glibc for DumpAllRegisters on Linux (#101131) For example musl doesn't provide REG_R* definitions for ARM #100398 --- compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp | 12 +++++++----- .../TestCases/Linux/dump_registers_aarch64.cpp | 2 +- .../TestCases/Linux/dump_registers_arm.cpp | 2 +- .../TestCases/Linux/dump_registers_i386.cpp | 2 +- .../TestCases/Linux/dump_registers_x86_64.cpp | 2 +- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp index 7b73c3576fd350..22aaf07a9d90ab 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp @@ -2121,7 +2121,7 @@ bool SignalContext::IsTrueFaultingAddress() const { UNUSED static const char *RegNumToRegName(int reg) { switch (reg) { -# if SANITIZER_LINUX +# if SANITIZER_LINUX && SANITIZER_GLIBC # if defined(__x86_64__) case REG_RAX: return "rax"; @@ -2240,14 +2240,15 @@ static const char *RegNumToRegName(int reg) { case 31: return "sp"; # endif -# endif // SANITIZER_LINUX +# endif // SANITIZER_LINUX && SANITIZER_GLIBC default: return NULL; } return NULL; } -# if SANITIZER_LINUX && (defined(__arm__) || defined(__aarch64__)) +# if SANITIZER_LINUX && SANITIZER_GLIBC && \ + (defined(__arm__) || defined(__aarch64__)) static uptr GetArmRegister(ucontext_t *ctx, int RegNum) { switch (RegNum) { # if defined(__arm__) @@ -2289,7 +2290,8 @@ static uptr GetArmRegister(ucontext_t *ctx, int RegNum) { } return 0; } -# endif // SANITIZER_LINUX && (defined(__arm__) || defined(__aarch64__)) +# endif // SANITIZER_LINUX && SANITIZER_GLIBC && (defined(__arm__) || + // defined(__aarch64__)) UNUSED static void DumpSingleReg(ucontext_t *ctx, int RegNum) { @@ -2312,7 +2314,7 @@ static void DumpSingleReg(ucontext_t *ctx, int RegNum) { void SignalContext::DumpAllRegisters(void *context) { ucontext_t *ucontext = (ucontext_t *)context; -# if SANITIZER_LINUX +# if SANITIZER_LINUX && SANITIZER_GLIBC # if defined(__x86_64__) Report("Register values:\n"); DumpSingleReg(ucontext, REG_RAX); diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_aarch64.cpp b/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_aarch64.cpp index e01b826c86b8ac..d1015a4e369561 100644 --- a/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_aarch64.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_aarch64.cpp @@ -3,7 +3,7 @@ // RUN: %env_tool_opts=dump_registers=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-NODUMP // RUN: not %run %t 2>&1 | FileCheck %s --strict-whitespace --check-prefix=CHECK-DUMP // -// REQUIRES: aarch64-target-arch +// REQUIRES: aarch64-target-arch && glibc #include diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_arm.cpp b/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_arm.cpp index e17dbf196227b6..e747f78188d32a 100644 --- a/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_arm.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_arm.cpp @@ -3,7 +3,7 @@ // RUN: %env_tool_opts=dump_registers=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-NODUMP // RUN: not %run %t 2>&1 | FileCheck %s --strict-whitespace --check-prefix=CHECK-DUMP // -// REQUIRES: arm-target-arch +// REQUIRES: arm-target-arch && glibc #include diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_i386.cpp b/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_i386.cpp index 74aea4d8b360a3..5a62ef88ccd897 100644 --- a/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_i386.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_i386.cpp @@ -3,7 +3,7 @@ // RUN: %env_tool_opts=dump_registers=0 not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK-NODUMP --strict-whitespace // RUN: not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK-DUMP --strict-whitespace // -// REQUIRES: i386-target-arch +// REQUIRES: i386-target-arch && glibc #include diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_x86_64.cpp b/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_x86_64.cpp index 3d11ef0e098f1d..aac3c3fbd10521 100644 --- a/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_x86_64.cpp +++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/dump_registers_x86_64.cpp @@ -3,7 +3,7 @@ // RUN: %env_tool_opts=dump_registers=0 not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK-NODUMP --strict-whitespace // RUN: not %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK-DUMP --strict-whitespace // -// REQUIRES: x86_64-target-arch +// REQUIRES: x86_64-target-arch && glibc #include