Lines Matching full:frame

73 // cell in stack to be a saved frame pointer. GetCanonicFrame returns the
74 // pointer to saved frame pointer in any case.
83 // The next frame pointer does not look right. This could be a GCC frame, step in GetCanonicFrame()
87 // Nope, this does not look right either. This means the frame after next does in GetCanonicFrame()
88 // not have a valid frame pointer, but we can still extract the caller PC. in GetCanonicFrame()
89 // Unfortunately, there is no way to decide between GCC and LLVM frame in GetCanonicFrame()
105 uhwptr *frame = GetCanonicFrame(bp, stack_top, stack_bottom); in UnwindFast() local
106 // Lowest possible address that makes sense as the next frame pointer. in UnwindFast()
109 // Avoid infinite loop when frame == frame[0] by using frame > prev_frame. in UnwindFast()
110 while (IsValidFrame((uptr)frame, stack_top, bottom) && in UnwindFast()
111 IsAligned((uptr)frame, sizeof(*frame)) && in UnwindFast()
115 // 16 of the *caller's* stack frame. Thus we must dereference the in UnwindFast()
116 // back chain to find the caller frame before extracting it. in UnwindFast()
117 uhwptr *caller_frame = (uhwptr*)frame[0]; in UnwindFast()
123 uhwptr pc1 = frame[14]; in UnwindFast()
125 // frame[-1] contains the return address in UnwindFast()
126 uhwptr pc1 = frame[-1]; in UnwindFast()
128 uhwptr pc1 = STRIP_PAC_PC((void *)frame[1]); in UnwindFast()
138 bottom = (uptr)frame; in UnwindFast()
140 // frame[-2] contain fp of the previous frame in UnwindFast()
141 uptr new_bp = (uptr)frame[-2]; in UnwindFast()
143 uptr new_bp = (uptr)frame[0]; in UnwindFast()
145 frame = GetCanonicFrame(new_bp, stack_top, bottom); in UnwindFast()