linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] arm64/traps: show fault address in exception trace
@ 2025-04-29  7:15 Baruch Siach
  2025-04-29 15:33 ` Will Deacon
  0 siblings, 1 reply; 3+ messages in thread
From: Baruch Siach @ 2025-04-29  7:15 UTC (permalink / raw)
  To: Catalin Marinas, Will Deacon; +Cc: linux-arm-kernel, Baruch Siach

The FAR (fault address) register provides useful information when
debugging an unhandled exception.

Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
 arch/arm64/kernel/traps.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c
index 4e26bd356a48..14eb598e33a7 100644
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -239,7 +239,7 @@ void die(const char *str, struct pt_regs *regs, long err)
 		make_task_dead(SIGSEGV);
 }
 
-static void arm64_show_signal(int signo, const char *str)
+static void arm64_show_signal(int signo, const char *str, unsigned long far)
 {
 	static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL,
 				      DEFAULT_RATELIMIT_BURST);
@@ -256,6 +256,7 @@ static void arm64_show_signal(int signo, const char *str)
 	pr_info("%s[%d]: unhandled exception: ", tsk->comm, task_pid_nr(tsk));
 	if (esr)
 		pr_cont("%s, ESR 0x%016lx, ", esr_get_class_string(esr), esr);
+	pr_cont("FAR 0x%016lx, ", far);
 
 	pr_cont("%s", str);
 	print_vma_addr(KERN_CONT " in ", regs->pc);
@@ -266,7 +267,7 @@ static void arm64_show_signal(int signo, const char *str)
 void arm64_force_sig_fault(int signo, int code, unsigned long far,
 			   const char *str)
 {
-	arm64_show_signal(signo, str);
+	arm64_show_signal(signo, str, far);
 	if (signo == SIGKILL)
 		force_sig(SIGKILL);
 	else
@@ -275,21 +276,21 @@ void arm64_force_sig_fault(int signo, int code, unsigned long far,
 
 void arm64_force_sig_fault_pkey(unsigned long far, const char *str, int pkey)
 {
-	arm64_show_signal(SIGSEGV, str);
+	arm64_show_signal(SIGSEGV, str, far);
 	force_sig_pkuerr((void __user *)far, pkey);
 }
 
 void arm64_force_sig_mceerr(int code, unsigned long far, short lsb,
 			    const char *str)
 {
-	arm64_show_signal(SIGBUS, str);
+	arm64_show_signal(SIGBUS, str, far);
 	force_sig_mceerr(code, (void __user *)far, lsb);
 }
 
 void arm64_force_sig_ptrace_errno_trap(int errno, unsigned long far,
 				       const char *str)
 {
-	arm64_show_signal(SIGTRAP, str);
+	arm64_show_signal(SIGTRAP, str, far);
 	force_sig_ptrace_errno_trap(errno, (void __user *)far);
 }
 
-- 
2.47.2



^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-04-30  4:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-29  7:15 [PATCH] arm64/traps: show fault address in exception trace Baruch Siach
2025-04-29 15:33 ` Will Deacon
2025-04-30  4:46   ` Baruch Siach

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).