Commit c393294e authored by David Mosberger's avatar David Mosberger

ia64: Correct the value of siginfo.si_addr for SIGSEGV signals

	triggered by NaT-page-consumption faults.
parent e0292b9d
...@@ -486,19 +486,23 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa, ...@@ -486,19 +486,23 @@ ia64_fault (unsigned long vector, unsigned long isr, unsigned long ifa,
case 26: /* NaT Consumption */ case 26: /* NaT Consumption */
if (user_mode(regs)) { if (user_mode(regs)) {
void *addr;
if (((isr >> 4) & 0xf) == 2) { if (((isr >> 4) & 0xf) == 2) {
/* NaT page consumption */ /* NaT page consumption */
sig = SIGSEGV; sig = SIGSEGV;
code = SEGV_ACCERR; code = SEGV_ACCERR;
addr = (void *) ifa;
} else { } else {
/* register NaT consumption */ /* register NaT consumption */
sig = SIGILL; sig = SIGILL;
code = ILL_ILLOPN; code = ILL_ILLOPN;
addr = (void *) (regs->cr_iip + ia64_psr(regs)->ri);
} }
siginfo.si_signo = sig; siginfo.si_signo = sig;
siginfo.si_code = code; siginfo.si_code = code;
siginfo.si_errno = 0; 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_imm = vector;
siginfo.si_flags = __ISR_VALID; siginfo.si_flags = __ISR_VALID;
siginfo.si_isr = isr; siginfo.si_isr = isr;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment