diff options
author | Ivan Penkov <ivanpe@chromium.org> | 2015-10-05 11:35:09 -0700 |
---|---|---|
committer | Ivan Penkov <ivanpe@chromium.org> | 2015-10-05 11:35:09 -0700 |
commit | f948d8d623ea140ceadca140e273baf13ca16b3f (patch) | |
tree | 7de76d836e656f87268c0d93607a970aecac18c4 /src | |
parent | [mac] Teach dump_syms to handle additional zerofill sections (diff) | |
download | breakpad-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.cc | 2 | ||||
-rw-r--r-- | src/processor/stackwalker_arm64_unittest.cc | 2 | ||||
-rw-r--r-- | src/processor/stackwalker_arm_unittest.cc | 2 | ||||
-rw-r--r-- | src/processor/stackwalker_x86_unittest.cc | 6 |
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) { |