cris: switch to generic kernel_execve/sys_execve
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 3 Oct 2012 18:56:02 +0000 (14:56 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 15 Oct 2012 03:12:33 +0000 (23:12 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/cris/Kconfig
arch/cris/arch-v10/kernel/entry.S
arch/cris/arch-v10/kernel/process.c
arch/cris/arch-v32/kernel/entry.S
arch/cris/arch-v32/kernel/process.c
arch/cris/include/asm/unistd.h

index 3336a7d..81b59d1 100644 (file)
@@ -50,6 +50,7 @@ config CRIS
        select GENERIC_CMOS_UPDATE
        select MODULES_USE_ELF_RELA
        select GENERIC_KERNEL_THREAD
+       select GENERIC_KERNEL_EXECVE
 
 config HZ
        int
index b8e39e0..897bba6 100644 (file)
@@ -87,8 +87,8 @@ ret_from_kernel_thread:
        jsr schedule_tail
        move.d  $r2, $r10       ; argument is here
        jsr     $r1             ; call the payload
-       moveq   0, $r10
-       jsr     sys_exit        ; never returns
+       moveq   0, $r9          ; no syscall restarts, TYVM...
+       ba  ret_from_sys_call
 
 ret_from_intr:
        ;; check for resched if preemptive kernel or if we're going back to user-mode 
@@ -594,13 +594,6 @@ _ugdb_handle_breakpoint:
        ba      do_sigtrap              ; SIGTRAP the offending process. 
        pop     $dccr                   ; Restore dccr in delay slot.
 
-       .global kernel_execve
-kernel_execve:
-       move.d __NR_execve, $r9
-       break 13
-       ret
-       nop
-
        .data
 
 hw_bp_trigs:
index 8a673aa..1d64582 100644 (file)
@@ -167,29 +167,6 @@ asmlinkage int sys_vfork(void)
         return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(), current_pt_regs(), 0, NULL, NULL);
 }
 
-/*
- * sys_execve() executes a new program.
- */
-asmlinkage int sys_execve(const char *fname,
-                         const char *const *argv,
-                         const char *const *envp,
-                         long r13, long mof, long srp, 
-                         struct pt_regs *regs)
-{
-       int error;
-       struct filename *filename;
-
-       filename = getname(fname);
-       error = PTR_ERR(filename);
-
-       if (IS_ERR(filename))
-               goto out;
-       error = do_execve(filename->name, argv, envp, regs);
-       putname(filename);
- out:
-       return error;
-}
-
 unsigned long get_wchan(struct task_struct *p)
 {
 #if 0
index a9bcbc4..faa6441 100644 (file)
@@ -92,8 +92,8 @@ ret_from_kernel_thread:
        move.d  $r2, $r10
        jsr     $r1
        nop
-       moveq   0, $r10
-       jsr     sys_exit
+       moveq   0, $r9                  ; no syscall restarts, TYVM...
+       ba  ret_from_sys_call
        nop
        .size   ret_from_kernel_thread, . - ret_from_kernel_thread
 
@@ -544,15 +544,6 @@ _ugdb_handle_exception:
        ba      do_sigtrap              ; SIGTRAP the offending process.
        move.d  [$sp+], $r0             ; Restore R0 in delay slot.
 
-       .global kernel_execve
-       .type   kernel_execve,@function
-kernel_execve:
-       move.d __NR_execve, $r9
-       break 13
-       ret
-       nop
-       .size   kernel_execve, . - kernel_execve
-
        .data
 
        .section .rodata,"a"
index 3edbdb8..fe46540 100644 (file)
@@ -186,28 +186,6 @@ sys_vfork(void)
        return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(), current_pt_regs(), 0, NULL, NULL);
 }
 
-/* sys_execve() executes a new program. */
-asmlinkage int
-sys_execve(const char *fname,
-          const char *const *argv,
-          const char *const *envp, long r13, long mof, long srp,
-          struct pt_regs *regs)
-{
-       int error;
-       struct filename *filename;
-
-       filename = getname(fname);
-       error = PTR_ERR(filename);
-
-       if (IS_ERR(filename))
-               goto out;
-
-       error = do_execve(filename->name, argv, envp, regs);
-       putname(filename);
- out:
-       return error;
-}
-
 unsigned long
 get_wchan(struct task_struct *p)
 {
index 51873a4..f181d1f 100644 (file)
 #define __ARCH_WANT_SYS_SIGPROCMASK
 #define __ARCH_WANT_SYS_RT_SIGACTION
 #define __ARCH_WANT_SYS_RT_SIGSUSPEND
+#define __ARCH_WANT_SYS_EXECVE
 
 /*
  * "Conditional" syscalls