[compiler-rt] e866e6b - [compiler-rt] Implements DumpAllRegisters for windows intel archs. (#108688)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Oct 12 13:10:51 PDT 2024
Author: David CARLIER
Date: 2024-10-12T21:10:47+01:00
New Revision: e866e6b8bbae8dc511706e97906825f9e153d68c
URL: https://github.com/llvm/llvm-project/commit/e866e6b8bbae8dc511706e97906825f9e153d68c
DIFF: https://github.com/llvm/llvm-project/commit/e866e6b8bbae8dc511706e97906825f9e153d68c.diff
LOG: [compiler-rt] Implements DumpAllRegisters for windows intel archs. (#108688)
Added:
compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_i386.cpp
compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_x86_64.cpp
Modified:
compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
Removed:
################################################################################
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
index 7cee571314868e..832682772950e9 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
@@ -1033,7 +1033,45 @@ SignalContext::WriteFlag SignalContext::GetWriteFlag() const {
}
void SignalContext::DumpAllRegisters(void *context) {
- // FIXME: Implement this.
+ CONTEXT *ctx = (CONTEXT *)context;
+# if defined(__M_X64)
+ Report("Register values:\n");
+ Printf("rax = %llx ", ctx->Rax);
+ Printf("rbx = %llx ", ctx->Rbx);
+ Printf("rcx = %llx ", ctx->Rcx);
+ Printf("rdx = %llx ", ctx->Rdx);
+ Printf("\n");
+ Printf("rdi = %llx ", ctx->Rdi);
+ Printf("rsi = %llx ", ctx->Rsi);
+ Printf("rbp = %llx ", ctx->Rbp);
+ Printf("rsp = %llx ", ctx->Rsp);
+ Printf("\n");
+ Printf("r8 = %llx ", ctx->R8);
+ Printf("r9 = %llx ", ctx->R9);
+ Printf("r10 = %llx ", ctx->R10);
+ Printf("r11 = %llx ", ctx->R11);
+ Printf("\n");
+ Printf("r12 = %llx ", ctx->R12);
+ Printf("r13 = %llx ", ctx->R13);
+ Printf("r14 = %llx ", ctx->R14);
+ Printf("r15 = %llx ", ctx->R15);
+ Printf("\n");
+# elif defined(_M_IX86)
+ Report("Register values:\n");
+ Printf("eax = %lx ", ctx->Eax);
+ Printf("ebx = %lx ", ctx->Ebx);
+ Printf("ecx = %lx ", ctx->Ecx);
+ Printf("edx = %lx ", ctx->Edx);
+ Printf("\n");
+ Printf("edi = %lx ", ctx->Edi);
+ Printf("esi = %lx ", ctx->Esi);
+ Printf("ebp = %lx ", ctx->Ebp);
+ Printf("esp = %lx ", ctx->Esp);
+ Printf("\n");
+# else
+ // TODO
+ (void)ctx;
+# endif
}
int SignalContext::GetType() const {
diff --git a/compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_i386.cpp b/compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_i386.cpp
new file mode 100644
index 00000000000000..76c7a901e34fdf
--- /dev/null
+++ b/compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_i386.cpp
@@ -0,0 +1,17 @@
+// 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: i386-pc-windows-msvc
+
+#include <windows.h>
+
+int main() {
+ RaiseException(EXCEPTION_ACCESS_VIOLATION, 0, 0, NULL);
+ // CHECK-DUMP: Register values
+ // CHECK-DUMP-NEXT: eax = {{0x[0-9a-f]+}} ebx = {{0x[0-9a-f]+}} ecx = {{0x[0-9a-f]+}} edx = {{0x[0-9a-f]+}}
+ // CHECK-DUMP-NEXT: edi = {{0x[0-9a-f]+}} esi = {{0x[0-9a-f]+}} ebp = {{0x[0-9a-f]+}} esp = {{0x[0-9a-f]+}}
+ // CHECK-NODUMP-NOT: Register values
+ return 0;
+}
diff --git a/compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_x86_64.cpp b/compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_x86_64.cpp
new file mode 100644
index 00000000000000..17c51aa27066e2
--- /dev/null
+++ b/compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_x86_64.cpp
@@ -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-pc-windows-msvc
+
+#include <windows.h>
+
+int main() {
+ RaiseException(EXCEPTION_ACCESS_VIOLATION, 0, 0, NULL);
+ // 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;
+}
More information about the llvm-commits
mailing list