|
|
1.1 ! root 1: /* Copyright (c) 1982 Regents of the University of California */ ! 2: ! 3: static char sccsid[] = "@(#)status.c 1.1 1/18/82"; ! 4: ! 5: /* ! 6: * Print out what's currently being traced by looking at ! 7: * the currently active breakpoints. ! 8: * ! 9: * The list is in LIFO order, we print it FIFO by going recursive. ! 10: */ ! 11: ! 12: #include "defs.h" ! 13: #include "breakpoint.h" ! 14: #include "tree.h" ! 15: #include "sym.h" ! 16: #include "source.h" ! 17: #include "object.h" ! 18: #include "mappings.h" ! 19: #include "bp.rep" ! 20: ! 21: #define printnum(id) if (!isredirected()) printf("(%d) ", id) ! 22: ! 23: status() ! 24: { ! 25: if (bphead == NIL) { ! 26: if (!isredirected()) { ! 27: printf("no trace's or stop's active\n"); ! 28: } ! 29: } else { ! 30: bpstatus(bphead); ! 31: } ! 32: } ! 33: ! 34: LOCAL bpstatus(bp) ! 35: BPINFO *bp; ! 36: { ! 37: register BPINFO *p; ! 38: LINENO n; ! 39: SYM *s; ! 40: NODE *t; ! 41: char *trname, *stname; ! 42: ! 43: p = bp; ! 44: if (p->bpnext != NIL) { ! 45: bpstatus(p->bpnext); ! 46: } ! 47: t = p->bpnode; ! 48: if (p->bpline >= 0) { ! 49: n = linelookup(p->bpaddr); ! 50: trname = "trace"; ! 51: stname = "stop"; ! 52: } else { ! 53: n = p->bpaddr; ! 54: trname = "tracei"; ! 55: stname = "stopi"; ! 56: } ! 57: switch(p->bptype) { ! 58: case INST: ! 59: printnum(p->bpid); ! 60: printf("%s %d", trname, n); ! 61: break; ! 62: ! 63: case ALL_ON: ! 64: printnum(p->bpid); ! 65: printf("%s", trname); ! 66: s = p->bpblock; ! 67: if (s != program) { ! 68: printf(" in "); ! 69: printname(s); ! 70: } ! 71: break; ! 72: ! 73: case STOP_ON: ! 74: printnum(p->bpid); ! 75: printf("%s", stname); ! 76: if (t != NIL) { ! 77: printf(" "); ! 78: prtree(t); ! 79: } ! 80: s = p->bpblock; ! 81: if (s != program) { ! 82: printf(" in "); ! 83: printname(s); ! 84: } ! 85: break; ! 86: ! 87: case BLOCK_ON: ! 88: case TERM_ON: ! 89: s = p->bpblock; ! 90: printnum(p->bpid); ! 91: printf("%s ", trname); ! 92: prtree(t); ! 93: if (s != program) { ! 94: printf(" in "); ! 95: printname(s); ! 96: } ! 97: break; ! 98: ! 99: case AT_BP: ! 100: printnum(p->bpid); ! 101: printf("%s ", trname); ! 102: prtree(t); ! 103: printf(" at %d", p->bpline); ! 104: break; ! 105: ! 106: case STOP_BP: ! 107: printnum(p->bpid); ! 108: printf("%s", stname); ! 109: if (t != NIL) { ! 110: printf(" "); ! 111: prtree(t); ! 112: } else if ((s = p->bpblock) != NIL) { ! 113: printf(" in "); ! 114: printname(s); ! 115: } else if (p->bpline > 0) { ! 116: printf(" at %d", p->bpline); ! 117: } else { ! 118: printf(" at %d", p->bpaddr); ! 119: } ! 120: break; ! 121: ! 122: /* ! 123: * Temporary breakpoints; ! 124: * return rather than break to avoid printing newline. ! 125: */ ! 126: case ALL_OFF: ! 127: case CALL: ! 128: case RETURN: ! 129: case CALLPROC: ! 130: case STOP_OFF: ! 131: case BLOCK_OFF: ! 132: case TERM_OFF: ! 133: case END_BP: ! 134: return; ! 135: ! 136: default: ! 137: panic("bptype %d in bplist", p->bptype); ! 138: } ! 139: if (p->bpcond != NIL) { ! 140: printf(" if "); ! 141: prtree(p->bpcond); ! 142: } ! 143: printf("\n"); ! 144: } ! 145: ! 146: /* ! 147: * Print the name of a symbol unambigously. ! 148: */ ! 149: ! 150: LOCAL printname(s) ! 151: SYM *s; ! 152: { ! 153: if (isambiguous(s)) { ! 154: printwhich(s); ! 155: } else { ! 156: printf("%s", name(s)); ! 157: } ! 158: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.