[llvm-branch-commits] [llvm] dbe9c3a - [Support] Don't modify the current EH context during stack unwinding
Hans Wennborg via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Feb 11 02:06:25 PST 2020
Author: Reid Kleckner
Date: 2020-02-11T11:03:58+01:00
New Revision: dbe9c3a82dd7db8e50acb008f21a273c55fa5c82
URL: https://github.com/llvm/llvm-project/commit/dbe9c3a82dd7db8e50acb008f21a273c55fa5c82
DIFF: https://github.com/llvm/llvm-project/commit/dbe9c3a82dd7db8e50acb008f21a273c55fa5c82.diff
LOG: [Support] Don't modify the current EH context during stack unwinding
Copy it instead. Otherwise, key registers (such as RBP) may get zeroed
out by the stack unwinder.
Fixes CrashRecoveryTest.DumpStackCleanup with MSVC in release builds.
Reviewed By: stella.stamenova
Differential Revision: https://reviews.llvm.org/D73809
(cherry picked from commit b074acb82f7e75a189fa7933b09627241b166121)
Added:
Modified:
llvm/lib/Support/Windows/Signals.inc
Removed:
################################################################################
diff --git a/llvm/lib/Support/Windows/Signals.inc b/llvm/lib/Support/Windows/Signals.inc
index 8b525f1bd4ac..09e19ae41f1a 100644
--- a/llvm/lib/Support/Windows/Signals.inc
+++ b/llvm/lib/Support/Windows/Signals.inc
@@ -820,7 +820,13 @@ static LONG WINAPI LLVMUnhandledExceptionFilter(LPEXCEPTION_POINTERS ep) {
<< "\n";
}
- LocalPrintStackTrace(llvm::errs(), ep ? ep->ContextRecord : nullptr);
+ // Stack unwinding appears to modify the context. Copy it to preserve the
+ // caller's context.
+ CONTEXT ContextCopy;
+ if (ep)
+ memcpy(&ContextCopy, ep->ContextRecord, sizeof(ContextCopy));
+
+ LocalPrintStackTrace(llvm::errs(), ep ? &ContextCopy : nullptr);
return EXCEPTION_EXECUTE_HANDLER;
}
More information about the llvm-branch-commits
mailing list