void die(const char * str, struct pt_regs * regs, long err) { unsigned long flags = oops_begin(); handle_BUG(regs); __die(str, regs, err); oops_end(flags); do_exit(SIGSEGV); }
/* * This is gone through when something in the kernel has done something bad * and is about to be terminated: */ void die(const char *str, struct pt_regs *regs, long err) { unsigned long flags = oops_begin(); int sig = SIGSEGV; if (!user_mode_vm(regs)) report_bug(regs->ip, regs); if (__die(str, regs, err)) sig = 0; oops_end(flags, regs, sig); }
/* * This is gone through when something in the kernel has done something bad * and is about to be terminated: */ void die(const char *str, struct pt_regs *regs, long err) { unsigned long flags = oops_begin(); if (die_nest_count < 3) { report_bug(regs->ip, regs); if (__die(str, regs, err)) regs = NULL; } else { printk(KERN_EMERG "Recursive die() failure, output suppressed\n"); } oops_end(flags, regs, SIGSEGV); }
void die_nmi(char *str, struct pt_regs *regs) { unsigned long flags = oops_begin(); /* * We are in trouble anyway, lets at least try * to get a message out. */ printk(str, safe_smp_processor_id()); show_registers(regs); if (panic_on_timeout || panic_on_oops) panic("nmi watchdog"); printk("console shuts up ...\n"); oops_end(flags); do_exit(SIGSEGV); }
void notrace __kprobes die_nmi(char *str, struct pt_regs *regs, int do_panic) { unsigned long flags; if (notify_die(DIE_NMIWATCHDOG, str, regs, 0, 2, SIGINT) == NOTIFY_STOP) return; flags = oops_begin(); printk(KERN_EMERG "%s", str); printk(" on CPU%d, ip %08lx, registers:\n", smp_processor_id(), regs->ip); show_registers(regs); oops_end(flags, regs, 0); if (do_panic || panic_on_oops) panic("Non maskable interrupt"); nmi_exit(); local_irq_enable(); do_exit(SIGBUS); }