diff options
Diffstat (limited to 'sys/arch/mvme68k')
-rw-r--r-- | sys/arch/mvme68k/mvme68k/trap.c | 23 | ||||
-rw-r--r-- | sys/arch/mvme68k/mvme68k/vm_machdep.c | 30 |
2 files changed, 14 insertions, 39 deletions
diff --git a/sys/arch/mvme68k/mvme68k/trap.c b/sys/arch/mvme68k/mvme68k/trap.c index 3c74d079b93..84c62fd0794 100644 --- a/sys/arch/mvme68k/mvme68k/trap.c +++ b/sys/arch/mvme68k/mvme68k/trap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: trap.c,v 1.35 2001/09/14 09:15:19 art Exp $ */ +/* $OpenBSD: trap.c,v 1.36 2001/11/06 18:41:10 art Exp $ */ /* * Copyright (c) 1995 Theo de Raadt @@ -169,14 +169,14 @@ u_char next_sir; int writeback __P((struct frame *fp, int docachepush)); -static inline void userret __P((struct proc *p, struct frame *fp, +void userret __P((struct proc *p, struct frame *fp, u_quad_t oticks, u_int faultaddr, int fromtrap)); /* * trap and syscall both need the following work done before returning * to user mode. */ -static inline void +void userret(p, fp, oticks, faultaddr, fromtrap) register struct proc *p; register struct frame *fp; @@ -1104,23 +1104,6 @@ bad: #endif } -void -child_return(p, frame) - struct proc *p; - struct frame frame; -{ - - frame.f_regs[D0] = 0; - frame.f_sr &= ~PSL_C; - frame.f_format = FMT0; - - userret(p, &frame, 0, (u_int)0, 0); -#ifdef KTRACE - if (KTRPOINT(p, KTR_SYSRET)) - ktrsysret(p, SYS_fork, 0, 0); -#endif -} - /* * Allocation routines for software interrupts. */ diff --git a/sys/arch/mvme68k/mvme68k/vm_machdep.c b/sys/arch/mvme68k/mvme68k/vm_machdep.c index 091be388e0f..0600b7da920 100644 --- a/sys/arch/mvme68k/mvme68k/vm_machdep.c +++ b/sys/arch/mvme68k/mvme68k/vm_machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vm_machdep.c,v 1.30 2001/09/29 21:26:33 miod Exp $ */ +/* $OpenBSD: vm_machdep.c,v 1.31 2001/11/06 18:41:10 art Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -69,14 +69,16 @@ */ void -cpu_fork(p1, p2, stack, stacksize) - register struct proc *p1, *p2; +cpu_fork(p1, p2, stack, stacksize, func, arg) + struct proc *p1, *p2; void *stack; size_t stacksize; + void (*func)(void *); + void *arg; { - register struct pcb *pcb = &p2->p_addr->u_pcb; - register struct trapframe *tf; - register struct switchframe *sf; + struct pcb *pcb = &p2->p_addr->u_pcb; + struct trapframe *tf; + struct switchframe *sf; extern struct pcb *curpcb; extern void proc_trampoline(), child_return(); @@ -95,7 +97,7 @@ cpu_fork(p1, p2, stack, stacksize) /* * Copy the trap frame, and arrange for the child to return directly - * through return_to_user(). Note the inline version of cpu_set_kpc(). + * through return_to_user(). */ tf = (struct trapframe *)((u_int)p2->p_addr + USPACE) - 1; p2->p_md.md_regs = (int *)tf; @@ -109,21 +111,11 @@ cpu_fork(p1, p2, stack, stacksize) sf = (struct switchframe *)tf - 1; sf->sf_pc = (u_int)proc_trampoline; - pcb->pcb_regs[6] = (int)child_return; /* A2 */ - pcb->pcb_regs[7] = (int)p2; /* A3 */ + pcb->pcb_regs[6] = (int)func; /* A2 */ + pcb->pcb_regs[7] = (int)arg; /* A3 */ pcb->pcb_regs[11] = (int)sf; /* SSP */ } -void -cpu_set_kpc(p, pc, arg) - struct proc *p; - void (*pc) __P((void *)); - void *arg; -{ - p->p_addr->u_pcb.pcb_regs[6] = (int)pc; /* A2 */ - p->p_addr->u_pcb.pcb_regs[7] = (int)arg; /* A3 */ -} - /* * cpu_exit is called as the last action during exit. * We release the address space and machine-dependent resources, |