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,
|
struct pt_regs *regs,
|
||||||
unsigned long stack_size);
|
unsigned long stack_size);
|
||||||
|
|
||||||
#ifndef __arch64__
|
|
||||||
extern asmlinkage int sparc_execve(struct pt_regs *regs);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _SPARC64_SYSCALLS_H */
|
#endif /* _SPARC64_SYSCALLS_H */
|
||||||
|
|
|
@ -45,8 +45,8 @@
|
||||||
#define __ARCH_WANT_COMPAT_SYS_TIME
|
#define __ARCH_WANT_COMPAT_SYS_TIME
|
||||||
#define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
|
#define __ARCH_WANT_COMPAT_SYS_RT_SIGSUSPEND
|
||||||
#define __ARCH_WANT_COMPAT_SYS_SENDFILE
|
#define __ARCH_WANT_COMPAT_SYS_SENDFILE
|
||||||
#define __ARCH_WANT_SYS_EXECVE
|
|
||||||
#endif
|
#endif
|
||||||
|
#define __ARCH_WANT_SYS_EXECVE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "Conditional" syscalls
|
* "Conditional" syscalls
|
||||||
|
|
|
@ -806,23 +806,10 @@ sys_nis_syscall:
|
||||||
call c_sys_nis_syscall
|
call c_sys_nis_syscall
|
||||||
mov %l5, %o7
|
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:
|
sunos_execv:
|
||||||
st %g0, [%sp + STACKFRAME_SZ + PT_I2]
|
.globl sunos_execv
|
||||||
|
b sys_execve
|
||||||
call sparc_execve
|
clr %i2
|
||||||
add %sp, STACKFRAME_SZ, %o0
|
|
||||||
|
|
||||||
b ret_sys_call
|
|
||||||
ld [%sp + STACKFRAME_SZ + PT_I0], %o0
|
|
||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
.globl sys_sparc_pipe
|
.globl sys_sparc_pipe
|
||||||
|
|
|
@ -476,34 +476,6 @@ int dump_fpu (struct pt_regs * regs, elf_fpregset_t * fpregs)
|
||||||
return 1;
|
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 get_wchan(struct task_struct *task)
|
||||||
{
|
{
|
||||||
unsigned long pc, fp, bias = 0;
|
unsigned long pc, fp, bias = 0;
|
||||||
|
|
Loading…
Reference in New Issue