Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f7200d4c authored by Al Viro's avatar Al Viro
Browse files

sparc32: switch to generic sys_execve()



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent ab348681
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -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 */
+1 −1
Original line number Diff line number Diff line
@@ -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
+3 −16
Original line number Diff line number Diff line
@@ -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
+0 −28
Original line number Diff line number Diff line
@@ -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;