Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

openrisc: switch to generic sigaltstack

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro faec5a96 0aa0203f

+3 -17
+1
arch/openrisc/Kconfig
··· 22 22 select GENERIC_STRNCPY_FROM_USER 23 23 select GENERIC_STRNLEN_USER 24 24 select MODULES_USE_ELF_RELA 25 + select GENERIC_SIGALTSTACK 25 26 26 27 config MMU 27 28 def_bool y
-4
arch/openrisc/kernel/entry.S
··· 1083 1083 l.j _fork_save_extra_regs_and_call 1084 1084 l.addi r3,r1,0 1085 1085 1086 - ENTRY(sys_sigaltstack) 1087 - l.j _sys_sigaltstack 1088 - l.addi r5,r1,0 1089 - 1090 1086 ENTRY(sys_rt_sigreturn) 1091 1087 l.j _sys_rt_sigreturn 1092 1088 l.addi r3,r1,0
+2 -13
arch/openrisc/kernel/signal.c
··· 33 33 34 34 #define DEBUG_SIG 0 35 35 36 - asmlinkage long 37 - _sys_sigaltstack(const stack_t *uss, stack_t *uoss, struct pt_regs *regs) 38 - { 39 - return do_sigaltstack(uss, uoss, regs->sp); 40 - } 41 - 42 36 struct rt_sigframe { 43 37 struct siginfo *pinfo; 44 38 void *puc; ··· 97 103 if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) 98 104 goto badframe; 99 105 100 - /* It is more difficult to avoid calling this function than to 101 - call it and ignore errors. */ 102 - if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->sp) == -EFAULT) 106 + if (restore_altstack(&frame->uc.uc_stack)) 103 107 goto badframe; 104 108 105 109 return regs->gpr[11]; ··· 197 205 err |= __clear_user(&frame->uc, offsetof(struct ucontext, uc_mcontext)); 198 206 err |= __put_user(0, &frame->uc.uc_flags); 199 207 err |= __put_user(NULL, &frame->uc.uc_link); 200 - err |= __put_user((void *)current->sas_ss_sp, 201 - &frame->uc.uc_stack.ss_sp); 202 - err |= __put_user(sas_ss_flags(regs->sp), &frame->uc.uc_stack.ss_flags); 203 - err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); 208 + err |= __save_altstack(&frame->uc.uc_stack, regs->sp); 204 209 err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, set->sig[0]); 205 210 206 211 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));