-
Notifications
You must be signed in to change notification settings - Fork 14.3k
Dump regs fbsd fix #99676
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dump regs fbsd fix #99676
Conversation
@llvm/pr-subscribers-compiler-rt-sanitizer Author: David CARLIER (devnexen) ChangesFull diff: https://github.com/llvm/llvm-project/pull/99676.diff 2 Files Affected:
diff --git a/compiler-rt/lib/safestack/safestack_platform.h b/compiler-rt/lib/safestack/safestack_platform.h
index 68d26813bef4a..41c7c25fdaf4d 100644
--- a/compiler-rt/lib/safestack/safestack_platform.h
+++ b/compiler-rt/lib/safestack/safestack_platform.h
@@ -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
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
index 47f9f0c4590fb..4e8452d459885 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp
@@ -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,6 +2180,7 @@ 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);
@@ -2190,10 +2193,11 @@ static void DumpSingleReg(ucontext_t *ctx, int RegNum) {
(void)RegName;
# 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");
+# 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.
}
|
✅ With the latest revision this PR passed the C/C++ code formatter. |
77a3238
to
2a10b4c
Compare
@@ -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__)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
how is this related to regs?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it is not thus I put in separate commit.
# endif | ||
default: | ||
return NULL; | ||
} | ||
return NULL; | ||
} | ||
|
||
# if SANITIZER_LINUX | ||
UNUSED | ||
static void DumpSingleReg(ucontext_t *ctx, int RegNum) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you can probably # if SANITIZER_LINUX both functions with one block
# elif SANITIZER_FREEBSD | ||
# if defined(__x86_64__) | ||
Report("Register values:\n"); | ||
Printf("RAX = 0x%016llx ", ucontext->uc_mcontext.mc_rax); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe helper:
static void DumpSingleReg(const char* Name, uptr Value)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please consider adding (forking) a test
2a10b4c
to
388f97b
Compare
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/66/builds/1854 Here is the relevant piece of the build log for the reference:
|
Summary: Test Plan: Reviewers: Subscribers: Tasks: Tags: Differential Revision: https://phabricator.intern.facebook.com/D60251374
No description provided.