diff options
author | Ivan Penkov <ivanpe@chromium.org> | 2022-02-24 02:53:01 +0000 |
---|---|---|
committer | Ivan Penkov <ivanpe@chromium.org> | 2022-02-24 19:17:11 +0000 |
commit | 88f5fc451ebdede7341cefe349dd63fed886f140 (patch) | |
tree | 332b3249afc78a1a1f16db7a80e139788e452b81 | |
parent | 1da39e3a902bd5f38bf9927ac777a5384f6c0033 (diff) | |
download | google-breakpad-88f5fc451ebdede7341cefe349dd63fed886f140.tar.gz |
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>
-rw-r--r-- | src/processor/stackwalker_amd64.cc | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/processor/stackwalker_amd64.cc b/src/processor/stackwalker_amd64.cc index f346a4ee..6e2f86b4 100644 --- a/src/processor/stackwalker_amd64.cc +++ b/src/processor/stackwalker_amd64.cc @@ -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)); } |