]> git.hungrycats.org Git - linux/commitdiff
[SPARC64]: Durrrr, missed signal handling fix from 2.4.x
authorDavid S. Miller <davem@nuts.davemloft.net>
Mon, 23 Aug 2004 07:37:11 +0000 (00:37 -0700)
committerDavid S. Miller <davem@nuts.davemloft.net>
Mon, 23 Aug 2004 07:37:11 +0000 (00:37 -0700)
Passing sigcontext info in UREG_I2, as needed.
I only spotted this because I was diffing 2.4.x
and 2.6.x sparc64 code.

Signed-off-by: David S. Miller <davem@redhat.com>
arch/sparc/kernel/signal.c
arch/sparc64/kernel/signal.c
arch/sparc64/kernel/signal32.c

index 28edf9319a968a10830dfc437f5556a9d512dd49..1673a24569f06df09f6029a663c2aa5b563af49d 100644 (file)
@@ -635,6 +635,7 @@ new_setup_frame(struct k_sigaction *ka, struct pt_regs *regs,
        regs->u_regs[UREG_FP] = (unsigned long) sf;
        regs->u_regs[UREG_I0] = signo;
        regs->u_regs[UREG_I1] = (unsigned long) &sf->info;
+       regs->u_regs[UREG_I2] = (unsigned long) &sf->info;
 
        /* 4. signal handler */
        regs->pc = (unsigned long) ka->sa.sa_handler;
@@ -719,6 +720,7 @@ new_setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
        regs->u_regs[UREG_FP] = (unsigned long) sf;
        regs->u_regs[UREG_I0] = signo;
        regs->u_regs[UREG_I1] = (unsigned long) &sf->info;
+       regs->u_regs[UREG_I2] = (unsigned long) &sf->regs;
 
        regs->pc = (unsigned long) ka->sa.sa_handler;
        regs->npc = (regs->pc + 4);
index ba3fcb4b2c8f08ab2460aaeb716a4c16ee483347..07f0fb37d59dbb8f77681f6b4e2adfff30f1da06 100644 (file)
@@ -545,6 +545,12 @@ setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
        regs->u_regs[UREG_I0] = signo;
        regs->u_regs[UREG_I1] = (unsigned long) &sf->info;
 
+       /* The sigcontext is passed in this way because of how it
+        * is defined in GLIBC's /usr/include/bits/sigcontext.h
+        * for sparc64.  It includes the 128 bytes of siginfo_t.
+        */
+       regs->u_regs[UREG_I2] = (unsigned long) &sf->info;
+
        /* 5. signal handler */
        regs->tpc = (unsigned long) ka->sa.sa_handler;
        regs->tnpc = (regs->tpc + 4);
index a9a5b31a3a3aebdfa39ac97fdd81b09ee216ef05..4476451b9d9dca9529afc021a28ee6fbea3752be 100644 (file)
@@ -749,6 +749,7 @@ static void new_setup_frame32(struct k_sigaction *ka, struct pt_regs *regs,
        regs->u_regs[UREG_FP] = (unsigned long) sf;
        regs->u_regs[UREG_I0] = signo;
        regs->u_regs[UREG_I1] = (unsigned long) &sf->info;
+       regs->u_regs[UREG_I2] = (unsigned long) &sf->info;
 
        /* 4. signal handler */
        regs->tpc = (unsigned long) ka->sa.sa_handler;
@@ -1157,6 +1158,7 @@ static void setup_rt_frame32(struct k_sigaction *ka, struct pt_regs *regs,
        regs->u_regs[UREG_FP] = (unsigned long) sf;
        regs->u_regs[UREG_I0] = signr;
        regs->u_regs[UREG_I1] = (unsigned long) &sf->info;
+       regs->u_regs[UREG_I2] = (unsigned long) &sf->regs;
 
        /* 4. signal handler */
        regs->tpc = (unsigned long) ka->sa.sa_handler;