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

1990/0427/power/trap.c (diff list | history)

1990/0427/sys/src/9/power/trap.c:5,101990/0511/sys/src/9/power/trap.c:5,11 (short | long | prev | next)
1990/0227    
#include	"fns.h" 
#include	"ureg.h" 
#include	"io.h" 
1990/0511    
#include	"errno.h" 
1990/0227    
 
/* 
 *  vme interrupt routines 
1990/0427/sys/src/9/power/trap.c:418,4231990/0511/sys/src/9/power/trap.c:419,425
1990/0227    
	ulong sp; 
	ulong r1; 
	Ureg *ur; 
1990/0511    
	char *msg; 
1990/0227    
 
	u->p->insyscall = 1; 
	ur = aur; 
1990/0427/sys/src/9/power/trap.c:433,4491990/0511/sys/src/9/power/trap.c:435,459
1990/0227    
	spllo(); 
	r1 = ur->r1; 
	sp = ur->sp; 
	if(r1 >= sizeof systab/BY2WD) 
		panic("syscall %d\n", r1); 
	if(sp & (BY2WD-1)) 
		panic("syscall odd sp"); 
	if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-4*BY2WD)) 
		validaddr(ur->sp, 4*BY2WD, 0); 
                 
	u->nerrlab = 0; 
	ret = -1; 
	if(!waserror()) 
1990/0511    
	if(!waserror()){ 
		if(r1 >= sizeof systab/BY2WD){ 
			pprint("bad sys call number %d pc %lux\n", r1, ((Ureg*)UREGADDR)->pc); 
			msg = "bad sys call"; 
	    Bad: 
			postnote(u->p, 1, msg, NDebug); 
			error(0, Ebadarg); 
		} 
		if(sp & (BY2WD-1)){ 
			pprint("odd sp in sys call pc %lux sp %lux\n", ((Ureg*)UREGADDR)->pc, ((Ureg*)UREGADDR)->sp); 
			msg = "odd stack"; 
			goto Bad; 
		} 
		if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-4*BY2WD)) 
			validaddr(ur->sp, 4*BY2WD, 0); 
1990/0227    
		ret = (*systab[r1])((ulong*)(sp+2*BY2WD)); 
1990/0511    
	} 
1990/0227    
	ur->pc += 4; 
	u->nerrlab = 0; 
	splhi(); 


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