Commit 3416e809 authored by Al Viro's avatar Al Viro
Browse files

h8300: switch to generic fork/vfork/clone



Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent e9eac304
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -357,6 +357,9 @@
#define __ARCH_WANT_SYS_RT_SIGACTION
#define __ARCH_WANT_SYS_RT_SIGSUSPEND
#define __ARCH_WANT_SYS_EXECVE
#define __ARCH_WANT_SYS_FORK
#define __ARCH_WANT_SYS_VFORK
#define __ARCH_WANT_SYS_CLONE

/*
 * "Conditional" syscalls
+3 −35
Original line number Diff line number Diff line
@@ -127,40 +127,9 @@ void flush_thread(void)
{
}

/*
 * "h8300_fork()".. By the time we get here, the
 * non-volatile registers have also been saved on the
 * stack. We do some ugly pointer stuff here.. (see
 * also copy_thread)
 */

asmlinkage int h8300_fork(struct pt_regs *regs)
{
	return -EINVAL;
}

asmlinkage int h8300_vfork(struct pt_regs *regs)
{
	return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(), regs, 0, NULL, NULL);
}

asmlinkage int h8300_clone(struct pt_regs *regs)
{
	unsigned long clone_flags;
	unsigned long newsp;

	/* syscall2 puts clone_flags in er1 and usp in er2 */
	clone_flags = regs->er1;
	newsp = regs->er2;
	if (!newsp)
		newsp  = rdusp();
	return do_fork(clone_flags, newsp, regs, 0, NULL, NULL);

}

int copy_thread(unsigned long clone_flags,
                unsigned long usp, unsigned long topstk,
		 struct task_struct * p, struct pt_regs * regs)
		 struct task_struct * p, struct pt_regs *unused)
{
	struct pt_regs * childregs;

@@ -173,11 +142,10 @@ int copy_thread(unsigned long clone_flags,
		childregs->er5 = usp; /* fn */
		p->thread.ksp = (unsigned long)childregs;
	}
	*childregs = *regs;
	*childregs = *current_pt_regs();
	childregs->retpc = (unsigned long) ret_from_fork;
	childregs->er0 = 0;

	p->thread.usp = usp;
	p->thread.usp = usp ?: rdusp();
	p->thread.ksp = (unsigned long)childregs;

	return 0;
+0 −9
Original line number Diff line number Diff line
@@ -340,21 +340,12 @@ SYMBOL_NAME_LABEL(sys_call_table)
	bra	SYMBOL_NAME(syscall_trampoline):8
	.endm

SYMBOL_NAME_LABEL(sys_clone)	
	call_sp	h8300_clone
	
SYMBOL_NAME_LABEL(sys_sigreturn)
	call_sp	do_sigreturn

SYMBOL_NAME_LABEL(sys_rt_sigreturn)
	call_sp	do_rt_sigreturn

SYMBOL_NAME_LABEL(sys_fork)
	call_sp	h8300_fork

SYMBOL_NAME_LABEL(sys_vfork)
	call_sp	h8300_vfork

SYMBOL_NAME_LABEL(syscall_trampoline)
	mov.l	sp,er0
	jmp	@er6