| plan 9 kernel history: overview | file list | diff list |
2001/0728/alphapc/trap.c (diff list | history)
| 2001/0727/sys/src/9/alphapc/trap.c:245,251 – 2001/0728/sys/src/9/alphapc/trap.c:245,251 (short | long | prev | next) | ||
| 2000/0401 | } else{ dumpregs(ur); | |
| 2001/0728 | print("unknown intr: %d\n", vno); /* */ | |
| 2000/0401 | } } | |
| 2001/0727/sys/src/9/alphapc/trap.c:375,382 – 2001/0728/sys/src/9/alphapc/trap.c:375,425 | ||
| 1999/0415 | } void | |
| 2001/0728 | dumpregs(Ureg *ur) | |
| 1999/0415 | { | |
| 2001/0728 | int i, col; uvlong *l; if(up) print("registers for %s %ld\n", up->text, up->pid); else print("registers for kernel\n"); l = &ur->type; col = 0; for (i = 0; i < sizeof regname/sizeof(char*); i++, l++) { print("%-7s%.16llux%s", regname[i], *l, col == 2 ? "\n" : " "); if (col++ == 2) col = 0; } print("\n"); } /* * Fill in enough of Ureg to get a stack trace, and call a function. * Used by debugging interface rdb. */ static void getpcsp(ulong *pc, ulong *sp) { *pc = getcallerpc(&pc); *sp = (ulong)&pc-8; } void callwithureg(void (*fn)(Ureg*)) { Ureg ureg; getpcsp((ulong*)&ureg.pc, (ulong*)&ureg.sp); ureg.r26 = getcallerpc(&fn); fn(&ureg); } void _dumpstack(Ureg *ureg) { | |
| 1999/0415 | ulong l, sl, el, v, i, instr, op; extern ulong etext; | |
| 2001/0727/sys/src/9/alphapc/trap.c:392,406 – 2001/0728/sys/src/9/alphapc/trap.c:435,446 | ||
| 1999/0415 | el = sl + KSTACK; } if(l > el || l < sl){ | |
| 2000/0125 |
| |
| 1999/0415 | el = (ulong)m+BY2PG; sl = el-KSTACK; } | |
| 2001/0728 | if(l > el || l < sl) | |
| 1999/0415 | return; | |
| 2001/0728 | print("ktrace /kernel/path %.8lux %.8lux %.8lux\n", (ulong)ureg->pc, (ulong)ureg->sp, (ulong)ureg->r26); | |
| 1999/0415 | i = 0; for(; l<el; l+=8){ | |
| 2001/0727/sys/src/9/alphapc/trap.c:412,459 – 2001/0728/sys/src/9/alphapc/trap.c:452,474 | ||
| 1999/0415 | instr = *(ulong*)v; op = (instr>>26); if(op == 26 || op == 52){ | |
| 2001/0728 | print("%lux=%lux ", l, v); | |
| 1999/0415 | i++; } } | |
| 2001/0728 | if(i == 4){ | |
| 1999/0415 | i = 0; | |
| 2001/0728 | print("\n"); | |
| 1999/0415 | } } | |
| 2001/0728 | if(i) print("\n"); | |
| 1999/0415 | } void | |
| 2000/0108 |
| |
| 2001/0728 | dumpstack(void) | |
| 2000/0108 | { | |
| 1999/0415 |
| |
| 2001/0728 | callwithureg(_dumpstack); | |
| 1999/0415 | } int | |