| plan 9 kernel history: overview | file list | diff list |
1992/06271/pc/trap.c (diff list | history)
| 1992/0625/sys/src/9/pc/trap.c:305,311 – 1992/06271/sys/src/9/pc/trap.c:305,310 (short | long | prev | next) | ||
| 1991/0710 | long syscall(Ureg *ur) { | |
| 1991/0720 |
| |
| 1992/0625/sys/src/9/pc/trap.c:318,330 – 1992/06271/sys/src/9/pc/trap.c:317,329 | ||
| 1991/0720 | /* * do something about floating point!!! */ | |
| 1992/06271 | u->scallnr = ur->ax; | |
| 1991/0720 | sp = ur->usp; u->nerrlab = 0; ret = -1; if(!waserror()){ | |
| 1992/06271 | if(u->scallnr >= sizeof systab/BY2WD){ pprint("bad sys call number %d pc %lux\n", u->scallnr, ur->pc); | |
| 1991/0720 | postnote(u->p, 1, "sys: bad sys call", NDebug); error(Ebadarg); } | |
| 1992/0625/sys/src/9/pc/trap.c:333,345 – 1992/06271/sys/src/9/pc/trap.c:332,344 | ||
| 1991/0720 | validaddr(sp, (1+MAXSYSARG)*BY2WD, 0); | |
| 1992/0625 | u->s = *((Sargs*)(sp+1*BY2WD)); | |
| 1991/0926 |
| |
| 1992/06271 | u->p->psstate = sysctab[u->scallnr]; | |
| 1992/0625 |
| |
| 1992/06271 | ret = (*systab[u->scallnr])(u->s.args); | |
| 1991/0720 | poperror(); } if(u->nerrlab){ | |
| 1992/06271 | print("bad errstack [%d]: %d extra\n", u->scallnr, u->nerrlab); | |
| 1991/0720 | for(i = 0; i < NERR; i++) print("sp=%lux pc=%lux\n", u->errlab[i].sp, u->errlab[i].pc); panic("error stack"); | |
| 1992/0625/sys/src/9/pc/trap.c:356,366 – 1992/06271/sys/src/9/pc/trap.c:355,365 | ||
| 1992/0609 | */ | |
| 1991/0801 | ur->ax = ret; | |
| 1992/0609 | ||
| 1991/1114 |
| |
| 1992/06271 | if(u->scallnr == NOTED) | |
| 1991/0720 | noted(ur, *(ulong*)(sp+BY2WD)); | |
| 1991/1114 | ||
| 1992/0103 | splhi(); /* avoid interrupts during the iret */ | |
| 1992/0430 |
| |
| 1992/06271 | if(u->scallnr!=RFORK && (u->p->procctl || u->nnote)) | |
| 1991/0720 | notify(ur); return ret; | |
| 1991/0710 | } | |