.. | .. |
---|
30 | 30 | #include <linux/init.h> |
---|
31 | 31 | #include <linux/ptrace.h> |
---|
32 | 32 | #include <linux/kallsyms.h> |
---|
| 33 | +#include <linux/extable.h> |
---|
33 | 34 | |
---|
34 | 35 | #include <asm/setup.h> |
---|
35 | 36 | #include <asm/fpu.h> |
---|
.. | .. |
---|
549 | 550 | errorcode |= 2; |
---|
550 | 551 | |
---|
551 | 552 | if (mmusr & (MMU_I | MMU_WP)) { |
---|
552 | | - if (ssw & 4) { |
---|
| 553 | + /* We might have an exception table for this PC */ |
---|
| 554 | + if (ssw & 4 && !search_exception_tables(fp->ptregs.pc)) { |
---|
553 | 555 | pr_err("Data %s fault at %#010lx in %s (pc=%#lx)\n", |
---|
554 | 556 | ssw & RW ? "read" : "write", |
---|
555 | 557 | fp->un.fmtb.daddr, |
---|
.. | .. |
---|
1136 | 1138 | pr_crit("%s: %08x\n", str, nr); |
---|
1137 | 1139 | show_registers(fp); |
---|
1138 | 1140 | add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE); |
---|
1139 | | - do_exit(SIGSEGV); |
---|
| 1141 | + make_task_dead(SIGSEGV); |
---|
1140 | 1142 | } |
---|
1141 | 1143 | |
---|
1142 | 1144 | asmlinkage void set_esp0(unsigned long ssp) |
---|