diff options
Diffstat (limited to 'arch/mn10300/kernel/signal.c')
-rw-r--r-- | arch/mn10300/kernel/signal.c | 60 |
1 files changed, 2 insertions, 58 deletions
diff --git a/arch/mn10300/kernel/signal.c b/arch/mn10300/kernel/signal.c index f570b3085ef9..9dfac5cd16e6 100644 --- a/arch/mn10300/kernel/signal.c +++ b/arch/mn10300/kernel/signal.c | |||
@@ -32,59 +32,6 @@ | |||
32 | #define DEBUG_SIG 0 | 32 | #define DEBUG_SIG 0 |
33 | 33 | ||
34 | /* | 34 | /* |
35 | * atomically swap in the new signal mask, and wait for a signal. | ||
36 | */ | ||
37 | asmlinkage long sys_sigsuspend(int history0, int history1, old_sigset_t mask) | ||
38 | { | ||
39 | sigset_t blocked; | ||
40 | siginitset(&blocked, mask); | ||
41 | return sigsuspend(&blocked); | ||
42 | } | ||
43 | |||
44 | /* | ||
45 | * set signal action syscall | ||
46 | */ | ||
47 | asmlinkage long sys_sigaction(int sig, | ||
48 | const struct old_sigaction __user *act, | ||
49 | struct old_sigaction __user *oact) | ||
50 | { | ||
51 | struct k_sigaction new_ka, old_ka; | ||
52 | int ret; | ||
53 | |||
54 | if (act) { | ||
55 | old_sigset_t mask; | ||
56 | if (verify_area(VERIFY_READ, act, sizeof(*act)) || | ||
57 | __get_user(new_ka.sa.sa_handler, &act->sa_handler) || | ||
58 | __get_user(new_ka.sa.sa_restorer, &act->sa_restorer) || | ||
59 | __get_user(new_ka.sa.sa_flags, &act->sa_flags) || | ||
60 | __get_user(mask, &act->sa_mask)) | ||
61 | return -EFAULT; | ||
62 | siginitset(&new_ka.sa.sa_mask, mask); | ||
63 | } | ||
64 | |||
65 | ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); | ||
66 | |||
67 | if (!ret && oact) { | ||
68 | if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) || | ||
69 | __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || | ||
70 | __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer) || | ||
71 | __put_user(old_ka.sa.sa_flags, &oact->sa_flags) || | ||
72 | __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask)) | ||
73 | return -EFAULT; | ||
74 | } | ||
75 | |||
76 | return ret; | ||
77 | } | ||
78 | |||
79 | /* | ||
80 | * set alternate signal stack syscall | ||
81 | */ | ||
82 | asmlinkage long sys_sigaltstack(const stack_t __user *uss, stack_t *uoss) | ||
83 | { | ||
84 | return do_sigaltstack(uss, uoss, current_frame()->sp); | ||
85 | } | ||
86 | |||
87 | /* | ||
88 | * do a signal return; undo the signal stack. | 35 | * do a signal return; undo the signal stack. |
89 | */ | 36 | */ |
90 | static int restore_sigcontext(struct pt_regs *regs, | 37 | static int restore_sigcontext(struct pt_regs *regs, |
@@ -193,8 +140,7 @@ asmlinkage long sys_rt_sigreturn(void) | |||
193 | if (restore_sigcontext(current_frame(), &frame->uc.uc_mcontext, &d0)) | 140 | if (restore_sigcontext(current_frame(), &frame->uc.uc_mcontext, &d0)) |
194 | goto badframe; | 141 | goto badframe; |
195 | 142 | ||
196 | if (do_sigaltstack(&frame->uc.uc_stack, NULL, current_frame()->sp) == | 143 | if (restore_altstack(&frame->uc.uc_stack)) |
197 | -EFAULT) | ||
198 | goto badframe; | 144 | goto badframe; |
199 | 145 | ||
200 | return d0; | 146 | return d0; |
@@ -359,9 +305,7 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
359 | /* create the ucontext. */ | 305 | /* create the ucontext. */ |
360 | if (__put_user(0, &frame->uc.uc_flags) || | 306 | if (__put_user(0, &frame->uc.uc_flags) || |
361 | __put_user(0, &frame->uc.uc_link) || | 307 | __put_user(0, &frame->uc.uc_link) || |
362 | __put_user((void *)current->sas_ss_sp, &frame->uc.uc_stack.ss_sp) || | 308 | __save_altstack(&frame->uc.uc_stack, regs->sp) || |
363 | __put_user(sas_ss_flags(regs->sp), &frame->uc.uc_stack.ss_flags) || | ||
364 | __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size) || | ||
365 | setup_sigcontext(&frame->uc.uc_mcontext, | 309 | setup_sigcontext(&frame->uc.uc_mcontext, |
366 | &frame->fpuctx, regs, set->sig[0]) || | 310 | &frame->fpuctx, regs, set->sig[0]) || |
367 | __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set))) | 311 | __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set))) |