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

1993/1124/pc/fault386.c (diff list | history)

pc/fault386.c on 1991/0710
1991/0710    
#include	"u.h" 
1992/0321    
#include	"../port/lib.h" 
1991/0710    
#include	"mem.h" 
#include	"dat.h" 
#include	"fns.h" 
#include	"ureg.h" 
1991/0711    
#include	"io.h" 
1991/0710    
 
1991/0719    
int faulting; 
 
1993/1124    
static void 
fault386(Ureg *ur, void *arg) 
1991/0710    
{ 
1991/0718    
	ulong addr; 
	int read; 
	int user; 
1991/0719    
	int n; 
1991/0720    
	int insyscall; 
1991/1112    
	char buf[ERRLEN]; 
1991/0718    
 
1993/1124    
	USED(arg); 
 
1993/0915    
	insyscall = up->insyscall; 
	up->insyscall = 1; 
1991/0718    
	addr = getcr2(); 
	read = !(ur->ecode & 2); 
1991/0809    
	user = (ur->cs&0xffff) == UESEL; 
1992/0805    
	spllo(); 
1993/1113    
/*print("F%d:A#%lux:U%d:R%d|", up->pid, addr, user, read);/**/ 
1991/0719    
	n = fault(addr, read); 
	if(n < 0){ 
1991/0718    
		if(user){ 
1991/1218    
			sprint(buf, "sys: trap: fault %s addr=0x%lux", 
				read? "read" : "write", addr); 
1993/0915    
			postnote(up, 1, buf, NDebug); 
1991/1112    
			return; 
1991/0718    
		} 
1993/1113    
print("fault: 0x%lux", addr); 
1991/0718    
		dumpregs(ur); 
1991/0808    
		panic("fault: 0x%lux", addr); 
1991/0718    
	} 
1993/0915    
	up->insyscall = insyscall; 
1991/0710    
} 
 
void 
1991/0718    
faultinit(void) 
1991/0710    
{ 
1993/1124    
	setvec(Faultvec, fault386, 0); 
1991/0710    
} 


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