]> Git Repo - binutils.git/blob - gdb/stack.c
* w89k-rom.c op50-rom.c monitor.c config/pa/hppapro.mt: New files
[binutils.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, GDB_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, GDB_FILE *));
69
70 static void
71 print_frame_local_vars PARAMS ((FRAME, GDB_FILE *));
72
73 static int
74 print_block_frame_labels PARAMS ((struct block *, int *, GDB_FILE *));
75
76 static int
77 print_block_frame_locals PARAMS ((struct block *, FRAME, GDB_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 /* Zero means do things normally; we are interacting directly with the
105    user.  One means print the full filename and linenumber when a
106    frame is printed, and do so in a format emacs18/emacs19.22 can
107    parse.  Two means print similar annotations, but in many more
108    cases and in a slightly different syntax.  */
109
110 int annotation_level = 0;
111
112 \f
113 struct print_stack_frame_args {
114   struct frame_info *fi;
115   int level;
116   int source;
117   int args;
118 };
119
120 static int print_stack_frame_stub PARAMS ((char *));
121
122 /* Pass the args the way catch_errors wants them.  */
123 static int
124 print_stack_frame_stub (args)
125      char *args;
126 {
127   struct print_stack_frame_args *p = (struct print_stack_frame_args *)args;
128   print_frame_info (p->fi, p->level, p->source, p->args);
129   return 0;
130 }
131
132 /* Print a stack frame briefly.  FRAME should be the frame id
133    and LEVEL should be its level in the stack (or -1 for level not defined).
134    This prints the level, the function executing, the arguments,
135    and the file name and line number.
136    If the pc is not at the beginning of the source line,
137    the actual pc is printed at the beginning.
138
139    If SOURCE is 1, print the source line as well.
140    If SOURCE is -1, print ONLY the source line.  */
141
142 void
143 print_stack_frame (frame, level, source)
144      FRAME frame;
145      int level;
146      int source;
147 {
148   struct print_stack_frame_args args;
149
150   args.fi = get_frame_info (frame);
151   args.level = level;
152   args.source = source;
153   args.args = 1;
154
155   catch_errors (print_stack_frame_stub, (char *)&args, "", RETURN_MASK_ERROR);
156 }
157
158 struct print_args_args {
159   struct symbol *func;
160   struct frame_info *fi;
161 };
162
163 static int print_args_stub PARAMS ((char *));
164
165 /* Pass the args the way catch_errors wants them.  */
166 static int
167 print_args_stub (args)
168      char *args;
169 {
170   int numargs;
171   struct print_args_args *p = (struct print_args_args *)args;
172   FRAME_NUM_ARGS (numargs, (p->fi));
173   print_frame_args (p->func, p->fi, numargs, gdb_stdout);
174   return 0;
175 }
176
177 void
178 print_frame_info (fi, level, source, args)
179      struct frame_info *fi;
180      register int level;
181      int source;
182      int args;
183 {
184   struct symtab_and_line sal;
185   struct symbol *func;
186   register char *funname = 0;
187   enum language funlang = language_unknown;
188   char buf[MAX_REGISTER_RAW_SIZE];
189   CORE_ADDR sp;
190
191 #if 0
192   /* On the 68k, this spends too much time in m68k_find_saved_regs.  */
193
194   /* Get the value of SP_REGNUM relative to the frame.  */
195   get_saved_register (buf, (int *)NULL, (CORE_ADDR *)NULL,
196                       FRAME_INFO_ID (fi), SP_REGNUM, (enum lval_type *)NULL);
197   sp = extract_address (buf, REGISTER_RAW_SIZE (SP_REGNUM));
198
199   /* This is not a perfect test, because if a function alloca's some
200      memory, puts some code there, and then jumps into it, then the test
201      will succeed even though there is no call dummy.  Probably best is
202      to check for a bp_call_dummy breakpoint.  */
203   if (PC_IN_CALL_DUMMY (fi->pc, sp, fi->frame))
204 #else
205   if (frame_in_dummy (fi))
206 #endif
207     {
208       /* Do this regardless of SOURCE because we don't have any source
209          to list for this frame.  */
210       if (level >= 0)
211         printf_filtered ("#%-2d ", level);
212       printf_filtered ("<function called from gdb>\n");
213       return;
214     }
215   if (fi->signal_handler_caller)
216     {
217       /* Do this regardless of SOURCE because we don't have any source
218          to list for this frame.  */
219       if (level >= 0)
220         printf_filtered ("#%-2d ", level);
221       printf_filtered ("<signal handler called>\n");
222       return;
223     }
224
225   /* If fi is not the innermost frame, that normally means that fi->pc
226      points to *after* the call instruction, and we want to get the line
227      containing the call, never the next line.  But if the next frame is
228      a signal_handler_caller or a dummy frame, then the next frame was
229      not entered as the result of a call, and we want to get the line
230      containing fi->pc.  */
231   sal =
232     find_pc_line (fi->pc,
233                   fi->next != NULL
234                   && !fi->next->signal_handler_caller
235                   && !frame_in_dummy (fi->next));
236
237   func = find_pc_function (fi->pc);
238   if (func)
239     {
240       /* In certain pathological cases, the symtabs give the wrong
241          function (when we are in the first function in a file which
242          is compiled without debugging symbols, the previous function
243          is compiled with debugging symbols, and the "foo.o" symbol
244          that is supposed to tell us where the file with debugging symbols
245          ends has been truncated by ar because it is longer than 15
246          characters).  This also occurs if the user uses asm() to create
247          a function but not stabs for it (in a file compiled -g).
248
249          So look in the minimal symbol tables as well, and if it comes
250          up with a larger address for the function use that instead.
251          I don't think this can ever cause any problems; there shouldn't
252          be any minimal symbols in the middle of a function; if this is
253          ever changed many parts of GDB will need to be changed (and we'll
254          create a find_pc_minimal_function or some such).  */
255
256       struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
257       if (msymbol != NULL
258           && (SYMBOL_VALUE_ADDRESS (msymbol) 
259               > BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
260         {
261 #if 0
262           /* There is no particular reason to think the line number
263              information is wrong.  Someone might have just put in
264              a label with asm() but left the line numbers alone.  */
265           /* In this case we have no way of knowing the source file
266              and line number, so don't print them.  */
267           sal.symtab = 0;
268 #endif
269           /* We also don't know anything about the function besides
270              its address and name.  */
271           func = 0;
272           funname = SYMBOL_NAME (msymbol);
273           funlang = SYMBOL_LANGUAGE (msymbol);
274         }
275       else
276         {
277           funname = SYMBOL_NAME (func);
278           funlang = SYMBOL_LANGUAGE (func);
279         }
280     }
281   else
282     {
283       register struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
284       if (msymbol != NULL)
285         {
286           funname = SYMBOL_NAME (msymbol);
287           funlang = SYMBOL_LANGUAGE (msymbol);
288         }
289     }
290
291   if (source >= 0 || !sal.symtab)
292     {
293       if (level >= 0)
294         printf_filtered ("#%-2d ", level);
295       if (addressprint)
296         if (fi->pc != sal.pc || !sal.symtab)
297           {
298             print_address_numeric (fi->pc, 1, gdb_stdout);
299             printf_filtered (" in ");
300           }
301       fprintf_symbol_filtered (gdb_stdout, funname ? funname : "??", funlang,
302                                DMGL_ANSI);
303       wrap_here ("   ");
304       fputs_filtered (" (", gdb_stdout);
305       if (args)
306         {
307           struct print_args_args args;
308           args.fi = fi;
309           args.func = func;
310           catch_errors (print_args_stub, (char *)&args, "", RETURN_MASK_ERROR);
311         }
312       printf_filtered (")");
313       if (sal.symtab && sal.symtab->filename)
314         {
315           wrap_here ("   ");
316           printf_filtered (" at %s:%d", sal.symtab->filename, sal.line);
317         }
318
319 #ifdef PC_LOAD_SEGMENT
320      /* If we couldn't print out function name but if can figure out what
321         load segment this pc value is from, at least print out some info
322         about its load segment. */
323       if (!funname) {
324         wrap_here ("  ");
325         printf_filtered (" from %s", PC_LOAD_SEGMENT (fi->pc));
326       }
327 #endif
328       printf_filtered ("\n");
329     }
330
331   if ((source != 0) && sal.symtab)
332     {
333       int done = 0;
334       int mid_statement = source < 0 && fi->pc != sal.pc;
335       if (annotation_level)
336         done = identify_source_line (sal.symtab, sal.line, mid_statement,
337                                      fi->pc);
338       if (!done)
339         {
340           if (addressprint && mid_statement)
341             {
342               print_address_numeric (fi->pc, 1, gdb_stdout);
343               printf_filtered ("\t");
344             }
345           print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
346         }
347       current_source_line = max (sal.line - lines_to_list/2, 1);
348     }
349   if (source != 0)
350     set_default_breakpoint (1, fi->pc, sal.symtab, sal.line);
351
352   gdb_flush (gdb_stdout);
353 }
354
355 /*
356  * Read a frame specification in whatever the appropriate format is.
357  * Call error() if the specification is in any way invalid (i.e.
358  * this function never returns NULL).
359  */
360 static FRAME
361 parse_frame_specification (frame_exp)
362      char *frame_exp;
363 {
364   int numargs = 0;
365 #define MAXARGS 4
366   CORE_ADDR args[MAXARGS];
367   
368   if (frame_exp)
369     {
370       char *addr_string, *p;
371       struct cleanup *tmp_cleanup;
372
373       while (*frame_exp == ' ') frame_exp++;
374
375       while (*frame_exp)
376         {
377           if (numargs > MAXARGS)
378             error ("Too many args in frame specification");
379           /* Parse an argument.  */
380           for (p = frame_exp; *p && *p != ' '; p++)
381             ;
382           addr_string = savestring(frame_exp, p - frame_exp);
383
384           {
385             tmp_cleanup = make_cleanup (free, addr_string);
386             args[numargs++] = parse_and_eval_address (addr_string);
387             do_cleanups (tmp_cleanup);
388           }
389
390           /* Skip spaces, move to possible next arg.  */
391           while (*p == ' ') p++;
392           frame_exp = p;
393         }
394     }
395
396   switch (numargs)
397     {
398     case 0:
399       if (selected_frame == NULL)
400         error ("No selected frame.");
401       return selected_frame;
402       /* NOTREACHED */
403     case 1:
404       {
405         int level = args[0];
406         FRAME fid = find_relative_frame (get_current_frame (), &level);
407         FRAME tfid;
408
409         if (level == 0)
410           /* find_relative_frame was successful */
411           return fid;
412
413         /* If SETUP_ARBITRARY_FRAME is defined, then frame specifications
414            take at least 2 addresses.  It is important to detect this case
415            here so that "frame 100" does not give a confusing error message
416            like "frame specification requires two addresses".  This of course
417            does not solve the "frame 100" problem for machines on which
418            a frame specification can be made with one address.  To solve
419            that, we need a new syntax for a specifying a frame by address.
420            I think the cleanest syntax is $frame(0x45) ($frame(0x23,0x45) for
421            two args, etc.), but people might think that is too much typing,
422            so I guess *0x23,0x45 would be a possible alternative (commas
423            really should be used instead of spaces to delimit; using spaces
424            normally works in an expression).  */
425 #ifdef SETUP_ARBITRARY_FRAME
426         error ("No frame %d", args[0]);
427 #endif
428
429         /* If (s)he specifies the frame with an address, he deserves what
430            (s)he gets.  Still, give the highest one that matches.  */
431
432         for (fid = get_current_frame ();
433              fid && FRAME_FP (fid) != args[0];
434              fid = get_prev_frame (fid))
435           ;
436
437         if (fid)
438           while ((tfid = get_prev_frame (fid)) &&
439                  (FRAME_FP (tfid) == args[0]))
440             fid = tfid;
441           
442         /* We couldn't identify the frame as an existing frame, but
443            perhaps we can create one with a single argument.  */
444       }
445
446      default:
447 #ifdef SETUP_ARBITRARY_FRAME
448       return SETUP_ARBITRARY_FRAME (numargs, args);
449 #else
450       /* Usual case.  Do it here rather than have everyone supply
451          a SETUP_ARBITRARY_FRAME that does this.  */
452       if (numargs == 1)
453         return create_new_frame (args[0], 0);
454       error ("Too many args in frame specification");
455 #endif
456       /* NOTREACHED */
457     }
458   /* NOTREACHED */
459 }
460
461 /* FRAME_ARGS_ADDRESS_CORRECT is just like FRAME_ARGS_ADDRESS except
462    that if it is unsure about the answer, it returns 0
463    instead of guessing (this happens on the VAX and i960, for example).
464
465    On most machines, we never have to guess about the args address,
466    so FRAME_ARGS_ADDRESS{,_CORRECT} are the same.  */
467 #if !defined (FRAME_ARGS_ADDRESS_CORRECT)
468 #define FRAME_ARGS_ADDRESS_CORRECT FRAME_ARGS_ADDRESS
469 #endif
470
471 /* Print verbosely the selected frame or the frame at address ADDR.
472    This means absolutely all information in the frame is printed.  */
473
474 static void
475 frame_info (addr_exp, from_tty)
476      char *addr_exp;
477      int from_tty;
478 {
479   FRAME frame;
480   struct frame_info *fi;
481   struct frame_saved_regs fsr;
482   struct symtab_and_line sal;
483   struct symbol *func;
484   struct symtab *s;
485   FRAME calling_frame;
486   int i, count;
487   char *funname = 0;
488   enum language funlang = language_unknown;
489
490   if (!target_has_stack)
491     error ("No stack.");
492
493   frame = parse_frame_specification (addr_exp);
494   if (!frame)
495     error ("Invalid frame specified.");
496
497   fi = get_frame_info (frame);
498   sal = find_pc_line (fi->pc,
499                       fi->next != NULL
500                       && !fi->next->signal_handler_caller
501                       && !frame_in_dummy (fi->next));
502   func = get_frame_function (frame);
503   s = find_pc_symtab(fi->pc);
504   if (func)
505     {
506       funname = SYMBOL_NAME (func);
507       funlang = SYMBOL_LANGUAGE (func);
508     }
509   else
510     {
511       register struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
512       if (msymbol != NULL)
513         {
514           funname = SYMBOL_NAME (msymbol);
515           funlang = SYMBOL_LANGUAGE (msymbol);
516         }
517     }
518   calling_frame = get_prev_frame (frame);
519
520   if (!addr_exp && selected_frame_level >= 0)
521     {
522       printf_filtered ("Stack level %d, frame at ", selected_frame_level);
523       print_address_numeric (FRAME_FP(frame), 1, gdb_stdout);
524       printf_filtered (":\n");
525     }
526   else
527     {
528       printf_filtered ("Stack frame at ");
529       print_address_numeric (FRAME_FP(frame), 1, gdb_stdout);
530       printf_filtered (":\n");
531     }
532   printf_filtered (" %s = ",
533                    reg_names[PC_REGNUM]);
534   print_address_numeric (fi->pc, 1, gdb_stdout);
535
536   wrap_here ("   ");
537   if (funname)
538     {
539       printf_filtered (" in ");
540       fprintf_symbol_filtered (gdb_stdout, funname, funlang,
541                                DMGL_ANSI | DMGL_PARAMS);
542     }
543   wrap_here ("   ");
544   if (sal.symtab)
545     printf_filtered (" (%s:%d)", sal.symtab->filename, sal.line);
546   puts_filtered ("; ");
547   wrap_here ("    ");
548   printf_filtered ("saved %s ", reg_names[PC_REGNUM]);
549   print_address_numeric (FRAME_SAVED_PC (frame), 1, gdb_stdout);
550   printf_filtered ("\n");
551
552   {
553     int frameless = 0;
554 #ifdef FRAMELESS_FUNCTION_INVOCATION
555     FRAMELESS_FUNCTION_INVOCATION (fi, frameless);
556 #endif
557     if (frameless)
558       printf_filtered (" (FRAMELESS),");
559   }
560
561   if (calling_frame)
562     {
563       printf_filtered (" called by frame at ");
564       print_address_numeric (FRAME_FP (calling_frame), 1, gdb_stdout);
565     }
566   if (fi->next && calling_frame)
567     puts_filtered (",");
568   wrap_here ("   ");
569   if (fi->next)
570     {
571       printf_filtered (" caller of frame at ");
572       print_address_numeric (fi->next->frame, 1, gdb_stdout);
573     }
574   if (fi->next || calling_frame)
575     puts_filtered ("\n");
576   if (s)
577     printf_filtered (" source language %s.\n", language_str (s->language));
578
579 #ifdef PRINT_EXTRA_FRAME_INFO
580   PRINT_EXTRA_FRAME_INFO (fi);
581 #endif
582
583   {
584     /* Address of the argument list for this frame, or 0.  */
585     CORE_ADDR arg_list = FRAME_ARGS_ADDRESS_CORRECT (fi);
586     /* Number of args for this frame, or -1 if unknown.  */
587     int numargs;
588
589     if (arg_list == 0)
590       printf_filtered (" Arglist at unknown address.\n");
591     else
592       {
593         printf_filtered (" Arglist at ");
594         print_address_numeric (arg_list, 1, gdb_stdout);
595         printf_filtered (",");
596
597         FRAME_NUM_ARGS (numargs, fi);
598         if (numargs < 0)
599           puts_filtered (" args: ");
600         else if (numargs == 0)
601           puts_filtered (" no args.");
602         else if (numargs == 1)
603           puts_filtered (" 1 arg: ");
604         else
605           printf_filtered (" %d args: ", numargs);
606         print_frame_args (func, fi, numargs, gdb_stdout);
607         puts_filtered ("\n");
608       }
609   }
610   {
611     /* Address of the local variables for this frame, or 0.  */
612     CORE_ADDR arg_list = FRAME_LOCALS_ADDRESS (fi);
613
614     if (arg_list == 0)
615       printf_filtered (" Locals at unknown address,");
616     else
617       {
618         printf_filtered (" Locals at ");
619         print_address_numeric (arg_list, 1, gdb_stdout);
620         printf_filtered (",");
621       }
622   }
623
624 #if defined (FRAME_FIND_SAVED_REGS)  
625   get_frame_saved_regs (fi, &fsr);
626   /* The sp is special; what's returned isn't the save address, but
627      actually the value of the previous frame's sp.  */
628   printf_filtered (" Previous frame's sp is ");
629   print_address_numeric (fsr.regs[SP_REGNUM], 1, gdb_stdout);
630   printf_filtered ("\n");
631   count = 0;
632   for (i = 0; i < NUM_REGS; i++)
633     if (fsr.regs[i] && i != SP_REGNUM)
634       {
635         if (count == 0)
636           puts_filtered (" Saved registers:\n ");
637         else
638           puts_filtered (",");
639         wrap_here (" ");
640         printf_filtered (" %s at ", reg_names[i]);
641         print_address_numeric (fsr.regs[i], 1, gdb_stdout);
642         count++;
643       }
644   if (count)
645     puts_filtered ("\n");
646 #else  /* Have FRAME_FIND_SAVED_REGS.  */
647   puts_filtered ("\n");
648 #endif /* Have FRAME_FIND_SAVED_REGS.  */
649 }
650
651 #if 0
652 /* Set a limit on the number of frames printed by default in a
653    backtrace.  */
654
655 static int backtrace_limit;
656
657 static void
658 set_backtrace_limit_command (count_exp, from_tty)
659      char *count_exp;
660      int from_tty;
661 {
662   int count = parse_and_eval_address (count_exp);
663
664   if (count < 0)
665     error ("Negative argument not meaningful as backtrace limit.");
666
667   backtrace_limit = count;
668 }
669
670 static void
671 backtrace_limit_info (arg, from_tty)
672      char *arg;
673      int from_tty;
674 {
675   if (arg)
676     error ("\"Info backtrace-limit\" takes no arguments.");
677
678   printf_unfiltered ("Backtrace limit: %d.\n", backtrace_limit);
679 }
680 #endif
681
682 /* Print briefly all stack frames or just the innermost COUNT frames.  */
683
684 static void
685 backtrace_command (count_exp, from_tty)
686      char *count_exp;
687      int from_tty;
688 {
689   struct frame_info *fi;
690   register int count;
691   register FRAME frame;
692   register int i;
693   register FRAME trailing;
694   register int trailing_level;
695
696   if (!target_has_stack)
697     error ("No stack.");
698
699   /* The following code must do two things.  First, it must
700      set the variable TRAILING to the frame from which we should start
701      printing.  Second, it must set the variable count to the number
702      of frames which we should print, or -1 if all of them.  */
703   trailing = get_current_frame ();
704   trailing_level = 0;
705   if (count_exp)
706     {
707       count = parse_and_eval_address (count_exp);
708       if (count < 0)
709         {
710           FRAME current;
711
712           count = -count;
713
714           current = trailing;
715           while (current && count--)
716             {
717               QUIT;
718               current = get_prev_frame (current);
719             }
720           
721           /* Will stop when CURRENT reaches the top of the stack.  TRAILING
722              will be COUNT below it.  */
723           while (current)
724             {
725               QUIT;
726               trailing = get_prev_frame (trailing);
727               current = get_prev_frame (current);
728               trailing_level++;
729             }
730           
731           count = -1;
732         }
733     }
734   else
735     count = -1;
736
737   if (info_verbose)
738     {
739       struct partial_symtab *ps;
740       
741       /* Read in symbols for all of the frames.  Need to do this in
742          a separate pass so that "Reading in symbols for xxx" messages
743          don't screw up the appearance of the backtrace.  Also
744          if people have strong opinions against reading symbols for
745          backtrace this may have to be an option.  */
746       i = count;
747       for (frame = trailing;
748            frame != NULL && i--;
749            frame = get_prev_frame (frame))
750         {
751           QUIT;
752           fi = get_frame_info (frame);
753           ps = find_pc_psymtab (fi->pc);
754           if (ps)
755             PSYMTAB_TO_SYMTAB (ps);     /* Force syms to come in */
756         }
757     }
758
759   for (i = 0, frame = trailing;
760        frame && count--;
761        i++, frame = get_prev_frame (frame))
762     {
763       QUIT;
764       fi = get_frame_info (frame);
765
766       /* Don't use print_stack_frame; if an error() occurs it probably
767          means further attempts to backtrace would fail (on the other
768          hand, perhaps the code does or could be fixed to make sure
769          the frame->prev field gets set to NULL in that case).  */
770       print_frame_info (fi, trailing_level + i, 0, 1);
771     }
772
773   /* If we've stopped before the end, mention that.  */
774   if (frame && from_tty)
775     printf_filtered ("(More stack frames follow...)\n");
776 }
777 \f
778 /* Print the local variables of a block B active in FRAME.
779    Return 1 if any variables were printed; 0 otherwise.  */
780
781 static int
782 print_block_frame_locals (b, frame, stream)
783      struct block *b;
784      register FRAME frame;
785      register GDB_FILE *stream;
786 {
787   int nsyms;
788   register int i;
789   register struct symbol *sym;
790   register int values_printed = 0;
791
792   nsyms = BLOCK_NSYMS (b);
793
794   for (i = 0; i < nsyms; i++)
795     {
796       sym = BLOCK_SYM (b, i);
797       switch (SYMBOL_CLASS (sym))
798         {
799         case LOC_LOCAL:
800         case LOC_REGISTER:
801         case LOC_STATIC:
802         case LOC_BASEREG:
803           values_printed = 1;
804           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
805           fputs_filtered (" = ", stream);
806           print_variable_value (sym, frame, stream);
807           fprintf_filtered (stream, "\n");
808           break;
809
810         default:
811           /* Ignore symbols which are not locals.  */
812           break;
813         }
814     }
815   return values_printed;
816 }
817
818 /* Same, but print labels.  */
819
820 static int
821 print_block_frame_labels (b, have_default, stream)
822      struct block *b;
823      int *have_default;
824      register GDB_FILE *stream;
825 {
826   int nsyms;
827   register int i;
828   register struct symbol *sym;
829   register int values_printed = 0;
830
831   nsyms = BLOCK_NSYMS (b);
832
833   for (i = 0; i < nsyms; i++)
834     {
835       sym = BLOCK_SYM (b, i);
836       if (STREQ (SYMBOL_NAME (sym), "default"))
837         {
838           if (*have_default)
839             continue;
840           *have_default = 1;
841         }
842       if (SYMBOL_CLASS (sym) == LOC_LABEL)
843         {
844           struct symtab_and_line sal;
845           sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
846           values_printed = 1;
847           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
848           if (addressprint)
849             {
850               fprintf_filtered (stream, " ");
851               print_address_numeric (SYMBOL_VALUE_ADDRESS (sym), 1, stream);
852             }
853           fprintf_filtered (stream, " in file %s, line %d\n",
854                             sal.symtab->filename, sal.line);
855         }
856     }
857   return values_printed;
858 }
859
860 /* Print on STREAM all the local variables in frame FRAME,
861    including all the blocks active in that frame
862    at its current pc.
863
864    Returns 1 if the job was done,
865    or 0 if nothing was printed because we have no info
866    on the function running in FRAME.  */
867
868 static void
869 print_frame_local_vars (frame, stream)
870      register FRAME frame;
871      register GDB_FILE *stream;
872 {
873   register struct block *block = get_frame_block (frame);
874   register int values_printed = 0;
875
876   if (block == 0)
877     {
878       fprintf_filtered (stream, "No symbol table info available.\n");
879       return;
880     }
881   
882   while (block != 0)
883     {
884       if (print_block_frame_locals (block, frame, stream))
885         values_printed = 1;
886       /* After handling the function's top-level block, stop.
887          Don't continue to its superblock, the block of
888          per-file symbols.  */
889       if (BLOCK_FUNCTION (block))
890         break;
891       block = BLOCK_SUPERBLOCK (block);
892     }
893
894   if (!values_printed)
895     {
896       fprintf_filtered (stream, "No locals.\n");
897     }
898 }
899
900 /* Same, but print labels.  */
901
902 static void
903 print_frame_label_vars (frame, this_level_only, stream)
904      register FRAME frame;
905      int this_level_only;
906      register GDB_FILE *stream;
907 {
908   register struct blockvector *bl;
909   register struct block *block = get_frame_block (frame);
910   register int values_printed = 0;
911   int index, have_default = 0;
912   char *blocks_printed;
913   struct frame_info *fi = get_frame_info (frame);
914   CORE_ADDR pc = fi->pc;
915
916   if (block == 0)
917     {
918       fprintf_filtered (stream, "No symbol table info available.\n");
919       return;
920     }
921
922   bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
923   blocks_printed = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
924   memset (blocks_printed, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
925
926   while (block != 0)
927     {
928       CORE_ADDR end = BLOCK_END (block) - 4;
929       int last_index;
930
931       if (bl != blockvector_for_pc (end, &index))
932         error ("blockvector blotch");
933       if (BLOCKVECTOR_BLOCK (bl, index) != block)
934         error ("blockvector botch");
935       last_index = BLOCKVECTOR_NBLOCKS (bl);
936       index += 1;
937
938       /* Don't print out blocks that have gone by.  */
939       while (index < last_index
940              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
941         index++;
942
943       while (index < last_index
944              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
945         {
946           if (blocks_printed[index] == 0)
947             {
948               if (print_block_frame_labels (BLOCKVECTOR_BLOCK (bl, index), &have_default, stream))
949                 values_printed = 1;
950               blocks_printed[index] = 1;
951             }
952           index++;
953         }
954       if (have_default)
955         return;
956       if (values_printed && this_level_only)
957         return;
958
959       /* After handling the function's top-level block, stop.
960          Don't continue to its superblock, the block of
961          per-file symbols.  */
962       if (BLOCK_FUNCTION (block))
963         break;
964       block = BLOCK_SUPERBLOCK (block);
965     }
966
967   if (!values_printed && !this_level_only)
968     {
969       fprintf_filtered (stream, "No catches.\n");
970     }
971 }
972
973 /* ARGSUSED */
974 static void
975 locals_info (args, from_tty)
976      char *args;
977      int from_tty;
978 {
979   if (!selected_frame)
980     error ("No frame selected.");
981   print_frame_local_vars (selected_frame, gdb_stdout);
982 }
983
984 static void
985 catch_info (ignore, from_tty)
986      char *ignore;
987      int from_tty;
988 {
989   if (!selected_frame)
990     error ("No frame selected.");
991   print_frame_label_vars (selected_frame, 0, gdb_stdout);
992 }
993
994 static void
995 print_frame_arg_vars (frame, stream)
996      register FRAME frame;
997      register GDB_FILE *stream;
998 {
999   struct symbol *func = get_frame_function (frame);
1000   register struct block *b;
1001   int nsyms;
1002   register int i;
1003   register struct symbol *sym, *sym2;
1004   register int values_printed = 0;
1005
1006   if (func == 0)
1007     {
1008       fprintf_filtered (stream, "No symbol table info available.\n");
1009       return;
1010     }
1011
1012   b = SYMBOL_BLOCK_VALUE (func);
1013   nsyms = BLOCK_NSYMS (b);
1014
1015   for (i = 0; i < nsyms; i++)
1016     {
1017       sym = BLOCK_SYM (b, i);
1018       switch (SYMBOL_CLASS (sym))
1019         {
1020         case LOC_ARG:
1021         case LOC_LOCAL_ARG:
1022         case LOC_REF_ARG:
1023         case LOC_REGPARM:
1024         case LOC_REGPARM_ADDR:
1025         case LOC_BASEREG_ARG:
1026           values_printed = 1;
1027           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
1028           fputs_filtered (" = ", stream);
1029
1030           /* We have to look up the symbol because arguments can have
1031              two entries (one a parameter, one a local) and the one we
1032              want is the local, which lookup_symbol will find for us.
1033              This includes gcc1 (not gcc2) on the sparc when passing a
1034              small structure and gcc2 when the argument type is float
1035              and it is passed as a double and converted to float by
1036              the prologue (in the latter case the type of the LOC_ARG
1037              symbol is double and the type of the LOC_LOCAL symbol is
1038              float).  There are also LOC_ARG/LOC_REGISTER pairs which
1039              are not combined in symbol-reading.  */
1040
1041           sym2 = lookup_symbol (SYMBOL_NAME (sym),
1042                         b, VAR_NAMESPACE, (int *)NULL, (struct symtab **)NULL);
1043           print_variable_value (sym2, frame, stream);
1044           fprintf_filtered (stream, "\n");
1045           break;
1046
1047         default:
1048           /* Don't worry about things which aren't arguments.  */
1049           break;
1050         }
1051     }
1052
1053   if (!values_printed)
1054     {
1055       fprintf_filtered (stream, "No arguments.\n");
1056     }
1057 }
1058
1059 static void
1060 args_info (ignore, from_tty)
1061      char *ignore;
1062      int from_tty;
1063 {
1064   if (!selected_frame)
1065     error ("No frame selected.");
1066   print_frame_arg_vars (selected_frame, gdb_stdout);
1067 }
1068 \f
1069 /* Select frame FRAME, and note that its stack level is LEVEL.
1070    LEVEL may be -1 if an actual level number is not known.  */
1071
1072 void
1073 select_frame (frame, level)
1074      FRAME frame;
1075      int level;
1076 {
1077   register struct symtab *s;
1078
1079   selected_frame = frame;
1080   selected_frame_level = level;
1081
1082   /* Ensure that symbols for this frame are read in.  Also, determine the
1083      source language of this frame, and switch to it if desired.  */
1084   if (frame)
1085   {
1086     s = find_pc_symtab (get_frame_info (frame)->pc);
1087     if (s 
1088         && s->language != current_language->la_language
1089         && s->language != language_unknown
1090         && language_mode == language_mode_auto) {
1091       set_language(s->language);
1092     }
1093   }
1094 }
1095
1096 /* Store the selected frame and its level into *FRAMEP and *LEVELP.
1097    If there is no selected frame, *FRAMEP is set to NULL.  */
1098
1099 void
1100 record_selected_frame (frameaddrp, levelp)
1101      FRAME_ADDR *frameaddrp;
1102      int *levelp;
1103 {
1104   *frameaddrp = selected_frame ? FRAME_FP (selected_frame) : 0;
1105   *levelp = selected_frame_level;
1106 }
1107
1108 /* Return the symbol-block in which the selected frame is executing.
1109    Can return zero under various legitimate circumstances.  */
1110
1111 struct block *
1112 get_selected_block ()
1113 {
1114   if (!target_has_stack)
1115     return 0;
1116
1117   if (!selected_frame)
1118     return get_current_block ();
1119   return get_frame_block (selected_frame);
1120 }
1121
1122 /* Find a frame a certain number of levels away from FRAME.
1123    LEVEL_OFFSET_PTR points to an int containing the number of levels.
1124    Positive means go to earlier frames (up); negative, the reverse.
1125    The int that contains the number of levels is counted toward
1126    zero as the frames for those levels are found.
1127    If the top or bottom frame is reached, that frame is returned,
1128    but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
1129    how much farther the original request asked to go.  */
1130
1131 FRAME
1132 find_relative_frame (frame, level_offset_ptr)
1133      register FRAME frame;
1134      register int* level_offset_ptr;
1135 {
1136   register FRAME prev;
1137   register FRAME frame1;
1138
1139   /* Going up is simple: just do get_prev_frame enough times
1140      or until initial frame is reached.  */
1141   while (*level_offset_ptr > 0)
1142     {
1143       prev = get_prev_frame (frame);
1144       if (prev == 0)
1145         break;
1146       (*level_offset_ptr)--;
1147       frame = prev;
1148     }
1149   /* Going down is just as simple.  */
1150   if (*level_offset_ptr < 0)
1151     {
1152       while (*level_offset_ptr < 0) {
1153         frame1 = get_next_frame (frame);
1154         if (!frame1)
1155           break;
1156         frame = frame1;
1157         (*level_offset_ptr)++;
1158       }
1159     }
1160   return frame;
1161 }
1162
1163 /* The "select_frame" command.  With no arg, NOP.
1164    With arg LEVEL_EXP, select the frame at level LEVEL if it is a
1165    valid level.  Otherwise, treat level_exp as an address expression
1166    and select it.  See parse_frame_specification for more info on proper
1167    frame expressions. */
1168
1169 /* ARGSUSED */
1170 static void
1171 select_frame_command (level_exp, from_tty)
1172      char *level_exp;
1173      int from_tty;
1174 {
1175   register FRAME frame, frame1;
1176   unsigned int level = 0;
1177
1178   if (!target_has_stack)
1179     error ("No stack.");
1180
1181   frame = parse_frame_specification (level_exp);
1182
1183   /* Try to figure out what level this frame is.  But if there is
1184      no current stack, don't error out -- let the user set one.  */
1185   frame1 = 0;
1186   if (get_current_frame()) {
1187     for (frame1 = get_prev_frame (0);
1188          frame1 && frame1 != frame;
1189          frame1 = get_prev_frame (frame1))
1190       level++;
1191   }
1192
1193   if (!frame1)
1194     level = 0;
1195
1196   select_frame (frame, level);
1197 }
1198
1199 /* The "frame" command.  With no arg, print selected frame briefly.
1200    With arg, behaves like select_frame and then prints the selected
1201    frame.  */
1202
1203 static void
1204 frame_command (level_exp, from_tty)
1205      char *level_exp;
1206      int from_tty;
1207 {
1208   select_frame_command (level_exp, from_tty);
1209   print_stack_frame (selected_frame, selected_frame_level, 1);
1210 }
1211
1212 /* Select the frame up one or COUNT stack levels
1213    from the previously selected frame, and print it briefly.  */
1214
1215 /* ARGSUSED */
1216 static void
1217 up_silently_command (count_exp, from_tty)
1218      char *count_exp;
1219      int from_tty;
1220 {
1221   register FRAME frame;
1222   int count = 1, count1;
1223   if (count_exp)
1224     count = parse_and_eval_address (count_exp);
1225   count1 = count;
1226   
1227   if (target_has_stack == 0 || selected_frame == 0)
1228     error ("No stack.");
1229
1230   frame = find_relative_frame (selected_frame, &count1);
1231   if (count1 != 0 && count_exp == 0)
1232     error ("Initial frame selected; you cannot go up.");
1233   select_frame (frame, selected_frame_level + count - count1);
1234 }
1235
1236 static void
1237 up_command (count_exp, from_tty)
1238      char *count_exp;
1239      int from_tty;
1240 {
1241   up_silently_command (count_exp, from_tty);
1242   print_stack_frame (selected_frame, selected_frame_level, 1);
1243 }
1244
1245 /* Select the frame down one or COUNT stack levels
1246    from the previously selected frame, and print it briefly.  */
1247
1248 /* ARGSUSED */
1249 static void
1250 down_silently_command (count_exp, from_tty)
1251      char *count_exp;
1252      int from_tty;
1253 {
1254   register FRAME frame;
1255   int count = -1, count1;
1256   if (count_exp)
1257     count = - parse_and_eval_address (count_exp);
1258   count1 = count;
1259   
1260   if (target_has_stack == 0 || selected_frame == 0)
1261     error ("No stack.");
1262
1263   frame = find_relative_frame (selected_frame, &count1);
1264   if (count1 != 0 && count_exp == 0)
1265     {
1266
1267       /* We only do this if count_exp is not specified.  That way "down"
1268          means to really go down (and let me know if that is
1269          impossible), but "down 9999" can be used to mean go all the way
1270          down without getting an error.  */
1271
1272       error ("Bottom (i.e., innermost) frame selected; you cannot go down.");
1273     }
1274
1275   select_frame (frame, selected_frame_level + count - count1);
1276 }
1277
1278
1279 static void
1280 down_command (count_exp, from_tty)
1281      char *count_exp;
1282      int from_tty;
1283 {
1284   down_silently_command (count_exp, from_tty);
1285   print_stack_frame (selected_frame, selected_frame_level, 1);
1286 }
1287 \f
1288 static void
1289 return_command (retval_exp, from_tty)
1290      char *retval_exp;
1291      int from_tty;
1292 {
1293   struct symbol *thisfun;
1294   FRAME_ADDR selected_frame_addr;
1295   CORE_ADDR selected_frame_pc;
1296   FRAME frame;
1297   value_ptr return_value = NULL;
1298
1299   if (selected_frame == NULL)
1300     error ("No selected frame.");
1301   thisfun = get_frame_function (selected_frame);
1302   selected_frame_addr = FRAME_FP (selected_frame);
1303   selected_frame_pc = (get_frame_info (selected_frame))->pc;
1304
1305   /* Compute the return value (if any -- possibly getting errors here).  */
1306
1307   if (retval_exp)
1308     {
1309       return_value = parse_and_eval (retval_exp);
1310
1311       /* Make sure we have fully evaluated it, since
1312          it might live in the stack frame we're about to pop.  */
1313       if (VALUE_LAZY (return_value))
1314         value_fetch_lazy (return_value);
1315     }
1316
1317   /* If interactive, require confirmation.  */
1318
1319   if (from_tty)
1320     {
1321       if (thisfun != 0)
1322         {
1323           if (!query ("Make %s return now? ", SYMBOL_SOURCE_NAME (thisfun)))
1324             {
1325               error ("Not confirmed.");
1326               /* NOTREACHED */
1327             }
1328         }
1329       else
1330         if (!query ("Make selected stack frame return now? "))
1331           error ("Not confirmed.");
1332     }
1333
1334   /* Do the real work.  Pop until the specified frame is current.  We
1335      use this method because the selected_frame is not valid after
1336      a POP_FRAME.  The pc comparison makes this work even if the
1337      selected frame shares its fp with another frame.  */
1338
1339   while ( selected_frame_addr != FRAME_FP (frame = get_current_frame())
1340        || selected_frame_pc   != (get_frame_info (frame))->pc  )
1341     POP_FRAME;
1342
1343   /* Then pop that frame.  */
1344
1345   POP_FRAME;
1346
1347   /* Compute the return value (if any) and store in the place
1348      for return values.  */
1349
1350   if (retval_exp)
1351     set_return_value (return_value);
1352
1353   /* If interactive, print the frame that is now current.  */
1354
1355   if (from_tty)
1356     frame_command ("0", 1);
1357 }
1358
1359 /* Gets the language of the current frame. */
1360 enum language
1361 get_frame_language()
1362 {
1363    register struct symtab *s;
1364    FRAME fr;
1365    enum language flang;         /* The language of the current frame */
1366    
1367    fr = get_frame_info(selected_frame);
1368    if(fr)
1369    {
1370       s = find_pc_symtab(fr->pc);
1371       if(s)
1372          flang = s->language;
1373       else
1374          flang = language_unknown;
1375    }
1376    else
1377       flang = language_unknown;
1378
1379    return flang;
1380 }
1381 \f
1382 void
1383 _initialize_stack ()
1384 {
1385 #if 0  
1386   backtrace_limit = 30;
1387 #endif
1388
1389   add_com ("return", class_stack, return_command,
1390            "Make selected stack frame return to its caller.\n\
1391 Control remains in the debugger, but when you continue\n\
1392 execution will resume in the frame above the one now selected.\n\
1393 If an argument is given, it is an expression for the value to return.");
1394
1395   add_com ("up", class_stack, up_command,
1396            "Select and print stack frame that called this one.\n\
1397 An argument says how many frames up to go.");
1398   add_com ("up-silently", class_support, up_silently_command,
1399            "Same as the `up' command, but does not print anything.\n\
1400 This is useful in command scripts.");
1401
1402   add_com ("down", class_stack, down_command,
1403            "Select and print stack frame called by this one.\n\
1404 An argument says how many frames down to go.");
1405   add_com_alias ("do", "down", class_stack, 1);
1406   add_com_alias ("dow", "down", class_stack, 1);
1407   add_com ("down-silently", class_support, down_silently_command,
1408            "Same as the `down' command, but does not print anything.\n\
1409 This is useful in command scripts.");
1410
1411   add_com ("frame", class_stack, frame_command,
1412            "Select and print a stack frame.\n\
1413 With no argument, print the selected stack frame.  (See also \"info frame\").\n\
1414 An argument specifies the frame to select.\n\
1415 It can be a stack frame number or the address of the frame.\n\
1416 With argument, nothing is printed if input is coming from\n\
1417 a command file or a user-defined command.");
1418
1419   add_com_alias ("f", "frame", class_stack, 1);
1420
1421   add_com ("select-frame", class_stack, select_frame_command,
1422            "Select a stack frame without printing anything.\n\
1423 An argument specifies the frame to select.\n\
1424 It can be a stack frame number or the address of the frame.\n");
1425
1426   add_com ("backtrace", class_stack, backtrace_command,
1427            "Print backtrace of all stack frames, or innermost COUNT frames.\n\
1428 With a negative argument, print outermost -COUNT frames.");
1429   add_com_alias ("bt", "backtrace", class_stack, 0);
1430   add_com_alias ("where", "backtrace", class_alias, 0);
1431   add_info ("stack", backtrace_command,
1432             "Backtrace of the stack, or innermost COUNT frames.");
1433   add_info_alias ("s", "stack", 1);
1434   add_info ("frame", frame_info,
1435             "All about selected stack frame, or frame at ADDR.");
1436   add_info_alias ("f", "frame", 1);
1437   add_info ("locals", locals_info,
1438             "Local variables of current stack frame.");
1439   add_info ("args", args_info,
1440             "Argument variables of current stack frame.");
1441   add_info ("catch", catch_info,
1442             "Exceptions that can be caught in the current stack frame.");
1443
1444 #if 0
1445   add_cmd ("backtrace-limit", class_stack, set_backtrace_limit_command, 
1446            "Specify maximum number of frames for \"backtrace\" to print by default.",
1447            &setlist);
1448   add_info ("backtrace-limit", backtrace_limit_info,
1449             "The maximum number of frames for \"backtrace\" to print by default.");
1450 #endif
1451 }
This page took 0.123339 seconds and 4 git commands to generate.