aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm64/mm/fault.c
diff options
context:
space:
mode:
authorVladimir Murzin <vladimir.murzin@arm.com>2015-06-19 10:28:16 -0400
committerCatalin Marinas <catalin.marinas@arm.com>2015-06-19 11:20:10 -0400
commit9e793ab84ed482047f7226595313f0f3a0aa6854 (patch)
treed1c873808487c9326d8d543ab5a47c10af3ba689 /arch/arm64/mm/fault.c
parent6f1a6ae87c0c60d7c462ef8fd071f291aa7a9abb (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.c9
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
489static struct fault_info debug_fault_info[] = { 496static struct fault_info debug_fault_info[] = {