mirror of
https://git.suyu.dev/suyu/breakpad.git
synced 2025-12-28 10:15:10 +01:00
Issue in StackwalkerAMD64::GetCallerByFramePointerRecovery.
There is an issue in StackwalkerAMD64::GetCallerByFramePointerRecovery. Occasionally it produces invalid frames (instruction pointer == 0) which prevents the AMD64 stack walker from proceeding to do stack scanning and instead leads to premature termination of the stack walking process. For more details: http://crbug/537444 BUG= R=mark@chromium.org Review URL: https://codereview.chromium.org/1408973002 .
This commit is contained in:
parent
ef7575d35a
commit
b458f36762
3 changed files with 165 additions and 9 deletions
|
|
@ -78,6 +78,14 @@ class StackwalkerAMD64 : public Stackwalker {
|
|||
StackFrameAMD64* GetCallerByCFIFrameInfo(const vector<StackFrame*> &frames,
|
||||
CFIFrameInfo* cfi_frame_info);
|
||||
|
||||
// Checks whether end-of-stack is reached. An instruction address of 0 is an
|
||||
// end-of-stack marker. If the stack pointer of the caller is at a lower
|
||||
// address than the stack pointer of the callee, then that's clearly incorrect
|
||||
// and it is treated as end-of-stack to enforce progress and avoid infinite
|
||||
// loops.
|
||||
bool IsEndOfStack(uint64_t caller_rip, uint64_t caller_rsp,
|
||||
uint64_t callee_rsp);
|
||||
|
||||
// Assumes a traditional frame layout where the frame pointer has not been
|
||||
// omitted. The expectation is that caller's %rbp is pushed to the stack
|
||||
// after the return address of the callee, and that the callee's %rsp can
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue