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