aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2005-10-22 00:46:33 -0400
committerPaul Mackerras <paulus@samba.org>2005-10-22 00:46:33 -0400
commite2b5530698cbe8148577b24097eaefcd835ac9ca (patch)
tree270f7505fa2b94880b5f59b638a8b5567c28f547 /arch/powerpc
parent5c8c56ebdfb290e4feaac406518903f58714d874 (diff)
ppc64: Fix delivery of RT signals to 32-bit processes.
An error in merging led to 32-bit processes getting the wrong link register value on entry to RT signal handlers, and the wrong stack chain as well. This fixes it. Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/kernel/signal_32.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
index 1c4eac4c808f..92452b2db26a 100644
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
@@ -821,7 +821,7 @@ static int handle_rt_signal(unsigned long sig, struct k_sigaction *ka,
821 goto badframe; 821 goto badframe;
822 regs->link = (unsigned long) frame->tramp; 822 regs->link = (unsigned long) frame->tramp;
823 } 823 }
824 if (put_user(regs->gpr[1], (unsigned long __user *)newsp)) 824 if (put_user(regs->gpr[1], (u32 __user *)newsp))
825 goto badframe; 825 goto badframe;
826 regs->gpr[1] = newsp; 826 regs->gpr[1] = newsp;
827 regs->gpr[3] = sig; 827 regs->gpr[3] = sig;
@@ -829,7 +829,6 @@ static int handle_rt_signal(unsigned long sig, struct k_sigaction *ka,
829 regs->gpr[5] = (unsigned long) &rt_sf->uc; 829 regs->gpr[5] = (unsigned long) &rt_sf->uc;
830 regs->gpr[6] = (unsigned long) rt_sf; 830 regs->gpr[6] = (unsigned long) rt_sf;
831 regs->nip = (unsigned long) ka->sa.sa_handler; 831 regs->nip = (unsigned long) ka->sa.sa_handler;
832 regs->link = (unsigned long) frame->tramp;
833 regs->trap = 0; 832 regs->trap = 0;
834#ifdef CONFIG_PPC64 833#ifdef CONFIG_PPC64
835 regs->result = 0; 834 regs->result = 0;