h8300: switch to generic sigaltstack
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 23 Dec 2012 07:19:34 +0000 (02:19 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 3 Feb 2013 23:15:56 +0000 (18:15 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/h8300/Kconfig
arch/h8300/kernel/signal.c

index 2d2efb653ee0a9ecefe1b89b69e1aae08ad73ff2..667999e96f63ef6dae280977f7072ee0169ecd65 100644 (file)
@@ -9,6 +9,7 @@ config H8300
        select GENERIC_IRQ_SHOW
        select GENERIC_CPU_DEVICES
        select MODULES_USE_ELF_RELA
+       select GENERIC_SIGALTSTACK
 
 config SYMBOL_PREFIX
        string
index 0e81b96c642f9cb4736070e9fdcbd453da0f0564..2d37418c04fbc3602a83cd12caad35e592a889b0 100644 (file)
@@ -89,13 +89,6 @@ sys_sigaction(int sig, const struct old_sigaction *act,
        return ret;
 }
 
-asmlinkage int
-sys_sigaltstack(const stack_t *uss, stack_t *uoss)
-{
-       return do_sigaltstack(uss, uoss, rdusp());
-}
-
-
 /*
  * Do a signal return; undo the signal stack.
  *
@@ -212,7 +205,7 @@ asmlinkage int do_rt_sigreturn(unsigned long __unused,...)
        if (restore_sigcontext(regs, &frame->uc.uc_mcontext, &er0))
                goto badframe;
 
-       if (do_sigaltstack(&frame->uc.uc_stack, NULL, usp) == -EFAULT)
+       if (restore_altstack(&frame->uc.uc_stack))
                goto badframe;
 
        return er0;
@@ -358,11 +351,7 @@ static int setup_rt_frame (int sig, struct k_sigaction *ka, siginfo_t *info,
        /* Create the ucontext.  */
        err |= __put_user(0, &frame->uc.uc_flags);
        err |= __put_user(0, &frame->uc.uc_link);
-       err |= __put_user((void *)current->sas_ss_sp,
-                         &frame->uc.uc_stack.ss_sp);
-       err |= __put_user(sas_ss_flags(rdusp()),
-                         &frame->uc.uc_stack.ss_flags);
-       err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
+       err |= __save_altstack(&frame->uc.uc_stack, rdusp());
        err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, set->sig[0]);
        err |= copy_to_user (&frame->uc.uc_sigmask, set, sizeof(*set));
        if (err)