plan 9 kernel history: overview | file list | diff list

1999/0121/mpc/trap.c (diff list | history)

mpc/trap.c on 1999/0121
1999/0121    
#include	"u.h" 
#include	"../port/lib.h" 
#include	"mem.h" 
#include	"dat.h" 
#include	"fns.h" 
#include	"io.h" 
#include	"ureg.h" 
#include	"../port/error.h" 
 
/* Give enough context in the ureg to produce a kernel stack for 
 * a sleeping process 
 */ 
void 
setkernur(Ureg* ureg, Proc* p) 
{ 
	ureg->pc = p->sched.pc; 
	ureg->sp = p->sched.sp+4; 
} 
 
/* This routine must save the values of registers the user is not permitted to write 
 * from devproc and then restore the saved values before returning 
 */ 
void 
setregisters(Ureg* ureg, char* pureg, char* uva, int n) 
{ 
	USED(ureg, pureg, uva, n); 
	panic("not done"); 
} 
 
void 
dumpregs(Ureg* ureg) 
{ 
	USED(ureg); 
	panic("not done"); 
} 
 
void 
dumpstack(void) 
{ 
	panic("not done"); 
} 
 
ulong 
userpc(void) 
{ 
	Ureg *ureg; 
 
	ureg = (Ureg*)up->dbgreg; 
	return ureg->pc; 
} 
 
ulong 
dbgpc(Proc *p) 
{ 
	Ureg *ureg; 
 
	ureg = p->dbgreg; 
	if(ureg == 0) 
		return 0; 
 
	return ureg->pc; 
} 
 
static void 
linkproc(void) 
{ 
	spllo(); 
	up->kpfun(up->kparg); 
} 
 
void 
kprocchild(Proc* p, void (*func)(void*), void* arg) 
{ 
	p->sched.pc = (ulong)linkproc; 
	p->sched.sp = (ulong)p->kstack+KSTACK; 
 
	p->kpfun = func; 
	p->kparg = arg; 
} 
 
void 
forkchild(Proc *p, Ureg *ureg) 
{ 
	USED(p, ureg); 
} 
 
/* 
 * called in sysfile.c 
 */ 
void 
evenaddr(ulong addr) 
{ 
	if(addr & 3){ 
		postnote(up, 1, "sys: odd address", NDebug); 
		error(Ebadarg); 
	} 
} 
 
long 
execregs(ulong entry, ulong ssize, ulong nargs) 
{ 
	ulong *sp; 
	Ureg *ureg; 
 
	sp = (ulong*)(USTKTOP - ssize); 
	*--sp = nargs; 
 
	ureg = up->dbgreg; 
	ureg->usp = (ulong)sp; 
	ureg->pc = entry; 
	return USTKTOP-BY2WD;		/* address of user-level clock */ 
} 
 
void 
trap(Ureg *ur) 
{ 
	USED(ur); 
} 
 
/* 
 * called directly by l.s:/intrvec 
 */ 
void 
intr(Ureg *ur) 
{ 
	USED(ur); 
} 
 
void 
intrenable(int v, void (*r)(Ureg*, void*), void *arg, int) 
{ 
	USED(v, r, arg); 
} 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)