| plan 9 kernel history: overview | file list | diff list |
1991/0711/ss/trap.c (diff list | history)
| 1991/0710/sys/src/9/ss/trap.c:174,187 – 1991/0711/sys/src/9/ss/trap.c:174,195 (short | long | prev | next) | ||
| 1990/1223 | dumpstack(void) { ulong l, v; | |
| 1991/0711 | int i; | |
| 1990/1223 | extern ulong etext; | |
| 1991/0711 | print("no dumpstack\n"); return; | |
| 1990/1223 |
| |
| 1991/0711 | if(u){ i = 0; | |
| 1990/1223 | for(l=(ulong)&l; l<USERADDR+BY2PG; l+=4){ v = *(ulong*)l; if(KTZERO < v && v < (ulong)&etext) | |
| 1991/0711 | print("%lux=%lux ", l, v); ++i; if((i&7) == 0) print("\n"); | |
| 1990/1223 | } | |
| 1991/0711 | } | |
| 1990/1223 | } void | |
| 1991/0710/sys/src/9/ss/trap.c:316,326 – 1991/0711/sys/src/9/ss/trap.c:324,336 | ||
| 1990/1223 | Ureg *ur; char *msg; | |
| 1990/1226 |
| |
| 1991/0711 | if(ur->psr & PSRPSUPER){ dumpregs(ur); | |
| 1990/1223 | panic("recursive system call"); | |
| 1991/0711 | } u->p->insyscall = 1; u->p->pc = ur->pc; | |
| 1991/01151 | ||
| 1990/1223 | /* * since the system call interface does not | |
| 1991/0710/sys/src/9/ss/trap.c:330,337 – 1991/0711/sys/src/9/ss/trap.c:340,348 | ||
| 1990/1223 | u->p->fpstate = FPinit; | |
| 1991/01151 | ur->psr &= ~PSREF; | |
| 1990/1223 | } | |
| 1991/01151 | ||
| 1991/0711 | print("syscall %d\n", ur->r7); | |
| 1990/1223 | spllo(); | |
| 1991/0711 | print("got low in syscall\n"); | |
| 1990/1226 | r7 = ur->r7; | |
| 1990/1223 | sp = ur->usp; | |
| 1991/0710/sys/src/9/ss/trap.c:349,354 – 1991/0711/sys/src/9/ss/trap.c:360,369 | ||
| 1990/1223 | pprint("odd sp in sys call pc %lux sp %lux\n", ((Ureg*)UREGADDR)->pc, ((Ureg*)UREGADDR)->sp); msg = "sys: odd stack"; goto Bad; | |
| 1991/0711 | } if(((ulong*)ur->pc)[-2] != 0x82206004){ /* new calling convention: look for ADD $-4, SP */ pprint("new system call linkage\n"); sp -= BY2WD; | |
| 1990/1223 | } | |
| 1991/0614 | if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-(2+MAXSYSARG)*BY2WD)) validaddr(sp, ((2+MAXSYSARG)*BY2WD), 0); | |