And yet another argument to skip the dumping of the stack: many people
have written down such dumps from screen - including the quite useless
'Stack:' information.
The attached (tested) patch modifies x86's dump_stack() to print out the
much friendlier backtrace. The patch also adds one more whitespace after
the numeric EIP value. The old dump looked this way:
bad: scheduling while atomic!
Stack: ffffffff c041c72f 0000006a 00000068 000000f0 c13e1f28 c04c49c0 c13e1f28
c02a4099 c04c49c0 000000f0 00000000 00003104 c012592e 00003104 00003104
ffffffff 34000286 00000282 00000000 00000000 c13e1f28 c04c49c0 c04c4468
Call Trace:
[<c011f009>]sys_gettimeofday+0x89/0x90
[<c0113e40>]do_page_fault+0x0/0x49e
[<c0107d63>]syscall_call+0x7/0xb
the new output is:
bad: scheduling while atomic!
Call Trace:
[<c011f009>] sys_gettimeofday+0x89/0x90
[<c0113e40>] do_page_fault+0x0/0x49e
[<c0107d63>] syscall_call+0x7/0xb
much nicer and much more compact i think.
(The stack dump can still be useful in a number of other situations, so
having it in the real oops output is still good i think.)
Ingo
--- linux/arch/i386/kernel/traps.c.orig Wed Oct 2 11:07:25 2002
+++ linux/arch/i386/kernel/traps.c Wed Oct 2 11:14:12 2002
@@ -144,7 +144,7 @@
while (((long) stack & (THREAD_SIZE-1)) != 0) {
addr = *stack++;
if (kernel_text_address(addr)) {
- printk(" [<%08lx>]", addr);
+ printk(" [<%08lx>] ", addr);
print_symbol("%s\n", addr);
}
}
@@ -189,7 +189,9 @@
*/
void dump_stack(void)
{
- show_stack(0);
+ unsigned long stack;
+
+ show_trace(&stack);
}
void show_registers(struct pt_regs *regs)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/