ia64: switch to generic sys_execve()
authorAl Viro <viro@zeniv.linux.org.uk>
Sun, 14 Oct 2012 19:53:04 +0000 (15:53 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 19 Oct 2012 18:28:40 +0000 (14:28 -0400)
Acked-by: Tony Luck <tony.luck@intel.com>
Tested-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/ia64/include/asm/unistd.h
arch/ia64/kernel/entry.S
arch/ia64/kernel/process.c

index 8b3ff2f5b86167eda40544dbda0099c568eaaf0e..1574bca86138c317ab70fa75d5e19fa3911ae6d9 100644 (file)
@@ -29,6 +29,7 @@
 
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
+#define __ARCH_WANT_SYS_EXECVE
 
 #if !defined(__ASSEMBLY__) && !defined(ASSEMBLER)
 
index 0dea684e19053fd06c88bc30c22122c2ac98b2f6..940a67263629177f7a3e66a129acc5cee4157abd 100644 (file)
@@ -61,14 +61,13 @@ ENTRY(ia64_execve)
         * Allocate 8 input registers since ptrace() may clobber them
         */
        .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(8)
-       alloc loc1=ar.pfs,8,2,4,0
+       alloc loc1=ar.pfs,8,2,3,0
        mov loc0=rp
        .body
        mov out0=in0                    // filename
        ;;                              // stop bit between alloc and call
        mov out1=in1                    // argv
        mov out2=in2                    // envp
-       add out3=16,sp                  // regs
        br.call.sptk.many rp=sys_execve
 .ret0:
        cmp4.ge p6,p7=r8,r0
@@ -76,7 +75,6 @@ ENTRY(ia64_execve)
        sxt4 r8=r8                      // return 64-bit result
        ;;
        stf.spill [sp]=f0
-(p6)   cmp.ne pKStk,pUStk=r0,r0        // a successful execve() lands us in user-mode...
        mov rp=loc0
 (p6)   mov ar.pfs=r0                   // clear ar.pfs on success
 (p7)   br.ret.sptk.many rp
index 37686dbfd264e11db58070a0235f03e5a733529f..25543a295ad926fa03a80683a800a23c9a9d2fc8 100644 (file)
@@ -617,25 +617,6 @@ dump_fpu (struct pt_regs *pt, elf_fpregset_t dst)
        return 1;       /* f0-f31 are always valid so we always return 1 */
 }
 
-long
-sys_execve (const char __user *filename,
-           const char __user *const __user *argv,
-           const char __user *const __user *envp,
-           struct pt_regs *regs)
-{
-       struct filename *fname;
-       int error;
-
-       fname = getname(filename);
-       error = PTR_ERR(fname);
-       if (IS_ERR(fname))
-               goto out;
-       error = do_execve(fname->name, argv, envp, regs);
-       putname(fname);
-out:
-       return error;
-}
-
 /*
  * Flush thread state.  This is called when a thread does an execve().
  */