aboutsummaryrefslogtreecommitdiffstats
path: root/arch/score
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
parent0aa0203fb43f04714004b2c4ad33b858e240555d (diff)
score: switch to generic sigaltstack
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/score')
-rw-r--r--arch/score/Kconfig1
-rw-r--r--arch/score/include/asm/syscalls.h1
-rw-r--r--arch/score/kernel/entry.S5
-rw-r--r--arch/score/kernel/signal.c21
4 files changed, 3 insertions, 25 deletions
diff --git a/arch/score/Kconfig b/arch/score/Kconfig
index 3b1482e7afac..a125d7207bcc 100644
--- a/arch/score/Kconfig
+++ b/arch/score/Kconfig
@@ -14,6 +14,7 @@ config SCORE
14 select HAVE_MOD_ARCH_SPECIFIC 14 select HAVE_MOD_ARCH_SPECIFIC
15 select MODULES_USE_ELF_REL 15 select MODULES_USE_ELF_REL
16 select CLONE_BACKWARDS 16 select CLONE_BACKWARDS
17 select GENERIC_SIGALTSTACK
17 18
18choice 19choice
19 prompt "System type" 20 prompt "System type"
diff --git a/arch/score/include/asm/syscalls.h b/arch/score/include/asm/syscalls.h
index acaeed680956..98d1df92fbd1 100644
--- a/arch/score/include/asm/syscalls.h
+++ b/arch/score/include/asm/syscalls.h
@@ -1,7 +1,6 @@
1#ifndef _ASM_SCORE_SYSCALLS_H 1#ifndef _ASM_SCORE_SYSCALLS_H
2#define _ASM_SCORE_SYSCALLS_H 2#define _ASM_SCORE_SYSCALLS_H
3 3
4asmlinkage long score_sigaltstack(struct pt_regs *regs);
5asmlinkage long score_rt_sigreturn(struct pt_regs *regs); 4asmlinkage long score_rt_sigreturn(struct pt_regs *regs);
6 5
7#include <asm-generic/syscalls.h> 6#include <asm-generic/syscalls.h>
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