sparc32: switch to generic sys_execve()
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 29 Sep 2012 18:49:48 +0000 (14:49 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 16 Oct 2012 23:03:53 +0000 (19:03 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/sparc/include/asm/syscalls.h
arch/sparc/include/asm/unistd.h
arch/sparc/kernel/entry.S
arch/sparc/kernel/process_32.c

index 4b05df3..bf8972a 100644 (file)
@@ -8,8 +8,4 @@ extern asmlinkage long sparc_do_fork(unsigned long clone_flags,
                                     struct pt_regs *regs,
                                     unsigned long stack_size);
 
-#ifndef __arch64__
-extern asmlinkage int sparc_execve(struct pt_regs *regs);
-#endif
-
 #endif /* _SPARC64_SYSCALLS_H */
index 32bd0aa..c3e5d8b 100644 (file)
@@ -45,8 +45,8 @@
 #define __ARCH_WANT_COMPAT_SYS_TIME
 #define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
 #define __ARCH_WANT_COMPAT_SYS_SENDFILE
-#define __ARCH_WANT_SYS_EXECVE
 #endif
+#define __ARCH_WANT_SYS_EXECVE
 
 /*
  * "Conditional" syscalls
index 36b35e5..21fd1a8 100644 (file)
@@ -806,23 +806,10 @@ sys_nis_syscall:
        call    c_sys_nis_syscall
         mov    %l5, %o7
 
-       .align  4
-       .globl  sys_execve
-sys_execve:
-       mov     %o7, %l5
-       add     %sp, STACKFRAME_SZ, %o0         ! pt_regs *regs arg
-       call    sparc_execve
-        mov    %l5, %o7
-
-       .globl  sunos_execv
 sunos_execv:
-       st      %g0, [%sp + STACKFRAME_SZ + PT_I2]
-
-       call    sparc_execve
-        add    %sp, STACKFRAME_SZ, %o0
-
-       b       ret_sys_call
-        ld     [%sp + STACKFRAME_SZ + PT_I0], %o0
+       .globl  sunos_execv
+       b       sys_execve
+        clr    %i2
 
        .align  4
        .globl  sys_sparc_pipe
index 7276435..bf4c6ad 100644 (file)
@@ -476,34 +476,6 @@ int dump_fpu (struct pt_regs * regs, elf_fpregset_t * fpregs)
        return 1;
 }
 
-/*
- * sparc_execve() executes a new program after the asm stub has set
- * things up for us.  This should basically do what I want it to.
- */
-asmlinkage int sparc_execve(struct pt_regs *regs)
-{
-       int error, base = 0;
-       struct filename *filename;
-
-       /* Check for indirect call. */
-       if(regs->u_regs[UREG_G1] == 0)
-               base = 1;
-
-       filename = getname((char __user *)regs->u_regs[base + UREG_I0]);
-       error = PTR_ERR(filename);
-       if(IS_ERR(filename))
-               goto out;
-       error = do_execve(filename->name,
-                         (const char __user *const  __user *)
-                         regs->u_regs[base + UREG_I1],
-                         (const char __user *const  __user *)
-                         regs->u_regs[base + UREG_I2],
-                         regs);
-       putname(filename);
-out:
-       return error;
-}
-
 unsigned long get_wchan(struct task_struct *task)
 {
        unsigned long pc, fp, bias = 0;