|
@@ -139,8 +139,8 @@ fixup_bp_irq_link(unsigned long bp, unsigned long *stack,
|
|
|
* severe exception (double fault, nmi, stack fault, debug, mce) hardware stack
|
|
|
*/
|
|
|
|
|
|
-void dump_trace(struct task_struct *task, struct pt_regs *regs,
|
|
|
- unsigned long *stack, unsigned long bp,
|
|
|
+void dump_trace(struct task_struct *task,
|
|
|
+ struct pt_regs *regs, unsigned long *stack,
|
|
|
const struct stacktrace_ops *ops, void *data)
|
|
|
{
|
|
|
const unsigned cpu = get_cpu();
|
|
@@ -149,6 +149,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
|
|
|
unsigned used = 0;
|
|
|
struct thread_info *tinfo;
|
|
|
int graph = 0;
|
|
|
+ unsigned long bp;
|
|
|
|
|
|
if (!task)
|
|
|
task = current;
|
|
@@ -160,18 +161,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
|
|
|
stack = (unsigned long *)task->thread.sp;
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_FRAME_POINTER
|
|
|
- if (!bp) {
|
|
|
- if (task == current) {
|
|
|
- /* Grab bp right from our regs */
|
|
|
- get_bp(bp);
|
|
|
- } else {
|
|
|
- /* bp is the last reg pushed by switch_to */
|
|
|
- bp = *(unsigned long *) task->thread.sp;
|
|
|
- }
|
|
|
- }
|
|
|
-#endif
|
|
|
-
|
|
|
+ bp = stack_frame(task, regs);
|
|
|
/*
|
|
|
* Print function call entries in all stacks, starting at the
|
|
|
* current stack address. If the stacks consist of nested
|
|
@@ -235,7 +225,7 @@ EXPORT_SYMBOL(dump_trace);
|
|
|
|
|
|
void
|
|
|
show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
|
|
- unsigned long *sp, unsigned long bp, char *log_lvl)
|
|
|
+ unsigned long *sp, char *log_lvl)
|
|
|
{
|
|
|
unsigned long *irq_stack_end;
|
|
|
unsigned long *irq_stack;
|
|
@@ -279,7 +269,7 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
|
|
preempt_enable();
|
|
|
|
|
|
printk(KERN_CONT "\n");
|
|
|
- show_trace_log_lvl(task, regs, sp, bp, log_lvl);
|
|
|
+ show_trace_log_lvl(task, regs, sp, log_lvl);
|
|
|
}
|
|
|
|
|
|
void show_registers(struct pt_regs *regs)
|
|
@@ -308,7 +298,7 @@ void show_registers(struct pt_regs *regs)
|
|
|
|
|
|
printk(KERN_EMERG "Stack:\n");
|
|
|
show_stack_log_lvl(NULL, regs, (unsigned long *)sp,
|
|
|
- regs->bp, KERN_EMERG);
|
|
|
+ KERN_EMERG);
|
|
|
|
|
|
printk(KERN_EMERG "Code: ");
|
|
|
|