| 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,27 – 1991/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); | |
| 1991/0719/sys/src/9/pc/fault386.c:28,38 – 1991/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); | |
| 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); 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,45 – 1991/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 | |