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

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

1991/0710/sys/src/9/pc/fault386.c:4,91991/0711/sys/src/9/pc/fault386.c:4,10 (short | long)
1991/0710    
#include	"dat.h" 
#include	"fns.h" 
#include	"ureg.h" 
1991/0711    
#include	"io.h" 
1991/0710    
 
void 
faultinit(void) 
1991/0711/sys/src/9/pc/fault386.c:9,151991/0716/sys/src/9/pc/fault386.c:9,15 (short | long)
1991/0710    
void 
faultinit(void) 
{ 
	setvec(Faultvec, fault386, SEGTG); 
1991/0716    
	setvec(Faultvec, fault386); 
1991/0710    
} 
 
void 
1991/0716/sys/src/9/pc/fault386.c:7,191991/0718/sys/src/9/pc/fault386.c:7,38 (short | long)
1991/0711    
#include	"io.h" 
1991/0710    
 
void 
faultinit(void) 
1991/0718    
fault386(Ureg *ur) 
1991/0710    
{ 
1991/0716    
	setvec(Faultvec, fault386); 
1991/0718    
	ulong addr; 
	int read; 
	int user; 
 
print("fault386\n"); 
dumpregs(ur); 
for(;;); 
	addr = getcr2(); 
	read = !(ur->ecode & 2); 
	user = (ur->ecode & 4); 
	if(fault(addr, read) < 0){ 
		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); 
			pexit("Suicide", 0); 
		} 
		u->p->state = MMUing; 
		dumpregs(ur); 
		panic("fault: 0x%lux", addr); 
	} 
1991/0710    
} 
 
void 
fault386(Ureg *ur) 
1991/0718    
faultinit(void) 
1991/0710    
{ 
	panic("fault"); 
1991/0718    
	setvec(Faultvec, fault386); 
1991/0710    
} 
1991/0718/sys/src/9/pc/fault386.c:6,111991/0719/sys/src/9/pc/fault386.c:6,13 (short | long)
1991/0710    
#include	"ureg.h" 
1991/0711    
#include	"io.h" 
1991/0710    
 
1991/0719    
int faulting; 
 
1991/0710    
void 
1991/0718    
fault386(Ureg *ur) 
1991/0710    
{ 
1991/0718/sys/src/9/pc/fault386.c:12,251991/0719/sys/src/9/pc/fault386.c:14,35
1991/0718    
	ulong addr; 
	int read; 
	int user; 
1991/0719    
	int n; 
	static int times; 
1991/0718    
 
print("fault386\n"); 
dumpregs(ur); 
for(;;); 
	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/0718    
	read = !(ur->ecode & 2); 
	user = (ur->ecode & 4); 
	if(fault(addr, read) < 0){ 
1991/0719    
	n = fault(addr, read); 
print("fault returns %d\n", n); 
	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/0718/sys/src/9/pc/fault386.c:29,341991/0719/sys/src/9/pc/fault386.c:39,45
1991/0718    
		dumpregs(ur); 
		panic("fault: 0x%lux", addr); 
	} 
1991/0719    
	faulting = 0; 
1991/0710    
} 
 
void 
1991/0719/sys/src/9/pc/fault386.c:15,271991/0720/sys/src/9/pc/fault386.c:15,28 (short | long)
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 
1991/0720/sys/src/9/pc/fault386.c:16,221991/0723/sys/src/9/pc/fault386.c:16,21 (short | long)
1991/0718    
	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/0720/sys/src/9/pc/fault386.c:29,361991/0723/sys/src/9/pc/fault386.c:28,33
1991/0718    
	read = !(ur->ecode & 2); 
	user = (ur->ecode & 4); 
1991/0719    
	n = fault(addr, read); 
1991/0720    
if(++times==3) 
	panic("3rd time in fault"); 
1991/0719    
	if(n < 0){ 
1991/0718    
		if(user){ 
1991/0720    
			pprint("user %s error addr=0x%lux\n", read?"read":"write", addr); 
1991/0723/sys/src/9/pc/fault386.c:20,271991/0801/sys/src/9/pc/fault386.c:20,25 (short | long)
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(faulting) 
		panic("double fault\n"); 
	faulting = 1; 
1991/0723/sys/src/9/pc/fault386.c:37,431991/0801/sys/src/9/pc/fault386.c:35,41
1991/0718    
		} 
		u->p->state = MMUing; 
		dumpregs(ur); 
		panic("fault: 0x%lux", addr); 
1991/0801    
		panic("fault: 0x%lux 0x%lux", addr); 
1991/0718    
	} 
1991/0719    
	faulting = 0; 
1991/0720    
	u->p->insyscall = insyscall; 
1991/0801/sys/src/9/pc/fault386.c:35,411991/0808/sys/src/9/pc/fault386.c:35,41 (short | long)
1991/0718    
		} 
		u->p->state = MMUing; 
		dumpregs(ur); 
1991/0801    
		panic("fault: 0x%lux 0x%lux", addr); 
1991/0808    
		panic("fault: 0x%lux", addr); 
