[PATCH] ARM: showregs
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Sun, 17 Apr 2005 14:50:36 +0000 (15:50 +0100)
committerRussell King <rmk@dyn-67.arm.linux.org.uk>
Sun, 17 Apr 2005 14:50:36 +0000 (15:50 +0100)
Fix show_regs() to provide a backtrace.  Provide a new __show_regs()
function which implements the common subset of show_regs() and die().
Add prototypes to asm-arm/system.h

Signed-off-by: Russell King <rmk@arm.linux.org.uk>
arch/arm/kernel/process.c
arch/arm/kernel/traps.c
include/asm-arm/ptrace.h
include/asm-arm/system.h

index dbd8ca89b385b24f00b0d252ddab677db034c8ef..26eacd3e5def130504adf2ddd88f9cc977c98abf 100644 (file)
@@ -168,12 +168,11 @@ void machine_restart(char * __unused)
 
 EXPORT_SYMBOL(machine_restart);
 
-void show_regs(struct pt_regs * regs)
+void __show_regs(struct pt_regs *regs)
 {
-       unsigned long flags;
-
-       flags = condition_codes(regs);
+       unsigned long flags = condition_codes(regs);
 
+       printk("CPU: %d\n", smp_processor_id());
        print_symbol("PC is at %s\n", instruction_pointer(regs));
        print_symbol("LR is at %s\n", regs->ARM_lr);
        printk("pc : [<%08lx>]    lr : [<%08lx>]    %s\n"
@@ -213,6 +212,14 @@ void show_regs(struct pt_regs * regs)
        }
 }
 
+void show_regs(struct pt_regs * regs)
+{
+       printk("\n");
+       printk("Pid: %d, comm: %20s\n", current->pid, current->comm);
+       __show_regs(regs);
+       __backtrace();
+}
+
 void show_fpregs(struct user_fp *regs)
 {
        int i;
index 93dc4646cd7f7d6fb741ebbe69d9b3bef4369109..6e31718f60085f097bbcd14759b9bf9d1ef5df11 100644 (file)
@@ -31,9 +31,6 @@
 
 #include "ptrace.h"
 
-extern void c_backtrace (unsigned long fp, int pmode);
-extern void show_pte(struct mm_struct *mm, unsigned long addr);
-
 const char *processor_modes[]=
 { "USER_26", "FIQ_26" , "IRQ_26" , "SVC_26" , "UK4_26" , "UK5_26" , "UK6_26" , "UK7_26" ,
   "UK8_26" , "UK9_26" , "UK10_26", "UK11_26", "UK12_26", "UK13_26", "UK14_26", "UK15_26",
@@ -216,8 +213,7 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
 
        printk("Internal error: %s: %x [#%d]\n", str, err, ++die_counter);
        print_modules();
-       printk("CPU: %d\n", smp_processor_id());
-       show_regs(regs);
+       __show_regs(regs);
        printk("Process %s (pid: %d, stack limit = 0x%p)\n",
                tsk->comm, tsk->pid, tsk->thread_info + 1);
 
@@ -482,7 +478,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
                       current->pid, current->comm, no);
                dump_instr(regs);
                if (user_mode(regs)) {
-                       show_regs(regs);
+                       __show_regs(regs);
                        c_backtrace(regs->ARM_fp, processor_mode(regs));
                }
        }
index 604e3a186cf9b7e5e32b8abcd17d557c5e990cc9..4377e22b7e1a9a7359d1e6255e4098b1227e7aa2 100644 (file)
@@ -142,11 +142,8 @@ extern unsigned long profile_pc(struct pt_regs *regs);
 #endif
 
 #ifdef __KERNEL__
-extern void show_regs(struct pt_regs *);
-
-#define predicate(x)   (x & 0xf0000000)
+#define predicate(x)           ((x) & 0xf0000000)
 #define PREDICATE_ALWAYS       0xe0000000
-
 #endif
 
 #endif /* __ASSEMBLY__ */
index b5731290b4e5ae933175265742d4f27973c185d9..b13a8da4847b0240be605a000fb83e9ad9b0b882 100644 (file)
@@ -99,6 +99,9 @@ void hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int,
 #define tas(ptr) (xchg((ptr),1))
 
 extern asmlinkage void __backtrace(void);
+extern asmlinkage void c_backtrace(unsigned long fp, int pmode);
+extern void show_pte(struct mm_struct *mm, unsigned long addr);
+extern void __show_regs(struct pt_regs *);
 
 extern int cpu_architecture(void);