This commit was generated by cvs2svn to track changes on a CVS vendor
[external/binutils.git] / gdb / stack.c
1 /* Print and select stack frames for GDB, the GNU debugger.
2    Copyright 1986, 87, 89, 91, 92, 93, 94, 95, 96, 98, 1999
3    Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330,
20    Boston, MA 02111-1307, USA.  */
21
22 #include <ctype.h>
23 #include "defs.h"
24 #include "gdb_string.h"
25 #include "value.h"
26 #include "symtab.h"
27 #include "gdbtypes.h"
28 #include "expression.h"
29 #include "language.h"
30 #include "frame.h"
31 #include "gdbcmd.h"
32 #include "gdbcore.h"
33 #include "target.h"
34 #include "breakpoint.h"
35 #include "demangle.h"
36 #include "inferior.h"
37 #include "annotate.h"
38 #include "symfile.h"
39 #include "objfiles.h"
40
41 /* Prototypes for exported functions. */
42
43 void args_info PARAMS ((char *, int));
44
45 void locals_info PARAMS ((char *, int));
46
47 void (*selected_frame_level_changed_hook) PARAMS ((int));
48
49 void _initialize_stack PARAMS ((void));
50
51 /* Prototypes for local functions. */
52
53 static void return_command PARAMS ((char *, int));
54
55 static void down_command PARAMS ((char *, int));
56
57 static void down_silently_base PARAMS ((char *));
58
59 static void down_silently_command PARAMS ((char *, int));
60
61 static void up_command PARAMS ((char *, int));
62
63 static void up_silently_base PARAMS ((char *));
64
65 static void up_silently_command PARAMS ((char *, int));
66
67 void frame_command PARAMS ((char *, int));
68
69 static void current_frame_command PARAMS ((char *, int));
70
71 static void select_frame_command PARAMS ((char *, int));
72
73 static void print_frame_arg_vars PARAMS ((struct frame_info *, GDB_FILE *));
74
75 static void catch_info PARAMS ((char *, int));
76
77 static void args_plus_locals_info PARAMS ((char *, int));
78
79 static void print_frame_label_vars PARAMS ((struct frame_info *,
80                                             int,
81                                             GDB_FILE *));
82
83 static void print_frame_local_vars PARAMS ((struct frame_info *,
84                                             int,
85                                             GDB_FILE *));
86
87 static int print_block_frame_labels PARAMS ((struct block *, int *,
88                                              GDB_FILE *));
89
90 static int print_block_frame_locals PARAMS ((struct block *,
91                                              struct frame_info *,
92                                              int,
93                                              GDB_FILE *));
94
95 static void print_frame_info_base PARAMS ((struct frame_info *, int, int, int));
96
97 static void print_stack_frame_base PARAMS ((struct frame_info *, int, int));
98
99 static void backtrace_command PARAMS ((char *, int));
100
101 struct frame_info *parse_frame_specification PARAMS ((char *));
102
103 static void frame_info PARAMS ((char *, int));
104
105 extern int addressprint;        /* Print addresses, or stay symbolic only? */
106 extern int info_verbose;        /* Verbosity of symbol reading msgs */
107 extern int lines_to_list;       /* # of lines "list" command shows by default */
108
109 /* The "selected" stack frame is used by default for local and arg access.
110    May be zero, for no selected frame.  */
111
112 struct frame_info *selected_frame;
113
114 /* Level of the selected frame:
115    0 for innermost, 1 for its caller, ...
116    or -1 for frame specified by address with no defined level.  */
117
118 int selected_frame_level;
119
120 /* Zero means do things normally; we are interacting directly with the
121    user.  One means print the full filename and linenumber when a
122    frame is printed, and do so in a format emacs18/emacs19.22 can
123    parse.  Two means print similar annotations, but in many more
124    cases and in a slightly different syntax.  */
125
126 int annotation_level = 0;
127 \f
128
129 struct print_stack_frame_args
130   {
131     struct frame_info *fi;
132     int level;
133     int source;
134     int args;
135   };
136
137 static int print_stack_frame_base_stub PARAMS ((char *));
138
139 /* Show and print the frame arguments.
140    Pass the args the way catch_errors wants them.  */
141 static int show_and_print_stack_frame_stub PARAMS ((void *args));
142 static int
143 show_and_print_stack_frame_stub (args)
144      void *args;
145 {
146   struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
147
148   /* Reversed order of these so tuiDo() doesn't occur
149    * in the middle of "Breakpoint 1 ... [location]" printing = RT
150    */
151   if (tui_version)
152     print_frame_info_base (p->fi, p->level, p->source, p->args);
153   print_frame_info (p->fi, p->level, p->source, p->args);
154
155   return 0;
156 }
157
158 /* Show or print the frame arguments.
159    Pass the args the way catch_errors wants them.  */
160 static int print_stack_frame_stub PARAMS ((void *args));
161 static int
162 print_stack_frame_stub (args)
163      void *args;
164 {
165   struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
166
167   if (tui_version)
168     print_frame_info (p->fi, p->level, p->source, p->args);
169   else
170     print_frame_info_base (p->fi, p->level, p->source, p->args);
171   return 0;
172 }
173
174 /* Print a stack frame briefly.  FRAME_INFI should be the frame info
175    and LEVEL should be its level in the stack (or -1 for level not
176    defined). */
177
178 /* Pass the args the way catch_errors wants them.  */
179 static int
180 print_stack_frame_base_stub (args)
181      char *args;
182 {
183   struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
184
185   print_frame_info_base (p->fi, p->level, p->source, p->args);
186   return 0;
187 }
188
189 /* print the frame arguments to the terminal.  
190    Pass the args the way catch_errors wants them.  */
191 static int print_only_stack_frame_stub PARAMS ((void *));
192 static int
193 print_only_stack_frame_stub (args)
194      void *args;
195 {
196   struct print_stack_frame_args *p = (struct print_stack_frame_args *) args;
197
198   print_frame_info_base (p->fi, p->level, p->source, p->args);
199   return 0;
200 }
201
202 /* Print a stack frame briefly.  FRAME_INFI should be the frame info
203    and LEVEL should be its level in the stack (or -1 for level not defined).
204    This prints the level, the function executing, the arguments,
205    and the file name and line number.
206    If the pc is not at the beginning of the source line,
207    the actual pc is printed at the beginning.
208
209    If SOURCE is 1, print the source line as well.
210    If SOURCE is -1, print ONLY the source line.  */
211
212 static void
213 print_stack_frame_base (fi, level, source)
214      struct frame_info *fi;
215      int level;
216      int source;
217 {
218   struct print_stack_frame_args args;
219
220   args.fi = fi;
221   args.level = level;
222   args.source = source;
223   args.args = 1;
224
225   catch_errors (print_stack_frame_stub, &args, "", RETURN_MASK_ALL);
226 }
227
228 /* Show and print a stack frame briefly.  FRAME_INFI should be the frame info
229    and LEVEL should be its level in the stack (or -1 for level not defined).
230    This prints the level, the function executing, the arguments,
231    and the file name and line number.
232    If the pc is not at the beginning of the source line,
233    the actual pc is printed at the beginning.
234
235    If SOURCE is 1, print the source line as well.
236    If SOURCE is -1, print ONLY the source line.  */
237
238 void
239 show_and_print_stack_frame (fi, level, source)
240      struct frame_info *fi;
241      int level;
242      int source;
243 {
244   struct print_stack_frame_args args;
245
246   args.fi = fi;
247   args.level = level;
248   args.source = source;
249   args.args = 1;
250
251   catch_errors (show_and_print_stack_frame_stub, &args, "", RETURN_MASK_ALL);
252 }
253
254
255 /* Show or print a stack frame briefly.  FRAME_INFI should be the frame info
256    and LEVEL should be its level in the stack (or -1 for level not defined).
257    This prints the level, the function executing, the arguments,
258    and the file name and line number.
259    If the pc is not at the beginning of the source line,
260    the actual pc is printed at the beginning.
261
262    If SOURCE is 1, print the source line as well.
263    If SOURCE is -1, print ONLY the source line.  */
264
265 void
266 print_stack_frame (fi, level, source)
267      struct frame_info *fi;
268      int level;
269      int source;
270 {
271   struct print_stack_frame_args args;
272
273   args.fi = fi;
274   args.level = level;
275   args.source = source;
276   args.args = 1;
277
278   catch_errors (print_stack_frame_stub, (char *) &args, "", RETURN_MASK_ALL);
279 }
280
281 /* Print a stack frame briefly.  FRAME_INFI should be the frame info
282    and LEVEL should be its level in the stack (or -1 for level not defined).
283    This prints the level, the function executing, the arguments,
284    and the file name and line number.
285    If the pc is not at the beginning of the source line,
286    the actual pc is printed at the beginning.
287
288    If SOURCE is 1, print the source line as well.
289    If SOURCE is -1, print ONLY the source line.  */
290
291 void
292 print_only_stack_frame (fi, level, source)
293      struct frame_info *fi;
294      int level;
295      int source;
296 {
297   struct print_stack_frame_args args;
298
299   args.fi = fi;
300   args.level = level;
301   args.source = source;
302   args.args = 1;
303
304   catch_errors (print_only_stack_frame_stub, &args, "", RETURN_MASK_ALL);
305 }
306
307 struct print_args_args
308 {
309   struct symbol *func;
310   struct frame_info *fi;
311   GDB_FILE *stream;
312 };
313
314 static int print_args_stub PARAMS ((PTR));
315
316 /* Pass the args the way catch_errors wants them.  */
317
318 static int
319 print_args_stub (args)
320      PTR args;
321 {
322   int numargs;
323   struct print_args_args *p = (struct print_args_args *) args;
324
325   numargs = FRAME_NUM_ARGS (p->fi);
326   print_frame_args (p->func, p->fi, numargs, p->stream);
327   return 0;
328 }
329
330 /* Print information about a frame for frame "fi" at level "level".
331  * Used in "where" output, also used to emit breakpoint or step messages.
332  * LEVEL is the level of the frame, or -1 if it is the innermost frame
333  * but we don't want to print the level.
334  * The meaning of the SOURCE argument is:
335  * -1: Print only source line
336  *  0: Print only location
337  *  1: Print location and source line
338  */
339
340 static void
341 print_frame_info_base (fi, level, source, args)
342      struct frame_info *fi;
343      int level;
344      int source;
345      int args;
346 {
347   struct symtab_and_line sal;
348   struct symbol *func;
349   register char *funname = 0;
350   enum language funlang = language_unknown;
351
352 #if 0
353   char buf[MAX_REGISTER_RAW_SIZE];
354   CORE_ADDR sp;
355
356   /* On the 68k, this spends too much time in m68k_find_saved_regs.  */
357
358   /* Get the value of SP_REGNUM relative to the frame.  */
359   get_saved_register (buf, (int *) NULL, (CORE_ADDR *) NULL,
360                     FRAME_INFO_ID (fi), SP_REGNUM, (enum lval_type *) NULL);
361   sp = extract_address (buf, REGISTER_RAW_SIZE (SP_REGNUM));
362
363   /* This is not a perfect test, because if a function alloca's some
364      memory, puts some code there, and then jumps into it, then the test
365      will succeed even though there is no call dummy.  Probably best is
366      to check for a bp_call_dummy breakpoint.  */
367   if (PC_IN_CALL_DUMMY (fi->pc, sp, fi->frame))
368 #else
369   if (frame_in_dummy (fi))
370 #endif
371     {
372       annotate_frame_begin (level == -1 ? 0 : level, fi->pc);
373
374       /* Do this regardless of SOURCE because we don't have any source
375          to list for this frame.  */
376       if (level >= 0)
377         printf_filtered ("#%-2d ", level);
378       annotate_function_call ();
379       printf_filtered ("<function called from gdb>\n");
380       annotate_frame_end ();
381       return;
382     }
383   if (fi->signal_handler_caller)
384     {
385       annotate_frame_begin (level == -1 ? 0 : level, fi->pc);
386
387       /* Do this regardless of SOURCE because we don't have any source
388          to list for this frame.  */
389       if (level >= 0)
390         printf_filtered ("#%-2d ", level);
391       annotate_signal_handler_caller ();
392       printf_filtered ("<signal handler called>\n");
393       annotate_frame_end ();
394       return;
395     }
396
397   /* If fi is not the innermost frame, that normally means that fi->pc
398      points to *after* the call instruction, and we want to get the line
399      containing the call, never the next line.  But if the next frame is
400      a signal_handler_caller or a dummy frame, then the next frame was
401      not entered as the result of a call, and we want to get the line
402      containing fi->pc.  */
403   sal =
404     find_pc_line (fi->pc,
405                   fi->next != NULL
406                   && !fi->next->signal_handler_caller
407                   && !frame_in_dummy (fi->next));
408
409   func = find_pc_function (fi->pc);
410   if (func)
411     {
412       /* In certain pathological cases, the symtabs give the wrong
413          function (when we are in the first function in a file which
414          is compiled without debugging symbols, the previous function
415          is compiled with debugging symbols, and the "foo.o" symbol
416          that is supposed to tell us where the file with debugging symbols
417          ends has been truncated by ar because it is longer than 15
418          characters).  This also occurs if the user uses asm() to create
419          a function but not stabs for it (in a file compiled -g).
420
421          So look in the minimal symbol tables as well, and if it comes
422          up with a larger address for the function use that instead.
423          I don't think this can ever cause any problems; there shouldn't
424          be any minimal symbols in the middle of a function; if this is
425          ever changed many parts of GDB will need to be changed (and we'll
426          create a find_pc_minimal_function or some such).  */
427
428       struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
429       if (msymbol != NULL
430           && (SYMBOL_VALUE_ADDRESS (msymbol)
431               > BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
432         {
433 #if 0
434           /* There is no particular reason to think the line number
435              information is wrong.  Someone might have just put in
436              a label with asm() but left the line numbers alone.  */
437           /* In this case we have no way of knowing the source file
438              and line number, so don't print them.  */
439           sal.symtab = 0;
440 #endif
441           /* We also don't know anything about the function besides
442              its address and name.  */
443           func = 0;
444           funname = SYMBOL_NAME (msymbol);
445           funlang = SYMBOL_LANGUAGE (msymbol);
446         }
447       else
448         {
449           /* I'd like to use SYMBOL_SOURCE_NAME() here, to display
450            * the demangled name that we already have stored in
451            * the symbol table, but we stored a version with
452            * DMGL_PARAMS turned on, and here we don't want
453            * to display parameters. So call the demangler again,
454            * with DMGL_ANSI only. RT
455            * (Yes, I know that printf_symbol_filtered() will
456            * again try to demangle the name on the fly, but
457            * the issue is that if cplus_demangle() fails here,
458            * it'll fail there too. So we want to catch the failure
459            * ("demangled==NULL" case below) here, while we still
460            * have our hands on the function symbol.)
461            */
462           char *demangled;
463           funname = SYMBOL_NAME (func);
464           funlang = SYMBOL_LANGUAGE (func);
465           if (funlang == language_cplus)
466             {
467               demangled = cplus_demangle (funname, DMGL_ANSI);
468               if (demangled == NULL)
469                 /* If the demangler fails, try the demangled name
470                  * from the symbol table. This'll have parameters,
471                  * but that's preferable to diplaying a mangled name.
472                  */
473                 funname = SYMBOL_SOURCE_NAME (func);
474             }
475         }
476     }
477   else
478     {
479       struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
480       if (msymbol != NULL)
481         {
482           funname = SYMBOL_NAME (msymbol);
483           funlang = SYMBOL_LANGUAGE (msymbol);
484         }
485     }
486
487   if (source >= 0 || !sal.symtab)
488     {
489       annotate_frame_begin (level == -1 ? 0 : level, fi->pc);
490
491       if (level >= 0)
492         printf_filtered ("#%-2d ", level);
493       if (addressprint)
494         if (fi->pc != sal.pc || !sal.symtab)
495           {
496             annotate_frame_address ();
497             print_address_numeric (fi->pc, 1, gdb_stdout);
498             annotate_frame_address_end ();
499             printf_filtered (" in ");
500           }
501       annotate_frame_function_name ();
502       fprintf_symbol_filtered (gdb_stdout, funname ? funname : "??", funlang,
503                                DMGL_ANSI);
504       wrap_here ("   ");
505       annotate_frame_args ();
506       fputs_filtered (" (", gdb_stdout);
507       if (args)
508         {
509           struct print_args_args args;
510           args.fi = fi;
511           args.func = func;
512           args.stream = gdb_stdout;
513           catch_errors (print_args_stub, &args, "", RETURN_MASK_ALL);
514           QUIT;
515         }
516       printf_filtered (")");
517       if (sal.symtab && sal.symtab->filename)
518         {
519           annotate_frame_source_begin ();
520           wrap_here ("   ");
521           printf_filtered (" at ");
522           annotate_frame_source_file ();
523           printf_filtered ("%s", sal.symtab->filename);
524           annotate_frame_source_file_end ();
525           printf_filtered (":");
526           annotate_frame_source_line ();
527           printf_filtered ("%d", sal.line);
528           annotate_frame_source_end ();
529         }
530
531 #ifdef PC_LOAD_SEGMENT
532       /* If we couldn't print out function name but if can figure out what
533          load segment this pc value is from, at least print out some info
534          about its load segment. */
535       if (!funname)
536         {
537           annotate_frame_where ();
538           wrap_here ("  ");
539           printf_filtered (" from %s", PC_LOAD_SEGMENT (fi->pc));
540         }
541 #endif
542 #ifdef PC_SOLIB
543       if (!funname || (!sal.symtab || !sal.symtab->filename))
544         {
545           char *lib = PC_SOLIB (fi->pc);
546           if (lib)
547             {
548               annotate_frame_where ();
549               wrap_here ("  ");
550               printf_filtered (" from %s", lib);
551             }
552         }
553 #endif
554       printf_filtered ("\n");
555     }
556
557   if ((source != 0) && sal.symtab)
558     {
559       int done = 0;
560       int mid_statement = source < 0 && fi->pc != sal.pc;
561       if (annotation_level)
562         done = identify_source_line (sal.symtab, sal.line, mid_statement,
563                                      fi->pc);
564       if (!done)
565         {
566           if (addressprint && mid_statement && !tui_version)
567             {
568               print_address_numeric (fi->pc, 1, gdb_stdout);
569               printf_filtered ("\t");
570             }
571           if (print_frame_info_listing_hook)
572             print_frame_info_listing_hook (sal.symtab, sal.line, sal.line + 1, 0);
573           else if (!tui_version)
574             print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
575         }
576       current_source_line = max (sal.line - lines_to_list / 2, 1);
577     }
578   if (source != 0)
579     set_default_breakpoint (1, fi->pc, sal.symtab, sal.line);
580
581   annotate_frame_end ();
582
583   gdb_flush (gdb_stdout);
584 }
585 \f
586
587 #if 0
588 void
589 stack_publish_stopped_with_no_frame ()
590 {
591   TUIDO (((TuiOpaqueFuncPtr) tuiUpdateOnEnd));
592
593   return;
594 }
595 #endif
596
597 /* Show or print the frame info.  If this is the tui, it will be shown in 
598    the source display */
599 void
600 print_frame_info (fi, level, source, args)
601      struct frame_info *fi;
602      register int level;
603      int source;
604      int args;
605 {
606   if (!tui_version)
607     print_frame_info_base (fi, level, source, args);
608   else
609     {
610       if (fi && (frame_in_dummy (fi) || fi->signal_handler_caller))
611         print_frame_info_base (fi, level, source, args);
612       else
613         {
614           TUIDO (((TuiOpaqueFuncPtr) tui_vShowFrameInfo, fi));
615         }
616     }
617 }
618
619 /* Show the frame info.  If this is the tui, it will be shown in 
620    the source display otherwise, nothing is done */
621 void
622 show_stack_frame (fi)
623      struct frame_info *fi;
624 {
625   TUIDO (((TuiOpaqueFuncPtr) tui_vShowFrameInfo, fi));
626 }
627 \f
628
629 /* Read a frame specification in whatever the appropriate format is.
630    Call error() if the specification is in any way invalid (i.e.
631    this function never returns NULL).  */
632
633 struct frame_info *
634 parse_frame_specification (frame_exp)
635      char *frame_exp;
636 {
637   int numargs = 0;
638 #define MAXARGS 4
639   CORE_ADDR args[MAXARGS];
640
641   if (frame_exp)
642     {
643       char *addr_string, *p;
644       struct cleanup *tmp_cleanup;
645
646       while (*frame_exp == ' ')
647         frame_exp++;
648
649       while (*frame_exp)
650         {
651           if (numargs > MAXARGS)
652             error ("Too many args in frame specification");
653           /* Parse an argument.  */
654           for (p = frame_exp; *p && *p != ' '; p++)
655             ;
656           addr_string = savestring (frame_exp, p - frame_exp);
657
658           {
659             tmp_cleanup = make_cleanup (free, addr_string);
660             args[numargs++] = parse_and_eval_address (addr_string);
661             do_cleanups (tmp_cleanup);
662           }
663
664           /* Skip spaces, move to possible next arg.  */
665           while (*p == ' ')
666             p++;
667           frame_exp = p;
668         }
669     }
670
671   switch (numargs)
672     {
673     case 0:
674       if (selected_frame == NULL)
675         error ("No selected frame.");
676       return selected_frame;
677       /* NOTREACHED */
678     case 1:
679       {
680         int level = args[0];
681         struct frame_info *fid =
682         find_relative_frame (get_current_frame (), &level);
683         struct frame_info *tfid;
684
685         if (level == 0)
686           /* find_relative_frame was successful */
687           return fid;
688
689         /* If SETUP_ARBITRARY_FRAME is defined, then frame specifications
690            take at least 2 addresses.  It is important to detect this case
691            here so that "frame 100" does not give a confusing error message
692            like "frame specification requires two addresses".  This of course
693            does not solve the "frame 100" problem for machines on which
694            a frame specification can be made with one address.  To solve
695            that, we need a new syntax for a specifying a frame by address.
696            I think the cleanest syntax is $frame(0x45) ($frame(0x23,0x45) for
697            two args, etc.), but people might think that is too much typing,
698            so I guess *0x23,0x45 would be a possible alternative (commas
699            really should be used instead of spaces to delimit; using spaces
700            normally works in an expression).  */
701 #ifdef SETUP_ARBITRARY_FRAME
702         error ("No frame %d", args[0]);
703 #endif
704
705         /* If (s)he specifies the frame with an address, he deserves what
706            (s)he gets.  Still, give the highest one that matches.  */
707
708         for (fid = get_current_frame ();
709              fid && fid->frame != args[0];
710              fid = get_prev_frame (fid))
711           ;
712
713         if (fid)
714           while ((tfid = get_prev_frame (fid)) &&
715                  (tfid->frame == args[0]))
716             fid = tfid;
717
718         /* We couldn't identify the frame as an existing frame, but
719            perhaps we can create one with a single argument.  */
720       }
721
722     default:
723 #ifdef SETUP_ARBITRARY_FRAME
724       return SETUP_ARBITRARY_FRAME (numargs, args);
725 #else
726       /* Usual case.  Do it here rather than have everyone supply
727          a SETUP_ARBITRARY_FRAME that does this.  */
728       if (numargs == 1)
729         return create_new_frame (args[0], 0);
730       error ("Too many args in frame specification");
731 #endif
732       /* NOTREACHED */
733     }
734   /* NOTREACHED */
735 }
736
737 /* FRAME_ARGS_ADDRESS_CORRECT is just like FRAME_ARGS_ADDRESS except
738    that if it is unsure about the answer, it returns 0
739    instead of guessing (this happens on the VAX and i960, for example).
740
741    On most machines, we never have to guess about the args address,
742    so FRAME_ARGS_ADDRESS{,_CORRECT} are the same.  */
743 #if !defined (FRAME_ARGS_ADDRESS_CORRECT)
744 #define FRAME_ARGS_ADDRESS_CORRECT FRAME_ARGS_ADDRESS
745 #endif
746
747 /* Print verbosely the selected frame or the frame at address ADDR.
748    This means absolutely all information in the frame is printed.  */
749
750 static void
751 frame_info (addr_exp, from_tty)
752      char *addr_exp;
753      int from_tty;
754 {
755   struct frame_info *fi;
756   struct symtab_and_line sal;
757   struct symbol *func;
758   struct symtab *s;
759   struct frame_info *calling_frame_info;
760   int i, count, numregs;
761   char *funname = 0;
762   enum language funlang = language_unknown;
763
764   if (!target_has_stack)
765     error ("No stack.");
766
767   fi = parse_frame_specification (addr_exp);
768   if (fi == NULL)
769     error ("Invalid frame specified.");
770
771   sal = find_pc_line (fi->pc,
772                       fi->next != NULL
773                       && !fi->next->signal_handler_caller
774                       && !frame_in_dummy (fi->next));
775   func = get_frame_function (fi);
776   s = find_pc_symtab (fi->pc);
777   if (func)
778     {
779       /* I'd like to use SYMBOL_SOURCE_NAME() here, to display
780        * the demangled name that we already have stored in
781        * the symbol table, but we stored a version with
782        * DMGL_PARAMS turned on, and here we don't want
783        * to display parameters. So call the demangler again,
784        * with DMGL_ANSI only. RT
785        * (Yes, I know that printf_symbol_filtered() will
786        * again try to demangle the name on the fly, but
787        * the issue is that if cplus_demangle() fails here,
788        * it'll fail there too. So we want to catch the failure
789        * ("demangled==NULL" case below) here, while we still
790        * have our hands on the function symbol.)
791        */
792       char *demangled;
793       funname = SYMBOL_NAME (func);
794       funlang = SYMBOL_LANGUAGE (func);
795       if (funlang == language_cplus)
796         {
797           demangled = cplus_demangle (funname, DMGL_ANSI);
798           /* If the demangler fails, try the demangled name
799            * from the symbol table. This'll have parameters,
800            * but that's preferable to diplaying a mangled name.
801            */
802           if (demangled == NULL)
803             funname = SYMBOL_SOURCE_NAME (func);
804         }
805     }
806   else
807     {
808       register struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
809       if (msymbol != NULL)
810         {
811           funname = SYMBOL_NAME (msymbol);
812           funlang = SYMBOL_LANGUAGE (msymbol);
813         }
814     }
815   calling_frame_info = get_prev_frame (fi);
816
817   if (!addr_exp && selected_frame_level >= 0)
818     {
819       printf_filtered ("Stack level %d, frame at ", selected_frame_level);
820       print_address_numeric (fi->frame, 1, gdb_stdout);
821       printf_filtered (":\n");
822     }
823   else
824     {
825       printf_filtered ("Stack frame at ");
826       print_address_numeric (fi->frame, 1, gdb_stdout);
827       printf_filtered (":\n");
828     }
829   printf_filtered (" %s = ", REGISTER_NAME (PC_REGNUM));
830   print_address_numeric (fi->pc, 1, gdb_stdout);
831
832   wrap_here ("   ");
833   if (funname)
834     {
835       printf_filtered (" in ");
836       fprintf_symbol_filtered (gdb_stdout, funname, funlang,
837                                DMGL_ANSI | DMGL_PARAMS);
838     }
839   wrap_here ("   ");
840   if (sal.symtab)
841     printf_filtered (" (%s:%d)", sal.symtab->filename, sal.line);
842   puts_filtered ("; ");
843   wrap_here ("    ");
844   printf_filtered ("saved %s ", REGISTER_NAME (PC_REGNUM));
845   print_address_numeric (FRAME_SAVED_PC (fi), 1, gdb_stdout);
846   printf_filtered ("\n");
847
848   {
849     int frameless;
850     frameless = FRAMELESS_FUNCTION_INVOCATION (fi);
851     if (frameless)
852       printf_filtered (" (FRAMELESS),");
853   }
854
855   if (calling_frame_info)
856     {
857       printf_filtered (" called by frame at ");
858       print_address_numeric (calling_frame_info->frame, 1, gdb_stdout);
859     }
860   if (fi->next && calling_frame_info)
861     puts_filtered (",");
862   wrap_here ("   ");
863   if (fi->next)
864     {
865       printf_filtered (" caller of frame at ");
866       print_address_numeric (fi->next->frame, 1, gdb_stdout);
867     }
868   if (fi->next || calling_frame_info)
869     puts_filtered ("\n");
870   if (s)
871     printf_filtered (" source language %s.\n", language_str (s->language));
872
873 #ifdef PRINT_EXTRA_FRAME_INFO
874   PRINT_EXTRA_FRAME_INFO (fi);
875 #endif
876
877   {
878     /* Address of the argument list for this frame, or 0.  */
879     CORE_ADDR arg_list = FRAME_ARGS_ADDRESS_CORRECT (fi);
880     /* Number of args for this frame, or -1 if unknown.  */
881     int numargs;
882
883     if (arg_list == 0)
884       printf_filtered (" Arglist at unknown address.\n");
885     else
886       {
887         printf_filtered (" Arglist at ");
888         print_address_numeric (arg_list, 1, gdb_stdout);
889         printf_filtered (",");
890
891         numargs = FRAME_NUM_ARGS (fi);
892         if (numargs < 0)
893           puts_filtered (" args: ");
894         else if (numargs == 0)
895           puts_filtered (" no args.");
896         else if (numargs == 1)
897           puts_filtered (" 1 arg: ");
898         else
899           printf_filtered (" %d args: ", numargs);
900         print_frame_args (func, fi, numargs, gdb_stdout);
901         puts_filtered ("\n");
902       }
903   }
904   {
905     /* Address of the local variables for this frame, or 0.  */
906     CORE_ADDR arg_list = FRAME_LOCALS_ADDRESS (fi);
907
908     if (arg_list == 0)
909       printf_filtered (" Locals at unknown address,");
910     else
911       {
912         printf_filtered (" Locals at ");
913         print_address_numeric (arg_list, 1, gdb_stdout);
914         printf_filtered (",");
915       }
916   }
917
918   FRAME_INIT_SAVED_REGS (fi);
919   if (fi->saved_regs != NULL)
920     {
921       /* The sp is special; what's returned isn't the save address, but
922          actually the value of the previous frame's sp.  */
923       printf_filtered (" Previous frame's sp is ");
924       print_address_numeric (fi->saved_regs[SP_REGNUM], 1, gdb_stdout);
925       printf_filtered ("\n");
926       count = 0;
927       numregs = ARCH_NUM_REGS;
928       for (i = 0; i < numregs; i++)
929         if (fi->saved_regs[i] && i != SP_REGNUM)
930           {
931             if (count == 0)
932               puts_filtered (" Saved registers:\n ");
933             else
934               puts_filtered (",");
935             wrap_here (" ");
936             printf_filtered (" %s at ", REGISTER_NAME (i));
937             print_address_numeric (fi->saved_regs[i], 1, gdb_stdout);
938             count++;
939           }
940       if (count)
941         puts_filtered ("\n");
942     }
943   else
944     {
945       /* We could get some information about saved registers by
946          calling get_saved_register on each register.  Which info goes
947          with which frame is necessarily lost, however, and I suspect
948          that the users don't care whether they get the info.  */
949       puts_filtered ("\n");
950     }
951 }
952
953 #if 0
954 /* Set a limit on the number of frames printed by default in a
955    backtrace.  */
956
957 static int backtrace_limit;
958
959 static void
960 set_backtrace_limit_command (count_exp, from_tty)
961      char *count_exp;
962      int from_tty;
963 {
964   int count = parse_and_eval_address (count_exp);
965
966   if (count < 0)
967     error ("Negative argument not meaningful as backtrace limit.");
968
969   backtrace_limit = count;
970 }
971
972 static void
973 backtrace_limit_info (arg, from_tty)
974      char *arg;
975      int from_tty;
976 {
977   if (arg)
978     error ("\"Info backtrace-limit\" takes no arguments.");
979
980   printf_unfiltered ("Backtrace limit: %d.\n", backtrace_limit);
981 }
982 #endif
983
984 /* Print briefly all stack frames or just the innermost COUNT frames.  */
985
986 static void backtrace_command_1 PARAMS ((char *count_exp, int show_locals, int from_tty));
987 static void
988 backtrace_command_1 (count_exp, show_locals, from_tty)
989      char *count_exp;
990      int show_locals;
991      int from_tty;
992 {
993   struct frame_info *fi;
994   register int count;
995   register int i;
996   register struct frame_info *trailing;
997   register int trailing_level;
998
999   if (!target_has_stack)
1000     error ("No stack.");
1001
1002   /* The following code must do two things.  First, it must
1003      set the variable TRAILING to the frame from which we should start
1004      printing.  Second, it must set the variable count to the number
1005      of frames which we should print, or -1 if all of them.  */
1006   trailing = get_current_frame ();
1007   trailing_level = 0;
1008   if (count_exp)
1009     {
1010       count = parse_and_eval_address (count_exp);
1011       if (count < 0)
1012         {
1013           struct frame_info *current;
1014
1015           count = -count;
1016
1017           current = trailing;
1018           while (current && count--)
1019             {
1020               QUIT;
1021               current = get_prev_frame (current);
1022             }
1023
1024           /* Will stop when CURRENT reaches the top of the stack.  TRAILING
1025              will be COUNT below it.  */
1026           while (current)
1027             {
1028               QUIT;
1029               trailing = get_prev_frame (trailing);
1030               current = get_prev_frame (current);
1031               trailing_level++;
1032             }
1033
1034           count = -1;
1035         }
1036     }
1037   else
1038     count = -1;
1039
1040   if (info_verbose)
1041     {
1042       struct partial_symtab *ps;
1043
1044       /* Read in symbols for all of the frames.  Need to do this in
1045          a separate pass so that "Reading in symbols for xxx" messages
1046          don't screw up the appearance of the backtrace.  Also
1047          if people have strong opinions against reading symbols for
1048          backtrace this may have to be an option.  */
1049       i = count;
1050       for (fi = trailing;
1051            fi != NULL && i--;
1052            fi = get_prev_frame (fi))
1053         {
1054           QUIT;
1055           ps = find_pc_psymtab (fi->pc);
1056           if (ps)
1057             PSYMTAB_TO_SYMTAB (ps);     /* Force syms to come in */
1058         }
1059     }
1060
1061   for (i = 0, fi = trailing;
1062        fi && count--;
1063        i++, fi = get_prev_frame (fi))
1064     {
1065       QUIT;
1066
1067       /* Don't use print_stack_frame; if an error() occurs it probably
1068          means further attempts to backtrace would fail (on the other
1069          hand, perhaps the code does or could be fixed to make sure
1070          the frame->prev field gets set to NULL in that case).  */
1071       print_frame_info_base (fi, trailing_level + i, 0, 1);
1072       if (show_locals)
1073         print_frame_local_vars (fi, 1, gdb_stdout);
1074     }
1075
1076   /* If we've stopped before the end, mention that.  */
1077   if (fi && from_tty)
1078     printf_filtered ("(More stack frames follow...)\n");
1079 }
1080
1081 static void
1082 backtrace_command (arg, from_tty)
1083      char *arg;
1084      int from_tty;
1085 {
1086   struct cleanup *old_chain = (struct cleanup *) NULL;
1087   char **argv = (char **) NULL;
1088   int argIndicatingFullTrace = (-1), totArgLen = 0, argc = 0;
1089   char *argPtr = arg;
1090
1091   if (arg != (char *) NULL)
1092     {
1093       int i;
1094
1095       argv = buildargv (arg);
1096       old_chain = make_cleanup_freeargv (argv);
1097       argc = 0;
1098       for (i = 0; (argv[i] != (char *) NULL); i++)
1099         {
1100           int j;
1101
1102           for (j = 0; (j < strlen (argv[i])); j++)
1103             argv[i][j] = tolower (argv[i][j]);
1104
1105           if (argIndicatingFullTrace < 0 && subset_compare (argv[i], "full"))
1106             argIndicatingFullTrace = argc;
1107           else
1108             {
1109               argc++;
1110               totArgLen += strlen (argv[i]);
1111             }
1112         }
1113       totArgLen += argc;
1114       if (argIndicatingFullTrace >= 0)
1115         {
1116           if (totArgLen > 0)
1117             {
1118               argPtr = (char *) xmalloc (totArgLen + 1);
1119               if (!argPtr)
1120                 nomem (0);
1121               else
1122                 {
1123                   memset (argPtr, 0, totArgLen + 1);
1124                   for (i = 0; (i < (argc + 1)); i++)
1125                     {
1126                       if (i != argIndicatingFullTrace)
1127                         {
1128                           strcat (argPtr, argv[i]);
1129                           strcat (argPtr, " ");
1130                         }
1131                     }
1132                 }
1133             }
1134           else
1135             argPtr = (char *) NULL;
1136         }
1137     }
1138
1139   backtrace_command_1 (argPtr, (argIndicatingFullTrace >= 0), from_tty);
1140
1141   if (argIndicatingFullTrace >= 0 && totArgLen > 0)
1142     free (argPtr);
1143
1144   if (old_chain)
1145     do_cleanups (old_chain);
1146 }
1147
1148 static void backtrace_full_command PARAMS ((char *arg, int from_tty));
1149 static void
1150 backtrace_full_command (arg, from_tty)
1151      char *arg;
1152      int from_tty;
1153 {
1154   backtrace_command_1 (arg, 1, from_tty);
1155 }
1156 \f
1157
1158 /* Print the local variables of a block B active in FRAME.
1159    Return 1 if any variables were printed; 0 otherwise.  */
1160
1161 static int
1162 print_block_frame_locals (b, fi, num_tabs, stream)
1163      struct block *b;
1164      register struct frame_info *fi;
1165      int num_tabs;
1166      register GDB_FILE *stream;
1167 {
1168   int nsyms;
1169   register int i, j;
1170   register struct symbol *sym;
1171   register int values_printed = 0;
1172
1173   nsyms = BLOCK_NSYMS (b);
1174
1175   for (i = 0; i < nsyms; i++)
1176     {
1177       sym = BLOCK_SYM (b, i);
1178       switch (SYMBOL_CLASS (sym))
1179         {
1180         case LOC_LOCAL:
1181         case LOC_REGISTER:
1182         case LOC_STATIC:
1183         case LOC_BASEREG:
1184           values_printed = 1;
1185           for (j = 0; j < num_tabs; j++)
1186             fputs_filtered ("\t", stream);
1187           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
1188           fputs_filtered (" = ", stream);
1189           print_variable_value (sym, fi, stream);
1190           fprintf_filtered (stream, "\n");
1191           break;
1192
1193         default:
1194           /* Ignore symbols which are not locals.  */
1195           break;
1196         }
1197     }
1198   return values_printed;
1199 }
1200
1201 /* Same, but print labels.  */
1202
1203 static int
1204 print_block_frame_labels (b, have_default, stream)
1205      struct block *b;
1206      int *have_default;
1207      register GDB_FILE *stream;
1208 {
1209   int nsyms;
1210   register int i;
1211   register struct symbol *sym;
1212   register int values_printed = 0;
1213
1214   nsyms = BLOCK_NSYMS (b);
1215
1216   for (i = 0; i < nsyms; i++)
1217     {
1218       sym = BLOCK_SYM (b, i);
1219       if (STREQ (SYMBOL_NAME (sym), "default"))
1220         {
1221           if (*have_default)
1222             continue;
1223           *have_default = 1;
1224         }
1225       if (SYMBOL_CLASS (sym) == LOC_LABEL)
1226         {
1227           struct symtab_and_line sal;
1228           sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
1229           values_printed = 1;
1230           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
1231           if (addressprint)
1232             {
1233               fprintf_filtered (stream, " ");
1234               print_address_numeric (SYMBOL_VALUE_ADDRESS (sym), 1, stream);
1235             }
1236           fprintf_filtered (stream, " in file %s, line %d\n",
1237                             sal.symtab->filename, sal.line);
1238         }
1239     }
1240   return values_printed;
1241 }
1242
1243 /* Print on STREAM all the local variables in frame FRAME,
1244    including all the blocks active in that frame
1245    at its current pc.
1246
1247    Returns 1 if the job was done,
1248    or 0 if nothing was printed because we have no info
1249    on the function running in FRAME.  */
1250
1251 static void
1252 print_frame_local_vars (fi, num_tabs, stream)
1253      register struct frame_info *fi;
1254      register int num_tabs;
1255      register GDB_FILE *stream;
1256 {
1257   register struct block *block = get_frame_block (fi);
1258   register int values_printed = 0;
1259
1260   if (block == 0)
1261     {
1262       fprintf_filtered (stream, "No symbol table info available.\n");
1263       return;
1264     }
1265
1266   while (block != 0)
1267     {
1268       if (print_block_frame_locals (block, fi, num_tabs, stream))
1269         values_printed = 1;
1270       /* After handling the function's top-level block, stop.
1271          Don't continue to its superblock, the block of
1272          per-file symbols.  */
1273       if (BLOCK_FUNCTION (block))
1274         break;
1275       block = BLOCK_SUPERBLOCK (block);
1276     }
1277
1278   if (!values_printed)
1279     {
1280       fprintf_filtered (stream, "No locals.\n");
1281     }
1282 }
1283
1284 /* Same, but print labels.  */
1285
1286 static void
1287 print_frame_label_vars (fi, this_level_only, stream)
1288      register struct frame_info *fi;
1289      int this_level_only;
1290      register GDB_FILE *stream;
1291 {
1292   register struct blockvector *bl;
1293   register struct block *block = get_frame_block (fi);
1294   register int values_printed = 0;
1295   int index, have_default = 0;
1296   char *blocks_printed;
1297   CORE_ADDR pc = fi->pc;
1298
1299   if (block == 0)
1300     {
1301       fprintf_filtered (stream, "No symbol table info available.\n");
1302       return;
1303     }
1304
1305   bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
1306   blocks_printed = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
1307   memset (blocks_printed, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
1308
1309   while (block != 0)
1310     {
1311       CORE_ADDR end = BLOCK_END (block) - 4;
1312       int last_index;
1313
1314       if (bl != blockvector_for_pc (end, &index))
1315         error ("blockvector blotch");
1316       if (BLOCKVECTOR_BLOCK (bl, index) != block)
1317         error ("blockvector botch");
1318       last_index = BLOCKVECTOR_NBLOCKS (bl);
1319       index += 1;
1320
1321       /* Don't print out blocks that have gone by.  */
1322       while (index < last_index
1323              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
1324         index++;
1325
1326       while (index < last_index
1327              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
1328         {
1329           if (blocks_printed[index] == 0)
1330             {
1331               if (print_block_frame_labels (BLOCKVECTOR_BLOCK (bl, index), &have_default, stream))
1332                 values_printed = 1;
1333               blocks_printed[index] = 1;
1334             }
1335           index++;
1336         }
1337       if (have_default)
1338         return;
1339       if (values_printed && this_level_only)
1340         return;
1341
1342       /* After handling the function's top-level block, stop.
1343          Don't continue to its superblock, the block of
1344          per-file symbols.  */
1345       if (BLOCK_FUNCTION (block))
1346         break;
1347       block = BLOCK_SUPERBLOCK (block);
1348     }
1349
1350   if (!values_printed && !this_level_only)
1351     {
1352       fprintf_filtered (stream, "No catches.\n");
1353     }
1354 }
1355
1356 /* ARGSUSED */
1357 void
1358 locals_info (args, from_tty)
1359      char *args;
1360      int from_tty;
1361 {
1362   if (!selected_frame)
1363     error ("No frame selected.");
1364   print_frame_local_vars (selected_frame, 0, gdb_stdout);
1365 }
1366
1367 static void
1368 catch_info (ignore, from_tty)
1369      char *ignore;
1370      int from_tty;
1371 {
1372   struct symtab_and_line *sal;
1373
1374   /* Check for target support for exception handling */
1375   sal = target_enable_exception_callback (EX_EVENT_CATCH, 1);
1376   if (sal)
1377     {
1378       /* Currently not handling this */
1379       /* Ideally, here we should interact with the C++ runtime
1380          system to find the list of active handlers, etc. */
1381       fprintf_filtered (gdb_stdout, "Info catch not supported with this target/compiler combination.\n");
1382 #if 0
1383       if (!selected_frame)
1384         error ("No frame selected.");
1385 #endif
1386     }
1387   else
1388     {
1389       /* Assume g++ compiled code -- old v 4.16 behaviour */
1390       if (!selected_frame)
1391         error ("No frame selected.");
1392
1393       print_frame_label_vars (selected_frame, 0, gdb_stdout);
1394     }
1395 }
1396
1397 static void
1398 print_frame_arg_vars (fi, stream)
1399      register struct frame_info *fi;
1400      register GDB_FILE *stream;
1401 {
1402   struct symbol *func = get_frame_function (fi);
1403   register struct block *b;
1404   int nsyms;
1405   register int i;
1406   register struct symbol *sym, *sym2;
1407   register int values_printed = 0;
1408
1409   if (func == 0)
1410     {
1411       fprintf_filtered (stream, "No symbol table info available.\n");
1412       return;
1413     }
1414
1415   b = SYMBOL_BLOCK_VALUE (func);
1416   nsyms = BLOCK_NSYMS (b);
1417
1418   for (i = 0; i < nsyms; i++)
1419     {
1420       sym = BLOCK_SYM (b, i);
1421       switch (SYMBOL_CLASS (sym))
1422         {
1423         case LOC_ARG:
1424         case LOC_LOCAL_ARG:
1425         case LOC_REF_ARG:
1426         case LOC_REGPARM:
1427         case LOC_REGPARM_ADDR:
1428         case LOC_BASEREG_ARG:
1429           values_printed = 1;
1430           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
1431           fputs_filtered (" = ", stream);
1432
1433           /* We have to look up the symbol because arguments can have
1434              two entries (one a parameter, one a local) and the one we
1435              want is the local, which lookup_symbol will find for us.
1436              This includes gcc1 (not gcc2) on the sparc when passing a
1437              small structure and gcc2 when the argument type is float
1438              and it is passed as a double and converted to float by
1439              the prologue (in the latter case the type of the LOC_ARG
1440              symbol is double and the type of the LOC_LOCAL symbol is
1441              float).  There are also LOC_ARG/LOC_REGISTER pairs which
1442              are not combined in symbol-reading.  */
1443
1444           sym2 = lookup_symbol (SYMBOL_NAME (sym),
1445                    b, VAR_NAMESPACE, (int *) NULL, (struct symtab **) NULL);
1446           print_variable_value (sym2, fi, stream);
1447           fprintf_filtered (stream, "\n");
1448           break;
1449
1450         default:
1451           /* Don't worry about things which aren't arguments.  */
1452           break;
1453         }
1454     }
1455
1456   if (!values_printed)
1457     {
1458       fprintf_filtered (stream, "No arguments.\n");
1459     }
1460 }
1461
1462 void
1463 args_info (ignore, from_tty)
1464      char *ignore;
1465      int from_tty;
1466 {
1467   if (!selected_frame)
1468     error ("No frame selected.");
1469   print_frame_arg_vars (selected_frame, gdb_stdout);
1470 }
1471
1472
1473 static void
1474 args_plus_locals_info (ignore, from_tty)
1475      char *ignore;
1476      int from_tty;
1477 {
1478   args_info (ignore, from_tty);
1479   locals_info (ignore, from_tty);
1480 }
1481 \f
1482
1483 /* Select frame FI, and note that its stack level is LEVEL.
1484    LEVEL may be -1 if an actual level number is not known.  */
1485
1486 void
1487 select_frame (fi, level)
1488      struct frame_info *fi;
1489      int level;
1490 {
1491   register struct symtab *s;
1492
1493   selected_frame = fi;
1494   selected_frame_level = level;
1495   if (selected_frame_level_changed_hook)
1496     selected_frame_level_changed_hook (level);
1497
1498   /* Ensure that symbols for this frame are read in.  Also, determine the
1499      source language of this frame, and switch to it if desired.  */
1500   if (fi)
1501     {
1502       s = find_pc_symtab (fi->pc);
1503       if (s
1504           && s->language != current_language->la_language
1505           && s->language != language_unknown
1506           && language_mode == language_mode_auto)
1507         {
1508           set_language (s->language);
1509         }
1510       /* elz: this if here fixes the problem with the pc not being displayed
1511          in the tui asm layout, with no debug symbols. The value of s 
1512          would be 0 here, and select_source_symtab would abort the
1513          command by calling the 'error' function */
1514       if (s)
1515         {
1516           TUIDO (((TuiOpaqueFuncPtr) tui_vSelectSourceSymtab, s));
1517         }
1518     }
1519 }
1520 \f
1521
1522 /* Select frame FI, noting that its stack level is LEVEL.  Also print
1523    the stack frame and show the source if this is the tui version.  */
1524 void
1525 select_and_print_frame (fi, level)
1526      struct frame_info *fi;
1527      int level;
1528 {
1529   select_frame (fi, level);
1530   if (fi)
1531     {
1532       print_stack_frame (fi, level, 1);
1533       TUIDO (((TuiOpaqueFuncPtr) tui_vCheckDataValues, fi));
1534     }
1535 }
1536 \f
1537
1538 /* Select frame FI, noting that its stack level is LEVEL.  Be silent if
1539    not the TUI */
1540 #if 0
1541 void
1542 select_and_maybe_print_frame (fi, level)
1543      struct frame_info *fi;
1544      int level;
1545 {
1546   if (!tui_version)
1547     select_frame (fi, level);
1548   else
1549     select_and_print_frame (fi, level);
1550 }
1551 #endif
1552
1553
1554 /* Store the selected frame and its level into *FRAMEP and *LEVELP.
1555    If there is no selected frame, *FRAMEP is set to NULL.  */
1556
1557 void
1558 record_selected_frame (frameaddrp, levelp)
1559      CORE_ADDR *frameaddrp;
1560      int *levelp;
1561 {
1562   *frameaddrp = selected_frame ? selected_frame->frame : 0;
1563   *levelp = selected_frame_level;
1564 }
1565
1566 /* Return the symbol-block in which the selected frame is executing.
1567    Can return zero under various legitimate circumstances.  */
1568
1569 struct block *
1570 get_selected_block ()
1571 {
1572   if (!target_has_stack)
1573     return 0;
1574
1575   if (!selected_frame)
1576     return get_current_block ();
1577   return get_frame_block (selected_frame);
1578 }
1579
1580 /* Find a frame a certain number of levels away from FRAME.
1581    LEVEL_OFFSET_PTR points to an int containing the number of levels.
1582    Positive means go to earlier frames (up); negative, the reverse.
1583    The int that contains the number of levels is counted toward
1584    zero as the frames for those levels are found.
1585    If the top or bottom frame is reached, that frame is returned,
1586    but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
1587    how much farther the original request asked to go.  */
1588
1589 struct frame_info *
1590 find_relative_frame (frame, level_offset_ptr)
1591      register struct frame_info *frame;
1592      register int *level_offset_ptr;
1593 {
1594   register struct frame_info *prev;
1595   register struct frame_info *frame1;
1596
1597   /* Going up is simple: just do get_prev_frame enough times
1598      or until initial frame is reached.  */
1599   while (*level_offset_ptr > 0)
1600     {
1601       prev = get_prev_frame (frame);
1602       if (prev == 0)
1603         break;
1604       (*level_offset_ptr)--;
1605       frame = prev;
1606     }
1607   /* Going down is just as simple.  */
1608   if (*level_offset_ptr < 0)
1609     {
1610       while (*level_offset_ptr < 0)
1611         {
1612           frame1 = get_next_frame (frame);
1613           if (!frame1)
1614             break;
1615           frame = frame1;
1616           (*level_offset_ptr)++;
1617         }
1618     }
1619   return frame;
1620 }
1621
1622 /* The "select_frame" command.  With no arg, NOP.
1623    With arg LEVEL_EXP, select the frame at level LEVEL if it is a
1624    valid level.  Otherwise, treat level_exp as an address expression
1625    and select it.  See parse_frame_specification for more info on proper
1626    frame expressions. */
1627
1628 /* ARGSUSED */
1629 static void
1630 select_frame_command (level_exp, from_tty)
1631      char *level_exp;
1632      int from_tty;
1633 {
1634   register struct frame_info *frame, *frame1;
1635   unsigned int level = 0;
1636
1637   if (!target_has_stack)
1638     error ("No stack.");
1639
1640   frame = parse_frame_specification (level_exp);
1641
1642   /* Try to figure out what level this frame is.  But if there is
1643      no current stack, don't error out -- let the user set one.  */
1644   frame1 = 0;
1645   if (get_current_frame ())
1646     {
1647       for (frame1 = get_prev_frame (0);
1648            frame1 && frame1 != frame;
1649            frame1 = get_prev_frame (frame1))
1650         level++;
1651     }
1652
1653   if (!frame1)
1654     level = 0;
1655
1656   select_frame (frame, level);
1657 }
1658
1659 /* The "frame" command.  With no arg, print selected frame briefly.
1660    With arg, behaves like select_frame and then prints the selected
1661    frame.  */
1662
1663 void
1664 frame_command (level_exp, from_tty)
1665      char *level_exp;
1666      int from_tty;
1667 {
1668   select_frame_command (level_exp, from_tty);
1669   show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
1670 }
1671
1672 /* The XDB Compatibility command to print the current frame. */
1673
1674 static void
1675 current_frame_command (level_exp, from_tty)
1676      char *level_exp;
1677      int from_tty;
1678 {
1679   if (target_has_stack == 0 || selected_frame == 0)
1680     error ("No stack.");
1681   print_only_stack_frame (selected_frame, selected_frame_level, 1);
1682 }
1683
1684 /* Select the frame up one or COUNT stack levels
1685    from the previously selected frame, and print it briefly.  */
1686
1687 /* ARGSUSED */
1688 static void
1689 up_silently_base (count_exp)
1690      char *count_exp;
1691 {
1692   register struct frame_info *fi;
1693   int count = 1, count1;
1694   if (count_exp)
1695     count = parse_and_eval_address (count_exp);
1696   count1 = count;
1697
1698   if (target_has_stack == 0 || selected_frame == 0)
1699     error ("No stack.");
1700
1701   fi = find_relative_frame (selected_frame, &count1);
1702   if (count1 != 0 && count_exp == 0)
1703     error ("Initial frame selected; you cannot go up.");
1704   select_frame (fi, selected_frame_level + count - count1);
1705 }
1706
1707 static void
1708 up_silently_command (count_exp, from_tty)
1709      char *count_exp;
1710      int from_tty;
1711 {
1712   up_silently_base (count_exp);
1713   if (tui_version)
1714     print_stack_frame (selected_frame, selected_frame_level, 1);
1715 }
1716
1717 static void
1718 up_command (count_exp, from_tty)
1719      char *count_exp;
1720      int from_tty;
1721 {
1722   up_silently_base (count_exp);
1723   show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
1724 }
1725
1726 /* Select the frame down one or COUNT stack levels
1727    from the previously selected frame, and print it briefly.  */
1728
1729 /* ARGSUSED */
1730 static void
1731 down_silently_base (count_exp)
1732      char *count_exp;
1733 {
1734   register struct frame_info *frame;
1735   int count = -1, count1;
1736   if (count_exp)
1737     count = -parse_and_eval_address (count_exp);
1738   count1 = count;
1739
1740   if (target_has_stack == 0 || selected_frame == 0)
1741     error ("No stack.");
1742
1743   frame = find_relative_frame (selected_frame, &count1);
1744   if (count1 != 0 && count_exp == 0)
1745     {
1746
1747       /* We only do this if count_exp is not specified.  That way "down"
1748          means to really go down (and let me know if that is
1749          impossible), but "down 9999" can be used to mean go all the way
1750          down without getting an error.  */
1751
1752       error ("Bottom (i.e., innermost) frame selected; you cannot go down.");
1753     }
1754
1755   select_frame (frame, selected_frame_level + count - count1);
1756 }
1757
1758 /* ARGSUSED */
1759 static void
1760 down_silently_command (count_exp, from_tty)
1761      char *count_exp;
1762      int from_tty;
1763 {
1764   down_silently_base (count_exp);
1765   if (tui_version)
1766     print_stack_frame (selected_frame, selected_frame_level, 1);
1767 }
1768
1769 static void
1770 down_command (count_exp, from_tty)
1771      char *count_exp;
1772      int from_tty;
1773 {
1774   down_silently_base (count_exp);
1775   show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
1776 }
1777 \f
1778 static void
1779 return_command (retval_exp, from_tty)
1780      char *retval_exp;
1781      int from_tty;
1782 {
1783   struct symbol *thisfun;
1784   CORE_ADDR selected_frame_addr;
1785   CORE_ADDR selected_frame_pc;
1786   struct frame_info *frame;
1787   value_ptr return_value = NULL;
1788
1789   if (selected_frame == NULL)
1790     error ("No selected frame.");
1791   thisfun = get_frame_function (selected_frame);
1792   selected_frame_addr = FRAME_FP (selected_frame);
1793   selected_frame_pc = selected_frame->pc;
1794
1795   /* Compute the return value (if any -- possibly getting errors here).  */
1796
1797   if (retval_exp)
1798     {
1799       struct type *return_type = NULL;
1800
1801       return_value = parse_and_eval (retval_exp);
1802
1803       /* Cast return value to the return type of the function.  */
1804       if (thisfun != NULL)
1805         return_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (thisfun));
1806       if (return_type == NULL)
1807         return_type = builtin_type_int;
1808       return_value = value_cast (return_type, return_value);
1809
1810       /* Make sure we have fully evaluated it, since
1811          it might live in the stack frame we're about to pop.  */
1812       if (VALUE_LAZY (return_value))
1813         value_fetch_lazy (return_value);
1814     }
1815
1816   /* If interactive, require confirmation.  */
1817
1818   if (from_tty)
1819     {
1820       if (thisfun != 0)
1821         {
1822           if (!query ("Make %s return now? ", SYMBOL_SOURCE_NAME (thisfun)))
1823             {
1824               error ("Not confirmed.");
1825               /* NOTREACHED */
1826             }
1827         }
1828       else if (!query ("Make selected stack frame return now? "))
1829         error ("Not confirmed.");
1830     }
1831
1832   /* Do the real work.  Pop until the specified frame is current.  We
1833      use this method because the selected_frame is not valid after
1834      a POP_FRAME.  The pc comparison makes this work even if the
1835      selected frame shares its fp with another frame.  */
1836
1837   while (selected_frame_addr != (frame = get_current_frame ())->frame
1838          || selected_frame_pc != frame->pc)
1839     POP_FRAME;
1840
1841   /* Then pop that frame.  */
1842
1843   POP_FRAME;
1844
1845   /* Compute the return value (if any) and store in the place
1846      for return values.  */
1847
1848   if (retval_exp)
1849     set_return_value (return_value);
1850
1851   /* If interactive, print the frame that is now current.  */
1852
1853   if (from_tty)
1854     frame_command ("0", 1);
1855   else
1856     select_frame_command ("0", 0);
1857 }
1858
1859 /* Sets the scope to input function name, provided that the
1860    function is within the current stack frame */
1861
1862 struct function_bounds
1863 {
1864   CORE_ADDR low, high;
1865 };
1866
1867 static void func_command PARAMS ((char *arg, int from_tty));
1868 static void
1869 func_command (arg, from_tty)
1870      char *arg;
1871      int from_tty;
1872 {
1873   struct frame_info *fp;
1874   int found = 0;
1875   struct symtabs_and_lines sals;
1876   int i;
1877   int level = 1;
1878   struct function_bounds *func_bounds = (struct function_bounds *) NULL;
1879
1880   if (arg != (char *) NULL)
1881     return;
1882
1883   fp = parse_frame_specification ("0");
1884   sals = decode_line_spec (arg, 1);
1885   func_bounds = (struct function_bounds *) xmalloc (
1886                               sizeof (struct function_bounds) * sals.nelts);
1887   for (i = 0; (i < sals.nelts && !found); i++)
1888     {
1889       if (sals.sals[i].pc == (CORE_ADDR) 0 ||
1890           find_pc_partial_function (sals.sals[i].pc,
1891                                     (char **) NULL,
1892                                     &func_bounds[i].low,
1893                                     &func_bounds[i].high) == 0)
1894         {
1895           func_bounds[i].low =
1896             func_bounds[i].high = (CORE_ADDR) NULL;
1897         }
1898     }
1899
1900   do
1901     {
1902       for (i = 0; (i < sals.nelts && !found); i++)
1903         found = (fp->pc >= func_bounds[i].low &&
1904                  fp->pc < func_bounds[i].high);
1905       if (!found)
1906         {
1907           level = 1;
1908           fp = find_relative_frame (fp, &level);
1909         }
1910     }
1911   while (!found && level == 0);
1912
1913   if (func_bounds)
1914     free (func_bounds);
1915
1916   if (!found)
1917     printf_filtered ("'%s' not within current stack frame.\n", arg);
1918   else if (fp != selected_frame)
1919     select_and_print_frame (fp, level);
1920 }
1921
1922 /* Gets the language of the current frame.  */
1923
1924 enum language
1925 get_frame_language ()
1926 {
1927   register struct symtab *s;
1928   enum language flang;          /* The language of the current frame */
1929
1930   if (selected_frame)
1931     {
1932       s = find_pc_symtab (selected_frame->pc);
1933       if (s)
1934         flang = s->language;
1935       else
1936         flang = language_unknown;
1937     }
1938   else
1939     flang = language_unknown;
1940
1941   return flang;
1942 }
1943 \f
1944 void
1945 _initialize_stack ()
1946 {
1947 #if 0
1948   backtrace_limit = 30;
1949 #endif
1950
1951   add_com ("return", class_stack, return_command,
1952            "Make selected stack frame return to its caller.\n\
1953 Control remains in the debugger, but when you continue\n\
1954 execution will resume in the frame above the one now selected.\n\
1955 If an argument is given, it is an expression for the value to return.");
1956
1957   add_com ("up", class_stack, up_command,
1958            "Select and print stack frame that called this one.\n\
1959 An argument says how many frames up to go.");
1960   add_com ("up-silently", class_support, up_silently_command,
1961            "Same as the `up' command, but does not print anything.\n\
1962 This is useful in command scripts.");
1963
1964   add_com ("down", class_stack, down_command,
1965            "Select and print stack frame called by this one.\n\
1966 An argument says how many frames down to go.");
1967   add_com_alias ("do", "down", class_stack, 1);
1968   add_com_alias ("dow", "down", class_stack, 1);
1969   add_com ("down-silently", class_support, down_silently_command,
1970            "Same as the `down' command, but does not print anything.\n\
1971 This is useful in command scripts.");
1972
1973   add_com ("frame", class_stack, frame_command,
1974            "Select and print a stack frame.\n\
1975 With no argument, print the selected stack frame.  (See also \"info frame\").\n\
1976 An argument specifies the frame to select.\n\
1977 It can be a stack frame number or the address of the frame.\n\
1978 With argument, nothing is printed if input is coming from\n\
1979 a command file or a user-defined command.");
1980
1981   add_com_alias ("f", "frame", class_stack, 1);
1982
1983   if (xdb_commands)
1984     {
1985       add_com ("L", class_stack, current_frame_command,
1986                "Print the current stack frame.\n");
1987       add_com_alias ("V", "frame", class_stack, 1);
1988     }
1989   add_com ("select-frame", class_stack, select_frame_command,
1990            "Select a stack frame without printing anything.\n\
1991 An argument specifies the frame to select.\n\
1992 It can be a stack frame number or the address of the frame.\n");
1993
1994   add_com ("backtrace", class_stack, backtrace_command,
1995            "Print backtrace of all stack frames, or innermost COUNT frames.\n\
1996 With a negative argument, print outermost -COUNT frames.\n\
1997 Use of the 'full' qualifier also prints the values of the local variables.\n");
1998   add_com_alias ("bt", "backtrace", class_stack, 0);
1999   if (xdb_commands)
2000     {
2001       add_com_alias ("t", "backtrace", class_stack, 0);
2002       add_com ("T", class_stack, backtrace_full_command,
2003                "Print backtrace of all stack frames, or innermost COUNT frames \n\
2004 and the values of the local variables.\n\
2005 With a negative argument, print outermost -COUNT frames.\n\
2006 Usage: T <count>\n");
2007     }
2008
2009   add_com_alias ("where", "backtrace", class_alias, 0);
2010   add_info ("stack", backtrace_command,
2011             "Backtrace of the stack, or innermost COUNT frames.");
2012   add_info_alias ("s", "stack", 1);
2013   add_info ("frame", frame_info,
2014             "All about selected stack frame, or frame at ADDR.");
2015   add_info_alias ("f", "frame", 1);
2016   add_info ("locals", locals_info,
2017             "Local variables of current stack frame.");
2018   add_info ("args", args_info,
2019             "Argument variables of current stack frame.");
2020   if (xdb_commands)
2021     add_com ("l", class_info, args_plus_locals_info,
2022              "Argument and local variables of current stack frame.");
2023
2024   if (dbx_commands)
2025     add_com ("func", class_stack, func_command,
2026       "Select the stack frame that contains <func>.\nUsage: func <name>\n");
2027
2028   add_info ("catch", catch_info,
2029             "Exceptions that can be caught in the current stack frame.");
2030
2031 #if 0
2032   add_cmd ("backtrace-limit", class_stack, set_backtrace_limit_command,
2033   "Specify maximum number of frames for \"backtrace\" to print by default.",
2034            &setlist);
2035   add_info ("backtrace-limit", backtrace_limit_info,
2036      "The maximum number of frames for \"backtrace\" to print by default.");
2037 #endif
2038 }