diff options
| author | Geert Uytterhoeven <geert@linux-m68k.org> | 2002-11-02 23:51:51 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-11-02 23:51:51 -0800 |
| commit | 78435629df60053764d3a5b68d58d9d4e96cf628 (patch) | |
| tree | 6643dc9648d7e34a9fdb52add30c1d43d2957a48 | |
| parent | f06d0bf1c0ddb2eeaf717a0ed2ab5de79c4ffefa (diff) | |
[PATCH] M68k dump_stack() updates
M68k dump_stack() updates:
- Let dump_stack() call show_trace() (cfr. ia32)
- Separate show_registers() from show_stack()
- Fix for dump_stack() becoming an arch-independent routine (from 2.4.x)
| -rw-r--r-- | arch/m68k/kernel/traps.c | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c index fa1aaca68883..4343116eef4e 100644 --- a/arch/m68k/kernel/traps.c +++ b/arch/m68k/kernel/traps.c @@ -881,9 +881,10 @@ void show_trace_task(struct task_struct *tsk) show_trace((unsigned long *)tsk->thread.esp0); } -static void dump_stack(struct frame *fp) +void show_registers(struct pt_regs *regs) { - unsigned long *stack, *endstack, addr; + struct frame *fp = (struct frame *)regs; + unsigned long addr; int i; addr = (unsigned long)&fp->un; @@ -938,9 +939,22 @@ static void dump_stack(struct frame *fp) default: printk("\n"); } + show_stack((unsigned long *)addr); + + printk("Code: "); + for (i = 0; i < 10; i++) + printk("%04x ", 0xffff & ((short *) fp->ptregs.pc)[i]); + printk ("\n"); +} + +extern void show_stack(unsigned long *stack) +{ + unsigned long *endstack; + int i; - stack = (unsigned long *)addr; - endstack = (unsigned long *)((addr + THREAD_SIZE - 1) & -THREAD_SIZE); + if (!stack) + stack = (unsigned long *)&stack; + endstack = (unsigned long *)(((unsigned long)stack + THREAD_SIZE - 1) & -THREAD_SIZE); printk("Stack from %08lx:", (unsigned long)stack); for (i = 0; i < kstack_depth_to_print; i++) { @@ -951,12 +965,17 @@ static void dump_stack(struct frame *fp) printk(" %08lx", *stack++); } printk("\n"); - show_trace((unsigned long *)addr); + show_trace(stack); +} - printk("Code: "); - for (i = 0; i < 10; i++) - printk("%04x ", 0xffff & ((short *) fp->ptregs.pc)[i]); - printk ("\n"); +/* + * The architecture-independent backtrace generator + */ +void dump_stack(void) +{ + unsigned long stack; + + show_trace(&stack); } void bad_super_trap (struct frame *fp) @@ -1129,7 +1148,7 @@ void die_if_kernel (char *str, struct pt_regs *fp, int nr) printk("Process %s (pid: %d, stackpage=%08lx)\n", current->comm, current->pid, PAGE_SIZE+(unsigned long)current); - dump_stack((struct frame *)fp); + show_stack((unsigned long *)fp); do_exit(SIGSEGV); } |
