* rs6000-tdep.c: Delete unused function print_frame.
[deliverable/binutils-gdb.git] / gdb / stack.c
1 /* Print and select stack frames for GDB, the GNU debugger.
2 Copyright 1986, 1987, 1989, 1991, 1992, 1993 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20 #include "defs.h"
21 #include "value.h"
22 #include "symtab.h"
23 #include "gdbtypes.h"
24 #include "expression.h"
25 #include "language.h"
26 #include "frame.h"
27 #include "gdbcmd.h"
28 #include "gdbcore.h"
29 #include "target.h"
30 #include "breakpoint.h"
31 #include "demangle.h"
32 #include "inferior.h"
33
34 static void
35 return_command PARAMS ((char *, int));
36
37 static void
38 down_command PARAMS ((char *, int));
39
40 static void
41 down_silently_command PARAMS ((char *, int));
42
43 static void
44 up_command PARAMS ((char *, int));
45
46 static void
47 up_silently_command PARAMS ((char *, int));
48
49 static void
50 frame_command PARAMS ((char *, int));
51
52 static void
53 select_frame_command PARAMS ((char *, int));
54
55 static void
56 args_info PARAMS ((char *, int));
57
58 static void
59 print_frame_arg_vars PARAMS ((FRAME, FILE *));
60
61 static void
62 catch_info PARAMS ((char *, int));
63
64 static void
65 locals_info PARAMS ((char *, int));
66
67 static void
68 print_frame_label_vars PARAMS ((FRAME, int, FILE *));
69
70 static void
71 print_frame_local_vars PARAMS ((FRAME, FILE *));
72
73 static int
74 print_block_frame_labels PARAMS ((struct block *, int *, FILE *));
75
76 static int
77 print_block_frame_locals PARAMS ((struct block *, FRAME, FILE *));
78
79 static void
80 backtrace_command PARAMS ((char *, int));
81
82 static FRAME
83 parse_frame_specification PARAMS ((char *));
84
85 static void
86 frame_info PARAMS ((char *, int));
87
88
89 extern int addressprint; /* Print addresses, or stay symbolic only? */
90 extern int info_verbose; /* Verbosity of symbol reading msgs */
91 extern int lines_to_list; /* # of lines "list" command shows by default */
92
93 /* The "selected" stack frame is used by default for local and arg access.
94 May be zero, for no selected frame. */
95
96 FRAME selected_frame;
97
98 /* Level of the selected frame:
99 0 for innermost, 1 for its caller, ...
100 or -1 for frame specified by address with no defined level. */
101
102 int selected_frame_level;
103
104 /* Nonzero means print the full filename and linenumber
105 when a frame is printed, and do so in a format programs can parse. */
106
107 int frame_file_full_name = 0;
108
109 \f
110 /* Print a stack frame briefly. FRAME should be the frame id
111 and LEVEL should be its level in the stack (or -1 for level not defined).
112 This prints the level, the function executing, the arguments,
113 and the file name and line number.
114 If the pc is not at the beginning of the source line,
115 the actual pc is printed at the beginning.
116
117 If SOURCE is 1, print the source line as well.
118 If SOURCE is -1, print ONLY the source line. */
119
120 void
121 print_stack_frame (frame, level, source)
122 FRAME frame;
123 int level;
124 int source;
125 {
126 struct frame_info *fi;
127
128 fi = get_frame_info (frame);
129
130 print_frame_info (fi, level, source, 1);
131 }
132
133 void
134 print_frame_info (fi, level, source, args)
135 struct frame_info *fi;
136 register int level;
137 int source;
138 int args;
139 {
140 struct symtab_and_line sal;
141 struct symbol *func;
142 register char *funname = 0;
143 enum language funlang = language_unknown;
144 int numargs;
145
146 if (PC_IN_CALL_DUMMY (fi->pc, read_register (SP_REGNUM), fi->frame))
147 {
148 /* Do this regardless of SOURCE because we don't have any source
149 to list for this frame. */
150 if (level >= 0)
151 printf_filtered ("#%-2d ", level);
152 printf_filtered ("<function called from gdb>\n");
153 return;
154 }
155 if (fi->signal_handler_caller)
156 {
157 /* Do this regardless of SOURCE because we don't have any source
158 to list for this frame. */
159 if (level >= 0)
160 printf_filtered ("#%-2d ", level);
161 printf_filtered ("<signal handler called>\n");
162 return;
163 }
164
165 sal = find_pc_line (fi->pc, fi->next_frame);
166 func = find_pc_function (fi->pc);
167 if (func)
168 {
169 /* In certain pathological cases, the symtabs give the wrong
170 function (when we are in the first function in a file which
171 is compiled without debugging symbols, the previous function
172 is compiled with debugging symbols, and the "foo.o" symbol
173 that is supposed to tell us where the file with debugging symbols
174 ends has been truncated by ar because it is longer than 15
175 characters).
176
177 So look in the minimal symbol tables as well, and if it comes
178 up with a larger address for the function use that instead.
179 I don't think this can ever cause any problems; there shouldn't
180 be any minimal symbols in the middle of a function.
181 FIXME: (Not necessarily true. What about text labels) */
182
183 struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
184 if (msymbol != NULL
185 && (SYMBOL_VALUE_ADDRESS (msymbol)
186 > BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
187 {
188 /* In this case we have no way of knowing the source file
189 and line number, so don't print them. */
190 sal.symtab = 0;
191 /* We also don't know anything about the function besides
192 its address and name. */
193 func = 0;
194 funname = SYMBOL_NAME (msymbol);
195 funlang = SYMBOL_LANGUAGE (msymbol);
196 }
197 else
198 {
199 funname = SYMBOL_NAME (func);
200 funlang = SYMBOL_LANGUAGE (func);
201 }
202 }
203 else
204 {
205 register struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
206 if (msymbol != NULL)
207 {
208 funname = SYMBOL_NAME (msymbol);
209 funlang = SYMBOL_LANGUAGE (msymbol);
210 }
211 }
212
213 if (source >= 0 || !sal.symtab)
214 {
215 if (level >= 0)
216 printf_filtered ("#%-2d ", level);
217 if (addressprint)
218 if (fi->pc != sal.pc || !sal.symtab)
219 printf_filtered ("%s in ", local_hex_string(fi->pc));
220 fprintf_symbol_filtered (stdout, funname ? funname : "??", funlang,
221 DMGL_NO_OPTS);
222 wrap_here (" ");
223 fputs_filtered (" (", stdout);
224 if (args)
225 {
226 FRAME_NUM_ARGS (numargs, fi);
227 print_frame_args (func, fi, numargs, stdout);
228 }
229 printf_filtered (")");
230 if (sal.symtab && sal.symtab->filename)
231 {
232 wrap_here (" ");
233 printf_filtered (" at %s:%d", sal.symtab->filename, sal.line);
234 }
235
236 #ifdef PC_LOAD_SEGMENT
237 /* If we couldn't print out function name but if can figure out what
238 load segment this pc value is from, at least print out some info
239 about its load segment. */
240 if (!funname) {
241 wrap_here (" ");
242 printf_filtered (" from %s", PC_LOAD_SEGMENT (fi->pc));
243 }
244 #endif
245 printf_filtered ("\n");
246 }
247
248 if ((source != 0) && sal.symtab)
249 {
250 int done = 0;
251 int mid_statement = source < 0 && fi->pc != sal.pc;
252 if (frame_file_full_name)
253 done = identify_source_line (sal.symtab, sal.line, mid_statement);
254 if (!done)
255 {
256 if (addressprint && mid_statement)
257 printf_filtered ("%s\t", local_hex_string(fi->pc));
258 print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
259 }
260 current_source_line = max (sal.line - lines_to_list/2, 1);
261 }
262 if (source != 0)
263 set_default_breakpoint (1, fi->pc, sal.symtab, sal.line);
264
265 fflush (stdout);
266 }
267
268 /*
269 * Read a frame specification in whatever the appropriate format is.
270 * Call error() if the specification is in any way invalid (i.e.
271 * this function never returns NULL).
272 */
273 static FRAME
274 parse_frame_specification (frame_exp)
275 char *frame_exp;
276 {
277 int numargs = 0;
278 int arg1, arg2, arg3;
279 #define MAXARGS 4
280 int args[MAXARGS];
281
282 if (frame_exp)
283 {
284 char *addr_string, *p;
285 struct cleanup *tmp_cleanup;
286
287 while (*frame_exp == ' ') frame_exp++;
288
289 while (*frame_exp)
290 {
291 if (numargs > MAXARGS)
292 error ("Too many args in frame specification");
293 /* Parse an argument. */
294 for (p = frame_exp; *p && *p != ' '; p++)
295 ;
296 addr_string = savestring(frame_exp, p - frame_exp);
297
298 {
299 tmp_cleanup = make_cleanup (free, addr_string);
300 args[numargs++] = parse_and_eval_address (addr_string);
301 do_cleanups (tmp_cleanup);
302 }
303
304 /* Skip spaces, move to possible next arg. */
305 while (*p == ' ') p++;
306 frame_exp = p;
307 }
308 }
309
310 switch (numargs)
311 {
312 case 0:
313 if (selected_frame == NULL)
314 error ("No selected frame.");
315 return selected_frame;
316 /* NOTREACHED */
317 case 1:
318 {
319 int level = args[0];
320 FRAME fid = find_relative_frame (get_current_frame (), &level);
321 FRAME tfid;
322
323 if (level == 0)
324 /* find_relative_frame was successful */
325 return fid;
326
327 /* If (s)he specifies the frame with an address, he deserves what
328 (s)he gets. Still, give the highest one that matches. */
329
330 for (fid = get_current_frame ();
331 fid && FRAME_FP (fid) != args[0];
332 fid = get_prev_frame (fid))
333 ;
334
335 if (fid)
336 while ((tfid = get_prev_frame (fid)) &&
337 (FRAME_FP (tfid) == args[0]))
338 fid = tfid;
339
340 /* We couldn't identify the frame as an existing frame, but
341 perhaps we can create one with a single argument.
342 Fall through to default case; it's up to SETUP_ARBITRARY_FRAME
343 to complain if it doesn't like a single arg. */
344 }
345
346 default:
347 #ifdef SETUP_ARBITRARY_FRAME
348 return SETUP_ARBITRARY_FRAME (numargs, args);
349 #else
350 /* Usual case. Do it here rather than have everyone supply
351 a SETUP_ARBITRARY_FRAME that does this. */
352 if (numargs == 1)
353 return create_new_frame (args[0], 0);
354 error ("Too many args in frame specification");
355 #endif
356 /* NOTREACHED */
357 }
358 /* NOTREACHED */
359 }
360
361 /* FRAME_ARGS_ADDRESS_CORRECT is just like FRAME_ARGS_ADDRESS except
362 that if it is unsure about the answer, it returns 0
363 instead of guessing (this happens on the VAX and i960, for example).
364
365 On most machines, we never have to guess about the args address,
366 so FRAME_ARGS_ADDRESS{,_CORRECT} are the same. */
367 #if !defined (FRAME_ARGS_ADDRESS_CORRECT)
368 #define FRAME_ARGS_ADDRESS_CORRECT FRAME_ARGS_ADDRESS
369 #endif
370
371 /* Print verbosely the selected frame or the frame at address ADDR.
372 This means absolutely all information in the frame is printed. */
373
374 static void
375 frame_info (addr_exp, from_tty)
376 char *addr_exp;
377 int from_tty;
378 {
379 FRAME frame;
380 struct frame_info *fi;
381 struct frame_saved_regs fsr;
382 struct symtab_and_line sal;
383 struct symbol *func;
384 struct symtab *s;
385 FRAME calling_frame;
386 int i, count;
387 char *funname = 0;
388 enum language funlang = language_unknown;
389
390 if (!target_has_stack)
391 error ("No inferior or core file.");
392
393 frame = parse_frame_specification (addr_exp);
394 if (!frame)
395 error ("Invalid frame specified.");
396
397 fi = get_frame_info (frame);
398 sal = find_pc_line (fi->pc, fi->next_frame);
399 func = get_frame_function (frame);
400 s = find_pc_symtab(fi->pc);
401 if (func)
402 {
403 funname = SYMBOL_NAME (func);
404 funlang = SYMBOL_LANGUAGE (func);
405 }
406 else
407 {
408 register struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
409 if (msymbol != NULL)
410 {
411 funname = SYMBOL_NAME (msymbol);
412 funlang = SYMBOL_LANGUAGE (msymbol);
413 }
414 }
415 calling_frame = get_prev_frame (frame);
416
417 if (!addr_exp && selected_frame_level >= 0) {
418 printf_filtered ("Stack level %d, frame at %s:\n",
419 selected_frame_level,
420 local_hex_string(FRAME_FP(frame)));
421 } else {
422 printf_filtered ("Stack frame at %s:\n",
423 local_hex_string(FRAME_FP(frame)));
424 }
425 printf_filtered (" %s = %s",
426 reg_names[PC_REGNUM],
427 local_hex_string(fi->pc));
428
429 wrap_here (" ");
430 if (funname)
431 {
432 printf_filtered (" in ");
433 fprintf_symbol_filtered (stdout, funname, funlang,
434 DMGL_ANSI | DMGL_PARAMS);
435 }
436 wrap_here (" ");
437 if (sal.symtab)
438 printf_filtered (" (%s:%d)", sal.symtab->filename, sal.line);
439 puts_filtered ("; ");
440 wrap_here (" ");
441 printf_filtered ("saved %s %s\n", reg_names[PC_REGNUM],
442 local_hex_string(FRAME_SAVED_PC (frame)));
443
444 {
445 int frameless = 0;
446 #ifdef FRAMELESS_FUNCTION_INVOCATION
447 FRAMELESS_FUNCTION_INVOCATION (fi, frameless);
448 #endif
449 if (frameless)
450 printf_filtered (" (FRAMELESS),");
451 }
452
453 if (calling_frame)
454 printf_filtered (" called by frame at %s",
455 local_hex_string(FRAME_FP (calling_frame)));
456 if (fi->next_frame && calling_frame)
457 puts_filtered (",");
458 wrap_here (" ");
459 if (fi->next_frame)
460 printf_filtered (" caller of frame at %s", local_hex_string(fi->next_frame));
461 if (fi->next_frame || calling_frame)
462 puts_filtered ("\n");
463 if (s)
464 printf_filtered(" source language %s.\n", language_str(s->language));
465
466 #ifdef PRINT_EXTRA_FRAME_INFO
467 PRINT_EXTRA_FRAME_INFO (fi);
468 #endif
469
470 {
471 /* Address of the argument list for this frame, or 0. */
472 CORE_ADDR arg_list = FRAME_ARGS_ADDRESS_CORRECT (fi);
473 /* Number of args for this frame, or -1 if unknown. */
474 int numargs;
475
476 if (arg_list == 0)
477 printf_filtered (" Arglist at unknown address.\n");
478 else
479 {
480 printf_filtered (" Arglist at %s,", local_hex_string(arg_list));
481
482 FRAME_NUM_ARGS (numargs, fi);
483 if (numargs < 0)
484 puts_filtered (" args: ");
485 else if (numargs == 0)
486 puts_filtered (" no args.");
487 else if (numargs == 1)
488 puts_filtered (" 1 arg: ");
489 else
490 printf_filtered (" %d args: ", numargs);
491 print_frame_args (func, fi, numargs, stdout);
492 puts_filtered ("\n");
493 }
494 }
495 {
496 /* Address of the local variables for this frame, or 0. */
497 CORE_ADDR arg_list = FRAME_LOCALS_ADDRESS (fi);
498
499 if (arg_list == 0)
500 printf_filtered (" Locals at unknown address,");
501 else
502 printf_filtered (" Locals at %s,", local_hex_string(arg_list));
503 }
504
505 #if defined (FRAME_FIND_SAVED_REGS)
506 get_frame_saved_regs (fi, &fsr);
507 /* The sp is special; what's returned isn't the save address, but
508 actually the value of the previous frame's sp. */
509 printf_filtered (" Previous frame's sp is %s\n",
510 local_hex_string(fsr.regs[SP_REGNUM]));
511 count = 0;
512 for (i = 0; i < NUM_REGS; i++)
513 if (fsr.regs[i] && i != SP_REGNUM)
514 {
515 if (count == 0)
516 puts_filtered (" Saved registers:\n ");
517 else
518 puts_filtered (",");
519 wrap_here (" ");
520 printf_filtered (" %s at %s", reg_names[i],
521 local_hex_string(fsr.regs[i]));
522 count++;
523 }
524 if (count)
525 puts_filtered ("\n");
526 #endif /* Have FRAME_FIND_SAVED_REGS. */
527 }
528
529 #if 0
530 /* Set a limit on the number of frames printed by default in a
531 backtrace. */
532
533 static int backtrace_limit;
534
535 static void
536 set_backtrace_limit_command (count_exp, from_tty)
537 char *count_exp;
538 int from_tty;
539 {
540 int count = parse_and_eval_address (count_exp);
541
542 if (count < 0)
543 error ("Negative argument not meaningful as backtrace limit.");
544
545 backtrace_limit = count;
546 }
547
548 static void
549 backtrace_limit_info (arg, from_tty)
550 char *arg;
551 int from_tty;
552 {
553 if (arg)
554 error ("\"Info backtrace-limit\" takes no arguments.");
555
556 printf ("Backtrace limit: %d.\n", backtrace_limit);
557 }
558 #endif
559
560 /* Print briefly all stack frames or just the innermost COUNT frames. */
561
562 static void
563 backtrace_command (count_exp, from_tty)
564 char *count_exp;
565 int from_tty;
566 {
567 struct frame_info *fi;
568 register int count;
569 register FRAME frame;
570 register int i;
571 register FRAME trailing;
572 register int trailing_level;
573
574 if (!target_has_stack)
575 error ("No stack.");
576
577 /* The following code must do two things. First, it must
578 set the variable TRAILING to the frame from which we should start
579 printing. Second, it must set the variable count to the number
580 of frames which we should print, or -1 if all of them. */
581 trailing = get_current_frame ();
582 trailing_level = 0;
583 if (count_exp)
584 {
585 count = parse_and_eval_address (count_exp);
586 if (count < 0)
587 {
588 FRAME current;
589
590 count = -count;
591
592 current = trailing;
593 while (current && count--)
594 {
595 QUIT;
596 current = get_prev_frame (current);
597 }
598
599 /* Will stop when CURRENT reaches the top of the stack. TRAILING
600 will be COUNT below it. */
601 while (current)
602 {
603 QUIT;
604 trailing = get_prev_frame (trailing);
605 current = get_prev_frame (current);
606 trailing_level++;
607 }
608
609 count = -1;
610 }
611 }
612 else
613 count = -1;
614
615 if (info_verbose)
616 {
617 struct partial_symtab *ps;
618
619 /* Read in symbols for all of the frames. Need to do this in
620 a separate pass so that "Reading in symbols for xxx" messages
621 don't screw up the appearance of the backtrace. Also
622 if people have strong opinions against reading symbols for
623 backtrace this may have to be an option. */
624 i = count;
625 for (frame = trailing;
626 frame != NULL && i--;
627 frame = get_prev_frame (frame))
628 {
629 QUIT;
630 fi = get_frame_info (frame);
631 ps = find_pc_psymtab (fi->pc);
632 if (ps)
633 PSYMTAB_TO_SYMTAB (ps); /* Force syms to come in */
634 }
635 }
636
637 for (i = 0, frame = trailing;
638 frame && count--;
639 i++, frame = get_prev_frame (frame))
640 {
641 QUIT;
642 fi = get_frame_info (frame);
643 print_frame_info (fi, trailing_level + i, 0, 1);
644 }
645
646 /* If we've stopped before the end, mention that. */
647 if (frame && from_tty)
648 printf_filtered ("(More stack frames follow...)\n");
649 }
650 \f
651 /* Print the local variables of a block B active in FRAME.
652 Return 1 if any variables were printed; 0 otherwise. */
653
654 static int
655 print_block_frame_locals (b, frame, stream)
656 struct block *b;
657 register FRAME frame;
658 register FILE *stream;
659 {
660 int nsyms;
661 register int i;
662 register struct symbol *sym;
663 register int values_printed = 0;
664
665 nsyms = BLOCK_NSYMS (b);
666
667 for (i = 0; i < nsyms; i++)
668 {
669 sym = BLOCK_SYM (b, i);
670 if (SYMBOL_CLASS (sym) == LOC_LOCAL
671 || SYMBOL_CLASS (sym) == LOC_REGISTER
672 || SYMBOL_CLASS (sym) == LOC_STATIC)
673 {
674 values_printed = 1;
675 fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
676 fputs_filtered (" = ", stream);
677 print_variable_value (sym, frame, stream);
678 fprintf_filtered (stream, "\n");
679 }
680 }
681 return values_printed;
682 }
683
684 /* Same, but print labels. */
685
686 static int
687 print_block_frame_labels (b, have_default, stream)
688 struct block *b;
689 int *have_default;
690 register FILE *stream;
691 {
692 int nsyms;
693 register int i;
694 register struct symbol *sym;
695 register int values_printed = 0;
696
697 nsyms = BLOCK_NSYMS (b);
698
699 for (i = 0; i < nsyms; i++)
700 {
701 sym = BLOCK_SYM (b, i);
702 if (STREQ (SYMBOL_NAME (sym), "default"))
703 {
704 if (*have_default)
705 continue;
706 *have_default = 1;
707 }
708 if (SYMBOL_CLASS (sym) == LOC_LABEL)
709 {
710 struct symtab_and_line sal;
711 sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
712 values_printed = 1;
713 fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
714 if (addressprint)
715 fprintf_filtered (stream, " %s",
716 local_hex_string(SYMBOL_VALUE_ADDRESS (sym)));
717 fprintf_filtered (stream, " in file %s, line %d\n",
718 sal.symtab->filename, sal.line);
719 }
720 }
721 return values_printed;
722 }
723
724 /* Print on STREAM all the local variables in frame FRAME,
725 including all the blocks active in that frame
726 at its current pc.
727
728 Returns 1 if the job was done,
729 or 0 if nothing was printed because we have no info
730 on the function running in FRAME. */
731
732 static void
733 print_frame_local_vars (frame, stream)
734 register FRAME frame;
735 register FILE *stream;
736 {
737 register struct block *block = get_frame_block (frame);
738 register int values_printed = 0;
739
740 if (block == 0)
741 {
742 fprintf_filtered (stream, "No symbol table info available.\n");
743 return;
744 }
745
746 while (block != 0)
747 {
748 if (print_block_frame_locals (block, frame, stream))
749 values_printed = 1;
750 /* After handling the function's top-level block, stop.
751 Don't continue to its superblock, the block of
752 per-file symbols. */
753 if (BLOCK_FUNCTION (block))
754 break;
755 block = BLOCK_SUPERBLOCK (block);
756 }
757
758 if (!values_printed)
759 {
760 fprintf_filtered (stream, "No locals.\n");
761 }
762 }
763
764 /* Same, but print labels. */
765
766 static void
767 print_frame_label_vars (frame, this_level_only, stream)
768 register FRAME frame;
769 int this_level_only;
770 register FILE *stream;
771 {
772 register struct blockvector *bl;
773 register struct block *block = get_frame_block (frame);
774 register int values_printed = 0;
775 int index, have_default = 0;
776 char *blocks_printed;
777 struct frame_info *fi = get_frame_info (frame);
778 CORE_ADDR pc = fi->pc;
779
780 if (block == 0)
781 {
782 fprintf_filtered (stream, "No symbol table info available.\n");
783 return;
784 }
785
786 bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
787 blocks_printed = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
788 memset (blocks_printed, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
789
790 while (block != 0)
791 {
792 CORE_ADDR end = BLOCK_END (block) - 4;
793 int last_index;
794
795 if (bl != blockvector_for_pc (end, &index))
796 error ("blockvector blotch");
797 if (BLOCKVECTOR_BLOCK (bl, index) != block)
798 error ("blockvector botch");
799 last_index = BLOCKVECTOR_NBLOCKS (bl);
800 index += 1;
801
802 /* Don't print out blocks that have gone by. */
803 while (index < last_index
804 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
805 index++;
806
807 while (index < last_index
808 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
809 {
810 if (blocks_printed[index] == 0)
811 {
812 if (print_block_frame_labels (BLOCKVECTOR_BLOCK (bl, index), &have_default, stream))
813 values_printed = 1;
814 blocks_printed[index] = 1;
815 }
816 index++;
817 }
818 if (have_default)
819 return;
820 if (values_printed && this_level_only)
821 return;
822
823 /* After handling the function's top-level block, stop.
824 Don't continue to its superblock, the block of
825 per-file symbols. */
826 if (BLOCK_FUNCTION (block))
827 break;
828 block = BLOCK_SUPERBLOCK (block);
829 }
830
831 if (!values_printed && !this_level_only)
832 {
833 fprintf_filtered (stream, "No catches.\n");
834 }
835 }
836
837 /* ARGSUSED */
838 static void
839 locals_info (args, from_tty)
840 char *args;
841 int from_tty;
842 {
843 if (!selected_frame)
844 error ("No frame selected.");
845 print_frame_local_vars (selected_frame, stdout);
846 }
847
848 static void
849 catch_info (ignore, from_tty)
850 char *ignore;
851 int from_tty;
852 {
853 if (!selected_frame)
854 error ("No frame selected.");
855 print_frame_label_vars (selected_frame, 0, stdout);
856 }
857
858 static void
859 print_frame_arg_vars (frame, stream)
860 register FRAME frame;
861 register FILE *stream;
862 {
863 struct symbol *func = get_frame_function (frame);
864 register struct block *b;
865 int nsyms;
866 register int i;
867 register struct symbol *sym, *sym2;
868 register int values_printed = 0;
869
870 if (func == 0)
871 {
872 fprintf_filtered (stream, "No symbol table info available.\n");
873 return;
874 }
875
876 b = SYMBOL_BLOCK_VALUE (func);
877 nsyms = BLOCK_NSYMS (b);
878
879 for (i = 0; i < nsyms; i++)
880 {
881 sym = BLOCK_SYM (b, i);
882 if (SYMBOL_CLASS (sym) == LOC_ARG
883 || SYMBOL_CLASS (sym) == LOC_LOCAL_ARG
884 || SYMBOL_CLASS (sym) == LOC_REF_ARG
885 || SYMBOL_CLASS (sym) == LOC_REGPARM)
886 {
887 values_printed = 1;
888 fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
889 fputs_filtered (" = ", stream);
890 /* We have to look up the symbol because arguments often have
891 two entries (one a parameter, one a register) and the one
892 we want is the register, which lookup_symbol will find for
893 us. */
894 sym2 = lookup_symbol (SYMBOL_NAME (sym),
895 b, VAR_NAMESPACE, (int *)NULL, (struct symtab **)NULL);
896 print_variable_value (sym2, frame, stream);
897 fprintf_filtered (stream, "\n");
898 }
899 }
900
901 if (!values_printed)
902 {
903 fprintf_filtered (stream, "No arguments.\n");
904 }
905 }
906
907 static void
908 args_info (ignore, from_tty)
909 char *ignore;
910 int from_tty;
911 {
912 if (!selected_frame)
913 error ("No frame selected.");
914 print_frame_arg_vars (selected_frame, stdout);
915 }
916 \f
917 /* Select frame FRAME, and note that its stack level is LEVEL.
918 LEVEL may be -1 if an actual level number is not known. */
919
920 void
921 select_frame (frame, level)
922 FRAME frame;
923 int level;
924 {
925 register struct symtab *s;
926
927 selected_frame = frame;
928 selected_frame_level = level;
929
930 /* Ensure that symbols for this frame are read in. Also, determine the
931 source language of this frame, and switch to it if desired. */
932 if (frame)
933 {
934 s = find_pc_symtab (get_frame_info (frame)->pc);
935 if (s
936 && s->language != current_language->la_language
937 && s->language != language_unknown
938 && language_mode == language_mode_auto) {
939 set_language(s->language);
940 }
941 }
942 }
943
944 /* Store the selected frame and its level into *FRAMEP and *LEVELP.
945 If there is no selected frame, *FRAMEP is set to NULL. */
946
947 void
948 record_selected_frame (frameaddrp, levelp)
949 FRAME_ADDR *frameaddrp;
950 int *levelp;
951 {
952 *frameaddrp = selected_frame ? FRAME_FP (selected_frame) : 0;
953 *levelp = selected_frame_level;
954 }
955
956 /* Return the symbol-block in which the selected frame is executing.
957 Can return zero under various legitimate circumstances. */
958
959 struct block *
960 get_selected_block ()
961 {
962 if (!target_has_stack)
963 return 0;
964
965 if (!selected_frame)
966 return get_current_block ();
967 return get_frame_block (selected_frame);
968 }
969
970 /* Find a frame a certain number of levels away from FRAME.
971 LEVEL_OFFSET_PTR points to an int containing the number of levels.
972 Positive means go to earlier frames (up); negative, the reverse.
973 The int that contains the number of levels is counted toward
974 zero as the frames for those levels are found.
975 If the top or bottom frame is reached, that frame is returned,
976 but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
977 how much farther the original request asked to go. */
978
979 FRAME
980 find_relative_frame (frame, level_offset_ptr)
981 register FRAME frame;
982 register int* level_offset_ptr;
983 {
984 register FRAME prev;
985 register FRAME frame1;
986
987 /* Going up is simple: just do get_prev_frame enough times
988 or until initial frame is reached. */
989 while (*level_offset_ptr > 0)
990 {
991 prev = get_prev_frame (frame);
992 if (prev == 0)
993 break;
994 (*level_offset_ptr)--;
995 frame = prev;
996 }
997 /* Going down is just as simple. */
998 if (*level_offset_ptr < 0)
999 {
1000 while (*level_offset_ptr < 0) {
1001 frame1 = get_next_frame (frame);
1002 if (!frame1)
1003 break;
1004 frame = frame1;
1005 (*level_offset_ptr)++;
1006 }
1007 }
1008 return frame;
1009 }
1010
1011 /* The "select_frame" command. With no arg, NOP.
1012 With arg LEVEL_EXP, select the frame at level LEVEL if it is a
1013 valid level. Otherwise, treat level_exp as an address expression
1014 and select it. See parse_frame_specification for more info on proper
1015 frame expressions. */
1016
1017 /* ARGSUSED */
1018 static void
1019 select_frame_command (level_exp, from_tty)
1020 char *level_exp;
1021 int from_tty;
1022 {
1023 register FRAME frame, frame1;
1024 unsigned int level = 0;
1025
1026 if (!target_has_stack)
1027 error ("No stack.");
1028
1029 frame = parse_frame_specification (level_exp);
1030
1031 /* Try to figure out what level this frame is. But if there is
1032 no current stack, don't error out -- let the user set one. */
1033 frame1 = 0;
1034 if (get_current_frame()) {
1035 for (frame1 = get_prev_frame (0);
1036 frame1 && frame1 != frame;
1037 frame1 = get_prev_frame (frame1))
1038 level++;
1039 }
1040
1041 if (!frame1)
1042 level = 0;
1043
1044 select_frame (frame, level);
1045 }
1046
1047 /* The "frame" command. With no arg, print selected frame briefly.
1048 With arg, behaves like select_frame and then prints the selected
1049 frame. */
1050
1051 static void
1052 frame_command (level_exp, from_tty)
1053 char *level_exp;
1054 int from_tty;
1055 {
1056 select_frame_command (level_exp, from_tty);
1057 print_stack_frame (selected_frame, selected_frame_level, 1);
1058 }
1059
1060 /* Select the frame up one or COUNT stack levels
1061 from the previously selected frame, and print it briefly. */
1062
1063 /* ARGSUSED */
1064 static void
1065 up_silently_command (count_exp, from_tty)
1066 char *count_exp;
1067 int from_tty;
1068 {
1069 register FRAME frame;
1070 int count = 1, count1;
1071 if (count_exp)
1072 count = parse_and_eval_address (count_exp);
1073 count1 = count;
1074
1075 if (target_has_stack == 0 || selected_frame == 0)
1076 error ("No stack.");
1077
1078 frame = find_relative_frame (selected_frame, &count1);
1079 if (count1 != 0 && count_exp == 0)
1080 error ("Initial frame selected; you cannot go up.");
1081 select_frame (frame, selected_frame_level + count - count1);
1082 }
1083
1084 static void
1085 up_command (count_exp, from_tty)
1086 char *count_exp;
1087 int from_tty;
1088 {
1089 up_silently_command (count_exp, from_tty);
1090 print_stack_frame (selected_frame, selected_frame_level, 1);
1091 }
1092
1093 /* Select the frame down one or COUNT stack levels
1094 from the previously selected frame, and print it briefly. */
1095
1096 /* ARGSUSED */
1097 static void
1098 down_silently_command (count_exp, from_tty)
1099 char *count_exp;
1100 int from_tty;
1101 {
1102 register FRAME frame;
1103 int count = -1, count1;
1104 if (count_exp)
1105 count = - parse_and_eval_address (count_exp);
1106 count1 = count;
1107
1108 if (target_has_stack == 0 || selected_frame == 0)
1109 error ("No stack.");
1110
1111 frame = find_relative_frame (selected_frame, &count1);
1112 if (count1 != 0 && count_exp == 0)
1113 error ("Bottom (i.e., innermost) frame selected; you cannot go down.");
1114 select_frame (frame, selected_frame_level + count - count1);
1115 }
1116
1117
1118 static void
1119 down_command (count_exp, from_tty)
1120 char *count_exp;
1121 int from_tty;
1122 {
1123 down_silently_command (count_exp, from_tty);
1124 print_stack_frame (selected_frame, selected_frame_level, 1);
1125 }
1126 \f
1127 static void
1128 return_command (retval_exp, from_tty)
1129 char *retval_exp;
1130 int from_tty;
1131 {
1132 struct symbol *thisfun;
1133 FRAME_ADDR selected_frame_addr;
1134 CORE_ADDR selected_frame_pc;
1135 FRAME frame;
1136 value return_value;
1137
1138 if (selected_frame == NULL)
1139 error ("No selected frame.");
1140 thisfun = get_frame_function (selected_frame);
1141 selected_frame_addr = FRAME_FP (selected_frame);
1142 selected_frame_pc = (get_frame_info (selected_frame))->pc;
1143
1144 /* Compute the return value (if any -- possibly getting errors here).
1145 Call VALUE_CONTENTS to make sure we have fully evaluated it, since
1146 it might live in the stack frame we're about to pop. */
1147
1148 if (retval_exp)
1149 {
1150 return_value = parse_and_eval (retval_exp);
1151 VALUE_CONTENTS (return_value);
1152 }
1153
1154 /* If interactive, require confirmation. */
1155
1156 if (from_tty)
1157 {
1158 if (thisfun != 0)
1159 {
1160 if (!query ("Make %s return now? ", SYMBOL_SOURCE_NAME (thisfun)))
1161 {
1162 error ("Not confirmed.");
1163 /* NOTREACHED */
1164 }
1165 }
1166 else
1167 if (!query ("Make selected stack frame return now? "))
1168 error ("Not confirmed.");
1169 }
1170
1171 /* Do the real work. Pop until the specified frame is current. We
1172 use this method because the selected_frame is not valid after
1173 a POP_FRAME. The pc comparison makes this work even if the
1174 selected frame shares its fp with another frame. */
1175
1176 while ( selected_frame_addr != FRAME_FP (frame = get_current_frame())
1177 || selected_frame_pc != (get_frame_info (frame))->pc )
1178 POP_FRAME;
1179
1180 /* Then pop that frame. */
1181
1182 POP_FRAME;
1183
1184 /* Compute the return value (if any) and store in the place
1185 for return values. */
1186
1187 if (retval_exp)
1188 set_return_value (return_value);
1189
1190 /* If interactive, print the frame that is now current. */
1191
1192 if (from_tty)
1193 frame_command ("0", 1);
1194 }
1195
1196 /* Gets the language of the current frame. */
1197 enum language
1198 get_frame_language()
1199 {
1200 register struct symtab *s;
1201 FRAME fr;
1202 enum language flang; /* The language of the current frame */
1203
1204 fr = get_frame_info(selected_frame);
1205 if(fr)
1206 {
1207 s = find_pc_symtab(fr->pc);
1208 if(s)
1209 flang = s->language;
1210 else
1211 flang = language_unknown;
1212 }
1213 else
1214 flang = language_unknown;
1215
1216 return flang;
1217 }
1218 \f
1219 void
1220 _initialize_stack ()
1221 {
1222 #if 0
1223 backtrace_limit = 30;
1224 #endif
1225
1226 add_com ("return", class_stack, return_command,
1227 "Make selected stack frame return to its caller.\n\
1228 Control remains in the debugger, but when you continue\n\
1229 execution will resume in the frame above the one now selected.\n\
1230 If an argument is given, it is an expression for the value to return.");
1231
1232 add_com ("up", class_stack, up_command,
1233 "Select and print stack frame that called this one.\n\
1234 An argument says how many frames up to go.");
1235 add_com ("up-silently", class_support, up_silently_command,
1236 "Same as the `up' command, but does not print anything.\n\
1237 This is useful in command scripts.");
1238
1239 add_com ("down", class_stack, down_command,
1240 "Select and print stack frame called by this one.\n\
1241 An argument says how many frames down to go.");
1242 add_com_alias ("do", "down", class_stack, 1);
1243 add_com_alias ("dow", "down", class_stack, 1);
1244 add_com ("down-silently", class_support, down_silently_command,
1245 "Same as the `down' command, but does not print anything.\n\
1246 This is useful in command scripts.");
1247
1248 add_com ("frame", class_stack, frame_command,
1249 "Select and print a stack frame.\n\
1250 With no argument, print the selected stack frame. (See also \"info frame\").\n\
1251 An argument specifies the frame to select.\n\
1252 It can be a stack frame number or the address of the frame.\n\
1253 With argument, nothing is printed if input is coming from\n\
1254 a command file or a user-defined command.");
1255
1256 add_com_alias ("f", "frame", class_stack, 1);
1257
1258 add_com ("select-frame", class_stack, select_frame_command,
1259 "Select a stack frame without printing anything.\n\
1260 An argument specifies the frame to select.\n\
1261 It can be a stack frame number or the address of the frame.\n");
1262
1263 add_com ("backtrace", class_stack, backtrace_command,
1264 "Print backtrace of all stack frames, or innermost COUNT frames.\n\
1265 With a negative argument, print outermost -COUNT frames.");
1266 add_com_alias ("bt", "backtrace", class_stack, 0);
1267 add_com_alias ("where", "backtrace", class_alias, 0);
1268 add_info ("stack", backtrace_command,
1269 "Backtrace of the stack, or innermost COUNT frames.");
1270 add_info_alias ("s", "stack", 1);
1271 add_info ("frame", frame_info,
1272 "All about selected stack frame, or frame at ADDR.");
1273 add_info_alias ("f", "frame", 1);
1274 add_info ("locals", locals_info,
1275 "Local variables of current stack frame.");
1276 add_info ("args", args_info,
1277 "Argument variables of current stack frame.");
1278 add_info ("catch", catch_info,
1279 "Exceptions that can be caught in the current stack frame.");
1280
1281 #if 0
1282 add_cmd ("backtrace-limit", class_stack, set_backtrace_limit_command,
1283 "Specify maximum number of frames for \"backtrace\" to print by default.",
1284 &setlist);
1285 add_info ("backtrace-limit", backtrace_limit_info,
1286 "The maximum number of frames for \"backtrace\" to print by default.");
1287 #endif
1288 }
This page took 0.057845 seconds and 5 git commands to generate.