aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2012-10-14 01:43:20 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2012-10-22 22:31:12 -0400
commit80b249b71e2e7caf6110a0d50c9634cebb223c0e (patch)
treebadabfe9419ddb0c58c5809592771ba4da172811 /arch/sh
parent7147e215480323bb2617fcebf585c447188ff760 (diff)
sh: convert to generic sys_execve()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'arch/sh')
-rw-r--r--arch/sh/include/asm/syscalls_32.h4
-rw-r--r--arch/sh/include/asm/syscalls_64.h4
-rw-r--r--arch/sh/include/asm/unistd.h1
-rw-r--r--arch/sh/kernel/process_32.c23
-rw-r--r--arch/sh/kernel/process_64.c25
5 files changed, 1 insertions, 56 deletions
diff --git a/arch/sh/include/asm/syscalls_32.h b/arch/sh/include/asm/syscalls_32.h
index 6c1fa559753c..d2f89f1741f4 100644
--- a/arch/sh/include/asm/syscalls_32.h
+++ b/arch/sh/include/asm/syscalls_32.h
@@ -19,10 +19,6 @@ asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp,
19asmlinkage int sys_vfork(unsigned long r4, unsigned long r5, 19asmlinkage int sys_vfork(unsigned long r4, unsigned long r5,
20 unsigned long r6, unsigned long r7, 20 unsigned long r6, unsigned long r7,
21 struct pt_regs __regs); 21 struct pt_regs __regs);
22asmlinkage int sys_execve(const char __user *ufilename,
23 const char __user *const __user *uargv,
24 const char __user *const __user *uenvp,
25 unsigned long r7, struct pt_regs __regs);
26asmlinkage int sys_sigsuspend(old_sigset_t mask); 22asmlinkage int sys_sigsuspend(old_sigset_t mask);
27asmlinkage int sys_sigaction(int sig, const struct old_sigaction __user *act, 23asmlinkage int sys_sigaction(int sig, const struct old_sigaction __user *act,
28 struct old_sigaction __user *oact); 24 struct old_sigaction __user *oact);
diff --git a/arch/sh/include/asm/syscalls_64.h b/arch/sh/include/asm/syscalls_64.h
index ee519f41d950..3fedd9f1fab5 100644
--- a/arch/sh/include/asm/syscalls_64.h
+++ b/arch/sh/include/asm/syscalls_64.h
@@ -21,10 +21,6 @@ asmlinkage int sys_vfork(unsigned long r2, unsigned long r3,
21 unsigned long r4, unsigned long r5, 21 unsigned long r4, unsigned long r5,
22 unsigned long r6, unsigned long r7, 22 unsigned long r6, unsigned long r7,
23 struct pt_regs *pregs); 23 struct pt_regs *pregs);
24asmlinkage int sys_execve(const char *ufilename, char **uargv,
25 char **uenvp, unsigned long r5,
26 unsigned long r6, unsigned long r7,
27 struct pt_regs *pregs);
28 24
29/* Misc syscall related bits */ 25/* Misc syscall related bits */
30asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs); 26asmlinkage long long do_syscall_trace_enter(struct pt_regs *regs);
diff --git a/arch/sh/include/asm/unistd.h b/arch/sh/include/asm/unistd.h
index 307201a854f3..41f59fa827a8 100644
--- a/arch/sh/include/asm/unistd.h
+++ b/arch/sh/include/asm/unistd.h
@@ -29,6 +29,7 @@
29# define __ARCH_WANT_SYS_SIGPENDING 29# define __ARCH_WANT_SYS_SIGPENDING
30# define __ARCH_WANT_SYS_SIGPROCMASK 30# define __ARCH_WANT_SYS_SIGPROCMASK
31# define __ARCH_WANT_SYS_RT_SIGACTION 31# define __ARCH_WANT_SYS_RT_SIGACTION
32# define __ARCH_WANT_SYS_EXECVE
32 33
33/* 34/*
34 * "Conditional" syscalls 35 * "Conditional" syscalls
diff --git a/arch/sh/kernel/process_32.c b/arch/sh/kernel/process_32.c
index b55070b9a634..fce8029de922 100644
--- a/arch/sh/kernel/process_32.c
+++ b/arch/sh/kernel/process_32.c
@@ -262,29 +262,6 @@ asmlinkage int sys_vfork(unsigned long r4, unsigned long r5,
262 0, NULL, NULL); 262 0, NULL, NULL);
263} 263}
264 264
265/*
266 * sys_execve() executes a new program.
267 */
268asmlinkage int sys_execve(const char __user *ufilename,
269 const char __user *const __user *uargv,
270 const char __user *const __user *uenvp,
271 unsigned long r7, struct pt_regs __regs)
272{
273 struct pt_regs *regs = RELOC_HIDE(&__regs, 0);
274 int error;
275 struct filename *filename;
276
277 filename = getname(ufilename);
278 error = PTR_ERR(filename);
279 if (IS_ERR(filename))
280 goto out;
281
282 error = do_execve(filename->name, uargv, uenvp, regs);
283 putname(filename);
284out:
285 return error;
286}
287
288unsigned long get_wchan(struct task_struct *p) 265unsigned long get_wchan(struct task_struct *p)
289{ 266{
290 unsigned long pc; 267 unsigned long pc;
diff --git a/arch/sh/kernel/process_64.c b/arch/sh/kernel/process_64.c
index fd338b030fd9..3a0f3fd3bb58 100644
--- a/arch/sh/kernel/process_64.c
+++ b/arch/sh/kernel/process_64.c
@@ -454,31 +454,6 @@ asmlinkage int sys_vfork(unsigned long r2, unsigned long r3,
454 return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, pregs->regs[15], pregs, 0, 0, 0); 454 return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, pregs->regs[15], pregs, 0, 0, 0);
455} 455}
456 456
457/*
458 * sys_execve() executes a new program.
459 */
460asmlinkage int sys_execve(const char *ufilename, char **uargv,
461 char **uenvp, unsigned long r5,
462 unsigned long r6, unsigned long r7,
463 struct pt_regs *pregs)
464{
465 int error;
466 struct filename *filename;
467
468 filename = getname((char __user *)ufilename);
469 error = PTR_ERR(filename);
470 if (IS_ERR(filename))
471 goto out;
472
473 error = do_execve(filename->name,
474 (const char __user *const __user *)uargv,
475 (const char __user *const __user *)uenvp,
476 pregs);
477 putname(filename);
478out:
479 return error;
480}
481
482#ifdef CONFIG_FRAME_POINTER 457#ifdef CONFIG_FRAME_POINTER
483static int in_sh64_switch_to(unsigned long pc) 458static int in_sh64_switch_to(unsigned long pc)
484{ 459{