diff options
Diffstat (limited to 'arch/m68knommu/kernel/traps.c')
-rw-r--r-- | arch/m68knommu/kernel/traps.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/arch/m68knommu/kernel/traps.c b/arch/m68knommu/kernel/traps.c index ad7dc6347f19..5bc068462864 100644 --- a/arch/m68knommu/kernel/traps.c +++ b/arch/m68knommu/kernel/traps.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/signal.h> | 21 | #include <linux/signal.h> |
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/mm.h> | 23 | #include <linux/mm.h> |
24 | #include <linux/module.h> | ||
24 | #include <linux/types.h> | 25 | #include <linux/types.h> |
25 | #include <linux/a.out.h> | 26 | #include <linux/a.out.h> |
26 | #include <linux/user.h> | 27 | #include <linux/user.h> |
@@ -38,7 +39,7 @@ | |||
38 | #include <asm/machdep.h> | 39 | #include <asm/machdep.h> |
39 | #include <asm/siginfo.h> | 40 | #include <asm/siginfo.h> |
40 | 41 | ||
41 | static char *vec_names[] = { | 42 | static char const * const vec_names[] = { |
42 | "RESET SP", "RESET PC", "BUS ERROR", "ADDRESS ERROR", | 43 | "RESET SP", "RESET PC", "BUS ERROR", "ADDRESS ERROR", |
43 | "ILLEGAL INSTRUCTION", "ZERO DIVIDE", "CHK", "TRAPcc", | 44 | "ILLEGAL INSTRUCTION", "ZERO DIVIDE", "CHK", "TRAPcc", |
44 | "PRIVILEGE VIOLATION", "TRACE", "LINE 1010", "LINE 1111", | 45 | "PRIVILEGE VIOLATION", "TRACE", "LINE 1010", "LINE 1111", |
@@ -106,17 +107,20 @@ asmlinkage void buserr_c(struct frame *fp) | |||
106 | 107 | ||
107 | int kstack_depth_to_print = 48; | 108 | int kstack_depth_to_print = 48; |
108 | 109 | ||
109 | void show_stack(struct task_struct *task, unsigned long *esp) | 110 | void show_stack(struct task_struct *task, unsigned long *stack) |
110 | { | 111 | { |
111 | unsigned long *stack, *endstack, addr; | 112 | unsigned long *endstack, addr; |
112 | extern char _start, _etext; | 113 | extern char _start, _etext; |
113 | int i; | 114 | int i; |
114 | 115 | ||
115 | if (esp == NULL) | 116 | if (!stack) { |
116 | esp = (unsigned long *) &esp; | 117 | if (task) |
118 | stack = (unsigned long *)task->thread.ksp; | ||
119 | else | ||
120 | stack = (unsigned long *)&stack; | ||
121 | } | ||
117 | 122 | ||
118 | stack = esp; | 123 | addr = (unsigned long) stack; |
119 | addr = (unsigned long) esp; | ||
120 | endstack = (unsigned long *) PAGE_ALIGN(addr); | 124 | endstack = (unsigned long *) PAGE_ALIGN(addr); |
121 | 125 | ||
122 | printk(KERN_EMERG "Stack from %08lx:", (unsigned long)stack); | 126 | printk(KERN_EMERG "Stack from %08lx:", (unsigned long)stack); |
@@ -306,6 +310,8 @@ void dump_stack(void) | |||
306 | show_stack(current, &stack); | 310 | show_stack(current, &stack); |
307 | } | 311 | } |
308 | 312 | ||
313 | EXPORT_SYMBOL(dump_stack); | ||
314 | |||
309 | #ifdef CONFIG_M68KFPU_EMU | 315 | #ifdef CONFIG_M68KFPU_EMU |
310 | asmlinkage void fpemu_signal(int signal, int code, void *addr) | 316 | asmlinkage void fpemu_signal(int signal, int code, void *addr) |
311 | { | 317 | { |