diff options
Diffstat (limited to 'src/processor/stackwalker_arm64.h')
-rw-r--r-- | src/processor/stackwalker_arm64.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/processor/stackwalker_arm64.h b/src/processor/stackwalker_arm64.h index 241383ea..39735c67 100644 --- a/src/processor/stackwalker_arm64.h +++ b/src/processor/stackwalker_arm64.h @@ -90,6 +90,13 @@ class StackwalkerARM64 : public Stackwalker { // of the returned frame. Return NULL on failure. StackFrameARM64* GetCallerByStackScan(const vector<StackFrame*> &frames); + // GetCallerByFramePointer() depends on the previous frame having recovered + // x30($LR) which may not have been done when using CFI. + // This function recovers $LR in the previous frame by using the frame-pointer + // two frames back to read it from the stack. + void CorrectRegLRByFramePointer(const vector<StackFrame*>& frames, + StackFrameARM64* last_frame); + // Stores the CPU context corresponding to the youngest stack frame, to // be returned by GetContextFrame. const MDRawContextARM64* context_; |