mirror of
https://git.suyu.dev/suyu/breakpad.git
synced 2026-01-01 20:24:40 +01:00
Better identification of context frames.
Since the introduction of inlined frames, it is not sufficient to check the stack trace length (== 1) in order to identify context frames. Updating all location that were depending on this assumption to check for frame trust level instead. Change-Id: I98f966889367c2270c268b8e78b67418c89c50f1 Reviewed-on: https://chromium-review.googlesource.com/c/breakpad/breakpad/+/3499020 Reviewed-by: Mark Mentovai <mark@chromium.org>
This commit is contained in:
parent
42d2475617
commit
c685fe1153
8 changed files with 42 additions and 33 deletions
|
|
@ -168,7 +168,8 @@ StackFrameARM* StackwalkerARM::GetCallerByStackScan(
|
|||
uint32_t caller_sp, caller_pc;
|
||||
|
||||
if (!ScanForReturnAddress(last_sp, &caller_sp, &caller_pc,
|
||||
frames.size() == 1 /* is_context_frame */)) {
|
||||
/*is_context_frame=*/last_frame->trust ==
|
||||
StackFrame::FRAME_TRUST_CONTEXT)) {
|
||||
// No plausible return address was found.
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -276,7 +277,8 @@ StackFrame* StackwalkerARM::GetCallerFrame(const CallStack* stack,
|
|||
if (TerminateWalk(frame->context.iregs[MD_CONTEXT_ARM_REG_PC],
|
||||
frame->context.iregs[MD_CONTEXT_ARM_REG_SP],
|
||||
last_frame->context.iregs[MD_CONTEXT_ARM_REG_SP],
|
||||
frames.size() == 1)) {
|
||||
/*first_unwind=*/last_frame->trust ==
|
||||
StackFrame::FRAME_TRUST_CONTEXT)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue