diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-12-23 03:43:28 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-02-03 18:16:15 -0500 |
commit | b774cc5cb6b3b53b276bb7d968e3579afc2922c5 (patch) | |
tree | 922a12efa04f84d38e5e215fec3fe7d69874facc /arch/score | |
parent | 0aa0203fb43f04714004b2c4ad33b858e240555d (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/Kconfig | 1 | ||||
-rw-r--r-- | arch/score/include/asm/syscalls.h | 1 | ||||
-rw-r--r-- | arch/score/kernel/entry.S | 5 | ||||
-rw-r--r-- | arch/score/kernel/signal.c | 21 |
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 | ||
18 | choice | 19 | choice |
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 | ||
4 | asmlinkage long score_sigaltstack(struct pt_regs *regs); | ||
5 | asmlinkage long score_rt_sigreturn(struct pt_regs *regs); | 4 | asmlinkage 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 | |||
495 | ENTRY(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 | ||
136 | asmlinkage long | 136 | asmlinkage long |
137 | score_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 | |||
146 | asmlinkage long | ||
147 | score_rt_sigreturn(struct pt_regs *regs) | 137 | score_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 | ||