Never use frame pointer unwinding on a Windows x64 stack.

MSVC never generates code that works with frame pointer chasing, and LLVM does the same.

Change-Id: I9943160d200509c079fb91394c1a5d789dc188e5
Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3486523
Reviewed-by: Mark Mentovai <mark@chromium.org>
This commit is contained in:
Ivan Penkov 2022-02-24 02:53:01 +00:00
parent 1da39e3a90
commit 88f5fc451e

View File

@ -289,7 +289,10 @@ StackFrame* StackwalkerAMD64::GetCallerFrame(const CallStack* stack,
new_frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get()));
// If CFI was not available or failed, try using frame pointer recovery.
if (!new_frame.get()) {
// Never try to use frame pointer unwinding on Windows x64 stack. MSVC never
// generates code that works with frame pointer chasing, and LLVM does the
// same. Stack scanning would be better.
if (!new_frame.get() && system_info_->os_short != "windows") {
new_frame.reset(GetCallerByFramePointerRecovery(frames));
}