mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 19:06:44 +00:00
Dump regs fbsd fix (#99676)
This commit is contained in:
parent
9b02b75c4d
commit
0ca98af7f9
@ -143,6 +143,8 @@ inline void *Mmap(void *addr, size_t length, int prot, int flags, int fd,
|
||||
return __mmap(addr, length, prot, flags, fd, 0, offset);
|
||||
#elif SANITIZER_FREEBSD && (defined(__aarch64__) || defined(__x86_64__))
|
||||
return (void *)__syscall(SYS_mmap, addr, length, prot, flags, fd, offset);
|
||||
#elif SANITIZER_FREEBSD && (defined(__i386__))
|
||||
return (void *)syscall(SYS_mmap, addr, length, prot, flags, fd, offset);
|
||||
#elif SANITIZER_SOLARIS
|
||||
return _REAL64(mmap)(addr, length, prot, flags, fd, offset);
|
||||
#elif SANITIZER_LINUX_USES_64BIT_SYSCALLS
|
||||
|
@ -2121,7 +2121,8 @@ bool SignalContext::IsTrueFaultingAddress() const {
|
||||
UNUSED
|
||||
static const char *RegNumToRegName(int reg) {
|
||||
switch (reg) {
|
||||
# if defined(__x86_64__)
|
||||
# if SANITIZER_LINUX
|
||||
# if defined(__x86_64__)
|
||||
case REG_RAX:
|
||||
return "rax";
|
||||
case REG_RBX:
|
||||
@ -2154,7 +2155,7 @@ static const char *RegNumToRegName(int reg) {
|
||||
return "r14";
|
||||
case REG_R15:
|
||||
return "r15";
|
||||
# elif defined(__i386__)
|
||||
# elif defined(__i386__)
|
||||
case REG_EAX:
|
||||
return "eax";
|
||||
case REG_EBX:
|
||||
@ -2171,6 +2172,7 @@ static const char *RegNumToRegName(int reg) {
|
||||
return "ebp";
|
||||
case REG_ESP:
|
||||
return "esp";
|
||||
# endif
|
||||
# endif
|
||||
default:
|
||||
return NULL;
|
||||
@ -2178,22 +2180,24 @@ static const char *RegNumToRegName(int reg) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
# if SANITIZER_LINUX
|
||||
UNUSED
|
||||
static void DumpSingleReg(ucontext_t *ctx, int RegNum) {
|
||||
const char *RegName = RegNumToRegName(RegNum);
|
||||
# if defined(__x86_64__)
|
||||
# if defined(__x86_64__)
|
||||
Printf("%s%s = 0x%016llx ", internal_strlen(RegName) == 2 ? " " : "",
|
||||
RegName, ctx->uc_mcontext.gregs[RegNum]);
|
||||
# elif defined(__i386__)
|
||||
# elif defined(__i386__)
|
||||
Printf("%s = 0x%08x ", RegName, ctx->uc_mcontext.gregs[RegNum]);
|
||||
# else
|
||||
# else
|
||||
(void)RegName;
|
||||
# endif
|
||||
# endif
|
||||
}
|
||||
# endif
|
||||
|
||||
void SignalContext::DumpAllRegisters(void *context) {
|
||||
# if SANITIZER_LINUX
|
||||
ucontext_t *ucontext = (ucontext_t *)context;
|
||||
# if SANITIZER_LINUX
|
||||
# if defined(__x86_64__)
|
||||
Report("Register values:\n");
|
||||
DumpSingleReg(ucontext, REG_RAX);
|
||||
@ -2232,8 +2236,35 @@ void SignalContext::DumpAllRegisters(void *context) {
|
||||
DumpSingleReg(ucontext, REG_EBP);
|
||||
DumpSingleReg(ucontext, REG_ESP);
|
||||
Printf("\n");
|
||||
# endif
|
||||
# else
|
||||
(void)ucontext;
|
||||
# endif
|
||||
# elif SANITIZER_FREEBSD
|
||||
# if defined(__x86_64__)
|
||||
Report("Register values:\n");
|
||||
Printf("rax = 0x%016llx ", ucontext->uc_mcontext.mc_rax);
|
||||
Printf("rbx = 0x%016llx ", ucontext->uc_mcontext.mc_rbx);
|
||||
Printf("rcx = 0x%016llx ", ucontext->uc_mcontext.mc_rcx);
|
||||
Printf("rdx = 0x%016llx ", ucontext->uc_mcontext.mc_rdx);
|
||||
Printf("\n");
|
||||
Printf("rdi = 0x%016llx ", ucontext->uc_mcontext.mc_rdi);
|
||||
Printf("rsi = 0x%016llx ", ucontext->uc_mcontext.mc_rsi);
|
||||
Printf("rbp = 0x%016llx ", ucontext->uc_mcontext.mc_rbp);
|
||||
Printf("rsp = 0x%016llx ", ucontext->uc_mcontext.mc_rsp);
|
||||
Printf("\n");
|
||||
Printf(" r8 = 0x%016llx ", ucontext->uc_mcontext.mc_r8);
|
||||
Printf(" r9 = 0x%016llx ", ucontext->uc_mcontext.mc_r9);
|
||||
Printf("r10 = 0x%016llx ", ucontext->uc_mcontext.mc_r10);
|
||||
Printf("r11 = 0x%016llx ", ucontext->uc_mcontext.mc_r11);
|
||||
Printf("\n");
|
||||
Printf("r12 = 0x%016llx ", ucontext->uc_mcontext.mc_r12);
|
||||
Printf("r13 = 0x%016llx ", ucontext->uc_mcontext.mc_r13);
|
||||
Printf("r14 = 0x%016llx ", ucontext->uc_mcontext.mc_r14);
|
||||
Printf("r15 = 0x%016llx ", ucontext->uc_mcontext.mc_r15);
|
||||
Printf("\n");
|
||||
# else
|
||||
(void)ucontext;
|
||||
# endif
|
||||
# endif
|
||||
// FIXME: Implement this for other OSes and architectures.
|
||||
}
|
||||
|
@ -0,0 +1,19 @@
|
||||
// Check that sanitizer prints registers dump_registers on dump_registers=1
|
||||
// RUN: %clangxx %s -o %t
|
||||
// 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
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
int main() {
|
||||
raise(SIGSEGV);
|
||||
// CHECK-DUMP: Register values
|
||||
// CHECK-DUMP-NEXT: rax = {{0x[0-9a-f]+}} rbx = {{0x[0-9a-f]+}} rcx = {{0x[0-9a-f]+}} rdx = {{0x[0-9a-f]+}}
|
||||
// CHECK-DUMP-NEXT: rdi = {{0x[0-9a-f]+}} rsi = {{0x[0-9a-f]+}} rbp = {{0x[0-9a-f]+}} rsp = {{0x[0-9a-f]+}}
|
||||
// CHECK-DUMP-NEXT: r8 = {{0x[0-9a-f]+}} r9 = {{0x[0-9a-f]+}} r10 = {{0x[0-9a-f]+}} r11 = {{0x[0-9a-f]+}}
|
||||
// CHECK-DUMP-NEXT: r12 = {{0x[0-9a-f]+}} r13 = {{0x[0-9a-f]+}} r14 = {{0x[0-9a-f]+}} r15 = {{0x[0-9a-f]+}}
|
||||
// CHECK-NODUMP-NOT: Register values
|
||||
return 0;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user