1*48103Sbostic /*- 2*48103Sbostic * Copyright (c) 1980 The Regents of the University of California. 3*48103Sbostic * All rights reserved. 4*48103Sbostic * 5*48103Sbostic * %sccs.include.redist.c% 622280Sdist */ 75468Slinton 822280Sdist #ifndef lint 9*48103Sbostic static char sccsid[] = "@(#)status.c 5.2 (Berkeley) 04/16/91"; 10*48103Sbostic #endif /* not lint */ 11*48103Sbostic 125468Slinton /* 135468Slinton * Print out what's currently being traced by looking at 145468Slinton * the currently active breakpoints. 155468Slinton * 165468Slinton * The list is in LIFO order, we print it FIFO by going recursive. 175468Slinton */ 185468Slinton 195468Slinton #include "defs.h" 205468Slinton #include "breakpoint.h" 215468Slinton #include "tree.h" 225468Slinton #include "sym.h" 235468Slinton #include "source.h" 245468Slinton #include "object.h" 255468Slinton #include "mappings.h" 265468Slinton #include "bp.rep" 275468Slinton 285468Slinton #define printnum(id) if (!isredirected()) printf("(%d) ", id) 295468Slinton 305468Slinton status() 315468Slinton { 325468Slinton if (bphead == NIL) { 335468Slinton if (!isredirected()) { 345468Slinton printf("no trace's or stop's active\n"); 355468Slinton } 365468Slinton } else { 375468Slinton bpstatus(bphead); 385468Slinton } 395468Slinton } 405468Slinton 415468Slinton LOCAL bpstatus(bp) 425468Slinton BPINFO *bp; 435468Slinton { 445468Slinton register BPINFO *p; 455468Slinton LINENO n; 465468Slinton SYM *s; 475468Slinton NODE *t; 485468Slinton char *trname, *stname; 495468Slinton 505468Slinton p = bp; 515468Slinton if (p->bpnext != NIL) { 525468Slinton bpstatus(p->bpnext); 535468Slinton } 545468Slinton t = p->bpnode; 555468Slinton if (p->bpline >= 0) { 565468Slinton n = linelookup(p->bpaddr); 575468Slinton trname = "trace"; 585468Slinton stname = "stop"; 595468Slinton } else { 605468Slinton n = p->bpaddr; 615468Slinton trname = "tracei"; 625468Slinton stname = "stopi"; 635468Slinton } 645468Slinton switch(p->bptype) { 655468Slinton case INST: 665468Slinton printnum(p->bpid); 675468Slinton printf("%s %d", trname, n); 685468Slinton break; 695468Slinton 705468Slinton case ALL_ON: 715468Slinton printnum(p->bpid); 725468Slinton printf("%s", trname); 735468Slinton s = p->bpblock; 745468Slinton if (s != program) { 755468Slinton printf(" in "); 765468Slinton printname(s); 775468Slinton } 785468Slinton break; 795468Slinton 805468Slinton case STOP_ON: 815468Slinton printnum(p->bpid); 825468Slinton printf("%s", stname); 835468Slinton if (t != NIL) { 845468Slinton printf(" "); 855468Slinton prtree(t); 865468Slinton } 875468Slinton s = p->bpblock; 885468Slinton if (s != program) { 895468Slinton printf(" in "); 905468Slinton printname(s); 915468Slinton } 925468Slinton break; 935468Slinton 945468Slinton case BLOCK_ON: 955468Slinton case TERM_ON: 965468Slinton s = p->bpblock; 975468Slinton printnum(p->bpid); 985468Slinton printf("%s ", trname); 995468Slinton prtree(t); 1005468Slinton if (s != program) { 1015468Slinton printf(" in "); 1025468Slinton printname(s); 1035468Slinton } 1045468Slinton break; 1055468Slinton 1065468Slinton case AT_BP: 1075468Slinton printnum(p->bpid); 1085468Slinton printf("%s ", trname); 1095468Slinton prtree(t); 1105468Slinton printf(" at %d", p->bpline); 1115468Slinton break; 1125468Slinton 1135468Slinton case STOP_BP: 1145468Slinton printnum(p->bpid); 1155468Slinton printf("%s", stname); 1165468Slinton if (t != NIL) { 1175468Slinton printf(" "); 1185468Slinton prtree(t); 1195468Slinton } else if ((s = p->bpblock) != NIL) { 1205468Slinton printf(" in "); 1215468Slinton printname(s); 1225468Slinton } else if (p->bpline > 0) { 1235468Slinton printf(" at %d", p->bpline); 1245468Slinton } else { 1255468Slinton printf(" at %d", p->bpaddr); 1265468Slinton } 1275468Slinton break; 1285468Slinton 1295468Slinton /* 1305468Slinton * Temporary breakpoints; 1315468Slinton * return rather than break to avoid printing newline. 1325468Slinton */ 1335468Slinton case ALL_OFF: 1345468Slinton case CALL: 1355468Slinton case RETURN: 1365468Slinton case CALLPROC: 1375468Slinton case STOP_OFF: 1385468Slinton case BLOCK_OFF: 1395468Slinton case TERM_OFF: 1405468Slinton case END_BP: 1415468Slinton return; 1425468Slinton 1435468Slinton default: 1445468Slinton panic("bptype %d in bplist", p->bptype); 1455468Slinton } 1465468Slinton if (p->bpcond != NIL) { 1475468Slinton printf(" if "); 1485468Slinton prtree(p->bpcond); 1495468Slinton } 1505468Slinton printf("\n"); 1515468Slinton } 1525468Slinton 1535468Slinton /* 1545468Slinton * Print the name of a symbol unambigously. 1555468Slinton */ 1565468Slinton 1575468Slinton LOCAL printname(s) 1585468Slinton SYM *s; 1595468Slinton { 1605468Slinton if (isambiguous(s)) { 1615468Slinton printwhich(s); 1625468Slinton } else { 1635468Slinton printf("%s", name(s)); 1645468Slinton } 1655468Slinton } 166