diff options
author | Brian Gerst <brgerst@gmail.com> | 2009-12-09 19:01:54 -0500 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-12-09 19:28:59 -0500 |
commit | 052acad48a566a6dbcccb95e5d22e5e1b7cac8dd (patch) | |
tree | 3a192104ec0f484034162a769a647525bca9c94e /arch/x86 | |
parent | 11cf88bd0b8165b65aaabaee0977e9a3ad474ab7 (diff) |
x86: Merge sys_sigaltstack
Change 32-bit sys_sigaltstack to PTREGSCALL2, and merge with 64-bit.
Signed-off-by: Brian Gerst <brgerst@gmail.com>
LKML-Reference: <1260403316-5679-5-git-send-email-brgerst@gmail.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/include/asm/syscalls.h | 8 | ||||
-rw-r--r-- | arch/x86/kernel/entry_32.S | 2 | ||||
-rw-r--r-- | arch/x86/kernel/signal.c | 12 |
3 files changed, 5 insertions, 17 deletions
diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h index 48c48e508b9f..94e0b61fb040 100644 --- a/arch/x86/include/asm/syscalls.h +++ b/arch/x86/include/asm/syscalls.h | |||
@@ -31,6 +31,9 @@ asmlinkage int sys_modify_ldt(int, void __user *, unsigned long); | |||
31 | 31 | ||
32 | /* kernel/signal.c */ | 32 | /* kernel/signal.c */ |
33 | long sys_rt_sigreturn(struct pt_regs *); | 33 | long sys_rt_sigreturn(struct pt_regs *); |
34 | long sys_sigaltstack(const stack_t __user *, stack_t __user *, | ||
35 | struct pt_regs *); | ||
36 | |||
34 | 37 | ||
35 | /* kernel/tls.c */ | 38 | /* kernel/tls.c */ |
36 | asmlinkage int sys_set_thread_area(struct user_desc __user *); | 39 | asmlinkage int sys_set_thread_area(struct user_desc __user *); |
@@ -46,7 +49,6 @@ int sys_clone(struct pt_regs *); | |||
46 | asmlinkage int sys_sigsuspend(int, int, old_sigset_t); | 49 | asmlinkage int sys_sigsuspend(int, int, old_sigset_t); |
47 | asmlinkage int sys_sigaction(int, const struct old_sigaction __user *, | 50 | asmlinkage int sys_sigaction(int, const struct old_sigaction __user *, |
48 | struct old_sigaction __user *); | 51 | struct old_sigaction __user *); |
49 | int sys_sigaltstack(struct pt_regs *); | ||
50 | unsigned long sys_sigreturn(struct pt_regs *); | 52 | unsigned long sys_sigreturn(struct pt_regs *); |
51 | 53 | ||
52 | /* kernel/sys_i386_32.c */ | 54 | /* kernel/sys_i386_32.c */ |
@@ -76,10 +78,6 @@ asmlinkage long sys_clone(unsigned long, unsigned long, | |||
76 | struct pt_regs *); | 78 | struct pt_regs *); |
77 | long sys_arch_prctl(int, unsigned long); | 79 | long sys_arch_prctl(int, unsigned long); |
78 | 80 | ||
79 | /* kernel/signal.c */ | ||
80 | asmlinkage long sys_sigaltstack(const stack_t __user *, stack_t __user *, | ||
81 | struct pt_regs *); | ||
82 | |||
83 | /* kernel/sys_x86_64.c */ | 81 | /* kernel/sys_x86_64.c */ |
84 | struct new_utsname; | 82 | struct new_utsname; |
85 | 83 | ||
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index a96a0d8a0fdb..621ef4599416 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
@@ -763,7 +763,7 @@ PTREGSCALL0(fork) | |||
763 | PTREGSCALL0(clone) | 763 | PTREGSCALL0(clone) |
764 | PTREGSCALL0(vfork) | 764 | PTREGSCALL0(vfork) |
765 | PTREGSCALL3(execve) | 765 | PTREGSCALL3(execve) |
766 | PTREGSCALL0(sigaltstack) | 766 | PTREGSCALL2(sigaltstack) |
767 | PTREGSCALL0(sigreturn) | 767 | PTREGSCALL0(sigreturn) |
768 | PTREGSCALL0(rt_sigreturn) | 768 | PTREGSCALL0(rt_sigreturn) |
769 | PTREGSCALL0(vm86) | 769 | PTREGSCALL0(vm86) |
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index 74fe6d86dc5d..4fd173cd8e57 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c | |||
@@ -545,22 +545,12 @@ sys_sigaction(int sig, const struct old_sigaction __user *act, | |||
545 | } | 545 | } |
546 | #endif /* CONFIG_X86_32 */ | 546 | #endif /* CONFIG_X86_32 */ |
547 | 547 | ||
548 | #ifdef CONFIG_X86_32 | 548 | long |
549 | int sys_sigaltstack(struct pt_regs *regs) | ||
550 | { | ||
551 | const stack_t __user *uss = (const stack_t __user *)regs->bx; | ||
552 | stack_t __user *uoss = (stack_t __user *)regs->cx; | ||
553 | |||
554 | return do_sigaltstack(uss, uoss, regs->sp); | ||
555 | } | ||
556 | #else /* !CONFIG_X86_32 */ | ||
557 | asmlinkage long | ||
558 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, | 549 | sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss, |
559 | struct pt_regs *regs) | 550 | struct pt_regs *regs) |
560 | { | 551 | { |
561 | return do_sigaltstack(uss, uoss, regs->sp); | 552 | return do_sigaltstack(uss, uoss, regs->sp); |
562 | } | 553 | } |
563 | #endif /* CONFIG_X86_32 */ | ||
564 | 554 | ||
565 | /* | 555 | /* |
566 | * Do a signal return; undo the signal stack. | 556 | * Do a signal return; undo the signal stack. |