mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
sparc32: switch to generic sys_execve()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
ab3486813b
commit
f7200d4c50
@ -8,8 +8,4 @@ extern asmlinkage long sparc_do_fork(unsigned long clone_flags,
|
||||
struct pt_regs *regs,
|
||||
unsigned long stack_size);
|
||||
|
||||
#ifndef __arch64__
|
||||
extern asmlinkage int sparc_execve(struct pt_regs *regs);
|
||||
#endif
|
||||
|
||||
#endif /* _SPARC64_SYSCALLS_H */
|
||||
|
@ -45,8 +45,8 @@
|
||||
#define __ARCH_WANT_COMPAT_SYS_TIME
|
||||
#define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
|
||||
#define __ARCH_WANT_COMPAT_SYS_SENDFILE
|
||||
#define __ARCH_WANT_SYS_EXECVE
|
||||
#endif
|
||||
#define __ARCH_WANT_SYS_EXECVE
|
||||
|
||||
/*
|
||||
* "Conditional" syscalls
|
||||
|
@ -806,23 +806,10 @@ sys_nis_syscall:
|
||||
call c_sys_nis_syscall
|
||||
mov %l5, %o7
|
||||
|
||||
.align 4
|
||||
.globl sys_execve
|
||||
sys_execve:
|
||||
mov %o7, %l5
|
||||
add %sp, STACKFRAME_SZ, %o0 ! pt_regs *regs arg
|
||||
call sparc_execve
|
||||
mov %l5, %o7
|
||||
|
||||
.globl sunos_execv
|
||||
sunos_execv:
|
||||
st %g0, [%sp + STACKFRAME_SZ + PT_I2]
|
||||
|
||||
call sparc_execve
|
||||
add %sp, STACKFRAME_SZ, %o0
|
||||
|
||||
b ret_sys_call
|
||||
ld [%sp + STACKFRAME_SZ + PT_I0], %o0
|
||||
.globl sunos_execv
|
||||
b sys_execve
|
||||
clr %i2
|
||||
|
||||
.align 4
|
||||
.globl sys_sparc_pipe
|
||||
|
@ -476,34 +476,6 @@ int dump_fpu (struct pt_regs * regs, elf_fpregset_t * fpregs)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* sparc_execve() executes a new program after the asm stub has set
|
||||
* things up for us. This should basically do what I want it to.
|
||||
*/
|
||||
asmlinkage int sparc_execve(struct pt_regs *regs)
|
||||
{
|
||||
int error, base = 0;
|
||||
struct filename *filename;
|
||||
|
||||
/* Check for indirect call. */
|
||||
if(regs->u_regs[UREG_G1] == 0)
|
||||
base = 1;
|
||||
|
||||
filename = getname((char __user *)regs->u_regs[base + UREG_I0]);
|
||||
error = PTR_ERR(filename);
|
||||
if(IS_ERR(filename))
|
||||
goto out;
|
||||
error = do_execve(filename->name,
|
||||
(const char __user *const __user *)
|
||||
regs->u_regs[base + UREG_I1],
|
||||
(const char __user *const __user *)
|
||||
regs->u_regs[base + UREG_I2],
|
||||
regs);
|
||||
putname(filename);
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
|
||||
unsigned long get_wchan(struct task_struct *task)
|
||||
{
|
||||
unsigned long pc, fp, bias = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user