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

xtensa: switch to generic sigaltstack

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

Al Viro 0430f2f2 0aa0203f

+4 -18
+1
arch/xtensa/Kconfig
··· 16 16 select ARCH_WANT_OPTIONAL_GPIOLIB 17 17 select CLONE_BACKWARDS 18 18 select IRQ_DOMAIN 19 + select GENERIC_SIGALTSTACK 19 20 help 20 21 Xtensa processors are 32-bit RISC machines designed by Tensilica 21 22 primarily for embedded systems. These processors are both
-1
arch/xtensa/include/asm/syscall.h
··· 12 12 asmlinkage long xtensa_ptrace(long, long, long, long); 13 13 asmlinkage long xtensa_sigreturn(struct pt_regs*); 14 14 asmlinkage long xtensa_rt_sigreturn(struct pt_regs*); 15 - asmlinkage long xtensa_sigaltstack(struct pt_regs *regs); 16 15 asmlinkage long xtensa_shmat(int, char __user *, int); 17 16 asmlinkage long xtensa_fadvise64_64(int, int, 18 17 unsigned long long, unsigned long long);
+1 -1
arch/xtensa/include/uapi/asm/unistd.h
··· 483 483 #define __NR_restart_syscall 223 484 484 __SYSCALL(223, sys_restart_syscall, 0) 485 485 #define __NR_sigaltstack 224 486 - __SYSCALL(224, xtensa_sigaltstack, 2) 486 + __SYSCALL(224, sys_sigaltstack, 2) 487 487 #define __NR_rt_sigreturn 225 488 488 __SYSCALL(225, xtensa_rt_sigreturn, 1) 489 489 #define __NR_rt_sigaction 226
+2 -16
arch/xtensa/kernel/signal.c
··· 265 265 266 266 ret = regs->areg[2]; 267 267 268 - if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->areg[1]) == -EFAULT) 268 + if (restore_altstack(&frame->uc.uc_stack)) 269 269 goto badframe; 270 270 271 271 return ret; ··· 368 368 369 369 err |= __put_user(0, &frame->uc.uc_flags); 370 370 err |= __put_user(0, &frame->uc.uc_link); 371 - err |= __put_user((void *)current->sas_ss_sp, 372 - &frame->uc.uc_stack.ss_sp); 373 - err |= __put_user(sas_ss_flags(regs->areg[1]), 374 - &frame->uc.uc_stack.ss_flags); 375 - err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); 371 + err |= __save_altstack(&frame->uc.uc_stack, regs->areg[1]); 376 372 err |= setup_sigcontext(frame, regs); 377 373 err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); 378 374 ··· 419 423 force_sigsegv(sig, current); 420 424 return -EFAULT; 421 425 } 422 - 423 - asmlinkage long xtensa_sigaltstack(const stack_t __user *uss, 424 - stack_t __user *uoss, 425 - long a2, long a3, long a4, long a5, 426 - struct pt_regs *regs) 427 - { 428 - return do_sigaltstack(uss, uoss, regs->areg[1]); 429 - } 430 - 431 - 432 426 433 427 /* 434 428 * Note that 'init' is a special process: it doesn't get signals it doesn't