cris: switch to generic kernel_execve/sys_execve
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
69b58a6721
commit
1703a219f7
@ -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:
|
|||||||
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:
|
|||||||
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)
|
|||||||
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:
|
|||||||
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:
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
#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
|
||||||
|
Loading…
Reference in New Issue
Block a user