1*5465Slinton /* Copyright (c) 1982 Regents of the University of California */
2*5465Slinton 
3*5465Slinton static char sccsid[] = "@(#)fixbps.c 1.1 01/18/82";
4*5465Slinton 
5*5465Slinton /*
6*5465Slinton  * fix up breakpoint information before continuing execution
7*5465Slinton  *
8*5465Slinton  * It's necessary to destroy breakpoints that were created temporarily
9*5465Slinton  * and still exist because the program terminated abnormally.
10*5465Slinton  */
11*5465Slinton 
12*5465Slinton #include "defs.h"
13*5465Slinton #include "breakpoint.h"
14*5465Slinton #include "bp.rep"
15*5465Slinton 
16*5465Slinton fixbps()
17*5465Slinton {
18*5465Slinton 	register BPINFO *p, *last, *next;
19*5465Slinton 
20*5465Slinton 	last = NIL;
21*5465Slinton 	p = bphead;
22*5465Slinton 	while (p != NIL) {
23*5465Slinton 		next = p->bpnext;
24*5465Slinton 		switch(p->bptype) {
25*5465Slinton 			case ALL_OFF:
26*5465Slinton 				if (p->bpline >= 0) {
27*5465Slinton 					--tracing;
28*5465Slinton 				} else {
29*5465Slinton 					--inst_tracing;
30*5465Slinton 				}
31*5465Slinton 				if (p->bpcond != NIL) {
32*5465Slinton 					delcond(TRPRINT, p->bpcond);
33*5465Slinton 				}
34*5465Slinton 				goto delete;
35*5465Slinton 
36*5465Slinton 			case STOP_OFF:
37*5465Slinton 				var_tracing--;
38*5465Slinton 				delcond(TRSTOP, p->bpcond);
39*5465Slinton 				goto delete;
40*5465Slinton 
41*5465Slinton 			case TERM_OFF:
42*5465Slinton 				--var_tracing;
43*5465Slinton 				delvar(TRPRINT, p->bpnode, p->bpcond);
44*5465Slinton 				goto delete;
45*5465Slinton 
46*5465Slinton 			case CALL:
47*5465Slinton 			case RETURN:
48*5465Slinton 			case BLOCK_OFF:
49*5465Slinton 			case CALLPROC:
50*5465Slinton 			case END_BP:
51*5465Slinton 
52*5465Slinton 			delete:
53*5465Slinton 				if (last == NIL) {
54*5465Slinton 					bphead = next;
55*5465Slinton 				} else {
56*5465Slinton 					last->bpnext = next;
57*5465Slinton 				}
58*5465Slinton 				dispose(p);
59*5465Slinton 				break;
60*5465Slinton 
61*5465Slinton 			default:
62*5465Slinton 				last = p;
63*5465Slinton 				break;
64*5465Slinton 		}
65*5465Slinton 		p = next;
66*5465Slinton 	}
67*5465Slinton 	tracing = 0;
68*5465Slinton 	var_tracing = 0;
69*5465Slinton 	inst_tracing = 0;
70*5465Slinton 	trfree();
71*5465Slinton 	condfree();
72*5465Slinton }
73