h8300: generic kernel_execve()
authorAl Viro <viro@zeniv.linux.org.uk>
Wed, 10 Oct 2012 17:29:28 +0000 (13:29 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sun, 14 Oct 2012 23:37:44 +0000 (19:37 -0400)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/h8300/Kconfig
arch/h8300/kernel/entry.S
arch/h8300/kernel/sys_h8300.c

index 4cef8a91c2a0e6fa338b43f4e98655367766e679..04bef4d25b4aa0d6e2032794227865abc1b0e947 100644 (file)
@@ -9,6 +9,7 @@ config H8300
        select GENERIC_CPU_DEVICES
        select MODULES_USE_ELF_RELA
        select GENERIC_KERNEL_THREAD
+       select GENERIC_KERNEL_EXECVE
 
 config SYMBOL_PREFIX
        string
index 2cdb49a56099bb32940c0c3fb4cdaf20b547de64..617a6878787fa69571b91ebcb54d84cd6262c3c4 100644 (file)
@@ -337,8 +337,7 @@ SYMBOL_NAME_LABEL(ret_from_kernel_thread)
        mov.l   @(LER4:16,sp),er0
        mov.l   @(LER5:16,sp),er1
        jsr     @er1
-       sub.l   @er0,@er0
-       jsr     @SYMBOL_NAME(sys_exit)
+       jmp     @SYMBOL_NAME(ret_from_exception)
 
 SYMBOL_NAME_LABEL(resume)
        /*
index 4bdc7311784e7297ac6f0bbb67073bd2e41d1ae5..bf350cb7f597907ac9846a39a24514c6a2d304c7 100644 (file)
@@ -46,29 +46,3 @@ asmlinkage void syscall_print(void *dummy,...)
                ((regs->pc)&0xffffff)-2,regs->orig_er0,regs->er1,regs->er2,regs->er3,regs->er0);
 }
 #endif
-
-/*
- * Do a system call from kernel instead of calling sys_execve so we
- * end up with proper pt_regs.
- */
-asmlinkage
-int kernel_execve(const char *filename,
-                 const char *const argv[],
-                 const char *const envp[])
-{
-       register long res __asm__("er0");
-       register const char *const *_c __asm__("er3") = envp;
-       register const char *const *_b __asm__("er2") = argv;
-       register const char * _a __asm__("er1") = filename;
-       __asm__ __volatile__ ("mov.l %1,er0\n\t"
-                       "trapa  #0\n\t"
-                       : "=r" (res)
-                       : "g" (__NR_execve),
-                         "g" (_a),
-                         "g" (_b),
-                         "g" (_c)
-                       : "cc", "memory");
-       return res;
-}
-
-