h8300: signal stack fix
authorYoshinori Sato <ysato@users.sourceforge.jp>
Sat, 5 Dec 2015 12:36:53 +0000 (21:36 +0900)
committerYoshinori Sato <ysato@users.sourceforge.jp>
Wed, 20 Jan 2016 13:44:13 +0000 (22:44 +0900)
Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
arch/h8300/kernel/signal.c

index 380fffd081b2d3c8c4fb962aca8bc0efbd5783bb..ad1f81f574e5785ee42e26219173595c1d8a66b6 100644 (file)
@@ -95,7 +95,7 @@ restore_sigcontext(struct sigcontext *usc, int *pd0)
        regs->ccr |= ccr;
        regs->orig_er0 = -1;            /* disable syscall checks */
        err |= __get_user(usp, &usc->sc_usp);
-       wrusp(usp);
+       regs->sp = usp;
 
        err |= __get_user(er0, &usc->sc_er0);
        *pd0 = er0;
@@ -180,7 +180,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
                return -EFAULT;
 
        /* Set up to return from userspace.  */
-       ret = frame->retcode;
+       ret = (unsigned char *)&frame->retcode;
        if (ksig->ka.sa.sa_flags & SA_RESTORER)
                ret = (unsigned char *)(ksig->ka.sa.sa_restorer);
        else {
@@ -196,8 +196,8 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set,
                return -EFAULT;
 
        /* Set up registers for signal handler */
-       wrusp((unsigned long) frame);
-       regs->pc  = (unsigned long) ksig->ka.sa.sa_handler;
+       regs->sp  = (unsigned long)frame;
+       regs->pc  = (unsigned long)ksig->ka.sa.sa_handler;
        regs->er0 = ksig->sig;
        regs->er1 = (unsigned long)&(frame->info);
        regs->er2 = (unsigned long)&frame->uc;