148095Sbostic /*-
2*62145Sbostic * Copyright (c) 1980, 1993
3*62145Sbostic * The Regents of the University of California. All rights reserved.
448095Sbostic *
548095Sbostic * %sccs.include.redist.c%
622521Sdist */
75519Slinton
822521Sdist #ifndef lint
9*62145Sbostic static char sccsid[] = "@(#)wheredump.c 8.1 (Berkeley) 06/06/93";
1048095Sbostic #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
where()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
dump()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