diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-11-16 22:29:03 -0500 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-11-16 22:29:03 -0500 |
commit | 1e93f66831b31d36efe69099ffee33d94e5a3af9 (patch) | |
tree | d58857eb426a60dbc29b7ca1a28e69ffaeb39fc3 /arch/unicore32/kernel/sys.c | |
parent | 2bf81c8af92dd53890557c5d87875842d573a3e9 (diff) | |
parent | 60541d778e536455970281de25b2476e01c03aef (diff) | |
download | linux-1e93f66831b31d36efe69099ffee33d94e5a3af9.tar.gz linux-1e93f66831b31d36efe69099ffee33d94e5a3af9.tar.bz2 linux-1e93f66831b31d36efe69099ffee33d94e5a3af9.zip |
Merge branch 'arch-unicore32' into no-rebases
Diffstat (limited to 'arch/unicore32/kernel/sys.c')
-rw-r--r-- | arch/unicore32/kernel/sys.c | 63 |
1 files changed, 0 insertions, 63 deletions
diff --git a/arch/unicore32/kernel/sys.c b/arch/unicore32/kernel/sys.c index fabdee96110b..9680134b31f0 100644 --- a/arch/unicore32/kernel/sys.c +++ b/arch/unicore32/kernel/sys.c @@ -42,69 +42,6 @@ asmlinkage long __sys_clone(unsigned long clone_flags, unsigned long newsp, parent_tid, child_tid); } -/* sys_execve() executes a new program. - * This is called indirectly via a small wrapper - */ -asmlinkage long __sys_execve(const char __user *filename, - const char __user *const __user *argv, - const char __user *const __user *envp, - struct pt_regs *regs) -{ - int error; - struct filename *fn; - - fn = getname(filename); - error = PTR_ERR(fn); - if (IS_ERR(fn)) - goto out; - error = do_execve(fn->name, argv, envp, regs); - putname(fn); -out: - return error; -} - -int kernel_execve(const char *filename, - const char *const argv[], - const char *const envp[]) -{ - struct pt_regs regs; - int ret; - - memset(®s, 0, sizeof(struct pt_regs)); - ret = do_execve(filename, - (const char __user *const __user *)argv, - (const char __user *const __user *)envp, ®s); - if (ret < 0) - goto out; - - /* - * Save argc to the register structure for userspace. - */ - regs.UCreg_00 = ret; - - /* - * We were successful. We won't be returning to our caller, but - * instead to user space by manipulating the kernel stack. - */ - asm("add r0, %0, %1\n\t" - "mov r1, %2\n\t" - "mov r2, %3\n\t" - "mov r22, #0\n\t" /* not a syscall */ - "mov r23, %0\n\t" /* thread structure */ - "b.l memmove\n\t" /* copy regs to top of stack */ - "mov sp, r0\n\t" /* reposition stack pointer */ - "b ret_to_user" - : - : "r" (current_thread_info()), - "Ir" (THREAD_START_SP - sizeof(regs)), - "r" (®s), - "Ir" (sizeof(regs)) - : "r0", "r1", "r2", "r3", "ip", "lr", "memory"); - - out: - return ret; -} - /* Note: used by the compat code even in 64-bit Linux. */ SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len, unsigned long, prot, unsigned long, flags, |