diff options
author | Jeff Garzik <jeff@garzik.org> | 2006-07-29 01:39:17 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-07-29 01:39:17 -0400 |
commit | ab3b3fd38125be0242c2f94bf144b48054210882 (patch) | |
tree | c668c4d6381046f59a973284ff4de59436f84944 /arch/i386/kernel/traps.c | |
parent | b71426eb10d904d421b36f51f93c8d0ba558edac (diff) | |
parent | e3f2ddeac718c768fdac4b7fe69d465172f788a8 (diff) | |
download | op-kernel-dev-ab3b3fd38125be0242c2f94bf144b48054210882.zip op-kernel-dev-ab3b3fd38125be0242c2f94bf144b48054210882.tar.gz |
Merge branch 'master' into upstream-fixes
Diffstat (limited to 'arch/i386/kernel/traps.c')
-rw-r--r-- | arch/i386/kernel/traps.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c index 313ac1f..3facc8f 100644 --- a/arch/i386/kernel/traps.c +++ b/arch/i386/kernel/traps.c @@ -187,10 +187,21 @@ static void show_trace_log_lvl(struct task_struct *task, struct pt_regs *regs, if (unwind_init_blocked(&info, task) == 0) unw_ret = show_trace_unwind(&info, log_lvl); } - if (unw_ret > 0) { - if (call_trace > 0) + if (unw_ret > 0 && !arch_unw_user_mode(&info)) { +#ifdef CONFIG_STACK_UNWIND + print_symbol("DWARF2 unwinder stuck at %s\n", + UNW_PC(info.regs)); + if (call_trace == 1) { + printk("Leftover inexact backtrace:\n"); + if (UNW_SP(info.regs)) + stack = (void *)UNW_SP(info.regs); + } else if (call_trace > 1) return; - printk("%sLegacy call trace:\n", log_lvl); + else + printk("Full inexact backtrace again:\n"); +#else + printk("Inexact backtrace:\n"); +#endif } } |