| 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 | } | |