122275Sdist /* 222275Sdist * Copyright (c) 1980 Regents of the University of California. 322275Sdist * All rights reserved. The Berkeley software License Agreement 422275Sdist * specifies the terms and conditions for redistribution. 522275Sdist */ 65463Slinton 722275Sdist #ifndef lint 8*30843Smckusick static char sccsid[] = "@(#)bp.c 5.2 (Berkeley) 04/07/87"; 922275Sdist #endif not lint 105463Slinton 115463Slinton /* 125463Slinton * Direct management of bpinfo structures. 135463Slinton */ 145463Slinton 155463Slinton #include "defs.h" 165463Slinton #include "breakpoint.h" 175463Slinton #include "tree.h" 185463Slinton #include "sym.h" 195463Slinton #include "main.h" 205463Slinton #include "source.h" 215463Slinton #include "object.h" 225463Slinton #include "bp.rep" 235463Slinton 245463Slinton unsigned int uniqueid; 255463Slinton 265463Slinton /* 275463Slinton * Add a breakpoint to the list, return a pointer to it. 285463Slinton */ 295463Slinton 305463Slinton BPINFO *newbp(addr, type, block, cond, node, line) 315463Slinton ADDRESS addr; 325463Slinton BPTYPE type; 335463Slinton SYM *block; 345463Slinton NODE *cond; 355463Slinton NODE *node; 365463Slinton LINENO line; 375463Slinton { 385463Slinton register BPINFO *p; 395463Slinton 405463Slinton p = alloc(1, BPINFO); 415463Slinton p->bpid = ++uniqueid; 425463Slinton p->bpaddr = addr; 435463Slinton p->bptype = type; 445463Slinton p->bpblock = block; 455463Slinton p->bpcond = cond; 465463Slinton p->bpnode = node; 475463Slinton p->bpline = line; 485463Slinton p->bpnext = bphead; 495463Slinton if (option('b')) { 505463Slinton printf("new bp (%d) at %d, type %d\n", p->bpid, p->bpaddr, p->bptype); 515463Slinton fflush(stdout); 525463Slinton } 535463Slinton bphead = p; 545463Slinton return(p); 555463Slinton } 565463Slinton 575463Slinton /* 585463Slinton * Add a breakpoint, but don't return anything. 595463Slinton * Just for folks outside of "breakpoint" who don't know that 605463Slinton * a BPINFO exists. 615463Slinton */ 625463Slinton 635463Slinton addbp(addr, type, block, cond, node, line) 645463Slinton ADDRESS addr; 655463Slinton BPTYPE type; 665463Slinton SYM *block; 675463Slinton NODE *cond; 685463Slinton NODE *node; 695463Slinton LINENO line; 705463Slinton { 715463Slinton 72*30843Smckusick (void) newbp(addr, type, block, cond, node, line); 735463Slinton } 745463Slinton 755463Slinton /* 765463Slinton * Delete a breakpoint. 775463Slinton * 785463Slinton * Print out a cryptic error message if it can't be found. 795463Slinton */ 805463Slinton 815463Slinton delbp(id) 825463Slinton unsigned int id; 835463Slinton { 845463Slinton register BPINFO *p, *last; 855463Slinton 865463Slinton last = NIL; 875463Slinton for (p = bphead; p != NIL; p = p->bpnext) { 885463Slinton if (p->bpid == id) { 895463Slinton break; 905463Slinton } 915463Slinton last = p; 925463Slinton } 935463Slinton if (p == NIL) { 945463Slinton error("%d unknown", id); 955463Slinton } 965463Slinton switch (p->bptype) { 975463Slinton case ALL_ON: 985463Slinton if (p->bpline >= 0) { 995463Slinton tracing--; 1005463Slinton } else { 1015463Slinton inst_tracing--; 1025463Slinton } 1035463Slinton break; 1045463Slinton 1055463Slinton case STOP_ON: 1065463Slinton var_tracing--; 1075463Slinton break; 1085463Slinton 1095463Slinton default: 1105463Slinton /* do nothing */ 1115463Slinton break; 1125463Slinton } 1135463Slinton if (last == NIL) { 1145463Slinton bphead = p->bpnext; 1155463Slinton } else { 1165463Slinton last->bpnext = p->bpnext; 1175463Slinton } 1185463Slinton tfree(p->bpcond); 1195463Slinton tfree(p->bpnode); 1205463Slinton dispose(p); 1215463Slinton } 1225463Slinton 1235463Slinton /* 1245463Slinton * Free all storage in the breakpoint table. 1255463Slinton */ 1265463Slinton 1275463Slinton bpfree() 1285463Slinton { 1295463Slinton register BPINFO *p, *next; 1305463Slinton 1315463Slinton fixbps(); 1325463Slinton for (p = bphead; p != NIL; p = next) { 1335463Slinton next = p->bpnext; 1345463Slinton tfree(p->bpcond); 1355463Slinton tfree(p->bpnode); 1365463Slinton dispose(p); 1375463Slinton } 1385463Slinton bphead = NIL; 1395463Slinton } 140