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

1991/1108/power/faultmips.c (diff list | history)

power/faultmips.c on 1990/1212
1990/1212    
#include	"u.h" 
#include	"lib.h" 
#include	"mem.h" 
#include	"dat.h" 
#include	"fns.h" 
#include	"ureg.h" 
#include	"errno.h" 
 
/* 
 *  find out fault address and type of access. 
 *  Call common fault handler. 
 */ 
void 
faultmips(Ureg *ur, int user, int code) 
{ 
	ulong addr; 
	extern char *excname[]; 
1991/0705    
	char buf[ERRLEN]; 
1990/1212    
	int read; 
 
	addr = ur->badvaddr; 
	addr &= ~(BY2PG-1); 
	read = !(code==CTLBM || code==CTLBS); 
1991/0926    
 
1990/1212    
	if(fault(addr, read) < 0){ 
		if(user){ 
1991/0705    
			sprint(buf, "sys: fault %s pc=0x%lux addr=0x%lux", 
				read? "read" : "write", ur->pc, ur->badvaddr); 
			postnote(u->p, 1, buf, NDebug); 
			return; 
1990/1212    
		} 
		print("kernel %s badvaddr=0x%lux\n", excname[code], ur->badvaddr); 
		print("status=0x%lux pc=0x%lux sp=0x%lux\n", ur->status, ur->pc, ur->sp); 
		dumpregs(ur); 
		panic("fault"); 
	} 
} 
 
/* 
 * called in sysfile.c 
 */ 
void 
evenaddr(ulong addr) 
{ 
	if(addr & 3){ 
		postnote(u->p, 1, "sys: odd address", NDebug); 
		error(Ebadarg); 
	} 
} 


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