|
|
1.1 ! root 1: #include "u.h" ! 2: #include "../port/lib.h" ! 3: #include "mem.h" ! 4: #include "dat.h" ! 5: #include "fns.h" ! 6: #include "ureg.h" ! 7: #include "io.h" ! 8: ! 9: int faulting; ! 10: ! 11: void ! 12: fault386(Ureg *ur, void *a) ! 13: { ! 14: ulong addr; ! 15: int read; ! 16: int user; ! 17: int n; ! 18: int insyscall; ! 19: char buf[ERRLEN]; ! 20: ! 21: USED(a); ! 22: ! 23: insyscall = u->p->insyscall; ! 24: u->p->insyscall = 1; ! 25: addr = getcr2(); ! 26: read = !(ur->ecode & 2); ! 27: user = (ur->cs&0xffff) == UESEL; ! 28: spllo(); ! 29: /* print("F%d:A#%lux:U%d:R%d|", u->p->pid, addr, user, read);/**/ ! 30: n = fault(addr, read); ! 31: if(n < 0){ ! 32: if(user){ ! 33: sprint(buf, "sys: trap: fault %s addr=0x%lux", ! 34: read? "read" : "write", addr); ! 35: postnote(u->p, 1, buf, NDebug); ! 36: return; ! 37: } ! 38: dumpregs(ur); ! 39: panic("fault: 0x%lux", addr); ! 40: } ! 41: u->p->insyscall = insyscall; ! 42: } ! 43: ! 44: void ! 45: faultinit(void) ! 46: { ! 47: setvec(Faultvec, fault386, 0); ! 48: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.