| plan 9 kernel history: overview | file list | diff list |
1991/0705/power/trap.c (diff list | history)
| 1991/0625/sys/src/9/power/trap.c:84,89 – 1991/0705/sys/src/9/power/trap.c:84,90 (short | long | prev | next) | ||
| 1990/0227 | user = ur->status&KUP; if(u) u->p->pc = ur->pc; /* BUG */ | |
| 1991/0705 | ||
| 1990/0227 | switch(ecode){ case CINT: if(u && u->p->state==Running){ | |
| 1991/0625/sys/src/9/power/trap.c:142,149 – 1991/0705/sys/src/9/power/trap.c:143,150 | ||
| 1990/0722 | } | |
| 1990/0227 | Default: /* | |
| 1991/0705 | * This isn't good enough; can still deadlock because we may * hold print's locks in this processor. | |
| 1990/0227 | */ if(user){ spllo(); | |
| 1991/0625/sys/src/9/power/trap.c:150,156 – 1991/0705/sys/src/9/power/trap.c:151,157 | ||
| 1990/0227 | if(ecode == FPEXC) | |
| 1990/1110 | sprint(buf, "sys: fp: %s FCR31 %lux", fpexcname(x), x); | |
| 1990/0227 | else | |
| 1990/1110 |
| |
| 1991/0705 | sprint(buf, "sys: %s pc=0x%lux", excname[ecode], ur->pc); | |
| 1991/0425 | ||
| 1990/0227 | postnote(u->p, 1, buf, NDebug); }else{ | |
| 1991/0625/sys/src/9/power/trap.c:163,170 – 1991/0705/sys/src/9/power/trap.c:164,177 | ||
| 1990/0227 | exit(); } } | |
| 1991/0705 | if(user) { if(u->p->procctl) procctl(u->p); if(u->nnote) notify(ur); } | |
| 1990/0227 | splhi(); if(user && u && u->p->fpstate == FPinactive) { | |
| 1991/0314 | restfpregs(&u->fpsave, u->fpsave.fpstatus); | |
| 1991/0625/sys/src/9/power/trap.c:383,388 – 1991/0705/sys/src/9/power/trap.c:390,402 | ||
| 1991/0503 | u->svstatus = ur->status; | |
| 1990/0816 | sp = ur->usp; | |
| 1990/0227 | sp -= sizeof(Ureg); | |
| 1991/0705 | if(waserror()){ pprint("suicide: trap in notify\n"); pexit("Suicide", 0); } validaddr((ulong)u->notify, 1, 0); validaddr(sp-ERRLEN-3*BY2WD, sizeof(Ureg)+ERRLEN-3*BY2WD, 0); poperror(); | |
| 1990/0227 | u->ureg = (void*)sp; | |
| 1991/0318 | memmove((Ureg*)sp, ur, sizeof(Ureg)); | |
| 1990/0227 | sp -= ERRLEN; | |
| 1991/0625/sys/src/9/power/trap.c:442,449 – 1991/0705/sys/src/9/power/trap.c:456,464 | ||
| 1990/0227 | Syscall sysdup, syserrstr, sysexec, sysexits, sysfork, sysforkpgrp; | |
| 1990/11211 | Syscall sysfstat, sysfwstat, sysgetpid, sysmount, sysnoted; | |
| 1990/0227 | Syscall sysnotify, sysopen, syspipe, sysr1, sysread, sysremove, sysseek; | |
| 1991/0606 |
| |
| 1991/0621 |
| |
| 1991/0705 | Syscall syssleep, sysstat, syswait, syswrite, syswstat, sysalarm, syssegbrk; Syscall syssegattach, syssegdetach, syssegfree, syssegflush; | |
| 1990/0227 | Syscall *systab[]={ [SYSR1] sysr1, | |
| 1990/11211 | [ERRSTR] syserrstr, | |
| 1991/0625/sys/src/9/power/trap.c:457,463 – 1991/0705/sys/src/9/power/trap.c:472,478 | ||
| 1990/0227 | [FORK] sysfork, [FORKPGRP] sysforkpgrp, [FSTAT] sysfstat, | |
| 1991/0606 |
| |
| 1991/0705 | [SEGBRK] syssegbrk, | |
| 1990/0227 | [MOUNT] sysmount, [OPEN] sysopen, [READ] sysread, | |
| 1991/0625/sys/src/9/power/trap.c:475,480 – 1991/0705/sys/src/9/power/trap.c:490,499 | ||
| 1990/0227 | [FWSTAT] sysfwstat, [NOTIFY] sysnotify, [NOTED] sysnoted, | |
| 1991/0705 | [SEGATTACH] syssegattach, [SEGDETACH] syssegdetach, [SEGFREE] syssegfree, [SEGFLUSH] syssegflush, | |
| 1990/0227 | }; long | |
| 1991/0625/sys/src/9/power/trap.c:502,507 – 1991/0705/sys/src/9/power/trap.c:521,530 | ||
| 1990/0227 | ur->status &= ~CU1; } spllo(); | |
| 1991/0705 | if(u->p->procctl) procctl(u->p); | |
| 1990/0227 | r1 = ur->r1; sp = ur->sp; u->nerrlab = 0; | |
| 1991/0625/sys/src/9/power/trap.c:527,532 – 1991/0705/sys/src/9/power/trap.c:550,559 | ||
| 1990/0511 | } | |
| 1990/0227 | ur->pc += 4; u->nerrlab = 0; | |
| 1991/0705 | if(u->p->procctl) procctl(u->p); | |
| 1990/0227 | splhi(); | |
| 1990/03091 | u->p->insyscall = 0; | |
| 1990/0227 | if(r1 == NOTED) /* ugly hack */ | |
| 1991/0625/sys/src/9/power/trap.c:535,540 – 1991/0705/sys/src/9/power/trap.c:562,568 | ||
| 1990/0227 | ur->r1 = ret; notify(ur); } | |
| 1991/0705 | ||
| 1990/0227 | return ret; } | |