]> err.no Git - linux-2.6/blobdiff - arch/mips/kernel/traps.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-2.6
[linux-2.6] / arch / mips / kernel / traps.c
index e51d8fd9a15234ec4d3e5fabcafb22b24010f6ed..b7292a56d4cd80b65d4bf2ef6f6ff016d371c857 100644 (file)
@@ -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(&regs, 0, sizeof(regs));
        prepare_frametrace(&regs);
        show_backtrace(current, &regs);
 }