mirror of
https://github.com/yuzu-emu/breakpad.git
synced 2024-11-24 06:45:48 +01:00
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
@ -40,6 +40,7 @@
|
|||||||
#include "google_breakpad/processor/memory_region.h"
|
#include "google_breakpad/processor/memory_region.h"
|
||||||
#include "google_breakpad/processor/source_line_resolver_interface.h"
|
#include "google_breakpad/processor/source_line_resolver_interface.h"
|
||||||
#include "google_breakpad/processor/stack_frame_cpu.h"
|
#include "google_breakpad/processor/stack_frame_cpu.h"
|
||||||
|
#include "google_breakpad/processor/system_info.h"
|
||||||
#include "processor/cfi_frame_info.h"
|
#include "processor/cfi_frame_info.h"
|
||||||
#include "processor/logging.h"
|
#include "processor/logging.h"
|
||||||
#include "processor/stackwalker_arm.h"
|
#include "processor/stackwalker_arm.h"
|
||||||
@ -249,10 +250,14 @@ StackFrame* StackwalkerARM::GetCallerFrame(const CallStack* stack,
|
|||||||
scoped_ptr<StackFrameARM> frame;
|
scoped_ptr<StackFrameARM> frame;
|
||||||
|
|
||||||
// See if there is DWARF call frame information covering this address.
|
// See if there is DWARF call frame information covering this address.
|
||||||
scoped_ptr<CFIFrameInfo> cfi_frame_info(
|
// TODO(jperaza): Ignore iOS CFI info until it is properly collected.
|
||||||
frame_symbolizer_->FindCFIFrameInfo(last_frame));
|
// https://bugs.chromium.org/p/google-breakpad/issues/detail?id=764
|
||||||
if (cfi_frame_info.get())
|
if (!system_info_ || system_info_->os != "iOS") {
|
||||||
frame.reset(GetCallerByCFIFrameInfo(frames, cfi_frame_info.get()));
|
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
|
// If CFI failed, or there wasn't CFI available, fall back
|
||||||
// to frame pointer, if this is configured.
|
// to frame pointer, if this is configured.
|
||||||
|
@ -782,8 +782,12 @@ TEST_F(CFI, RejectBadExpressions) {
|
|||||||
class StackwalkerARMFixtureIOS : public StackwalkerARMFixture {
|
class StackwalkerARMFixtureIOS : public StackwalkerARMFixture {
|
||||||
public:
|
public:
|
||||||
StackwalkerARMFixtureIOS() {
|
StackwalkerARMFixtureIOS() {
|
||||||
system_info.os = "iOS";
|
// iOS_test is used instead of iOS because the stackwalker has a check to
|
||||||
system_info.os_short = "ios";
|
// 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 New Issue
Block a user