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

1991/0720/pc/fault386.c (diff list | history)

1991/0719/sys/src/9/pc/fault386.c:15,271991/0720/sys/src/9/pc/fault386.c:15,28 (short | long | prev | next)
1991/0718    
	int read; 
	int user; 
1991/0719    
	int n; 
1991/0720    
	int insyscall; 
1991/0719    
	static int times; 
1991/0718    
 
1991/0720    
	insyscall = u->p->insyscall; 
	u->p->insyscall = 1; 
1991/0718    
	addr = getcr2(); 
1991/0719    
print("fault386 %lux ur %lux\n", addr, ur); 
dumpregs(ur); 
if(++times==3) 
	panic("3rd time"); 
	if(faulting) 
		panic("double fault\n"); 
	faulting = 1; 
1991/0719/sys/src/9/pc/fault386.c:28,381991/0720/sys/src/9/pc/fault386.c:29,41
1991/0718    
	read = !(ur->ecode & 2); 
	user = (ur->ecode & 4); 
1991/0719    
	n = fault(addr, read); 
print("fault returns %d\n", n); 
1991/0720    
if(++times==3) 
	panic("3rd time in fault"); 
1991/0719    
	if(n < 0){ 
1991/0718    
		if(user){ 
			pprint("user %s error addr=0x%lux\n", read? "read" : "write", addr); 
			pprint("status=0x%lux pc=0x%lux sp=0x%lux\n", ur->flags, ur->pc, ur->usp); 
1991/0720    
			pprint("user %s error addr=0x%lux\n", read?"read":"write", addr); 
			pprint("status=0x%lux pc=0x%lux sp=0x%lux\n", ur->flags, 
				ur->pc, ur->usp); 
1991/0718    
			pexit("Suicide", 0); 
		} 
		u->p->state = MMUing; 
1991/0719/sys/src/9/pc/fault386.c:40,451991/0720/sys/src/9/pc/fault386.c:43,49
1991/0718    
		panic("fault: 0x%lux", addr); 
	} 
1991/0719    
	faulting = 0; 
1991/0720    
	u->p->insyscall = insyscall; 
1991/0710    
} 
 
void 


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