Commit b074acb8 authored by Reid Kleckner's avatar Reid Kleckner
Browse files

[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
parent a1daa7d0
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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;
}