aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Penkov <ivanpe@chromium.org>2022-02-24 02:53:01 +0000
committerIvan Penkov <ivanpe@chromium.org>2022-02-24 19:17:11 +0000
commit88f5fc451ebdede7341cefe349dd63fed886f140 (patch)
tree332b3249afc78a1a1f16db7a80e139788e452b81
parent1da39e3a902bd5f38bf9927ac777a5384f6c0033 (diff)
downloadgoogle-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.cc5
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));
}