OSDN Git Service

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