]> git.karo-electronics.de Git - linux-beck.git/blobdiff - arch/parisc/kernel/signal.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal
[linux-beck.git] / arch / parisc / kernel / signal.c
index 64d315f6d2a472e829e95ee1b48f1c092ca71f3d..98e9e7126565816d67e4c2ad48cf1f94106c7f01 100644 (file)
@@ -190,8 +190,10 @@ get_sigframe(struct k_sigaction *ka, unsigned long sp, size_t frame_size)
        DBG(1,"get_sigframe: ka = %#lx, sp = %#lx, frame_size = %#lx\n",
                        (unsigned long)ka, sp, frame_size);
        
+       /* Align alternate stack and reserve 64 bytes for the signal
+          handler's frame marker.  */
        if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! sas_ss_flags(sp))
-               sp = current->sas_ss_sp; /* Stacks grow up! */
+               sp = (current->sas_ss_sp + 0x7f) & ~0x3f; /* Stacks grow up! */
 
        DBG(1,"get_sigframe: Returning sp = %#lx\n", (unsigned long)sp);
        return (void __user *) sp; /* Stacks grow up.  Fun. */
@@ -299,7 +301,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
 #if DEBUG_SIG
        /* Assert that we're flushing in the correct space... */
        {
-               int sid;
+               unsigned long sid;
                asm ("mfsp %%sr3,%0" : "=r" (sid));
                DBG(1,"setup_rt_frame: Flushing 64 bytes at space %#x offset %p\n",
                       sid, frame->tramp);