1*48095Sbostic /*-
2*48095Sbostic  * Copyright (c) 1980 The Regents of the University of California.
3*48095Sbostic  * All rights reserved.
4*48095Sbostic  *
5*48095Sbostic  * %sccs.include.redist.c%
622521Sdist  */
75519Slinton 
822521Sdist #ifndef lint
9*48095Sbostic static char sccsid[] = "@(#)wheredump.c	5.2 (Berkeley) 04/16/91";
10*48095Sbostic #endif /* not lint */
115519Slinton 
125519Slinton /*
135519Slinton  * Print a list of currently active blocks starting with most recent.
145519Slinton  */
155519Slinton 
165519Slinton #include "defs.h"
175519Slinton #include "runtime.h"
185519Slinton #include "frame.rep"
195519Slinton #include "sym.h"
205519Slinton #include "machine.h"
215519Slinton #include "object.h"
225519Slinton #include "mappings.h"
235519Slinton 
245519Slinton where()
255519Slinton {
265763Slinton     FRAME *frp;
275763Slinton     ADDRESS prevpc;
285763Slinton     LINENO line;
295763Slinton     SYM *f;
305519Slinton 
315763Slinton     if (pc == 0) {
325763Slinton 	error("program is not active");
335763Slinton     }
345763Slinton     prevpc = pc;
355763Slinton     for (frp = curframe(); frp != NIL; frp = nextframe(frp)) {
365763Slinton 	f = whatblock(entry(frp));
375519Slinton 	line = srcline(prevpc);
385763Slinton 	printf("%s", name(f));
395763Slinton 	printparams(f, frp);
405763Slinton 	printf(", ");
415763Slinton 	printwhere(line, srcfilename(prevpc));
425763Slinton 	printf("\n");
435763Slinton 	prevpc = frp->save_pc;
445763Slinton     }
455763Slinton     line = srcline(prevpc);
465763Slinton     printf("%s, ", name(program));
475763Slinton     printwhere(line, srcfilename(prevpc));
485763Slinton     printf("\n");
495519Slinton }
505519Slinton 
515519Slinton /*
525519Slinton  * Dump the world to the given file.
535519Slinton  * Like "where", but variables are dumped also.
545519Slinton  */
555519Slinton 
565519Slinton dump()
575519Slinton {
585763Slinton     FRAME *frp;
595763Slinton     ADDRESS prevpc;
605763Slinton     LINENO line;
615763Slinton     SYM *f;
625519Slinton 
635763Slinton     if (pc == 0) {
645763Slinton 	error("program is not active");
655763Slinton     }
665763Slinton     prevpc = pc;
675763Slinton     for (frp = curframe(); frp != NIL; frp = nextframe(frp)) {
685763Slinton 	f = whatblock(entry(frp));
695519Slinton 	line = srcline(prevpc);
705763Slinton 	printf("%s", name(f));
715763Slinton 	printparams(f, frp);
725763Slinton 	printf(", ");
735763Slinton 	printwhere(line, srcfilename(prevpc));
745763Slinton 	printf("\n");
755763Slinton 	dumpvars(f, frp);
765763Slinton 	putchar('\n');
775763Slinton 	prevpc = frp->save_pc;
785763Slinton     }
795763Slinton     line = srcline(prevpc);
805763Slinton     printf("%s, ", name(program));
815763Slinton     printwhere(line, srcfilename(prevpc));
825763Slinton     printf("\n");
835763Slinton     dumpvars(program, NIL);
845519Slinton }
85