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