Check for NULL selected_frame in various places.
[deliverable/binutils-gdb.git] / gdb / stack.c
CommitLineData
bd5635a1
RP
1/* Print and select stack frames for GDB, the GNU debugger.
2 Copyright (C) 1986, 1987, 1989 Free Software Foundation, Inc.
3
4This file is part of GDB.
5
6GDB is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 1, or (at your option)
9any later version.
10
11GDB is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GDB; see the file COPYING. If not, write to
18the 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
32extern int addressprint; /* Print addresses, or stay symbolic only? */
33extern int info_verbose; /* Verbosity of symbol reading msgs */
34extern 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
39FRAME 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
45int 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
50int frame_file_full_name = 0;
51
52void 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
64static void
65print_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
77void
78print_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
200void
201print_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
210void
211print_selected_frame ()
212{
213 print_stack_frame (selected_frame, selected_frame_level, 0);
214}
215
216void flush_cached_frames ();
217
218#ifdef FRAME_SPECIFICATION_DYADIC
219extern FRAME setup_arbitrary_frame ();
220#endif
221
222/*
223 * Read a frame specification in whatever the appropriate format is.
777bef06
JK
224 * Call error() if the specification is in any way invalid (i.e.
225 * this function never returns NULL).
bd5635a1
RP
226 */
227static FRAME
228parse_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:
777bef06
JK
267 if (selected_frame == NULL)
268 error ("No selected frame.");
bd5635a1
RP
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
330static void
331frame_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
443static int backtrace_limit;
444
445static void
446set_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
458static void
459backtrace_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
472static void
473backtrace_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
777bef06
JK
484 if (!target_has_stack)
485 error ("No stack.");
486
bd5635a1
RP
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
564static int
565print_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
598static int
599print_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
645static int
646print_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
683static int
684print_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
759static void
760locals_info (args, from_tty)
761 char *args;
762 int from_tty;
763{
764 if (!target_has_stack)
765 error ("No stack.");
766
767 print_frame_local_vars (selected_frame, stdout);
768}
769
770static void
771catch_info ()
772{
773 if (!target_has_stack)
774 error ("No stack.");
775
776 print_frame_label_vars (selected_frame, 0, stdout);
777}
778
779static int
780print_frame_arg_vars (frame, stream)
781 register FRAME frame;
782 register FILE *stream;
783{
784 struct symbol *func = get_frame_function (frame);
785 register struct block *b;
786 int nsyms;
787 register int i;
788 register struct symbol *sym, *sym2;
789 register int values_printed = 0;
790
791 if (func == 0)
792 {
793 fprintf_filtered (stream, "No symbol table info available.\n");
794 fflush (stream);
795 return 0;
796 }
797
798 b = SYMBOL_BLOCK_VALUE (func);
799 nsyms = BLOCK_NSYMS (b);
800
801 for (i = 0; i < nsyms; i++)
802 {
803 sym = BLOCK_SYM (b, i);
804 if (SYMBOL_CLASS (sym) == LOC_ARG
805 || SYMBOL_CLASS (sym) == LOC_LOCAL_ARG
806 || SYMBOL_CLASS (sym) == LOC_REF_ARG
807 || SYMBOL_CLASS (sym) == LOC_REGPARM)
808 {
809 values_printed = 1;
810 fprint_symbol (stream, SYMBOL_NAME (sym));
811 fputs_filtered (" = ", stream);
812 /* We have to look up the symbol because arguments often have
813 two entries (one a parameter, one a register) and the one
814 we want is the register, which lookup_symbol will find for
815 us. */
816 sym2 = lookup_symbol (SYMBOL_NAME (sym),
817 b, VAR_NAMESPACE, (int *)NULL, (struct symtab **)NULL);
818 print_variable_value (sym2, frame, stream);
819 fprintf_filtered (stream, "\n");
820 fflush (stream);
821 }
822 }
823
824 if (!values_printed)
825 {
826 fprintf_filtered (stream, "No arguments.\n");
827 fflush (stream);
828 }
829
830 return 1;
831}
832
833static void
834args_info ()
835{
836 if (!target_has_stack)
837 error ("No stack.");
838 print_frame_arg_vars (selected_frame, stdout);
839}
840\f
841/* Select frame FRAME, and note that its stack level is LEVEL.
842 LEVEL may be -1 if an actual level number is not known. */
843
844void
845select_frame (frame, level)
846 FRAME frame;
847 int level;
848{
849 selected_frame = frame;
850 selected_frame_level = level;
851 /* Ensure that symbols for this frame are readin. */
852 if (frame)
853 find_pc_symtab (get_frame_info (frame)->pc);
854}
855
777bef06
JK
856/* Store the selected frame and its level into *FRAMEP and *LEVELP.
857 If there is no selected frame, *FRAMEP is set to NULL. */
bd5635a1
RP
858
859void
860record_selected_frame (frameaddrp, levelp)
861 FRAME_ADDR *frameaddrp;
862 int *levelp;
863{
777bef06 864 *frameaddrp = selected_frame ? FRAME_FP (selected_frame) : NULL;
bd5635a1
RP
865 *levelp = selected_frame_level;
866}
867
868/* Return the symbol-block in which the selected frame is executing.
869 Can return zero under various legitimate circumstances. */
870
871struct block *
872get_selected_block ()
873{
874 if (!target_has_stack)
875 return 0;
876
877 if (!selected_frame)
878 return get_current_block ();
879 return get_frame_block (selected_frame);
880}
881
882/* Find a frame a certain number of levels away from FRAME.
883 LEVEL_OFFSET_PTR points to an int containing the number of levels.
884 Positive means go to earlier frames (up); negative, the reverse.
885 The int that contains the number of levels is counted toward
886 zero as the frames for those levels are found.
887 If the top or bottom frame is reached, that frame is returned,
888 but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
889 how much farther the original request asked to go. */
890
891FRAME
892find_relative_frame (frame, level_offset_ptr)
893 register FRAME frame;
894 register int* level_offset_ptr;
895{
896 register FRAME prev;
897 register FRAME frame1, frame2;
898
899 /* Going up is simple: just do get_prev_frame enough times
900 or until initial frame is reached. */
901 while (*level_offset_ptr > 0)
902 {
903 prev = get_prev_frame (frame);
904 if (prev == 0)
905 break;
906 (*level_offset_ptr)--;
907 frame = prev;
908 }
909 /* Going down could be done by iterating get_frame_info to
910 find the next frame, but that would be quadratic
911 since get_frame_info must scan all the way from the current frame.
912 The following algorithm is linear. */
913 if (*level_offset_ptr < 0)
914 {
915 /* First put frame1 at innermost frame
916 and frame2 N levels up from there. */
917 frame1 = get_current_frame ();
918 frame2 = frame1;
919 while (*level_offset_ptr < 0 && frame2 != frame)
920 {
921 frame2 = get_prev_frame (frame2);
922 (*level_offset_ptr) ++;
923 }
924 /* Then slide frame1 and frame2 up in synchrony
925 and when frame2 reaches our starting point
926 frame1 must be N levels down from there. */
927 while (frame2 != frame)
928 {
929 frame1 = get_prev_frame (frame1);
930 frame2 = get_prev_frame (frame2);
931 }
932 return frame1;
933 }
934 return frame;
935}
936
937/* The "frame" command. With no arg, print selected frame briefly.
938 With arg LEVEL_EXP, select the frame at level LEVEL if it is a
939 valid level. Otherwise, treat level_exp as an address expression
940 and print it. See parse_frame_specification for more info on proper
941 frame expressions. */
942
943static void
944frame_command (level_exp, from_tty)
945 char *level_exp;
946 int from_tty;
947{
948 register FRAME frame, frame1;
949 unsigned int level = 0;
950
951 if (!target_has_stack)
952 error ("No stack.");
953
954 frame = parse_frame_specification (level_exp);
955
956 for (frame1 = get_prev_frame (0);
957 frame1 && frame1 != frame;
958 frame1 = get_prev_frame (frame1))
959 level++;
960
961 if (!frame1)
962 level = 0;
963
964 select_frame (frame, level);
965
966 if (!from_tty)
967 return;
968
969 print_stack_frame (selected_frame, selected_frame_level, 1);
970}
971
972/* Select the frame up one or COUNT stack levels
973 from the previously selected frame, and print it briefly. */
974
975static void
976up_silently_command (count_exp, from_tty)
977 char *count_exp;
978 int from_tty;
979{
980 register FRAME frame;
981 int count = 1, count1;
982 if (count_exp)
983 count = parse_and_eval_address (count_exp);
984 count1 = count;
985
986 if (!target_has_stack)
987 error ("No stack.");
988
989 frame = find_relative_frame (selected_frame, &count1);
990 if (count1 != 0 && count_exp == 0)
991 error ("Initial frame selected; you cannot go up.");
992 select_frame (frame, selected_frame_level + count - count1);
993}
994
995static void
996up_command (count_exp, from_tty)
997 char *count_exp;
998 int from_tty;
999{
1000 up_silently_command (count_exp, from_tty);
1001 print_stack_frame (selected_frame, selected_frame_level, 1);
1002}
1003
1004/* Select the frame down one or COUNT stack levels
1005 from the previously selected frame, and print it briefly. */
1006
1007static void
1008down_silently_command (count_exp, from_tty)
1009 char *count_exp;
1010 int from_tty;
1011{
1012 register FRAME frame;
1013 int count = -1, count1;
1014 if (count_exp)
1015 count = - parse_and_eval_address (count_exp);
1016 count1 = count;
1017
1018 frame = find_relative_frame (selected_frame, &count1);
1019 if (count1 != 0 && count_exp == 0)
1020 error ("Bottom (i.e., innermost) frame selected; you cannot go down.");
1021 select_frame (frame, selected_frame_level + count - count1);
1022}
1023
1024
1025static void
1026down_command (count_exp, from_tty)
1027 char *count_exp;
1028 int from_tty;
1029{
1030 down_silently_command (count_exp, from_tty);
1031 print_stack_frame (selected_frame, selected_frame_level, 1);
1032}
1033\f
1034static void
1035return_command (retval_exp, from_tty)
1036 char *retval_exp;
1037 int from_tty;
1038{
777bef06
JK
1039 struct symbol *thisfun;
1040 FRAME_ADDR selected_frame_addr;
1041 CORE_ADDR selected_frame_pc;
bd5635a1
RP
1042 FRAME frame;
1043
777bef06
JK
1044 if (selected_frame == NULL)
1045 error ("No selected frame.");
1046 thisfun = get_frame_function (selected_frame);
1047 selected_frame_addr = FRAME_FP (selected_frame);
1048 selected_frame_pc = (get_frame_info (selected_frame))->pc;
1049
bd5635a1
RP
1050 /* If interactive, require confirmation. */
1051
1052 if (from_tty)
1053 {
1054 if (thisfun != 0)
1055 {
1056 if (!query ("Make %s return now? ", SYMBOL_NAME (thisfun)))
1057 error ("Not confirmed.");
1058 }
1059 else
1060 if (!query ("Make selected stack frame return now? "))
1061 error ("Not confirmed.");
1062 }
1063
1064 /* Do the real work. Pop until the specified frame is current. We
1065 use this method because the selected_frame is not valid after
1066 a POP_FRAME. The pc comparison makes this work even if the
1067 selected frame shares its fp with another frame. */
1068
1069 while ( selected_frame_addr != FRAME_FP (frame = get_current_frame())
1070 || selected_frame_pc != (get_frame_info (frame))->pc )
1071 POP_FRAME;
1072
1073 /* Then pop that frame. */
1074
1075 POP_FRAME;
1076
1077 /* Compute the return value (if any) and store in the place
1078 for return values. */
1079
1080 if (retval_exp)
1081 set_return_value (parse_and_eval (retval_exp));
1082
1083 /* If interactive, print the frame that is now current. */
1084
1085 if (from_tty)
1086 frame_command ("0", 1);
1087}
1088\f
1089void
1090_initialize_stack ()
1091{
1092#if 0
1093 backtrace_limit = 30;
1094#endif
1095
1096 add_com ("return", class_stack, return_command,
1097 "Make selected stack frame return to its caller.\n\
1098Control remains in the debugger, but when you continue\n\
1099execution will resume in the frame above the one now selected.\n\
1100If an argument is given, it is an expression for the value to return.");
1101
1102 add_com ("up", class_stack, up_command,
1103 "Select and print stack frame that called this one.\n\
1104An argument says how many frames up to go.");
1105 add_com ("up-silently", class_support, up_silently_command,
1106 "Same as the `up' command, but does not print anything.\n\
1107This is useful in command scripts.");
1108
1109 add_com ("down", class_stack, down_command,
1110 "Select and print stack frame called by this one.\n\
1111An argument says how many frames down to go.");
1112 add_com_alias ("do", "down", class_stack, 1);
1113 add_com ("down-silently", class_support, down_silently_command,
1114 "Same as the `down' command, but does not print anything.\n\
1115This is useful in command scripts.");
1116
1117 add_com ("frame", class_stack, frame_command,
1118 "Select and print a stack frame.\n\
1119With no argument, print the selected stack frame. (See also \"info frame\").\n\
1120An argument specifies the frame to select.\n\
1121It can be a stack frame number or the address of the frame.\n\
1122With argument, nothing is printed if input is coming from\n\
1123a command file or a user-defined command.");
1124
1125 add_com_alias ("f", "frame", class_stack, 1);
1126
1127 add_com ("backtrace", class_stack, backtrace_command,
1128 "Print backtrace of all stack frames, or innermost COUNT frames.\n\
1129With a negative argument, print outermost -COUNT frames.");
1130 add_com_alias ("bt", "backtrace", class_stack, 0);
1131 add_com_alias ("where", "backtrace", class_alias, 0);
1132 add_info ("stack", backtrace_command,
1133 "Backtrace of the stack, or innermost COUNT frames.");
1134 add_info_alias ("s", "stack", 1);
1135 add_info ("frame", frame_info,
1136 "All about selected stack frame, or frame at ADDR.");
1137 add_info_alias ("f", "frame", 1);
1138 add_info ("locals", locals_info,
1139 "Local variables of current stack frame.");
1140 add_info ("args", args_info,
1141 "Argument variables of current stack frame.");
1142 add_info ("catch", catch_info,
1143 "Exceptions that can be caught in the current stack frame.");
1144
1145#if 0
1146 add_cmd ("backtrace-limit", class_stack, set_backtrace_limit_command,
1147 "Specify maximum number of frames for \"backtrace\" to print by default.",
1148 &setlist);
1149 add_info ("backtrace-limit", backtrace_limit_info,
1150 "The maximum number of frames for \"backtrace\" to print by default.");
1151#endif
1152}
1153
This page took 0.065788 seconds and 4 git commands to generate.