Commit dbe9c3a8 authored by Reid Kleckner's avatar Reid Kleckner Committed by Hans Wennborg
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

(cherry picked from commit b074acb8)
parent 4e6ec0ff
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;
}