x86: get rid of pt_regs argument in sigreturn variants
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 12 Nov 2012 19:32:42 +0000 (14:32 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 3 Feb 2013 23:16:24 +0000 (18:16 -0500)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/x86/ia32/ia32_signal.c
arch/x86/ia32/ia32entry.S
arch/x86/include/asm/sys_ia32.h
arch/x86/include/asm/syscalls.h
arch/x86/kernel/entry_32.S
arch/x86/kernel/entry_64.S
arch/x86/kernel/signal.c
arch/x86/syscalls/syscall_32.tbl
arch/x86/um/signal.c

index a1daf4a6500926a1305415a6eb4eaba53db6b31f..15fdb3f57d8c0abdd2ca9e89be73c4631d97086a 100644 (file)
@@ -215,8 +215,9 @@ static int ia32_restore_sigcontext(struct pt_regs *regs,
        return err;
 }
 
-asmlinkage long sys32_sigreturn(struct pt_regs *regs)
+asmlinkage long sys32_sigreturn(void)
 {
+       struct pt_regs *regs = current_pt_regs();
        struct sigframe_ia32 __user *frame = (struct sigframe_ia32 __user *)(regs->sp-8);
        sigset_t set;
        unsigned int ax;
@@ -241,8 +242,9 @@ badframe:
        return 0;
 }
 
-asmlinkage long sys32_rt_sigreturn(struct pt_regs *regs)
+asmlinkage long sys32_rt_sigreturn(void)
 {
+       struct pt_regs *regs = current_pt_regs();
        struct rt_sigframe_ia32 __user *frame;
        sigset_t set;
        unsigned int ax;
index 74bc91e3612bdb384499b3a0cd630c9abdb7fb3c..c05e16b4536ba7b355d5c712d679ef6358f136d5 100644 (file)
@@ -456,17 +456,16 @@ ia32_badsys:
        ALIGN
 GLOBAL(\label)
        leaq \func(%rip),%rax
-       leaq -ARGOFFSET+8(%rsp),\arg    /* 8 for return address */
        jmp  ia32_ptregs_common 
        .endm
 
        CFI_STARTPROC32
 
-       PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn, %rdi
-       PTREGSCALL stub32_sigreturn, sys32_sigreturn, %rdi
-       PTREGSCALL stub32_execve, compat_sys_execve, %rcx
-       PTREGSCALL stub32_fork, sys_fork, %rdi
-       PTREGSCALL stub32_vfork, sys_vfork, %rdi
+       PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn
+       PTREGSCALL stub32_sigreturn, sys32_sigreturn
+       PTREGSCALL stub32_execve, compat_sys_execve
+       PTREGSCALL stub32_fork, sys_fork
+       PTREGSCALL stub32_vfork, sys_vfork
 
        ALIGN
 GLOBAL(stub32_clone)
index 31f61f96e0fb370030c31ad9318660c6af60ba03..93e142a719bcc7424dddd7a1d655844ee9fffbdc 100644 (file)
@@ -69,8 +69,8 @@ asmlinkage long sys32_fallocate(int, int, unsigned,
 
 /* ia32/ia32_signal.c */
 asmlinkage long sys32_sigsuspend(int, int, old_sigset_t);
-asmlinkage long sys32_sigreturn(struct pt_regs *);
-asmlinkage long sys32_rt_sigreturn(struct pt_regs *);
+asmlinkage long sys32_sigreturn(void);
+asmlinkage long sys32_rt_sigreturn(void);
 
 /* ia32/ipc32.c */
 asmlinkage long sys32_ipc(u32, int, int, int, compat_uptr_t, u32);
index 76be6f2d980c44360aa56ce8951708871141581a..de2e1ab913bb4e6e346f391d717329b21685b767 100644 (file)
@@ -24,7 +24,7 @@ asmlinkage long sys_iopl(unsigned int);
 asmlinkage int sys_modify_ldt(int, void __user *, unsigned long);
 
 /* kernel/signal.c */
-long sys_rt_sigreturn(struct pt_regs *);
+long sys_rt_sigreturn(void);
 
 /* kernel/tls.c */
 asmlinkage int sys_set_thread_area(struct user_desc __user *);
@@ -37,7 +37,7 @@ asmlinkage int sys_get_thread_area(struct user_desc __user *);
 asmlinkage int sys_sigsuspend(int, int, old_sigset_t);
 asmlinkage int sys_sigaction(int, const struct old_sigaction __user *,
                             struct old_sigaction __user *);
-unsigned long sys_sigreturn(struct pt_regs *);
+unsigned long sys_sigreturn(void);
 
 /* kernel/vm86_32.c */
 int sys_vm86old(struct vm86_struct __user *, struct pt_regs *);
index 415c6346d8bf3319d04a22cd62037526ee8a75a1..e132cf6ea1409bc6f3c67d1085d67377b52bd5d3 100644 (file)
@@ -702,12 +702,6 @@ END(syscall_badsys)
 /*
  * System calls that need a pt_regs pointer.
  */
-#define PTREGSCALL0(name) \
-ENTRY(ptregs_##name) ;  \
-       leal 4(%esp),%eax; \
-       jmp sys_##name; \
-ENDPROC(ptregs_##name)
-
 #define PTREGSCALL1(name) \
 ENTRY(ptregs_##name) ; \
        leal 4(%esp),%edx; \
@@ -723,23 +717,6 @@ ENTRY(ptregs_##name) ; \
        jmp sys_##name; \
 ENDPROC(ptregs_##name)
 
-#define PTREGSCALL3(name) \
-ENTRY(ptregs_##name) ; \
-       CFI_STARTPROC; \
-       leal 4(%esp),%eax; \
-       pushl_cfi %eax; \
-       movl PT_EDX(%eax),%ecx; \
-       movl PT_ECX(%eax),%edx; \
-       movl PT_EBX(%eax),%eax; \
-       call sys_##name; \
-       addl $4,%esp; \
-       CFI_ADJUST_CFA_OFFSET -4; \
-       ret; \
-       CFI_ENDPROC; \
-ENDPROC(ptregs_##name)
-
-PTREGSCALL0(sigreturn)
-PTREGSCALL0(rt_sigreturn)
 PTREGSCALL2(vm86)
 PTREGSCALL1(vm86old)
 
index 4486fee3999fd1d7fd71b0129304a9e1bfa48aa6..197512242e3b16dc694562b0a117211374a2bd52 100644 (file)
@@ -896,7 +896,6 @@ ENTRY(stub_rt_sigreturn)
        addq $8, %rsp
        PARTIAL_FRAME 0
        SAVE_REST
-       movq %rsp,%rdi
        FIXUP_TOP_OF_STACK %r11
        call sys_rt_sigreturn
        movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer
@@ -911,7 +910,6 @@ ENTRY(stub_x32_rt_sigreturn)
        addq $8, %rsp
        PARTIAL_FRAME 0
        SAVE_REST
-       movq %rsp,%rdi
        FIXUP_TOP_OF_STACK %r11
        call sys32_x32_rt_sigreturn
        movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer
index d6bf1f34a6e90b396c11d457dec9600eb6a9af87..38ba7e56e1614802ac5de7552a7958e382b1a116 100644 (file)
@@ -597,8 +597,9 @@ sys_sigaction(int sig, const struct old_sigaction __user *act,
  * Do a signal return; undo the signal stack.
  */
 #ifdef CONFIG_X86_32
-unsigned long sys_sigreturn(struct pt_regs *regs)
+unsigned long sys_sigreturn(void)
 {
+       struct pt_regs *regs = current_pt_regs();
        struct sigframe __user *frame;
        unsigned long ax;
        sigset_t set;
@@ -625,8 +626,9 @@ badframe:
 }
 #endif /* CONFIG_X86_32 */
 
-long sys_rt_sigreturn(struct pt_regs *regs)
+long sys_rt_sigreturn(void)
 {
+       struct pt_regs *regs = current_pt_regs();
        struct rt_sigframe __user *frame;
        unsigned long ax;
        sigset_t set;
@@ -843,8 +845,9 @@ void signal_fault(struct pt_regs *regs, void __user *frame, char *where)
 }
 
 #ifdef CONFIG_X86_X32_ABI
-asmlinkage long sys32_x32_rt_sigreturn(struct pt_regs *regs)
+asmlinkage long sys32_x32_rt_sigreturn(void)
 {
+       struct pt_regs *regs = current_pt_regs();
        struct rt_sigframe_x32 __user *frame;
        sigset_t set;
        unsigned long ax;
index aa15a7a94cf78b9a460ddff0cc3e4bac5483e285..4e8ab081ee3d61f2b263a597388f36a7223f1762 100644 (file)
 116    i386    sysinfo                 sys_sysinfo                     compat_sys_sysinfo
 117    i386    ipc                     sys_ipc                         sys32_ipc
 118    i386    fsync                   sys_fsync
-119    i386    sigreturn               ptregs_sigreturn                stub32_sigreturn
+119    i386    sigreturn               sys_sigreturn                   stub32_sigreturn
 120    i386    clone                   sys_clone                       stub32_clone
 121    i386    setdomainname           sys_setdomainname
 122    i386    uname                   sys_newuname
 170    i386    setresgid               sys_setresgid16
 171    i386    getresgid               sys_getresgid16
 172    i386    prctl                   sys_prctl
-173    i386    rt_sigreturn            ptregs_rt_sigreturn             stub32_rt_sigreturn
+173    i386    rt_sigreturn            sys_rt_sigreturn                stub32_rt_sigreturn
 174    i386    rt_sigaction            sys_rt_sigaction                sys32_rt_sigaction
 175    i386    rt_sigprocmask          sys_rt_sigprocmask
 176    i386    rt_sigpending           sys_rt_sigpending               sys32_rt_sigpending
index 71cef48ea5cd5b84abb1216d24ff04b18911eaec..ae7319db18ee36d1e8aec541e30bbbb99cc77d08 100644 (file)
@@ -464,7 +464,7 @@ int setup_signal_stack_si(unsigned long stack_top, int sig,
        return 0;
 }
 
-long sys_sigreturn(struct pt_regs *regs)
+long sys_sigreturn(void)
 {
        unsigned long sp = PT_REGS_SP(&current->thread.regs);
        struct sigframe __user *frame = (struct sigframe __user *)(sp - 8);
@@ -577,7 +577,7 @@ int setup_signal_stack_si(unsigned long stack_top, int sig,
 }
 #endif
 
-long sys_rt_sigreturn(struct pt_regs *regs)
+long sys_rt_sigreturn(void)
 {
        unsigned long sp = PT_REGS_SP(&current->thread.regs);
        struct rt_sigframe __user *frame =
@@ -601,14 +601,3 @@ long sys_rt_sigreturn(struct pt_regs *regs)
        force_sig(SIGSEGV, current);
        return 0;
 }
-
-#ifdef CONFIG_X86_32
-long ptregs_sigreturn(void)
-{
-       return sys_sigreturn(NULL);
-}
-long ptregs_rt_sigreturn(void)
-{
-       return sys_rt_sigreturn(NULL);
-}
-#endif