iOS: disable using CFI in stackwalking
dump_syms produces incomplete CFI info on iOS because it doesn't support converting compact unwind to Breakpad symbols. Attempting to use incomplete CFI can result in infinte stack traces. Bug: google-breakpad:764 Change-Id: Id042aa515d17928cb5503a79038607d95c56238d Reviewed-on: https://chromium-review.googlesource.com/1128252 Reviewed-by: Ivan Penkov <ivanpe@chromium.org>
This commit is contained in:
parent
79ba6a494f
commit
89e7a8615f
2 changed files with 15 additions and 6 deletions
|
@ -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.
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue