aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Penkov <ivanpe@chromium.org>2015-10-05 11:35:09 -0700
committerIvan Penkov <ivanpe@chromium.org>2015-10-05 11:35:09 -0700
commitf948d8d623ea140ceadca140e273baf13ca16b3f (patch)
tree7de76d836e656f87268c0d93607a970aecac18c4 /src
parent[mac] Teach dump_syms to handle additional zerofill sections (diff)
downloadbreakpad-f948d8d623ea140ceadca140e273baf13ca16b3f.tar.xz
Increasing the Breakpad stack walker max scan limit from 30 to 40.
Chrome started hitting some crashes in v8 jitted code which happens to be non ABI compliant and debuggers (including WinDBG) are unable to produce meaningful stack traces. The Breakpad stack walker has some builtin heuristics to deal with such cases. More specifically, when unable to find a good parent frame, it scans the raw stack to find a suitable parent frame. The max scan size was set at 30 pointers which was (apparently) not enough to recover in this case. I'm increasing it to 40 pointers. I confirmed that at 34 pointers it was able to recover however I'm setting it to 40 in order to it some slack. I needed to update two unittests which were expecting the previous scan limit. BUG= R=mark@chromium.org Review URL: https://codereview.chromium.org/1379433005 .
Diffstat (limited to 'src')
-rw-r--r--src/processor/stackwalker.cc2
-rw-r--r--src/processor/stackwalker_arm64_unittest.cc2
-rw-r--r--src/processor/stackwalker_arm_unittest.cc2
-rw-r--r--src/processor/stackwalker_x86_unittest.cc6
4 files changed, 6 insertions, 6 deletions
diff --git a/src/processor/stackwalker.cc b/src/processor/stackwalker.cc
index 424cf4c4..94b66334 100644
--- a/src/processor/stackwalker.cc
+++ b/src/processor/stackwalker.cc
@@ -58,7 +58,7 @@
namespace google_breakpad {
-const int Stackwalker::kRASearchWords = 30;
+const int Stackwalker::kRASearchWords = 40;
uint32_t Stackwalker::max_frames_ = 1024;
bool Stackwalker::max_frames_set_ = false;
diff --git a/src/processor/stackwalker_arm64_unittest.cc b/src/processor/stackwalker_arm64_unittest.cc
index dd617f69..f9d18cea 100644
--- a/src/processor/stackwalker_arm64_unittest.cc
+++ b/src/processor/stackwalker_arm64_unittest.cc
@@ -349,7 +349,7 @@ TEST_F(GetCallerFrame, ScanFirstFrame) {
.D64(0xF0000000) // more junk
.D64(0x0000000D)
- .Append(256, 0) // more space
+ .Append(336, 0) // more space
.D64(return_address2) // actual return address
// (won't be found)
diff --git a/src/processor/stackwalker_arm_unittest.cc b/src/processor/stackwalker_arm_unittest.cc
index c73322e6..8a0fd5e9 100644
--- a/src/processor/stackwalker_arm_unittest.cc
+++ b/src/processor/stackwalker_arm_unittest.cc
@@ -370,7 +370,7 @@ TEST_F(GetCallerFrame, ScanFirstFrame) {
.D32(0xF0000000) // more junk
.D32(0x0000000D)
- .Append(96, 0) // more space
+ .Append(136, 0) // more space
.D32(return_address2) // actual return address
// (won't be found)
diff --git a/src/processor/stackwalker_x86_unittest.cc b/src/processor/stackwalker_x86_unittest.cc
index 008b496b..d4c61c8c 100644
--- a/src/processor/stackwalker_x86_unittest.cc
+++ b/src/processor/stackwalker_x86_unittest.cc
@@ -1228,9 +1228,9 @@ TEST_F(GetCallerFrame, WindowsFPOSystemCall) {
// Scan the stack for a better return address and potentially skip frames
// when the calculated return address is not in a known module. Note, that
-// the span of this scan is somewhat arbitrarily limited to 120 search words
-// for the context frame and 30 search words (pointers) for the other frames:
-// const int kRASearchWords = 30;
+// the span of this scan is somewhat arbitrarily limited to 160 search words
+// for the context frame and 40 search words (pointers) for the other frames:
+// const int kRASearchWords = 40;
// This means that frames can be skipped only when their size is relatively
// small: smaller than 4 * kRASearchWords * sizeof(InstructionType)
TEST_F(GetCallerFrame, ReturnAddressIsNotInKnownModule) {