]> Pileus Git - ~andy/linux/commitdiff
sparc64: convert to generic execve
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 26 Sep 2012 23:44:26 +0000 (19:44 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 16 Oct 2012 23:03:12 +0000 (19:03 -0400)
We still have wrappers, but nowhere near as scary as they used to be.
I'm not sure how necessary that flushw is now, TBH...

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/process_64.c
arch/sparc/kernel/sys_sparc32.c
arch/sparc/kernel/syscalls.S
arch/sparc/kernel/systbls_64.S

index 45a43f637a1480291f6a85ef532c8717bb30046d..4b05df397740df49b7ae53eac21d85af4efc3abf 100644 (file)
@@ -8,6 +8,8 @@ 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 0ecea6ed943e3a5b525e90711ef80a5cdbc16f57..32bd0aaeedfa7e8d9f8c60cf4c932041bccad4c6 100644 (file)
@@ -45,6 +45,7 @@
 #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
 
 /*
index 55aa68da213b9cebe89d79a8edcd59431689a1bf..6b36e879b2a0606d5711402eace087c14a80089e 100644 (file)
@@ -667,35 +667,6 @@ int dump_fpu (struct pt_regs * regs, elf_fpregset_t * fpregs)
 }
 EXPORT_SYMBOL(dump_fpu);
 
-/*
- * 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;
-
-       /* User register window flush is done by entry.S */
-
-       /* 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;
index 2f116ff46b113527a8f157bb1535bedcd2e461cd..03c7e929ec34d41eedd7fad7378795c806be5081 100644 (file)
@@ -396,35 +396,6 @@ asmlinkage long compat_sys_rt_sigaction(int sig,
         return ret;
 }
 
-/*
- * sparc32_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 long sparc32_execve(struct pt_regs *regs)
-{
-       int error, base = 0;
-       struct filename *filename;
-
-       /* User register window flush is done by entry.S */
-
-       /* Check for indirect call. */
-       if ((u32)regs->u_regs[UREG_G1] == 0)
-               base = 1;
-
-       filename = getname(compat_ptr(regs->u_regs[base + UREG_I0]));
-       error = PTR_ERR(filename);
-       if (IS_ERR(filename))
-               goto out;
-
-       error = compat_do_execve(filename->name,
-                                compat_ptr(regs->u_regs[base + UREG_I1]),
-                                compat_ptr(regs->u_regs[base + UREG_I2]), regs);
-
-       putname(filename);
-out:
-       return error;
-}
-
 #ifdef CONFIG_MODULES
 
 asmlinkage long sys32_init_module(void __user *umod, u32 len,
index f72c12433869c641d1c2787a33b477e7eb118972..2ef41e67f0bef3e4ffce7e5bd7d4f6426ebeb765 100644 (file)
@@ -1,23 +1,19 @@
        /* SunOS's execv() call only specifies the argv argument, the
         * environment settings are the same as the calling processes.
         */
-sys_execve:
-       sethi   %hi(sparc_execve), %g1
-       ba,pt   %xcc, execve_merge
-        or     %g1, %lo(sparc_execve), %g1
+sys64_execve:
+       set     sys_execve, %g1
+       jmpl    %g1, %g0
+        flushw
 
 #ifdef CONFIG_COMPAT
 sunos_execv:
-       stx     %g0, [%sp + PTREGS_OFF + PT_V9_I2]
+       mov     %g0, %o2
 sys32_execve:
-       sethi   %hi(sparc32_execve), %g1
-       or      %g1, %lo(sparc32_execve), %g1
-#endif
-
-execve_merge:
-       flushw
+       set     compat_sys_execve, %g1
        jmpl    %g1, %g0
-        add    %sp, PTREGS_OFF, %o0
+        flushw
+#endif
 
        .align  32
 sys_sparc_pipe:
index 3a58e0d66f51b0144ef5f9ca970bfbbbb9d01ed6..acad343667d0c2c74ddb221c24295756ecfdb450 100644 (file)
@@ -106,7 +106,7 @@ sys_call_table:
 /*40*/ .word sys_newlstat, sys_dup, sys_sparc_pipe, sys_times, sys_nis_syscall
        .word sys_umount, sys_setgid, sys_getgid, sys_signal, sys_geteuid
 /*50*/ .word sys_getegid, sys_acct, sys_memory_ordering, sys_nis_syscall, sys_ioctl
-       .word sys_reboot, sys_nis_syscall, sys_symlink, sys_readlink, sys_execve
+       .word sys_reboot, sys_nis_syscall, sys_symlink, sys_readlink, sys64_execve
 /*60*/ .word sys_umask, sys_chroot, sys_newfstat, sys_fstat64, sys_getpagesize
        .word sys_msync, sys_vfork, sys_pread64, sys_pwrite64, sys_nis_syscall
 /*70*/ .word sys_nis_syscall, sys_mmap, sys_nis_syscall, sys_64_munmap, sys_mprotect