148103Sbostic /*- 2*62122Sbostic * Copyright (c) 1980, 1993 3*62122Sbostic * The Regents of the University of California. All rights reserved. 448103Sbostic * 548103Sbostic * %sccs.include.redist.c% 622277Sdist */ 75465Slinton 822277Sdist #ifndef lint 9*62122Sbostic static char sccsid[] = "@(#)fixbps.c 8.1 (Berkeley) 06/06/93"; 1048103Sbostic #endif /* not lint */ 1148103Sbostic 125465Slinton /* 135465Slinton * fix up breakpoint information before continuing execution 145465Slinton * 155465Slinton * It's necessary to destroy breakpoints that were created temporarily 165465Slinton * and still exist because the program terminated abnormally. 175465Slinton */ 185465Slinton 195465Slinton #include "defs.h" 205465Slinton #include "breakpoint.h" 215465Slinton #include "bp.rep" 225465Slinton fixbps()235465Slintonfixbps() 245465Slinton { 255465Slinton register BPINFO *p, *last, *next; 265465Slinton 275465Slinton last = NIL; 285465Slinton p = bphead; 295465Slinton while (p != NIL) { 305465Slinton next = p->bpnext; 315465Slinton switch(p->bptype) { 325465Slinton case ALL_OFF: 335465Slinton if (p->bpline >= 0) { 345465Slinton --tracing; 355465Slinton } else { 365465Slinton --inst_tracing; 375465Slinton } 385465Slinton if (p->bpcond != NIL) { 395465Slinton delcond(TRPRINT, p->bpcond); 405465Slinton } 415465Slinton goto delete; 425465Slinton 435465Slinton case STOP_OFF: 445465Slinton var_tracing--; 455465Slinton delcond(TRSTOP, p->bpcond); 465465Slinton goto delete; 475465Slinton 485465Slinton case TERM_OFF: 495465Slinton --var_tracing; 505465Slinton delvar(TRPRINT, p->bpnode, p->bpcond); 515465Slinton goto delete; 525465Slinton 535465Slinton case CALL: 545465Slinton case RETURN: 555465Slinton case BLOCK_OFF: 565465Slinton case CALLPROC: 575465Slinton case END_BP: 585465Slinton 595465Slinton delete: 605465Slinton if (last == NIL) { 615465Slinton bphead = next; 625465Slinton } else { 635465Slinton last->bpnext = next; 645465Slinton } 655465Slinton dispose(p); 665465Slinton break; 675465Slinton 685465Slinton default: 695465Slinton last = p; 705465Slinton break; 715465Slinton } 725465Slinton p = next; 735465Slinton } 745465Slinton tracing = 0; 755465Slinton var_tracing = 0; 765465Slinton inst_tracing = 0; 775465Slinton trfree(); 785465Slinton condfree(); 795465Slinton } 80