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