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