|
@@ -352,9 +352,10 @@ void show_registers(const struct pt_regs *regs)
|
|
|
|
|
|
static DEFINE_SPINLOCK(die_lock);
|
|
|
|
|
|
-void __noreturn die(const char * str, const struct pt_regs * regs)
|
|
|
+void __noreturn die(const char * str, struct pt_regs * regs)
|
|
|
{
|
|
|
static int die_counter;
|
|
|
+ int sig = SIGSEGV;
|
|
|
#ifdef CONFIG_MIPS_MT_SMTC
|
|
|
unsigned long dvpret = dvpe();
|
|
|
#endif /* CONFIG_MIPS_MT_SMTC */
|
|
@@ -365,6 +366,10 @@ void __noreturn die(const char * str, const struct pt_regs * regs)
|
|
|
#ifdef CONFIG_MIPS_MT_SMTC
|
|
|
mips_mt_regdump(dvpret);
|
|
|
#endif /* CONFIG_MIPS_MT_SMTC */
|
|
|
+
|
|
|
+ if (notify_die(DIE_OOPS, str, regs, 0, current->thread.trap_no, SIGSEGV) == NOTIFY_STOP)
|
|
|
+ sig = 0;
|
|
|
+
|
|
|
printk("%s[#%d]:\n", str, ++die_counter);
|
|
|
show_registers(regs);
|
|
|
add_taint(TAINT_DIE);
|
|
@@ -379,7 +384,7 @@ void __noreturn die(const char * str, const struct pt_regs * regs)
|
|
|
panic("Fatal exception");
|
|
|
}
|
|
|
|
|
|
- do_exit(SIGSEGV);
|
|
|
+ do_exit(sig);
|
|
|
}
|
|
|
|
|
|
extern struct exception_table_entry __start___dbe_table[];
|