aboutsummaryrefslogtreecommitdiffstats
path: root/arch/score/kernel
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2012-12-23 03:43:28 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2013-02-03 18:16:15 -0500
commitb774cc5cb6b3b53b276bb7d968e3579afc2922c5 (patch)
tree922a12efa04f84d38e5e215fec3fe7d69874facc /arch/score/kernel
parent0aa0203fb43f04714004b2c4ad33b858e240555d (diff)
score: switch to generic sigaltstack
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/score/kernel')
-rw-r--r--arch/score/kernel/entry.S5
-rw-r--r--arch/score/kernel/signal.c21
2 files changed, 2 insertions, 24 deletions
diff --git a/arch/score/kernel/entry.S b/arch/score/kernel/entry.S
index 1557ca1a2951..7234ed09b7b7 100644
--- a/arch/score/kernel/entry.S
+++ b/arch/score/kernel/entry.S
@@ -491,8 +491,3 @@ ENTRY(sys_rt_sigreturn)
491 mv r4, r0 491 mv r4, r0
492 la r8, score_rt_sigreturn 492 la r8, score_rt_sigreturn
493 br r8 493 br r8
494
495ENTRY(sys_sigaltstack)
496 mv r4, r0
497 la r8, score_sigaltstack
498 br r8
diff --git a/arch/score/kernel/signal.c b/arch/score/kernel/signal.c
index 02353bde92d8..a00fba32b0eb 100644
--- a/arch/score/kernel/signal.c
+++ b/arch/score/kernel/signal.c
@@ -134,16 +134,6 @@ static void __user *get_sigframe(struct k_sigaction *ka,
134} 134}
135 135
136asmlinkage long 136asmlinkage long
137score_sigaltstack(struct pt_regs *regs)
138{
139 const stack_t __user *uss = (const stack_t __user *) regs->regs[4];
140 stack_t __user *uoss = (stack_t __user *) regs->regs[5];
141 unsigned long usp = regs->regs[0];
142
143 return do_sigaltstack(uss, uoss, usp);
144}
145
146asmlinkage long
147score_rt_sigreturn(struct pt_regs *regs) 137score_rt_sigreturn(struct pt_regs *regs)
148{ 138{
149 struct rt_sigframe __user *frame; 139 struct rt_sigframe __user *frame;
@@ -167,9 +157,7 @@ score_rt_sigreturn(struct pt_regs *regs)
167 else if (sig) 157 else if (sig)
168 force_sig(sig, current); 158 force_sig(sig, current);
169 159
170 /* It is more difficult to avoid calling this function than to 160 if (restore_altstack(&frame->rs_uc.uc_stack))
171 call it and ignore errors. */
172 if (do_sigaltstack(&frame->rs_uc.uc_stack, NULL, regs->regs[0]) == -EFAULT)
173 goto badframe; 161 goto badframe;
174 regs->is_syscall = 0; 162 regs->is_syscall = 0;
175 163
@@ -209,12 +197,7 @@ static int setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs,
209 err |= copy_siginfo_to_user(&frame->rs_info, info); 197 err |= copy_siginfo_to_user(&frame->rs_info, info);
210 err |= __put_user(0, &frame->rs_uc.uc_flags); 198 err |= __put_user(0, &frame->rs_uc.uc_flags);
211 err |= __put_user(NULL, &frame->rs_uc.uc_link); 199 err |= __put_user(NULL, &frame->rs_uc.uc_link);
212 err |= __put_user((void __user *)current->sas_ss_sp, 200 err |= __save_altstack(&frame->rs_uc.uc_stack, regs->regs[0]);
213 &frame->rs_uc.uc_stack.ss_sp);
214 err |= __put_user(sas_ss_flags(regs->regs[0]),
215 &frame->rs_uc.uc_stack.ss_flags);
216 err |= __put_user(current->sas_ss_size,
217 &frame->rs_uc.uc_stack.ss_size);
218 err |= setup_sigcontext(regs, &frame->rs_uc.uc_mcontext); 201 err |= setup_sigcontext(regs, &frame->rs_uc.uc_mcontext);
219 err |= __copy_to_user(&frame->rs_uc.uc_sigmask, set, sizeof(*set)); 202 err |= __copy_to_user(&frame->rs_uc.uc_sigmask, set, sizeof(*set));
220 203