diff options
Diffstat (limited to 'llvm/lib/Support/Windows')
| -rw-r--r-- | llvm/lib/Support/Windows/Signals.inc | 8 | 
1 files changed, 7 insertions, 1 deletions
| 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;  } | 
