diff options
author | Vladimir Murzin <vladimir.murzin@arm.com> | 2015-06-19 10:28:16 -0400 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2015-06-19 11:20:10 -0400 |
commit | 9e793ab84ed482047f7226595313f0f3a0aa6854 (patch) | |
tree | d1c873808487c9326d8d543ab5a47c10af3ba689 /arch/arm64/mm/fault.c | |
parent | 6f1a6ae87c0c60d7c462ef8fd071f291aa7a9abb (diff) |
arm64: show unhandled SP/PC alignment faults
Report unhandled SP/PC alignment faults if the show_unhandled_signals
variable is set (via /proc/sys/debug/exception-trace).
Signed-off-by: Vladimir Murzin <vladimir.murzin@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm64/mm/fault.c')
-rw-r--r-- | arch/arm64/mm/fault.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index 96da13167d4a..e8c608c893cf 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c | |||
@@ -478,12 +478,19 @@ asmlinkage void __exception do_sp_pc_abort(unsigned long addr, | |||
478 | struct pt_regs *regs) | 478 | struct pt_regs *regs) |
479 | { | 479 | { |
480 | struct siginfo info; | 480 | struct siginfo info; |
481 | struct task_struct *tsk = current; | ||
482 | |||
483 | if (show_unhandled_signals && unhandled_signal(tsk, SIGBUS)) | ||
484 | pr_info_ratelimited("%s[%d]: %s exception: pc=%p sp=%p\n", | ||
485 | tsk->comm, task_pid_nr(tsk), | ||
486 | esr_get_class_string(esr), (void *)regs->pc, | ||
487 | (void *)regs->sp); | ||
481 | 488 | ||
482 | info.si_signo = SIGBUS; | 489 | info.si_signo = SIGBUS; |
483 | info.si_errno = 0; | 490 | info.si_errno = 0; |
484 | info.si_code = BUS_ADRALN; | 491 | info.si_code = BUS_ADRALN; |
485 | info.si_addr = (void __user *)addr; | 492 | info.si_addr = (void __user *)addr; |
486 | arm64_notify_die("", regs, &info, esr); | 493 | arm64_notify_die("Oops - SP/PC alignment exception", regs, &info, esr); |
487 | } | 494 | } |
488 | 495 | ||
489 | static struct fault_info debug_fault_info[] = { | 496 | static struct fault_info debug_fault_info[] = { |