diff options
| -rw-r--r-- | arch/avr32/Kconfig | 1 | ||||
| -rw-r--r-- | arch/avr32/kernel/signal.c | 15 | ||||
| -rw-r--r-- | arch/avr32/kernel/syscall-stubs.S | 6 | ||||
| -rw-r--r-- | arch/avr32/kernel/syscall_table.S | 2 |
4 files changed, 4 insertions, 20 deletions
diff --git a/arch/avr32/Kconfig b/arch/avr32/Kconfig index 2ae6591b3a55..e888b72b6e10 100644 --- a/arch/avr32/Kconfig +++ b/arch/avr32/Kconfig | |||
| @@ -17,6 +17,7 @@ config AVR32 | |||
| 17 | select GENERIC_CLOCKEVENTS | 17 | select GENERIC_CLOCKEVENTS |
| 18 | select HAVE_MOD_ARCH_SPECIFIC | 18 | select HAVE_MOD_ARCH_SPECIFIC |
| 19 | select MODULES_USE_ELF_RELA | 19 | select MODULES_USE_ELF_RELA |
| 20 | select GENERIC_SIGALTSTACK | ||
| 20 | help | 21 | help |
| 21 | AVR32 is a high-performance 32-bit RISC microprocessor core, | 22 | AVR32 is a high-performance 32-bit RISC microprocessor core, |
| 22 | designed for cost-sensitive embedded applications, with particular | 23 | designed for cost-sensitive embedded applications, with particular |
diff --git a/arch/avr32/kernel/signal.c b/arch/avr32/kernel/signal.c index 5e01c3a40ced..b80c0b3d2bab 100644 --- a/arch/avr32/kernel/signal.c +++ b/arch/avr32/kernel/signal.c | |||
| @@ -21,12 +21,6 @@ | |||
| 21 | #include <asm/ucontext.h> | 21 | #include <asm/ucontext.h> |
| 22 | #include <asm/syscalls.h> | 22 | #include <asm/syscalls.h> |
| 23 | 23 | ||
| 24 | asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, | ||
| 25 | struct pt_regs *regs) | ||
| 26 | { | ||
| 27 | return do_sigaltstack(uss, uoss, regs->sp); | ||
| 28 | } | ||
| 29 | |||
| 30 | struct rt_sigframe | 24 | struct rt_sigframe |
| 31 | { | 25 | { |
| 32 | struct siginfo info; | 26 | struct siginfo info; |
| @@ -91,7 +85,7 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs) | |||
| 91 | if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) | 85 | if (restore_sigcontext(regs, &frame->uc.uc_mcontext)) |
| 92 | goto badframe; | 86 | goto badframe; |
| 93 | 87 | ||
| 94 | if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->sp) == -EFAULT) | 88 | if (restore_altstack(&frame->uc.uc_stack)) |
| 95 | goto badframe; | 89 | goto badframe; |
| 96 | 90 | ||
| 97 | pr_debug("Context restored: pc = %08lx, lr = %08lx, sp = %08lx\n", | 91 | pr_debug("Context restored: pc = %08lx, lr = %08lx, sp = %08lx\n", |
| @@ -175,12 +169,7 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
| 175 | /* Set up the ucontext */ | 169 | /* Set up the ucontext */ |
| 176 | err |= __put_user(0, &frame->uc.uc_flags); | 170 | err |= __put_user(0, &frame->uc.uc_flags); |
| 177 | err |= __put_user(NULL, &frame->uc.uc_link); | 171 | err |= __put_user(NULL, &frame->uc.uc_link); |
| 178 | err |= __put_user((void __user *)current->sas_ss_sp, | 172 | err |= __save_altstack(&frame->uc.uc_stack, regs->sp); |
| 179 | &frame->uc.uc_stack.ss_sp); | ||
| 180 | err |= __put_user(sas_ss_flags(regs->sp), | ||
| 181 | &frame->uc.uc_stack.ss_flags); | ||
| 182 | err |= __put_user(current->sas_ss_size, | ||
| 183 | &frame->uc.uc_stack.ss_size); | ||
| 184 | err |= setup_sigcontext(&frame->uc.uc_mcontext, regs); | 173 | err |= setup_sigcontext(&frame->uc.uc_mcontext, regs); |
| 185 | err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); | 174 | err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); |
| 186 | 175 | ||
diff --git a/arch/avr32/kernel/syscall-stubs.S b/arch/avr32/kernel/syscall-stubs.S index 275aab9731fd..b5fc927cd398 100644 --- a/arch/avr32/kernel/syscall-stubs.S +++ b/arch/avr32/kernel/syscall-stubs.S | |||
| @@ -20,12 +20,6 @@ __sys_rt_sigsuspend: | |||
| 20 | mov r10, sp | 20 | mov r10, sp |
| 21 | rjmp sys_rt_sigsuspend | 21 | rjmp sys_rt_sigsuspend |
| 22 | 22 | ||
| 23 | .global __sys_sigaltstack | ||
| 24 | .type __sys_sigaltstack,@function | ||
| 25 | __sys_sigaltstack: | ||
| 26 | mov r10, sp | ||
| 27 | rjmp sys_sigaltstack | ||
| 28 | |||
| 29 | .global __sys_rt_sigreturn | 23 | .global __sys_rt_sigreturn |
| 30 | .type __sys_rt_sigreturn,@function | 24 | .type __sys_rt_sigreturn,@function |
| 31 | __sys_rt_sigreturn: | 25 | __sys_rt_sigreturn: |
diff --git a/arch/avr32/kernel/syscall_table.S b/arch/avr32/kernel/syscall_table.S index f27bb878da6b..017a904180c8 100644 --- a/arch/avr32/kernel/syscall_table.S +++ b/arch/avr32/kernel/syscall_table.S | |||
| @@ -115,7 +115,7 @@ sys_call_table: | |||
| 115 | .long sys_statfs | 115 | .long sys_statfs |
| 116 | .long sys_fstatfs /* 100 */ | 116 | .long sys_fstatfs /* 100 */ |
| 117 | .long sys_vhangup | 117 | .long sys_vhangup |
| 118 | .long __sys_sigaltstack | 118 | .long sys_sigaltstack |
| 119 | .long sys_syslog | 119 | .long sys_syslog |
| 120 | .long sys_setitimer | 120 | .long sys_setitimer |
| 121 | .long sys_getitimer /* 105 */ | 121 | .long sys_getitimer /* 105 */ |
