From c393294e384e5db1ba5685d12e3a13ee1bae0fdc Mon Sep 17 00:00:00 2001 From: David Mosberger Date: Wed, 5 Mar 2003 21:42:13 -0800 Subject: [PATCH] ia64: Correct the value of siginfo.si_addr for SIGSEGV signals triggered by NaT-page-consumption faults. --- arch/ia64/kernel/traps.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c index bb8e11fc0a13f..768dd70cb5960 100644 --- a/arch/ia64/kernel/traps.c +++ b/arch/ia64/kernel/traps.c @@ -486,19 +486,23 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa, case 26: /* NaT Consumption */ if (user_mode(regs)) { + void *addr; + if (((isr >> 4) & 0xf) == 2) { /* NaT page consumption */ sig = SIGSEGV; code = SEGV_ACCERR; + addr = (void *) ifa; } else { /* register NaT consumption */ sig = SIGILL; code = ILL_ILLOPN; + addr = (void *) (regs->cr_iip + ia64_psr(regs)->ri); } siginfo.si_signo = sig; siginfo.si_code = code; siginfo.si_errno = 0; - siginfo.si_addr = (void *) (regs->cr_iip + ia64_psr(regs)->ri); + siginfo.si_addr = addr; siginfo.si_imm = vector; siginfo.si_flags = __ISR_VALID; siginfo.si_isr = isr; -- 2.53.0