diff options
Diffstat (limited to 'arch/mips/kernel/traps.c')
-rw-r--r-- | arch/mips/kernel/traps.c | 40 |
1 files changed, 4 insertions, 36 deletions
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index e51d8fd9a15..b7292a56d4c 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c @@ -41,6 +41,7 @@ #include <asm/mmu_context.h> #include <asm/watch.h> #include <asm/types.h> +#include <asm/stacktrace.h> extern asmlinkage void handle_int(void); extern asmlinkage void handle_tlbm(void); @@ -92,16 +93,14 @@ static void show_raw_backtrace(unsigned long reg29) } #ifdef CONFIG_KALLSYMS -static int raw_show_trace; +int raw_show_trace; static int __init set_raw_show_trace(char *str) { raw_show_trace = 1; return 1; } __setup("raw_show_trace", set_raw_show_trace); - -extern unsigned long unwind_stack(struct task_struct *task, unsigned long *sp, - unsigned long pc, unsigned long ra); +#endif static void show_backtrace(struct task_struct *task, struct pt_regs *regs) { @@ -116,14 +115,10 @@ static void show_backtrace(struct task_struct *task, struct pt_regs *regs) printk("Call Trace:\n"); do { print_ip_sym(pc); - pc = unwind_stack(task, &sp, pc, ra); - ra = 0; + pc = unwind_stack(task, &sp, pc, &ra); } while (pc); printk("\n"); } -#else -#define show_backtrace(task, r) show_raw_backtrace((r)->regs[29]); -#endif /* * This routine abuses get_user()/put_user() to reference pointers @@ -158,28 +153,6 @@ static void show_stacktrace(struct task_struct *task, struct pt_regs *regs) show_backtrace(task, regs); } -static __always_inline void prepare_frametrace(struct pt_regs *regs) -{ - __asm__ __volatile__( - ".set push\n\t" - ".set noat\n\t" -#ifdef CONFIG_64BIT - "1: dla $1, 1b\n\t" - "sd $1, %0\n\t" - "sd $29, %1\n\t" - "sd $31, %2\n\t" -#else - "1: la $1, 1b\n\t" - "sw $1, %0\n\t" - "sw $29, %1\n\t" - "sw $31, %2\n\t" -#endif - ".set pop\n\t" - : "=m" (regs->cp0_epc), - "=m" (regs->regs[29]), "=m" (regs->regs[31]) - : : "memory"); -} - void show_stack(struct task_struct *task, unsigned long *sp) { struct pt_regs regs; @@ -206,11 +179,6 @@ void dump_stack(void) { struct pt_regs regs; - /* - * Remove any garbage that may be in regs (specially func - * addresses) to avoid show_raw_backtrace() to report them - */ - memset(®s, 0, sizeof(regs)); prepare_frametrace(®s); show_backtrace(current, ®s); } |