1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 */ 6 7 #ifndef lint 8 static char sccsid[] = "@(#)wheredump.c 5.1 (Berkeley) 06/06/85"; 9 #endif not lint 10 11 /* 12 * Print a list of currently active blocks starting with most recent. 13 */ 14 15 #include "defs.h" 16 #include "runtime.h" 17 #include "frame.rep" 18 #include "sym.h" 19 #include "machine.h" 20 #include "object.h" 21 #include "mappings.h" 22 23 where() 24 { 25 FRAME *frp; 26 ADDRESS prevpc; 27 LINENO line; 28 SYM *f; 29 30 if (pc == 0) { 31 error("program is not active"); 32 } 33 prevpc = pc; 34 for (frp = curframe(); frp != NIL; frp = nextframe(frp)) { 35 f = whatblock(entry(frp)); 36 line = srcline(prevpc); 37 printf("%s", name(f)); 38 printparams(f, frp); 39 printf(", "); 40 printwhere(line, srcfilename(prevpc)); 41 printf("\n"); 42 prevpc = frp->save_pc; 43 } 44 line = srcline(prevpc); 45 printf("%s, ", name(program)); 46 printwhere(line, srcfilename(prevpc)); 47 printf("\n"); 48 } 49 50 /* 51 * Dump the world to the given file. 52 * Like "where", but variables are dumped also. 53 */ 54 55 dump() 56 { 57 FRAME *frp; 58 ADDRESS prevpc; 59 LINENO line; 60 SYM *f; 61 62 if (pc == 0) { 63 error("program is not active"); 64 } 65 prevpc = pc; 66 for (frp = curframe(); frp != NIL; frp = nextframe(frp)) { 67 f = whatblock(entry(frp)); 68 line = srcline(prevpc); 69 printf("%s", name(f)); 70 printparams(f, frp); 71 printf(", "); 72 printwhere(line, srcfilename(prevpc)); 73 printf("\n"); 74 dumpvars(f, frp); 75 putchar('\n'); 76 prevpc = frp->save_pc; 77 } 78 line = srcline(prevpc); 79 printf("%s, ", name(program)); 80 printwhere(line, srcfilename(prevpc)); 81 printf("\n"); 82 dumpvars(program, NIL); 83 } 84