patch-2.4.25 linux-2.4.25/arch/ppc64/kernel/signal32.c
Next file: linux-2.4.25/arch/ppc64/kernel/smp.c
Previous file: linux-2.4.25/arch/ppc64/kernel/signal.c
Back to the patch index
Back to the overall index
- Lines: 38
- Date:
2004-02-18 05:36:30.000000000 -0800
- Orig file:
linux-2.4.24/arch/ppc64/kernel/signal32.c
- Orig date:
2003-06-13 07:51:32.000000000 -0700
diff -urN linux-2.4.24/arch/ppc64/kernel/signal32.c linux-2.4.25/arch/ppc64/kernel/signal32.c
@@ -761,7 +761,7 @@
memset (d, 0, sizeof(siginfo_t32));
d->si_signo = s->si_signo;
d->si_errno = s->si_errno;
- d->si_code = s->si_code & 0xffff;
+ d->si_code = (short)s->si_code;
if (s->si_signo >= SIGRTMIN) {
d->si_pid = s->si_pid;
d->si_uid = s->si_uid;
@@ -1067,7 +1067,8 @@
if (ka->sa.sa_flags & SA_SIGINFO)
{
siginfo64to32(&siginfo32bit,info);
- *newspp -= sizeof(*rt_stack_frame);
+ /* The ABI requires quadword alignment for the stack. */
+ *newspp = (*newspp - sizeof(*rt_stack_frame)) & -16ul;
rt_stack_frame = (struct rt_sigframe_32 *) (u64)(*newspp) ;
if (verify_area(VERIFY_WRITE, rt_stack_frame, sizeof(*rt_stack_frame)))
@@ -1095,7 +1096,7 @@
}
} else {
/* Put a sigcontext on the stack */
- *newspp -= sizeof(*sc);
+ *newspp = (*newspp - sizeof(*sc)) & -16ul;
sc = (struct sigcontext32 *)(u64)*newspp;
if (verify_area(VERIFY_WRITE, sc, sizeof(*sc)))
goto badframe;
@@ -1310,7 +1311,8 @@
newsp = (current->sas_ss_sp + current->sas_ss_size);
else
newsp = regs->gpr[1];
- newsp = frame = newsp - sizeof(struct sigregs32);
+ /* The ABI requires quadword alignment for the stack. */
+ newsp = frame = (newsp - sizeof(struct sigregs32)) & -16ul;
/* Whee! Actually deliver the signal. */
handle_signal32(signr, ka, &info, oldset, regs, &newsp, frame);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)