|
30 | 30 | #include <linux/kallsyms.h> |
31 | 31 | #include <linux/uaccess.h> |
32 | 32 |
|
| 33 | +#include <asm/bug.h> |
33 | 34 | #include <asm/io.h> |
| 35 | +#include <asm/processor.h> |
34 | 36 | #include <asm/unwinder.h> |
35 | 37 | #include <asm/sections.h> |
36 | 38 |
|
37 | | -static int kstack_depth_to_print = 0x180; |
38 | 39 | int lwa_flag; |
39 | 40 | static unsigned long __user *lwa_addr; |
40 | 41 |
|
| 42 | +asmlinkage void unhandled_exception(struct pt_regs *regs, int ea, int vector); |
| 43 | +asmlinkage void do_trap(struct pt_regs *regs, unsigned long address); |
| 44 | +asmlinkage void do_fpe_trap(struct pt_regs *regs, unsigned long address); |
| 45 | +asmlinkage void do_unaligned_access(struct pt_regs *regs, unsigned long address); |
| 46 | +asmlinkage void do_bus_fault(struct pt_regs *regs, unsigned long address); |
| 47 | +asmlinkage void do_illegal_instruction(struct pt_regs *regs, |
| 48 | + unsigned long address); |
| 49 | + |
41 | 50 | static void print_trace(void *data, unsigned long addr, int reliable) |
42 | 51 | { |
43 | 52 | const char *loglvl = data; |
@@ -143,80 +152,6 @@ void show_registers(struct pt_regs *regs) |
143 | 152 | printk("\n"); |
144 | 153 | } |
145 | 154 |
|
146 | | -void nommu_dump_state(struct pt_regs *regs, |
147 | | - unsigned long ea, unsigned long vector) |
148 | | -{ |
149 | | - int i; |
150 | | - unsigned long addr, stack = regs->sp; |
151 | | - |
152 | | - printk("\n\r[nommu_dump_state] :: ea %lx, vector %lx\n\r", ea, vector); |
153 | | - |
154 | | - printk("CPU #: %d\n" |
155 | | - " PC: %08lx SR: %08lx SP: %08lx\n", |
156 | | - 0, regs->pc, regs->sr, regs->sp); |
157 | | - printk("GPR00: %08lx GPR01: %08lx GPR02: %08lx GPR03: %08lx\n", |
158 | | - 0L, regs->gpr[1], regs->gpr[2], regs->gpr[3]); |
159 | | - printk("GPR04: %08lx GPR05: %08lx GPR06: %08lx GPR07: %08lx\n", |
160 | | - regs->gpr[4], regs->gpr[5], regs->gpr[6], regs->gpr[7]); |
161 | | - printk("GPR08: %08lx GPR09: %08lx GPR10: %08lx GPR11: %08lx\n", |
162 | | - regs->gpr[8], regs->gpr[9], regs->gpr[10], regs->gpr[11]); |
163 | | - printk("GPR12: %08lx GPR13: %08lx GPR14: %08lx GPR15: %08lx\n", |
164 | | - regs->gpr[12], regs->gpr[13], regs->gpr[14], regs->gpr[15]); |
165 | | - printk("GPR16: %08lx GPR17: %08lx GPR18: %08lx GPR19: %08lx\n", |
166 | | - regs->gpr[16], regs->gpr[17], regs->gpr[18], regs->gpr[19]); |
167 | | - printk("GPR20: %08lx GPR21: %08lx GPR22: %08lx GPR23: %08lx\n", |
168 | | - regs->gpr[20], regs->gpr[21], regs->gpr[22], regs->gpr[23]); |
169 | | - printk("GPR24: %08lx GPR25: %08lx GPR26: %08lx GPR27: %08lx\n", |
170 | | - regs->gpr[24], regs->gpr[25], regs->gpr[26], regs->gpr[27]); |
171 | | - printk("GPR28: %08lx GPR29: %08lx GPR30: %08lx GPR31: %08lx\n", |
172 | | - regs->gpr[28], regs->gpr[29], regs->gpr[30], regs->gpr[31]); |
173 | | - printk(" RES: %08lx oGPR11: %08lx\n", |
174 | | - regs->gpr[11], regs->orig_gpr11); |
175 | | - |
176 | | - printk("Process %s (pid: %d, stackpage=%08lx)\n", |
177 | | - ((struct task_struct *)(__pa(current)))->comm, |
178 | | - ((struct task_struct *)(__pa(current)))->pid, |
179 | | - (unsigned long)current); |
180 | | - |
181 | | - printk("\nStack: "); |
182 | | - printk("Stack dump [0x%08lx]:\n", (unsigned long)stack); |
183 | | - for (i = 0; i < kstack_depth_to_print; i++) { |
184 | | - if (((long)stack & (THREAD_SIZE - 1)) == 0) |
185 | | - break; |
186 | | - stack++; |
187 | | - |
188 | | - printk("%lx :: sp + %02d: 0x%08lx\n", stack, i * 4, |
189 | | - *((unsigned long *)(__pa(stack)))); |
190 | | - } |
191 | | - printk("\n"); |
192 | | - |
193 | | - printk("Call Trace: "); |
194 | | - i = 1; |
195 | | - while (((long)stack & (THREAD_SIZE - 1)) != 0) { |
196 | | - addr = *((unsigned long *)__pa(stack)); |
197 | | - stack++; |
198 | | - |
199 | | - if (kernel_text_address(addr)) { |
200 | | - if (i && ((i % 6) == 0)) |
201 | | - printk("\n "); |
202 | | - printk(" [<%08lx>]", addr); |
203 | | - i++; |
204 | | - } |
205 | | - } |
206 | | - printk("\n"); |
207 | | - |
208 | | - printk("\nCode: "); |
209 | | - |
210 | | - for (i = -24; i < 24; i++) { |
211 | | - unsigned long word; |
212 | | - |
213 | | - word = ((unsigned long *)(__pa(regs->pc)))[i]; |
214 | | - |
215 | | - print_data(regs->pc, word, i); |
216 | | - } |
217 | | - printk("\n"); |
218 | | -} |
219 | | - |
220 | 155 | /* This is normally the 'Oops' routine */ |
221 | 156 | void __noreturn die(const char *str, struct pt_regs *regs, long err) |
222 | 157 | { |
|
0 commit comments