1991/0718    
	} 
1991/0719    
	faulting = 0; 
1991/0720    
	u->p->insyscall = insyscall; 
1991/0808/sys/src/9/pc/fault386.c:20,301991/0809/sys/src/9/pc/fault386.c:20,27 (short | long)
1991/0720    
	insyscall = u->p->insyscall; 
	u->p->insyscall = 1; 
1991/0718    
	addr = getcr2(); 
1991/0719    
	if(faulting) 
		panic("double fault\n"); 
	faulting = 1; 
1991/0718    
	read = !(ur->ecode & 2); 
	user = (ur->ecode & 4); 
1991/0809    
	user = (ur->cs&0xffff) == UESEL; 
1991/0719    
	n = fault(addr, read); 
	if(n < 0){ 
1991/0718    
		if(user){ 
1991/0808/sys/src/9/pc/fault386.c:37,431991/0809/sys/src/9/pc/fault386.c:34,39
1991/0718    
		dumpregs(ur); 
1991/0808    
		panic("fault: 0x%lux", addr); 
1991/0718    
	} 
1991/0719    
	faulting = 0; 
1991/0720    
	u->p->insyscall = insyscall; 
1991/0710    
} 
 
1991/0809/sys/src/9/pc/fault386.c:30,361991/0926/sys/src/9/pc/fault386.c:30,35 (short | long)
1991/0720    
				ur->pc, ur->usp); 
1991/0718    
			pexit("Suicide", 0); 
		} 
		u->p->state = MMUing; 
		dumpregs(ur); 
1991/0808    
		panic("fault: 0x%lux", addr); 
1991/0718    
	} 
1991/0926/sys/src/9/pc/fault386.c:16,211991/1112/sys/src/9/pc/fault386.c:16,22 (short | long)
1991/0718    
	int user; 
1991/0719    
	int n; 
1991/0720    
	int insyscall; 
1991/1112    
	char buf[ERRLEN]; 
1991/0718    
 
1991/0720    
	insyscall = u->p->insyscall; 
	u->p->insyscall = 1; 
1991/0926/sys/src/9/pc/fault386.c:25,341991/1112/sys/src/9/pc/fault386.c:26,35
1991/0719    
	n = fault(addr, read); 
	if(n < 0){ 
1991/0718    
		if(user){ 
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); 
1991/1112    
			sprint(buf, "sys: fault %s pc=0x%lux addr=0x%lux", 
				read? "read" : "write", ur->pc, addr); 
			postnote(u->p, 1, buf, NDebug); 
			return; 
1991/0718    
		} 
		dumpregs(ur); 
1991/0808    
		panic("fault: 0x%lux", addr); 
