15519Slinton /* Copyright (c) 1982 Regents of the University of California */ 25519Slinton 3*5763Slinton static char sccsid[] = "@(#)wheredump.c 1.2 02/11/82"; 45519Slinton 55519Slinton /* 65519Slinton * Print a list of currently active blocks starting with most recent. 75519Slinton */ 85519Slinton 95519Slinton #include "defs.h" 105519Slinton #include "runtime.h" 115519Slinton #include "frame.rep" 125519Slinton #include "sym.h" 135519Slinton #include "machine.h" 145519Slinton #include "object.h" 155519Slinton #include "mappings.h" 165519Slinton 175519Slinton where() 185519Slinton { 19*5763Slinton FRAME *frp; 20*5763Slinton ADDRESS prevpc; 21*5763Slinton LINENO line; 22*5763Slinton SYM *f; 235519Slinton 24*5763Slinton if (pc == 0) { 25*5763Slinton error("program is not active"); 26*5763Slinton } 27*5763Slinton prevpc = pc; 28*5763Slinton for (frp = curframe(); frp != NIL; frp = nextframe(frp)) { 29*5763Slinton f = whatblock(entry(frp)); 305519Slinton line = srcline(prevpc); 31*5763Slinton printf("%s", name(f)); 32*5763Slinton printparams(f, frp); 33*5763Slinton printf(", "); 34*5763Slinton printwhere(line, srcfilename(prevpc)); 35*5763Slinton printf("\n"); 36*5763Slinton prevpc = frp->save_pc; 37*5763Slinton } 38*5763Slinton line = srcline(prevpc); 39*5763Slinton printf("%s, ", name(program)); 40*5763Slinton printwhere(line, srcfilename(prevpc)); 41*5763Slinton printf("\n"); 425519Slinton } 435519Slinton 445519Slinton /* 455519Slinton * Dump the world to the given file. 465519Slinton * Like "where", but variables are dumped also. 475519Slinton */ 485519Slinton 495519Slinton dump() 505519Slinton { 51*5763Slinton FRAME *frp; 52*5763Slinton ADDRESS prevpc; 53*5763Slinton LINENO line; 54*5763Slinton SYM *f; 555519Slinton 56*5763Slinton if (pc == 0) { 57*5763Slinton error("program is not active"); 58*5763Slinton } 59*5763Slinton prevpc = pc; 60*5763Slinton for (frp = curframe(); frp != NIL; frp = nextframe(frp)) { 61*5763Slinton f = whatblock(entry(frp)); 625519Slinton line = srcline(prevpc); 63*5763Slinton printf("%s", name(f)); 64*5763Slinton printparams(f, frp); 65*5763Slinton printf(", "); 66*5763Slinton printwhere(line, srcfilename(prevpc)); 67*5763Slinton printf("\n"); 68*5763Slinton dumpvars(f, frp); 69*5763Slinton putchar('\n'); 70*5763Slinton prevpc = frp->save_pc; 71*5763Slinton } 72*5763Slinton line = srcline(prevpc); 73*5763Slinton printf("%s, ", name(program)); 74*5763Slinton printwhere(line, srcfilename(prevpc)); 75*5763Slinton printf("\n"); 76*5763Slinton dumpvars(program, NIL); 775519Slinton } 78