arch/tile: apply commit 74fca9da0
to the compat signal handling as well
This passes siginfo and mcontext to tilegx32 signal handlers that don't have SA_SIGINFO set just as we have been doing for tilegx64. Cc: stable@vger.kernel.org Signed-off-by: Chris Metcalf <cmetcalf@tilera.com>
This commit is contained in:
parent
fc327e268f
commit
a134d22829
|
@ -403,19 +403,17 @@ int compat_setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
|
||||||
* Set up registers for signal handler.
|
* Set up registers for signal handler.
|
||||||
* Registers that we don't modify keep the value they had from
|
* Registers that we don't modify keep the value they had from
|
||||||
* user-space at the time we took the signal.
|
* user-space at the time we took the signal.
|
||||||
|
* We always pass siginfo and mcontext, regardless of SA_SIGINFO,
|
||||||
|
* since some things rely on this (e.g. glibc's debug/segfault.c).
|
||||||
*/
|
*/
|
||||||
regs->pc = ptr_to_compat_reg(ka->sa.sa_handler);
|
regs->pc = ptr_to_compat_reg(ka->sa.sa_handler);
|
||||||
regs->ex1 = PL_ICS_EX1(USER_PL, 1); /* set crit sec in handler */
|
regs->ex1 = PL_ICS_EX1(USER_PL, 1); /* set crit sec in handler */
|
||||||
regs->sp = ptr_to_compat_reg(frame);
|
regs->sp = ptr_to_compat_reg(frame);
|
||||||
regs->lr = restorer;
|
regs->lr = restorer;
|
||||||
regs->regs[0] = (unsigned long) usig;
|
regs->regs[0] = (unsigned long) usig;
|
||||||
|
|
||||||
if (ka->sa.sa_flags & SA_SIGINFO) {
|
|
||||||
/* Need extra arguments, so mark to restore caller-saves. */
|
|
||||||
regs->regs[1] = ptr_to_compat_reg(&frame->info);
|
regs->regs[1] = ptr_to_compat_reg(&frame->info);
|
||||||
regs->regs[2] = ptr_to_compat_reg(&frame->uc);
|
regs->regs[2] = ptr_to_compat_reg(&frame->uc);
|
||||||
regs->flags |= PT_FLAGS_CALLER_SAVES;
|
regs->flags |= PT_FLAGS_CALLER_SAVES;
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Notify any tracer that was single-stepping it.
|
* Notify any tracer that was single-stepping it.
|
||||||
|
|
Loading…
Reference in New Issue