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