]> git.hungrycats.org Git - linux/commitdiff
ia64: Correct the value of siginfo.si_addr for SIGSEGV signals
authorDavid Mosberger <davidm@tiger.hpl.hp.com>
Thu, 6 Mar 2003 05:42:13 +0000 (21:42 -0800)
committerDavid Mosberger <davidm@tiger.hpl.hp.com>
Thu, 6 Mar 2003 05:42:13 +0000 (21:42 -0800)
triggered by NaT-page-consumption faults.

arch/ia64/kernel/traps.c

index bb8e11fc0a13fae975e2e9a747be86bbcec50b63..768dd70cb59607b993c455280e47d2adaf14c3af 100644 (file)
@@ -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;