/* * Save stack-backtrace addresses into a stack_trace buffer. */ void save_stack_trace(struct stack_trace *trace) { struct pt_regs dummyregs; struct pt_regs *regs = &dummyregs; WARN_ON(trace->nr_entries || !trace->max_entries); prepare_frametrace(regs); save_context_stack(trace, regs); }
void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace) { struct pt_regs dummyregs; struct pt_regs *regs = &dummyregs; WARN_ON(trace->nr_entries || !trace->max_entries); if (tsk != current) { regs->regs[29] = tsk->thread.reg29; regs->regs[31] = 0; regs->cp0_epc = tsk->thread.reg31; } else prepare_frametrace(regs); save_context_stack(trace, tsk, regs); }