aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/processor/stackwalker_arm.cc13
-rw-r--r--src/processor/stackwalker_arm_unittest.cc8
2 files changed, 15 insertions, 6 deletions
diff --git a/src/processor/stackwalker_arm.cc b/src/processor/stackwalker_arm.cc
index dabb4fd2..1313416f 100644
--- a/src/processor/stackwalker_arm.cc
+++ b/src/processor/stackwalker_arm.cc
@@ -40,6 +40,7 @@
#include "google_breakpad/processor/memory_region.h"
#include "google_breakpad/processor/source_line_resolver_interface.h"
#include "google_breakpad/processor/stack_frame_cpu.h"
+#include "google_breakpad/processor/system_info.h"
#include "processor/cfi_frame_info.h"
#include "processor/logging.h"
#include "processor/stackwalker_arm.h"
@@ -249,10 +250,14 @@ StackFrame* StackwalkerARM::GetCallerFrame(const CallStack* stack,
scoped_ptr<StackFrameARM> frame;
// See if there is DWARF call frame information covering this address.
- scoped_ptr<CFIFrameInfo> cfi_frame_info(
- frame_symbolizer_->FindCFIFrameInfo(last_frame));
- if (cfi_frame_info.get())
- frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get()));
+ // TODO(jperaza): Ignore iOS CFI info until it is properly collected.
+ // https://bugs.chromium.org/p/google-breakpad/issues/detail?id=764
+ if (!system_info_ || system_info_->os != "iOS") {
+ scoped_ptr<CFIFrameInfo> cfi_frame_info(
+ frame_symbolizer_->FindCFIFrameInfo(last_frame));
+ if (cfi_frame_info.get())
+ frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get()));
+ }
// If CFI failed, or there wasn't CFI available, fall back
// to frame pointer, if this is configured.
diff --git a/src/processor/stackwalker_arm_unittest.cc b/src/processor/stackwalker_arm_unittest.cc
index 8a0fd5e9..2ca7a02a 100644
--- a/src/processor/stackwalker_arm_unittest.cc
+++ b/src/processor/stackwalker_arm_unittest.cc
@@ -782,8 +782,12 @@ TEST_F(CFI, RejectBadExpressions) {
class StackwalkerARMFixtureIOS : public StackwalkerARMFixture {
public:
StackwalkerARMFixtureIOS() {
- system_info.os = "iOS";
- system_info.os_short = "ios";
+ // iOS_test is used instead of iOS because the stackwalker has a check to
+ // avoid using CFI for iOS dumps. This is a workaround for bad CFI being
+ // produced by dump_syms for iOS.
+ // https://bugs.chromium.org/p/google-breakpad/issues/detail?id=764
+ system_info.os = "iOS_test";
+ system_info.os_short = "ios_test";
}
};