1991/1112/sys/src/9/pc/fault386.c:26,331991/1218/sys/src/9/pc/fault386.c:26,33 (short | long)
1991/0719    
	n = fault(addr, read); 
	if(n < 0){ 
1991/0718    
		if(user){ 
1991/1112    
			sprint(buf, "sys: fault %s pc=0x%lux addr=0x%lux", 
				read? "read" : "write", ur->pc, addr); 
1991/1218    
			sprint(buf, "sys: trap: fault %s addr=0x%lux", 
				read? "read" : "write", addr); 
1991/1112    
			postnote(u->p, 1, buf, NDebug); 
			return; 
1991/0718    
		} 
1991/1218/sys/src/9/pc/fault386.c:1,51992/0321/sys/src/9/pc/fault386.c:1,5 (short | long)
1991/0710    
#include	"u.h" 
#include	"lib.h" 
1992/0321    
#include	"../port/lib.h" 
1991/0710    
#include	"mem.h" 
#include	"dat.h" 
#include	"fns.h" 
1992/0321/sys/src/9/pc/fault386.c:23,281992/0805/sys/src/9/pc/fault386.c:23,29 (short | long)
1991/0718    
	addr = getcr2(); 
	read = !(ur->ecode & 2); 
1991/0809    
	user = (ur->cs&0xffff) == UESEL; 
1992/0805    
	spllo(); 
1991/0719    
	n = fault(addr, read); 
	if(n < 0){ 
1991/0718    
		if(user){ 
1992/0805/sys/src/9/pc/fault386.c:18,411993/0915/sys/src/9/pc/fault386.c:18,42 (short | long)
1991/0720    
	int insyscall; 
1991/1112    
	char buf[ERRLEN]; 
1991/0718    
 
1991/0720    
	insyscall = u->p->insyscall; 
	u->p->insyscall = 1; 
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/0915    
/* 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); 
1991/1112    
			postnote(u->p, 1, buf, NDebug); 
1993/0915    
			postnote(up, 1, buf, NDebug); 
1991/1112    
			return; 
1991/0718    
		} 
		dumpregs(ur); 
1991/0808    
		panic("fault: 0x%lux", addr); 
1991/0718    
	} 
1991/0720    
	u->p->insyscall = insyscall; 
1993/0915    
	up->insyscall = insyscall; 
1991/0710    
} 
 
void 
1993/0915/sys/src/9/pc/fault386.c:24,301993/1113/sys/src/9/pc/fault386.c:24,30 (short | long)
1991/0718    
	read = !(ur->ecode & 2); 
1991/0809    
	user = (ur->cs&0xffff) == UESEL; 
1992/0805    
	spllo(); 
1993/0915    
/* print("F%d:A#%lux:U%d:R%d|", up->pid, addr, user, read);/**/ 
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){ 
1993/0915/sys/src/9/pc/fault386.c:33,381993/1113/sys/src/9/pc/fault386.c:33,39
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/1113/sys/src/9/pc/fault386.c:8,151993/1124/sys/src/9/pc/fault386.c:8,15 (short | long)
1991/0710    
 
1991/0719    
int faulting; 
 
1991/0710    
void 
1991/0718    
fault386(Ureg *ur) 
1993/1124    
static void 
fault386(Ureg *ur, void *arg) 
1991/0710    
{ 
1991/0718    
	ulong addr; 
	int read; 
1993/1113/sys/src/9/pc/fault386.c:18,231993/1124/sys/src/9/pc/fault386.c:18,25
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(); 
1993/1113/sys/src/9/pc/fault386.c:43,471993/1124/sys/src/9/pc/fault386.c:45,49
1991/0710    
void 
1991/0718    
faultinit(void) 
1991/0710    
{ 
1991/0718    
	setvec(Faultvec, fault386); 
1993/1124    
	setvec(Faultvec, fault386, 0); 
1991/0710    
} 
1993/1124/sys/src/9/pc/fault386.c:6,131993/1125/sys/src/9/pc/fault386.c:6,11 (short | long)
1991/0710    
#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    
{ 
1993/1125/sys/src/9/pc/fault386.c:18,231994/0521/sys/src/9/pc/fault386.c:18,28 (short | long)
1991/0718    
 
1993/1124    
	USED(arg); 
 
1994/0521    
	if(up == 0){ 
		dumpregs(ur); 
		for(;;); 
	} 
 
1993/0915    
	insyscall = up->insyscall; 
	up->insyscall = 1; 
1991/0718    
	addr = getcr2(); 
1993/1125/sys/src/9/pc/fault386.c:24,301994/0521/sys/src/9/pc/fault386.c:29,34
1991/0718    
	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){ 
1993/1125/sys/src/9/pc/fault386.c:33,391994/0521/sys/src/9/pc/fault386.c:37,42
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    
	} 
1994/0521/sys/src/9/pc/fault386.c:18,281994/0525/sys/src/9/pc/fault386.c:18,23 (short | long)
1991/0718    
 
1993/1124    
	USED(arg); 
 
1994/0521    
	if(up == 0){ 
		dumpregs(ur); 
		for(;;); 
	} 
                 
1993/0915    
	insyscall = up->insyscall; 
	up->insyscall = 1; 
1991/0718    
	addr = getcr2(); 
1994/0521/sys/src/9/pc/fault386.c:29,341994/0525/sys/src/9/pc/fault386.c:24,30
1991/0718    
	read = !(ur->ecode & 2); 
1991/0809    
	user = (ur->cs&0xffff) == UESEL; 
1992/0805    
	spllo(); 
1994/0525    
/*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){ 
1994/0521/sys/src/9/pc/fault386.c:37,421994/0525/sys/src/9/pc/fault386.c:33,39
1993/0915    
			postnote(up, 1, buf, NDebug); 
1991/1112    
			return; 
1991/0718    
		} 
1994/0525    
print("fault: 0x%lux", addr); 
1991/0718    
		dumpregs(ur); 
1991/0808    
		panic("fault: 0x%lux", addr); 
1991/0718    
	} 
1994/0525/sys/src/9/pc/fault386.c:24,301994/0902/sys/src/9/pc/fault386.c:24,29 (short | long)
1991/0718    
	read = !(ur->ecode & 2); 
1991/0809    
	user = (ur->cs&0xffff) == UESEL; 
1992/0805    
	spllo(); 
1994/0525    
/*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){ 
1994/0525/sys/src/9/pc/fault386.c:33,411994/0902/sys/src/9/pc/fault386.c:32,39
1993/0915    
			postnote(up, 1, buf, NDebug); 
1991/1112    
			return; 
1991/0718    
		} 
1994/0525    
print("fault: 0x%lux", addr); 
1991/0718    
		dumpregs(ur); 
1991/0808    
		panic("fault: 0x%lux", addr); 
1994/0902    
		panic("fault: 0x%lux\n", addr); 
1991/0718    
	} 
1993/0915    
	up->insyscall = insyscall; 
1991/0710    
} 
1994/0902/sys/src/9/pc/fault386.c:1,451997/0327/sys/src/9/pc/fault386.c:0 (short | long)
Deleted.
rsc Mon Mar 7 10:29:40 2005
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    
                 
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(); 
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    
		} 
		dumpregs(ur); 
1994/0902    
		panic("fault: 0x%lux\n", 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)