diff options
| -rw-r--r-- | arch/x86/ia32/ia32_signal.c | 6 | ||||
| -rw-r--r-- | arch/x86/ia32/ia32entry.S | 11 | ||||
| -rw-r--r-- | arch/x86/include/asm/sys_ia32.h | 4 | ||||
| -rw-r--r-- | arch/x86/include/asm/syscalls.h | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/entry_32.S | 23 | ||||
| -rw-r--r-- | arch/x86/kernel/entry_64.S | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/signal.c | 9 | ||||
| -rw-r--r-- | arch/x86/syscalls/syscall_32.tbl | 4 | ||||
| -rw-r--r-- | arch/x86/um/signal.c | 15 |
9 files changed, 23 insertions, 55 deletions
diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c index a1daf4a65009..15fdb3f57d8c 100644 --- a/arch/x86/ia32/ia32_signal.c +++ b/arch/x86/ia32/ia32_signal.c | |||
| @@ -215,8 +215,9 @@ static int ia32_restore_sigcontext(struct pt_regs *regs, | |||
| 215 | return err; | 215 | return err; |
| 216 | } | 216 | } |
| 217 | 217 | ||
| 218 | asmlinkage long sys32_sigreturn(struct pt_regs *regs) | 218 | asmlinkage long sys32_sigreturn(void) |
| 219 | { | 219 | { |
| 220 | struct pt_regs *regs = current_pt_regs(); | ||
| 220 | struct sigframe_ia32 __user *frame = (struct sigframe_ia32 __user *)(regs->sp-8); | 221 | struct sigframe_ia32 __user *frame = (struct sigframe_ia32 __user *)(regs->sp-8); |
| 221 | sigset_t set; | 222 | sigset_t set; |
| 222 | unsigned int ax; | 223 | unsigned int ax; |
| @@ -241,8 +242,9 @@ badframe: | |||
| 241 | return 0; | 242 | return 0; |
| 242 | } | 243 | } |
| 243 | 244 | ||
| 244 | asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs) | 245 | asmlinkage long sys32_rt_sigreturn(void) |
| 245 | { | 246 | { |
| 247 | struct pt_regs *regs = current_pt_regs(); | ||
| 246 | struct rt_sigframe_ia32 __user *frame; | 248 | struct rt_sigframe_ia32 __user *frame; |
| 247 | sigset_t set; | 249 | sigset_t set; |
| 248 | unsigned int ax; | 250 | unsigned int ax; |
diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S index 74bc91e3612b..c05e16b4536b 100644 --- a/arch/x86/ia32/ia32entry.S +++ b/arch/x86/ia32/ia32entry.S | |||
| @@ -456,17 +456,16 @@ ia32_badsys: | |||
| 456 | ALIGN | 456 | ALIGN |
| 457 | GLOBAL(\label) | 457 | GLOBAL(\label) |
| 458 | leaq \func(%rip),%rax | 458 | leaq \func(%rip),%rax |
| 459 | leaq -ARGOFFSET+8(%rsp),\arg /* 8 for return address */ | ||
| 460 | jmp ia32_ptregs_common | 459 | jmp ia32_ptregs_common |
| 461 | .endm | 460 | .endm |
| 462 | 461 | ||
| 463 | CFI_STARTPROC32 | 462 | CFI_STARTPROC32 |
| 464 | 463 | ||
| 465 | PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi | 464 | PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn |
| 466 | PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi | 465 | PTREGSCALL stub32_sigreturn, sys32_sigreturn |
| 467 | PTREGSCALL stub32_execve, compat_sys_execve, %rcx | 466 | PTREGSCALL stub32_execve, compat_sys_execve |
| 468 | PTREGSCALL stub32_fork, sys_fork, %rdi | 467 | PTREGSCALL stub32_fork, sys_fork |
| 469 | PTREGSCALL stub32_vfork, sys_vfork, %rdi | 468 | PTREGSCALL stub32_vfork, sys_vfork |
| 470 | 469 | ||
| 471 | ALIGN | 470 | ALIGN |
| 472 | GLOBAL(stub32_clone) | 471 | GLOBAL(stub32_clone) |
diff --git a/arch/x86/include/asm/sys_ia32.h b/arch/x86/include/asm/sys_ia32.h index 31f61f96e0fb..93e142a719bc 100644 --- a/arch/x86/include/asm/sys_ia32.h +++ b/arch/x86/include/asm/sys_ia32.h | |||
| @@ -69,8 +69,8 @@ asmlinkage long sys32_fallocate(int, int, unsigned, | |||
| 69 | 69 | ||
| 70 | /* ia32/ia32_signal.c */ | 70 | /* ia32/ia32_signal.c */ |
| 71 | asmlinkage long sys32_sigsuspend(int, int, old_sigset_t); | 71 | asmlinkage long sys32_sigsuspend(int, int, old_sigset_t); |
| 72 | asmlinkage long sys32_sigreturn(struct pt_regs *); | 72 | asmlinkage long sys32_sigreturn(void); |
| 73 | asmlinkage long sys32_rt_sigreturn(struct pt_regs *); | 73 | asmlinkage long sys32_rt_sigreturn(void); |
| 74 | 74 | ||
| 75 | /* ia32/ipc32.c */ | 75 | /* ia32/ipc32.c */ |
| 76 | asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32); | 76 | asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32); |
diff --git a/arch/x86/include/asm/syscalls.h b/arch/x86/include/asm/syscalls.h index 76be6f2d980c..de2e1ab913bb 100644 --- a/arch/x86/include/asm/syscalls.h +++ b/arch/x86/include/asm/syscalls.h | |||
| @@ -24,7 +24,7 @@ asmlinkage long sys_iopl(unsigned int); | |||
| 24 | asmlinkage int sys_modify_ldt(int, void __user *, unsigned long); | 24 | asmlinkage int sys_modify_ldt(int, void __user *, unsigned long); |
| 25 | 25 | ||
| 26 | /* kernel/signal.c */ | 26 | /* kernel/signal.c */ |
| 27 | long sys_rt_sigreturn(struct pt_regs *); | 27 | long sys_rt_sigreturn(void); |
| 28 | 28 | ||
| 29 | /* kernel/tls.c */ | 29 | /* kernel/tls.c */ |
| 30 | asmlinkage int sys_set_thread_area(struct user_desc __user *); | 30 | asmlinkage int sys_set_thread_area(struct user_desc __user *); |
| @@ -37,7 +37,7 @@ asmlinkage int sys_get_thread_area(struct user_desc __user *); | |||
| 37 | asmlinkage int sys_sigsuspend(int, int, old_sigset_t); | 37 | asmlinkage int sys_sigsuspend(int, int, old_sigset_t); |
| 38 | asmlinkage int sys_sigaction(int, const struct old_sigaction __user *, | 38 | asmlinkage int sys_sigaction(int, const struct old_sigaction __user *, |
| 39 | struct old_sigaction __user *); | 39 | struct old_sigaction __user *); |
| 40 | unsigned long sys_sigreturn(struct pt_regs *); | 40 | unsigned long sys_sigreturn(void); |
| 41 | 41 | ||
| 42 | /* kernel/vm86_32.c */ | 42 | /* kernel/vm86_32.c */ |
| 43 | int sys_vm86old(struct vm86_struct __user *, struct pt_regs *); | 43 | int sys_vm86old(struct vm86_struct __user *, struct pt_regs *); |
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index 415c6346d8bf..e132cf6ea140 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
| @@ -702,12 +702,6 @@ END(syscall_badsys) | |||
| 702 | /* | 702 | /* |
| 703 | * System calls that need a pt_regs pointer. | 703 | * System calls that need a pt_regs pointer. |
| 704 | */ | 704 | */ |
| 705 | #define PTREGSCALL0(name) \ | ||
| 706 | ENTRY(ptregs_##name) ; \ | ||
| 707 | leal 4(%esp),%eax; \ | ||
| 708 | jmp sys_##name; \ | ||
| 709 | ENDPROC(ptregs_##name) | ||
| 710 | |||
| 711 | #define PTREGSCALL1(name) \ | 705 | #define PTREGSCALL1(name) \ |
| 712 | ENTRY(ptregs_##name) ; \ | 706 | ENTRY(ptregs_##name) ; \ |
| 713 | leal 4(%esp),%edx; \ | 707 | leal 4(%esp),%edx; \ |
| @@ -723,23 +717,6 @@ ENTRY(ptregs_##name) ; \ | |||
| 723 | jmp sys_##name; \ | 717 | jmp sys_##name; \ |
| 724 | ENDPROC(ptregs_##name) | 718 | ENDPROC(ptregs_##name) |
| 725 | 719 | ||
| 726 | #define PTREGSCALL3(name) \ | ||
| 727 | ENTRY(ptregs_##name) ; \ | ||
| 728 | CFI_STARTPROC; \ | ||
| 729 | leal 4(%esp),%eax; \ | ||
| 730 | pushl_cfi %eax; \ | ||
| 731 | movl PT_EDX(%eax),%ecx; \ | ||
| 732 | movl PT_ECX(%eax),%edx; \ | ||
| 733 | movl PT_EBX(%eax),%eax; \ | ||
| 734 | call sys_##name; \ | ||
| 735 | addl $4,%esp; \ | ||
| 736 | CFI_ADJUST_CFA_OFFSET -4; \ | ||
| 737 | ret; \ | ||
| 738 | CFI_ENDPROC; \ | ||
| 739 | ENDPROC(ptregs_##name) | ||
| 740 | |||
| 741 | PTREGSCALL0(sigreturn) | ||
| 742 | PTREGSCALL0(rt_sigreturn) | ||
| 743 | PTREGSCALL2(vm86) | 720 | PTREGSCALL2(vm86) |
| 744 | PTREGSCALL1(vm86old) | 721 | PTREGSCALL1(vm86old) |
| 745 | 722 | ||
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index 4486fee3999f..197512242e3b 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
| @@ -896,7 +896,6 @@ ENTRY(stub_rt_sigreturn) | |||
| 896 | addq $8, %rsp | 896 | addq $8, %rsp |
| 897 | PARTIAL_FRAME 0 | 897 | PARTIAL_FRAME 0 |
| 898 | SAVE_REST | 898 | SAVE_REST |
| 899 | movq %rsp,%rdi | ||
| 900 | FIXUP_TOP_OF_STACK %r11 | 899 | FIXUP_TOP_OF_STACK %r11 |
| 901 | call sys_rt_sigreturn | 900 | call sys_rt_sigreturn |
| 902 | movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer | 901 | movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer |
| @@ -911,7 +910,6 @@ ENTRY(stub_x32_rt_sigreturn) | |||
| 911 | addq $8, %rsp | 910 | addq $8, %rsp |
| 912 | PARTIAL_FRAME 0 | 911 | PARTIAL_FRAME 0 |
| 913 | SAVE_REST | 912 | SAVE_REST |
| 914 | movq %rsp,%rdi | ||
| 915 | FIXUP_TOP_OF_STACK %r11 | 913 | FIXUP_TOP_OF_STACK %r11 |
| 916 | call sys32_x32_rt_sigreturn | 914 | call sys32_x32_rt_sigreturn |
| 917 | movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer | 915 | movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer |
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index d6bf1f34a6e9..38ba7e56e161 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c | |||
| @@ -597,8 +597,9 @@ sys_sigaction(int sig, const struct old_sigaction __user *act, | |||
| 597 | * Do a signal return; undo the signal stack. | 597 | * Do a signal return; undo the signal stack. |
| 598 | */ | 598 | */ |
| 599 | #ifdef CONFIG_X86_32 | 599 | #ifdef CONFIG_X86_32 |
| 600 | unsigned long sys_sigreturn(struct pt_regs *regs) | 600 | unsigned long sys_sigreturn(void) |
| 601 | { | 601 | { |
| 602 | struct pt_regs *regs = current_pt_regs(); | ||
| 602 | struct sigframe __user *frame; | 603 | struct sigframe __user *frame; |
| 603 | unsigned long ax; | 604 | unsigned long ax; |
| 604 | sigset_t set; | 605 | sigset_t set; |
| @@ -625,8 +626,9 @@ badframe: | |||
| 625 | } | 626 | } |
| 626 | #endif /* CONFIG_X86_32 */ | 627 | #endif /* CONFIG_X86_32 */ |
| 627 | 628 | ||
| 628 | long sys_rt_sigreturn(struct pt_regs *regs) | 629 | long sys_rt_sigreturn(void) |
| 629 | { | 630 | { |
| 631 | struct pt_regs *regs = current_pt_regs(); | ||
| 630 | struct rt_sigframe __user *frame; | 632 | struct rt_sigframe __user *frame; |
| 631 | unsigned long ax; | 633 | unsigned long ax; |
| 632 | sigset_t set; | 634 | sigset_t set; |
| @@ -843,8 +845,9 @@ void signal_fault(struct pt_regs *regs, void __user *frame, char *where) | |||
| 843 | } | 845 | } |
| 844 | 846 | ||
| 845 | #ifdef CONFIG_X86_X32_ABI | 847 | #ifdef CONFIG_X86_X32_ABI |
| 846 | asmlinkage long sys32_x32_rt_sigreturn(struct pt_regs *regs) | 848 | asmlinkage long sys32_x32_rt_sigreturn(void) |
| 847 | { | 849 | { |
| 850 | struct pt_regs *regs = current_pt_regs(); | ||
| 848 | struct rt_sigframe_x32 __user *frame; | 851 | struct rt_sigframe_x32 __user *frame; |
| 849 | sigset_t set; | 852 | sigset_t set; |
| 850 | unsigned long ax; | 853 | unsigned long ax; |
diff --git a/arch/x86/syscalls/syscall_32.tbl b/arch/x86/syscalls/syscall_32.tbl index aa15a7a94cf7..4e8ab081ee3d 100644 --- a/arch/x86/syscalls/syscall_32.tbl +++ b/arch/x86/syscalls/syscall_32.tbl | |||
| @@ -125,7 +125,7 @@ | |||
| 125 | 116 i386 sysinfo sys_sysinfo compat_sys_sysinfo | 125 | 116 i386 sysinfo sys_sysinfo compat_sys_sysinfo |
| 126 | 117 i386 ipc sys_ipc sys32_ipc | 126 | 117 i386 ipc sys_ipc sys32_ipc |
| 127 | 118 i386 fsync sys_fsync | 127 | 118 i386 fsync sys_fsync |
| 128 | 119 i386 sigreturn ptregs_sigreturn stub32_sigreturn | 128 | 119 i386 sigreturn sys_sigreturn stub32_sigreturn |
| 129 | 120 i386 clone sys_clone stub32_clone | 129 | 120 i386 clone sys_clone stub32_clone |
| 130 | 121 i386 setdomainname sys_setdomainname | 130 | 121 i386 setdomainname sys_setdomainname |
| 131 | 122 i386 uname sys_newuname | 131 | 122 i386 uname sys_newuname |
| @@ -179,7 +179,7 @@ | |||
| 179 | 170 i386 setresgid sys_setresgid16 | 179 | 170 i386 setresgid sys_setresgid16 |
| 180 | 171 i386 getresgid sys_getresgid16 | 180 | 171 i386 getresgid sys_getresgid16 |
| 181 | 172 i386 prctl sys_prctl | 181 | 172 i386 prctl sys_prctl |
| 182 | 173 i386 rt_sigreturn ptregs_rt_sigreturn stub32_rt_sigreturn | 182 | 173 i386 rt_sigreturn sys_rt_sigreturn stub32_rt_sigreturn |
| 183 | 174 i386 rt_sigaction sys_rt_sigaction sys32_rt_sigaction | 183 | 174 i386 rt_sigaction sys_rt_sigaction sys32_rt_sigaction |
| 184 | 175 i386 rt_sigprocmask sys_rt_sigprocmask | 184 | 175 i386 rt_sigprocmask sys_rt_sigprocmask |
| 185 | 176 i386 rt_sigpending sys_rt_sigpending sys32_rt_sigpending | 185 | 176 i386 rt_sigpending sys_rt_sigpending sys32_rt_sigpending |
diff --git a/arch/x86/um/signal.c b/arch/x86/um/signal.c index 71cef48ea5cd..ae7319db18ee 100644 --- a/arch/x86/um/signal.c +++ b/arch/x86/um/signal.c | |||
| @@ -464,7 +464,7 @@ int setup_signal_stack_si(unsigned long stack_top, int sig, | |||
| 464 | return 0; | 464 | return 0; |
| 465 | } | 465 | } |
| 466 | 466 | ||
| 467 | long sys_sigreturn(struct pt_regs *regs) | 467 | long sys_sigreturn(void) |
| 468 | { | 468 | { |
| 469 | unsigned long sp = PT_REGS_SP(¤t->thread.regs); | 469 | unsigned long sp = PT_REGS_SP(¤t->thread.regs); |
| 470 | struct sigframe __user *frame = (struct sigframe __user *)(sp - 8); | 470 | struct sigframe __user *frame = (struct sigframe __user *)(sp - 8); |
| @@ -577,7 +577,7 @@ int setup_signal_stack_si(unsigned long stack_top, int sig, | |||
| 577 | } | 577 | } |
| 578 | #endif | 578 | #endif |
| 579 | 579 | ||
| 580 | long sys_rt_sigreturn(struct pt_regs *regs) | 580 | long sys_rt_sigreturn(void) |
| 581 | { | 581 | { |
| 582 | unsigned long sp = PT_REGS_SP(¤t->thread.regs); | 582 | unsigned long sp = PT_REGS_SP(¤t->thread.regs); |
| 583 | struct rt_sigframe __user *frame = | 583 | struct rt_sigframe __user *frame = |
| @@ -601,14 +601,3 @@ long sys_rt_sigreturn(struct pt_regs *regs) | |||
| 601 | force_sig(SIGSEGV, current); | 601 | force_sig(SIGSEGV, current); |
| 602 | return 0; | 602 | return 0; |
| 603 | } | 603 | } |
| 604 | |||
| 605 | #ifdef CONFIG_X86_32 | ||
| 606 | long ptregs_sigreturn(void) | ||
| 607 | { | ||
| 608 | return sys_sigreturn(NULL); | ||
| 609 | } | ||
| 610 | long ptregs_rt_sigreturn(void) | ||
| 611 | { | ||
| 612 | return sys_rt_sigreturn(NULL); | ||
| 613 | } | ||
| 614 | #endif | ||
