|
@@ -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)
|
|
if (unwind_init_blocked(&info, task) == 0)
|
|
unw_ret = show_trace_unwind(&info, log_lvl);
|
|
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;
|
|
return;
|
|
- printk("%sLegacy call trace:\n", log_lvl);
|
|
|
|
|
|
+ else
|
|
|
|
+ printk("Full inexact backtrace again:\n");
|
|
|
|
+#else
|
|
|
|
+ printk("Inexact backtrace:\n");
|
|
|
|
+#endif
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|