Commit 1703a219 authored by Al Viro's avatar Al Viro

cris: switch to generic kernel_execve/sys_execve

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 69b58a67
...@@ -50,6 +50,7 @@ config CRIS ...@@ -50,6 +50,7 @@ config CRIS
select GENERIC_CMOS_UPDATE select GENERIC_CMOS_UPDATE
select MODULES_USE_ELF_RELA select MODULES_USE_ELF_RELA
select GENERIC_KERNEL_THREAD select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE
config HZ config HZ
int int
......
...@@ -87,8 +87,8 @@ ret_from_kernel_thread: ...@@ -87,8 +87,8 @@ ret_from_kernel_thread:
jsr schedule_tail jsr schedule_tail
move.d $r2, $r10 ; argument is here move.d $r2, $r10 ; argument is here
jsr $r1 ; call the payload jsr $r1 ; call the payload
moveq 0, $r10 moveq 0, $r9 ; no syscall restarts, TYVM...
jsr sys_exit ; never returns ba ret_from_sys_call
ret_from_intr: ret_from_intr:
;; check for resched if preemptive kernel or if we're going back to user-mode ;; check for resched if preemptive kernel or if we're going back to user-mode
...@@ -594,13 +594,6 @@ _ugdb_handle_breakpoint: ...@@ -594,13 +594,6 @@ _ugdb_handle_breakpoint:
ba do_sigtrap ; SIGTRAP the offending process. ba do_sigtrap ; SIGTRAP the offending process.
pop $dccr ; Restore dccr in delay slot. pop $dccr ; Restore dccr in delay slot.
.global kernel_execve
kernel_execve:
move.d __NR_execve, $r9
break 13
ret
nop
.data .data
hw_bp_trigs: hw_bp_trigs:
......
...@@ -167,29 +167,6 @@ asmlinkage int sys_vfork(void) ...@@ -167,29 +167,6 @@ asmlinkage int sys_vfork(void)
return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(), current_pt_regs(), 0, NULL, NULL); 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) unsigned long get_wchan(struct task_struct *p)
{ {
#if 0 #if 0
......
...@@ -92,8 +92,8 @@ ret_from_kernel_thread: ...@@ -92,8 +92,8 @@ ret_from_kernel_thread:
move.d $r2, $r10 move.d $r2, $r10
jsr $r1 jsr $r1
nop nop
moveq 0, $r10 moveq 0, $r9 ; no syscall restarts, TYVM...
jsr sys_exit ba ret_from_sys_call
nop nop
.size ret_from_kernel_thread, . - ret_from_kernel_thread .size ret_from_kernel_thread, . - ret_from_kernel_thread
...@@ -544,15 +544,6 @@ _ugdb_handle_exception: ...@@ -544,15 +544,6 @@ _ugdb_handle_exception:
ba do_sigtrap ; SIGTRAP the offending process. ba do_sigtrap ; SIGTRAP the offending process.
move.d [$sp+], $r0 ; Restore R0 in delay slot. 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 .data
.section .rodata,"a" .section .rodata,"a"
......
...@@ -186,28 +186,6 @@ sys_vfork(void) ...@@ -186,28 +186,6 @@ sys_vfork(void)
return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(), current_pt_regs(), 0, NULL, NULL); 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 unsigned long
get_wchan(struct task_struct *p) get_wchan(struct task_struct *p)
{ {
......
...@@ -371,6 +371,7 @@ ...@@ -371,6 +371,7 @@
#define __ARCH_WANT_SYS_SIGPROCMASK #define __ARCH_WANT_SYS_SIGPROCMASK
#define __ARCH_WANT_SYS_RT_SIGACTION #define __ARCH_WANT_SYS_RT_SIGACTION
#define __ARCH_WANT_SYS_RT_SIGSUSPEND #define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE
/* /*
* "Conditional" syscalls * "Conditional" syscalls
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment