| .. | .. |
|---|
| 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) |
|---|