Lines Matching full:frame
21 * AArch64 PCS assigns the frame pointer to x29.
35 * Unwind from one frame record (A) to the next frame record (B).
37 * We terminate early if the location of B indicates a malformed chain of frame
41 int notrace unwind_frame(struct task_struct *tsk, struct stackframe *frame) in unwind_frame() argument
43 unsigned long fp = frame->fp; in unwind_frame()
55 if (test_bit(info.type, frame->stacks_done)) in unwind_frame()
71 if (info.type == frame->prev_type) { in unwind_frame()
72 if (fp <= frame->prev_fp) in unwind_frame()
75 set_bit(frame->prev_type, frame->stacks_done); in unwind_frame()
79 * Record this frame record's values and location. The prev_fp and in unwind_frame()
82 frame->fp = READ_ONCE_NOCHECK(*(unsigned long *)(fp)); in unwind_frame()
83 frame->pc = READ_ONCE_NOCHECK(*(unsigned long *)(fp + 8)); in unwind_frame()
84 frame->prev_fp = fp; in unwind_frame()
85 frame->prev_type = info.type; in unwind_frame()
89 (frame->pc == (unsigned long)return_to_handler)) { in unwind_frame()
93 * modified a return address (LR) in a stack frame in unwind_frame()
97 ret_stack = ftrace_graph_get_ret_stack(tsk, frame->graph++); in unwind_frame()
100 frame->pc = ret_stack->ret; in unwind_frame()
110 if (!frame->fp && !frame->pc) in unwind_frame()
117 void notrace walk_stackframe(struct task_struct *tsk, struct stackframe *frame, in walk_stackframe() argument
123 if (fn(frame, data)) in walk_stackframe()
125 ret = unwind_frame(tsk, frame); in walk_stackframe()
139 static int save_trace(struct stackframe *frame, void *d) in save_trace() argument
143 unsigned long addr = frame->pc; in save_trace()
160 struct stackframe frame; in save_stack_trace_regs() local
166 start_backtrace(&frame, regs->regs[29], regs->pc); in save_stack_trace_regs()
167 walk_stackframe(current, &frame, save_trace, &data); in save_stack_trace_regs()
175 struct stackframe frame; in __save_stack_trace() local
185 start_backtrace(&frame, thread_saved_fp(tsk), in __save_stack_trace()
190 start_backtrace(&frame, in __save_stack_trace()
195 walk_stackframe(tsk, &frame, save_trace, &data); in __save_stack_trace()