[compiler-rt] b8ee0aa - [compiler-rt] DumpAllRegisters implementation for windows arm64. (#112254)

via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 14 15:13:41 PDT 2024


Author: David CARLIER
Date: 2024-10-14T23:13:37+01:00
New Revision: b8ee0aac2ad914ef663c0f1892f8a4d5cc70b9fc

URL: https://github.com/llvm/llvm-project/commit/b8ee0aac2ad914ef663c0f1892f8a4d5cc70b9fc
DIFF: https://github.com/llvm/llvm-project/commit/b8ee0aac2ad914ef663c0f1892f8a4d5cc70b9fc.diff

LOG: [compiler-rt] DumpAllRegisters implementation for windows arm64. (#112254)

Added: 
    compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_aarch64.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 832682772950e9..838b14d3cc559d 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_win.cpp
@@ -1034,7 +1034,7 @@ SignalContext::WriteFlag SignalContext::GetWriteFlag() const {
 
 void SignalContext::DumpAllRegisters(void *context) {
   CONTEXT *ctx = (CONTEXT *)context;
-#  if defined(__M_X64)
+#  if defined(_M_X64)
   Report("Register values:\n");
   Printf("rax = %llx  ", ctx->Rax);
   Printf("rbx = %llx  ", ctx->Rbx);
@@ -1068,6 +1068,41 @@ void SignalContext::DumpAllRegisters(void *context) {
   Printf("ebp = %lx  ", ctx->Ebp);
   Printf("esp = %lx  ", ctx->Esp);
   Printf("\n");
+#  elif defined(_M_ARM64)
+  Report("Register values:\n");
+  Printf("x0  = %llx  ", ctx->X0);
+  Printf("x1  = %llx  ", ctx->X1);
+  Printf("x2  = %llx  ", ctx->X2);
+  Printf("x3  = %llx  ", ctx->X3);
+  Printf("x4  = %llx  ", ctx->X4);
+  Printf("x5  = %llx  ", ctx->X5);
+  Printf("x6  = %llx  ", ctx->X6);
+  Printf("x7  = %llx  ", ctx->X7);
+  Printf("x8  = %llx  ", ctx->X8);
+  Printf("x9  = %llx  ", ctx->X9);
+  Printf("x10 = %llx  ", ctx->X10);
+  Printf("x11 = %llx  ", ctx->X11);
+  Printf("x12 = %llx  ", ctx->X12);
+  Printf("x13 = %llx  ", ctx->X13);
+  Printf("x14 = %llx  ", ctx->X14);
+  Printf("x15 = %llx  ", ctx->X15);
+  Printf("x16 = %llx  ", ctx->X16);
+  Printf("x17 = %llx  ", ctx->X17);
+  Printf("x18 = %llx  ", ctx->X18);
+  Printf("x19 = %llx  ", ctx->X19);
+  Printf("x20 = %llx  ", ctx->X20);
+  Printf("x21 = %llx  ", ctx->X21);
+  Printf("x22 = %llx  ", ctx->X22);
+  Printf("x23 = %llx  ", ctx->X23);
+  Printf("x24 = %llx  ", ctx->X24);
+  Printf("x25 = %llx  ", ctx->X25);
+  Printf("x26 = %llx  ", ctx->X26);
+  Printf("x27 = %llx  ", ctx->X27);
+  Printf("x28 = %llx  ", ctx->X28);
+  Printf("x29 = %llx  ", ctx->X29);
+  Printf("x30 = %llx  ", ctx->X30);
+  Printf("x31 = %llx  ", ctx->X31);
+  Printf("\n");
 #  else
   // TODO
   (void)ctx;

diff  --git a/compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_aarch64.cpp b/compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_aarch64.cpp
new file mode 100644
index 00000000000000..f4805640d682b0
--- /dev/null
+++ b/compiler-rt/test/sanitizer_common/TestCases/Windows/dump_registers_aarch64.cpp
@@ -0,0 +1,23 @@
+// 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-prefix=CHECK-NODUMP
+// RUN: not %run %t 2>&1 | FileCheck %s --strict-whitespace --check-prefix=CHECK-DUMP
+//
+// REQUIRES: aarch64-pc-windows-msvc
+
+#include <windows.h>
+
+int main() {
+  RaiseException(EXCEPTION_ACCESS_VIOLATION, 0, 0, NULL);
+  // CHECK-DUMP: Register values
+  // CHECK-DUMP-NEXT: x0 = {{0x[0-9a-f]+}}   x1 = {{0x[0-9a-f]+}}   x2 = {{0x[0-9a-f]+}}   x3 = {{0x[0-9a-f]+}}
+  // CHECK-DUMP-NEXT: x4 = {{0x[0-9a-f]+}}   x5 = {{0x[0-9a-f]+}}   x6 = {{0x[0-9a-f]+}}   x7 = {{0x[0-9a-f]+}}
+  // CHECK-DUMP-NEXT: x8 = {{0x[0-9a-f]+}}   x9 = {{0x[0-9a-f]+}}  x10 = {{0x[0-9a-f]+}}  x11 = {{0x[0-9a-f]+}}
+  // CHECK-DUMP-NEXT:x12 = {{0x[0-9a-f]+}}  x13 = {{0x[0-9a-f]+}}  x14 = {{0x[0-9a-f]+}}  x15 = {{0x[0-9a-f]+}}
+  // CHECK-DUMP-NEXT:x16 = {{0x[0-9a-f]+}}  x17 = {{0x[0-9a-f]+}}  x18 = {{0x[0-9a-f]+}}  x19 = {{0x[0-9a-f]+}}
+  // CHECK-DUMP-NEXT:x20 = {{0x[0-9a-f]+}}  x21 = {{0x[0-9a-f]+}}  x22 = {{0x[0-9a-f]+}}  x23 = {{0x[0-9a-f]+}}
+  // CHECK-DUMP-NEXT:x24 = {{0x[0-9a-f]+}}  x25 = {{0x[0-9a-f]+}}  x26 = {{0x[0-9a-f]+}}  x27 = {{0x[0-9a-f]+}}
+  // CHECK-DUMP-NEXT:x28 = {{0x[0-9a-f]+}}   fp = {{0x[0-9a-f]+}}   lr = {{0x[0-9a-f]+}}   sp = {{0x[0-9a-f]+}}
+  // CHECK-NODUMP-NOT: Register values
+  return 0;
+}


        


More information about the llvm-commits mailing list