OSDN Git Service

* frame.h (SIZEOF_FRAME_SAVED_REGS): Report an error if macro
[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             /* NOTE: we call parse_and_eval and then both
732                value_as_long and value_as_pointer rather than calling
733                parse_and_eval_long and parse_and_eval_address because
734                of the issue of potential side effects from evaluating
735                the expression.  */
736             vp = parse_and_eval (addr_string);
737             if (numargs == 0)
738               level = value_as_long (vp);
739
740             args[numargs++] = value_as_pointer (vp);
741             do_cleanups (tmp_cleanup);
742           }
743
744           /* Skip spaces, move to possible next arg.  */
745           while (*p == ' ')
746             p++;
747           frame_exp = p;
748         }
749     }
750
751   switch (numargs)
752     {
753     case 0:
754       if (selected_frame == NULL)
755         error ("No selected frame.");
756       return selected_frame;
757       /* NOTREACHED */
758     case 1:
759       {
760         struct frame_info *fid =
761         find_relative_frame (get_current_frame (), &level);
762         struct frame_info *tfid;
763
764         if (level == 0)
765           /* find_relative_frame was successful */
766           return fid;
767
768         /* If SETUP_ARBITRARY_FRAME is defined, then frame specifications
769            take at least 2 addresses.  It is important to detect this case
770            here so that "frame 100" does not give a confusing error message
771            like "frame specification requires two addresses".  This of course
772            does not solve the "frame 100" problem for machines on which
773            a frame specification can be made with one address.  To solve
774            that, we need a new syntax for a specifying a frame by address.
775            I think the cleanest syntax is $frame(0x45) ($frame(0x23,0x45) for
776            two args, etc.), but people might think that is too much typing,
777            so I guess *0x23,0x45 would be a possible alternative (commas
778            really should be used instead of spaces to delimit; using spaces
779            normally works in an expression).  */
780 #ifdef SETUP_ARBITRARY_FRAME
781         error ("No frame %d", args[0]);
782 #endif
783
784         /* If (s)he specifies the frame with an address, he deserves what
785            (s)he gets.  Still, give the highest one that matches.  */
786
787         for (fid = get_current_frame ();
788              fid && fid->frame != args[0];
789              fid = get_prev_frame (fid))
790           ;
791
792         if (fid)
793           while ((tfid = get_prev_frame (fid)) &&
794                  (tfid->frame == args[0]))
795             fid = tfid;
796
797         /* We couldn't identify the frame as an existing frame, but
798            perhaps we can create one with a single argument.  */
799       }
800
801     default:
802 #ifdef SETUP_ARBITRARY_FRAME
803       return SETUP_ARBITRARY_FRAME (numargs, args);
804 #else
805       /* Usual case.  Do it here rather than have everyone supply
806          a SETUP_ARBITRARY_FRAME that does this.  */
807       if (numargs == 1)
808         return create_new_frame (args[0], 0);
809       error ("Too many args in frame specification");
810 #endif
811       /* NOTREACHED */
812     }
813   /* NOTREACHED */
814 }
815
816 /* FRAME_ARGS_ADDRESS_CORRECT is just like FRAME_ARGS_ADDRESS except
817    that if it is unsure about the answer, it returns 0
818    instead of guessing (this happens on the VAX and i960, for example).
819
820    On most machines, we never have to guess about the args address,
821    so FRAME_ARGS_ADDRESS{,_CORRECT} are the same.  */
822 #if !defined (FRAME_ARGS_ADDRESS_CORRECT)
823 #define FRAME_ARGS_ADDRESS_CORRECT FRAME_ARGS_ADDRESS
824 #endif
825
826 /* Print verbosely the selected frame or the frame at address ADDR.
827    This means absolutely all information in the frame is printed.  */
828
829 static void
830 frame_info (char *addr_exp, int from_tty)
831 {
832   struct frame_info *fi;
833   struct symtab_and_line sal;
834   struct symbol *func;
835   struct symtab *s;
836   struct frame_info *calling_frame_info;
837   int i, count, numregs;
838   char *funname = 0;
839   enum language funlang = language_unknown;
840
841   if (!target_has_stack)
842     error ("No stack.");
843
844   fi = parse_frame_specification (addr_exp);
845   if (fi == NULL)
846     error ("Invalid frame specified.");
847
848   sal = find_pc_line (fi->pc,
849                       fi->next != NULL
850                       && !fi->next->signal_handler_caller
851                       && !frame_in_dummy (fi->next));
852   func = get_frame_function (fi);
853   s = find_pc_symtab (fi->pc);
854   if (func)
855     {
856       /* I'd like to use SYMBOL_SOURCE_NAME() here, to display
857        * the demangled name that we already have stored in
858        * the symbol table, but we stored a version with
859        * DMGL_PARAMS turned on, and here we don't want
860        * to display parameters. So call the demangler again,
861        * with DMGL_ANSI only. RT
862        * (Yes, I know that printf_symbol_filtered() will
863        * again try to demangle the name on the fly, but
864        * the issue is that if cplus_demangle() fails here,
865        * it'll fail there too. So we want to catch the failure
866        * ("demangled==NULL" case below) here, while we still
867        * have our hands on the function symbol.)
868        */
869       char *demangled;
870       funname = SYMBOL_NAME (func);
871       funlang = SYMBOL_LANGUAGE (func);
872       if (funlang == language_cplus)
873         {
874           demangled = cplus_demangle (funname, DMGL_ANSI);
875           /* If the demangler fails, try the demangled name
876            * from the symbol table. This'll have parameters,
877            * but that's preferable to diplaying a mangled name.
878            */
879           if (demangled == NULL)
880             funname = SYMBOL_SOURCE_NAME (func);
881         }
882     }
883   else
884     {
885       register struct minimal_symbol *msymbol = lookup_minimal_symbol_by_pc (fi->pc);
886       if (msymbol != NULL)
887         {
888           funname = SYMBOL_NAME (msymbol);
889           funlang = SYMBOL_LANGUAGE (msymbol);
890         }
891     }
892   calling_frame_info = get_prev_frame (fi);
893
894   if (!addr_exp && selected_frame_level >= 0)
895     {
896       printf_filtered ("Stack level %d, frame at ", selected_frame_level);
897       print_address_numeric (fi->frame, 1, gdb_stdout);
898       printf_filtered (":\n");
899     }
900   else
901     {
902       printf_filtered ("Stack frame at ");
903       print_address_numeric (fi->frame, 1, gdb_stdout);
904       printf_filtered (":\n");
905     }
906   printf_filtered (" %s = ", REGISTER_NAME (PC_REGNUM));
907   print_address_numeric (fi->pc, 1, gdb_stdout);
908
909   wrap_here ("   ");
910   if (funname)
911     {
912       printf_filtered (" in ");
913       fprintf_symbol_filtered (gdb_stdout, funname, funlang,
914                                DMGL_ANSI | DMGL_PARAMS);
915     }
916   wrap_here ("   ");
917   if (sal.symtab)
918     printf_filtered (" (%s:%d)", sal.symtab->filename, sal.line);
919   puts_filtered ("; ");
920   wrap_here ("    ");
921   printf_filtered ("saved %s ", REGISTER_NAME (PC_REGNUM));
922   print_address_numeric (FRAME_SAVED_PC (fi), 1, gdb_stdout);
923   printf_filtered ("\n");
924
925   {
926     int frameless;
927     frameless = FRAMELESS_FUNCTION_INVOCATION (fi);
928     if (frameless)
929       printf_filtered (" (FRAMELESS),");
930   }
931
932   if (calling_frame_info)
933     {
934       printf_filtered (" called by frame at ");
935       print_address_numeric (calling_frame_info->frame, 1, gdb_stdout);
936     }
937   if (fi->next && calling_frame_info)
938     puts_filtered (",");
939   wrap_here ("   ");
940   if (fi->next)
941     {
942       printf_filtered (" caller of frame at ");
943       print_address_numeric (fi->next->frame, 1, gdb_stdout);
944     }
945   if (fi->next || calling_frame_info)
946     puts_filtered ("\n");
947   if (s)
948     printf_filtered (" source language %s.\n", language_str (s->language));
949
950 #ifdef PRINT_EXTRA_FRAME_INFO
951   PRINT_EXTRA_FRAME_INFO (fi);
952 #endif
953
954   {
955     /* Address of the argument list for this frame, or 0.  */
956     CORE_ADDR arg_list = FRAME_ARGS_ADDRESS_CORRECT (fi);
957     /* Number of args for this frame, or -1 if unknown.  */
958     int numargs;
959
960     if (arg_list == 0)
961       printf_filtered (" Arglist at unknown address.\n");
962     else
963       {
964         printf_filtered (" Arglist at ");
965         print_address_numeric (arg_list, 1, gdb_stdout);
966         printf_filtered (",");
967
968         numargs = FRAME_NUM_ARGS (fi);
969         if (numargs < 0)
970           puts_filtered (" args: ");
971         else if (numargs == 0)
972           puts_filtered (" no args.");
973         else if (numargs == 1)
974           puts_filtered (" 1 arg: ");
975         else
976           printf_filtered (" %d args: ", numargs);
977         print_frame_args (func, fi, numargs, gdb_stdout);
978         puts_filtered ("\n");
979       }
980   }
981   {
982     /* Address of the local variables for this frame, or 0.  */
983     CORE_ADDR arg_list = FRAME_LOCALS_ADDRESS (fi);
984
985     if (arg_list == 0)
986       printf_filtered (" Locals at unknown address,");
987     else
988       {
989         printf_filtered (" Locals at ");
990         print_address_numeric (arg_list, 1, gdb_stdout);
991         printf_filtered (",");
992       }
993   }
994
995   FRAME_INIT_SAVED_REGS (fi);
996   if (fi->saved_regs != NULL)
997     {
998       /* The sp is special; what's returned isn't the save address, but
999          actually the value of the previous frame's sp.  */
1000       printf_filtered (" Previous frame's sp is ");
1001       print_address_numeric (fi->saved_regs[SP_REGNUM], 1, gdb_stdout);
1002       printf_filtered ("\n");
1003       count = 0;
1004       numregs = NUM_REGS + NUM_PSEUDO_REGS;
1005       for (i = 0; i < numregs; i++)
1006         if (fi->saved_regs[i] && i != SP_REGNUM)
1007           {
1008             if (count == 0)
1009               puts_filtered (" Saved registers:\n ");
1010             else
1011               puts_filtered (",");
1012             wrap_here (" ");
1013             printf_filtered (" %s at ", REGISTER_NAME (i));
1014             print_address_numeric (fi->saved_regs[i], 1, gdb_stdout);
1015             count++;
1016           }
1017       if (count)
1018         puts_filtered ("\n");
1019     }
1020   else
1021     {
1022       /* We could get some information about saved registers by
1023          calling get_saved_register on each register.  Which info goes
1024          with which frame is necessarily lost, however, and I suspect
1025          that the users don't care whether they get the info.  */
1026       puts_filtered ("\n");
1027     }
1028 }
1029
1030 #if 0
1031 /* Set a limit on the number of frames printed by default in a
1032    backtrace.  */
1033
1034 static int backtrace_limit;
1035
1036 static void
1037 set_backtrace_limit_command (char *count_exp, int from_tty)
1038 {
1039   int count = parse_and_eval_long (count_exp);
1040
1041   if (count < 0)
1042     error ("Negative argument not meaningful as backtrace limit.");
1043
1044   backtrace_limit = count;
1045 }
1046
1047 static void
1048 backtrace_limit_info (char *arg, int from_tty)
1049 {
1050   if (arg)
1051     error ("\"Info backtrace-limit\" takes no arguments.");
1052
1053   printf_unfiltered ("Backtrace limit: %d.\n", backtrace_limit);
1054 }
1055 #endif
1056
1057 /* Print briefly all stack frames or just the innermost COUNT frames.  */
1058
1059 static void backtrace_command_1 (char *count_exp, int show_locals,
1060                                  int from_tty);
1061 static void
1062 backtrace_command_1 (char *count_exp, int show_locals, int from_tty)
1063 {
1064   struct frame_info *fi;
1065   register int count;
1066   register int i;
1067   register struct frame_info *trailing;
1068   register int trailing_level;
1069
1070   if (!target_has_stack)
1071     error ("No stack.");
1072
1073   /* The following code must do two things.  First, it must
1074      set the variable TRAILING to the frame from which we should start
1075      printing.  Second, it must set the variable count to the number
1076      of frames which we should print, or -1 if all of them.  */
1077   trailing = get_current_frame ();
1078
1079   /* The target can be in a state where there is no valid frames
1080      (e.g., just connected). */
1081   if (trailing == NULL)
1082     error ("No stack.");
1083
1084   trailing_level = 0;
1085   if (count_exp)
1086     {
1087       count = parse_and_eval_long (count_exp);
1088       if (count < 0)
1089         {
1090           struct frame_info *current;
1091
1092           count = -count;
1093
1094           current = trailing;
1095           while (current && count--)
1096             {
1097               QUIT;
1098               current = get_prev_frame (current);
1099             }
1100
1101           /* Will stop when CURRENT reaches the top of the stack.  TRAILING
1102              will be COUNT below it.  */
1103           while (current)
1104             {
1105               QUIT;
1106               trailing = get_prev_frame (trailing);
1107               current = get_prev_frame (current);
1108               trailing_level++;
1109             }
1110
1111           count = -1;
1112         }
1113     }
1114   else
1115     count = -1;
1116
1117   if (info_verbose)
1118     {
1119       struct partial_symtab *ps;
1120
1121       /* Read in symbols for all of the frames.  Need to do this in
1122          a separate pass so that "Reading in symbols for xxx" messages
1123          don't screw up the appearance of the backtrace.  Also
1124          if people have strong opinions against reading symbols for
1125          backtrace this may have to be an option.  */
1126       i = count;
1127       for (fi = trailing;
1128            fi != NULL && i--;
1129            fi = get_prev_frame (fi))
1130         {
1131           QUIT;
1132           ps = find_pc_psymtab (fi->pc);
1133           if (ps)
1134             PSYMTAB_TO_SYMTAB (ps);     /* Force syms to come in */
1135         }
1136     }
1137
1138   for (i = 0, fi = trailing;
1139        fi && count--;
1140        i++, fi = get_prev_frame (fi))
1141     {
1142       QUIT;
1143
1144       /* Don't use print_stack_frame; if an error() occurs it probably
1145          means further attempts to backtrace would fail (on the other
1146          hand, perhaps the code does or could be fixed to make sure
1147          the frame->prev field gets set to NULL in that case).  */
1148       print_frame_info_base (fi, trailing_level + i, 0, 1);
1149       if (show_locals)
1150         print_frame_local_vars (fi, 1, gdb_stdout);
1151     }
1152
1153   /* If we've stopped before the end, mention that.  */
1154   if (fi && from_tty)
1155     printf_filtered ("(More stack frames follow...)\n");
1156 }
1157
1158 static void
1159 backtrace_command (char *arg, int from_tty)
1160 {
1161   struct cleanup *old_chain = (struct cleanup *) NULL;
1162   char **argv = (char **) NULL;
1163   int argIndicatingFullTrace = (-1), totArgLen = 0, argc = 0;
1164   char *argPtr = arg;
1165
1166   if (arg != (char *) NULL)
1167     {
1168       int i;
1169
1170       argv = buildargv (arg);
1171       old_chain = make_cleanup_freeargv (argv);
1172       argc = 0;
1173       for (i = 0; (argv[i] != (char *) NULL); i++)
1174         {
1175           unsigned int j;
1176
1177           for (j = 0; (j < strlen (argv[i])); j++)
1178             argv[i][j] = tolower (argv[i][j]);
1179
1180           if (argIndicatingFullTrace < 0 && subset_compare (argv[i], "full"))
1181             argIndicatingFullTrace = argc;
1182           else
1183             {
1184               argc++;
1185               totArgLen += strlen (argv[i]);
1186             }
1187         }
1188       totArgLen += argc;
1189       if (argIndicatingFullTrace >= 0)
1190         {
1191           if (totArgLen > 0)
1192             {
1193               argPtr = (char *) xmalloc (totArgLen + 1);
1194               if (!argPtr)
1195                 nomem (0);
1196               else
1197                 {
1198                   memset (argPtr, 0, totArgLen + 1);
1199                   for (i = 0; (i < (argc + 1)); i++)
1200                     {
1201                       if (i != argIndicatingFullTrace)
1202                         {
1203                           strcat (argPtr, argv[i]);
1204                           strcat (argPtr, " ");
1205                         }
1206                     }
1207                 }
1208             }
1209           else
1210             argPtr = (char *) NULL;
1211         }
1212     }
1213
1214   backtrace_command_1 (argPtr, (argIndicatingFullTrace >= 0), from_tty);
1215
1216   if (argIndicatingFullTrace >= 0 && totArgLen > 0)
1217     xfree (argPtr);
1218
1219   if (old_chain)
1220     do_cleanups (old_chain);
1221 }
1222
1223 static void backtrace_full_command (char *arg, int from_tty);
1224 static void
1225 backtrace_full_command (char *arg, int from_tty)
1226 {
1227   backtrace_command_1 (arg, 1, from_tty);
1228 }
1229 \f
1230
1231 /* Print the local variables of a block B active in FRAME.
1232    Return 1 if any variables were printed; 0 otherwise.  */
1233
1234 static int
1235 print_block_frame_locals (struct block *b, register struct frame_info *fi,
1236                           int num_tabs, register struct ui_file *stream)
1237 {
1238   int nsyms;
1239   register int i, j;
1240   register struct symbol *sym;
1241   register int values_printed = 0;
1242
1243   nsyms = BLOCK_NSYMS (b);
1244
1245   for (i = 0; i < nsyms; i++)
1246     {
1247       sym = BLOCK_SYM (b, i);
1248       switch (SYMBOL_CLASS (sym))
1249         {
1250         case LOC_LOCAL:
1251         case LOC_REGISTER:
1252         case LOC_STATIC:
1253         case LOC_BASEREG:
1254           values_printed = 1;
1255           for (j = 0; j < num_tabs; j++)
1256             fputs_filtered ("\t", stream);
1257           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
1258           fputs_filtered (" = ", stream);
1259           print_variable_value (sym, fi, stream);
1260           fprintf_filtered (stream, "\n");
1261           break;
1262
1263         default:
1264           /* Ignore symbols which are not locals.  */
1265           break;
1266         }
1267     }
1268   return values_printed;
1269 }
1270
1271 /* Same, but print labels.  */
1272
1273 static int
1274 print_block_frame_labels (struct block *b, int *have_default,
1275                           register struct ui_file *stream)
1276 {
1277   int nsyms;
1278   register int i;
1279   register struct symbol *sym;
1280   register int values_printed = 0;
1281
1282   nsyms = BLOCK_NSYMS (b);
1283
1284   for (i = 0; i < nsyms; i++)
1285     {
1286       sym = BLOCK_SYM (b, i);
1287       if (STREQ (SYMBOL_NAME (sym), "default"))
1288         {
1289           if (*have_default)
1290             continue;
1291           *have_default = 1;
1292         }
1293       if (SYMBOL_CLASS (sym) == LOC_LABEL)
1294         {
1295           struct symtab_and_line sal;
1296           sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
1297           values_printed = 1;
1298           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
1299           if (addressprint)
1300             {
1301               fprintf_filtered (stream, " ");
1302               print_address_numeric (SYMBOL_VALUE_ADDRESS (sym), 1, stream);
1303             }
1304           fprintf_filtered (stream, " in file %s, line %d\n",
1305                             sal.symtab->filename, sal.line);
1306         }
1307     }
1308   return values_printed;
1309 }
1310
1311 /* Print on STREAM all the local variables in frame FRAME,
1312    including all the blocks active in that frame
1313    at its current pc.
1314
1315    Returns 1 if the job was done,
1316    or 0 if nothing was printed because we have no info
1317    on the function running in FRAME.  */
1318
1319 static void
1320 print_frame_local_vars (register struct frame_info *fi, register int num_tabs,
1321                         register struct ui_file *stream)
1322 {
1323   register struct block *block = get_frame_block (fi);
1324   register int values_printed = 0;
1325
1326   if (block == 0)
1327     {
1328       fprintf_filtered (stream, "No symbol table info available.\n");
1329       return;
1330     }
1331
1332   while (block != 0)
1333     {
1334       if (print_block_frame_locals (block, fi, num_tabs, stream))
1335         values_printed = 1;
1336       /* After handling the function's top-level block, stop.
1337          Don't continue to its superblock, the block of
1338          per-file symbols.  */
1339       if (BLOCK_FUNCTION (block))
1340         break;
1341       block = BLOCK_SUPERBLOCK (block);
1342     }
1343
1344   if (!values_printed)
1345     {
1346       fprintf_filtered (stream, "No locals.\n");
1347     }
1348 }
1349
1350 /* Same, but print labels.  */
1351
1352 static void
1353 print_frame_label_vars (register struct frame_info *fi, int this_level_only,
1354                         register struct ui_file *stream)
1355 {
1356   register struct blockvector *bl;
1357   register struct block *block = get_frame_block (fi);
1358   register int values_printed = 0;
1359   int index, have_default = 0;
1360   char *blocks_printed;
1361   CORE_ADDR pc = fi->pc;
1362
1363   if (block == 0)
1364     {
1365       fprintf_filtered (stream, "No symbol table info available.\n");
1366       return;
1367     }
1368
1369   bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
1370   blocks_printed = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
1371   memset (blocks_printed, 0, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
1372
1373   while (block != 0)
1374     {
1375       CORE_ADDR end = BLOCK_END (block) - 4;
1376       int last_index;
1377
1378       if (bl != blockvector_for_pc (end, &index))
1379         error ("blockvector blotch");
1380       if (BLOCKVECTOR_BLOCK (bl, index) != block)
1381         error ("blockvector botch");
1382       last_index = BLOCKVECTOR_NBLOCKS (bl);
1383       index += 1;
1384
1385       /* Don't print out blocks that have gone by.  */
1386       while (index < last_index
1387              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
1388         index++;
1389
1390       while (index < last_index
1391              && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
1392         {
1393           if (blocks_printed[index] == 0)
1394             {
1395               if (print_block_frame_labels (BLOCKVECTOR_BLOCK (bl, index), &have_default, stream))
1396                 values_printed = 1;
1397               blocks_printed[index] = 1;
1398             }
1399           index++;
1400         }
1401       if (have_default)
1402         return;
1403       if (values_printed && this_level_only)
1404         return;
1405
1406       /* After handling the function's top-level block, stop.
1407          Don't continue to its superblock, the block of
1408          per-file symbols.  */
1409       if (BLOCK_FUNCTION (block))
1410         break;
1411       block = BLOCK_SUPERBLOCK (block);
1412     }
1413
1414   if (!values_printed && !this_level_only)
1415     {
1416       fprintf_filtered (stream, "No catches.\n");
1417     }
1418 }
1419
1420 /* ARGSUSED */
1421 void
1422 locals_info (char *args, int from_tty)
1423 {
1424   if (!selected_frame)
1425     error ("No frame selected.");
1426   print_frame_local_vars (selected_frame, 0, gdb_stdout);
1427 }
1428
1429 static void
1430 catch_info (char *ignore, int from_tty)
1431 {
1432   struct symtab_and_line *sal;
1433
1434   /* Check for target support for exception handling */
1435   sal = target_enable_exception_callback (EX_EVENT_CATCH, 1);
1436   if (sal)
1437     {
1438       /* Currently not handling this */
1439       /* Ideally, here we should interact with the C++ runtime
1440          system to find the list of active handlers, etc. */
1441       fprintf_filtered (gdb_stdout, "Info catch not supported with this target/compiler combination.\n");
1442 #if 0
1443       if (!selected_frame)
1444         error ("No frame selected.");
1445 #endif
1446     }
1447   else
1448     {
1449       /* Assume g++ compiled code -- old v 4.16 behaviour */
1450       if (!selected_frame)
1451         error ("No frame selected.");
1452
1453       print_frame_label_vars (selected_frame, 0, gdb_stdout);
1454     }
1455 }
1456
1457 static void
1458 print_frame_arg_vars (register struct frame_info *fi,
1459                       register struct ui_file *stream)
1460 {
1461   struct symbol *func = get_frame_function (fi);
1462   register struct block *b;
1463   int nsyms;
1464   register int i;
1465   register struct symbol *sym, *sym2;
1466   register int values_printed = 0;
1467
1468   if (func == 0)
1469     {
1470       fprintf_filtered (stream, "No symbol table info available.\n");
1471       return;
1472     }
1473
1474   b = SYMBOL_BLOCK_VALUE (func);
1475   nsyms = BLOCK_NSYMS (b);
1476
1477   for (i = 0; i < nsyms; i++)
1478     {
1479       sym = BLOCK_SYM (b, i);
1480       switch (SYMBOL_CLASS (sym))
1481         {
1482         case LOC_ARG:
1483         case LOC_LOCAL_ARG:
1484         case LOC_REF_ARG:
1485         case LOC_REGPARM:
1486         case LOC_REGPARM_ADDR:
1487         case LOC_BASEREG_ARG:
1488           values_printed = 1;
1489           fputs_filtered (SYMBOL_SOURCE_NAME (sym), stream);
1490           fputs_filtered (" = ", stream);
1491
1492           /* We have to look up the symbol because arguments can have
1493              two entries (one a parameter, one a local) and the one we
1494              want is the local, which lookup_symbol will find for us.
1495              This includes gcc1 (not gcc2) on the sparc when passing a
1496              small structure and gcc2 when the argument type is float
1497              and it is passed as a double and converted to float by
1498              the prologue (in the latter case the type of the LOC_ARG
1499              symbol is double and the type of the LOC_LOCAL symbol is
1500              float).  There are also LOC_ARG/LOC_REGISTER pairs which
1501              are not combined in symbol-reading.  */
1502
1503           sym2 = lookup_symbol (SYMBOL_NAME (sym),
1504                    b, VAR_NAMESPACE, (int *) NULL, (struct symtab **) NULL);
1505           print_variable_value (sym2, fi, stream);
1506           fprintf_filtered (stream, "\n");
1507           break;
1508
1509         default:
1510           /* Don't worry about things which aren't arguments.  */
1511           break;
1512         }
1513     }
1514
1515   if (!values_printed)
1516     {
1517       fprintf_filtered (stream, "No arguments.\n");
1518     }
1519 }
1520
1521 void
1522 args_info (char *ignore, int from_tty)
1523 {
1524   if (!selected_frame)
1525     error ("No frame selected.");
1526   print_frame_arg_vars (selected_frame, gdb_stdout);
1527 }
1528
1529
1530 static void
1531 args_plus_locals_info (char *ignore, int from_tty)
1532 {
1533   args_info (ignore, from_tty);
1534   locals_info (ignore, from_tty);
1535 }
1536 \f
1537
1538 /* Select frame FI, and note that its stack level is LEVEL.
1539    LEVEL may be -1 if an actual level number is not known.  */
1540
1541 void
1542 select_frame (struct frame_info *fi, int level)
1543 {
1544   register struct symtab *s;
1545
1546   selected_frame = fi;
1547   selected_frame_level = level;
1548   if (selected_frame_level_changed_hook)
1549     selected_frame_level_changed_hook (level);
1550
1551   /* Ensure that symbols for this frame are read in.  Also, determine the
1552      source language of this frame, and switch to it if desired.  */
1553   if (fi)
1554     {
1555       s = find_pc_symtab (fi->pc);
1556       if (s
1557           && s->language != current_language->la_language
1558           && s->language != language_unknown
1559           && language_mode == language_mode_auto)
1560         {
1561           set_language (s->language);
1562         }
1563       /* elz: this if here fixes the problem with the pc not being displayed
1564          in the tui asm layout, with no debug symbols. The value of s 
1565          would be 0 here, and select_source_symtab would abort the
1566          command by calling the 'error' function */
1567       if (s)
1568         {
1569           TUIDO (((TuiOpaqueFuncPtr) tui_vSelectSourceSymtab, s));
1570         }
1571     }
1572 }
1573 \f
1574
1575 /* Select frame FI, noting that its stack level is LEVEL.  Also print
1576    the stack frame and show the source if this is the tui version.  */
1577 void
1578 select_and_print_frame (struct frame_info *fi, int level)
1579 {
1580   select_frame (fi, level);
1581   if (fi)
1582     {
1583       print_stack_frame (fi, level, 1);
1584       TUIDO (((TuiOpaqueFuncPtr) tui_vCheckDataValues, fi));
1585     }
1586 }
1587 \f
1588
1589 /* Select frame FI, noting that its stack level is LEVEL.  Be silent if
1590    not the TUI */
1591 #if 0
1592 void
1593 select_and_maybe_print_frame (struct frame_info *fi, int level)
1594 {
1595   if (!tui_version)
1596     select_frame (fi, level);
1597   else
1598     select_and_print_frame (fi, level);
1599 }
1600 #endif
1601
1602
1603 /* Store the selected frame and its level into *FRAMEP and *LEVELP.
1604    If there is no selected frame, *FRAMEP is set to NULL.  */
1605
1606 void
1607 record_selected_frame (CORE_ADDR *frameaddrp, int *levelp)
1608 {
1609   *frameaddrp = selected_frame ? selected_frame->frame : 0;
1610   *levelp = selected_frame_level;
1611 }
1612
1613 /* Return the symbol-block in which the selected frame is executing.
1614    Can return zero under various legitimate circumstances.  */
1615
1616 struct block *
1617 get_selected_block (void)
1618 {
1619   if (!target_has_stack)
1620     return 0;
1621
1622   if (!selected_frame)
1623     return get_current_block ();
1624   return get_frame_block (selected_frame);
1625 }
1626
1627 /* Find a frame a certain number of levels away from FRAME.
1628    LEVEL_OFFSET_PTR points to an int containing the number of levels.
1629    Positive means go to earlier frames (up); negative, the reverse.
1630    The int that contains the number of levels is counted toward
1631    zero as the frames for those levels are found.
1632    If the top or bottom frame is reached, that frame is returned,
1633    but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
1634    how much farther the original request asked to go.  */
1635
1636 struct frame_info *
1637 find_relative_frame (register struct frame_info *frame,
1638                      register int *level_offset_ptr)
1639 {
1640   register struct frame_info *prev;
1641   register struct frame_info *frame1;
1642
1643   /* Going up is simple: just do get_prev_frame enough times
1644      or until initial frame is reached.  */
1645   while (*level_offset_ptr > 0)
1646     {
1647       prev = get_prev_frame (frame);
1648       if (prev == 0)
1649         break;
1650       (*level_offset_ptr)--;
1651       frame = prev;
1652     }
1653   /* Going down is just as simple.  */
1654   if (*level_offset_ptr < 0)
1655     {
1656       while (*level_offset_ptr < 0)
1657         {
1658           frame1 = get_next_frame (frame);
1659           if (!frame1)
1660             break;
1661           frame = frame1;
1662           (*level_offset_ptr)++;
1663         }
1664     }
1665   return frame;
1666 }
1667
1668 /* The "select_frame" command.  With no arg, NOP.
1669    With arg LEVEL_EXP, select the frame at level LEVEL if it is a
1670    valid level.  Otherwise, treat level_exp as an address expression
1671    and select it.  See parse_frame_specification for more info on proper
1672    frame expressions. */
1673
1674 /* ARGSUSED */
1675 #ifdef UI_OUT
1676 void
1677 select_frame_command_wrapper (char *level_exp, int from_tty)
1678 {
1679   select_frame_command (level_exp, from_tty);
1680 }
1681 #endif
1682 static void
1683 select_frame_command (char *level_exp, int from_tty)
1684 {
1685   register struct frame_info *frame, *frame1;
1686   unsigned int level = 0;
1687
1688   if (!target_has_stack)
1689     error ("No stack.");
1690
1691   frame = parse_frame_specification (level_exp);
1692
1693   /* Try to figure out what level this frame is.  But if there is
1694      no current stack, don't error out -- let the user set one.  */
1695   frame1 = 0;
1696   if (get_current_frame ())
1697     {
1698       for (frame1 = get_prev_frame (0);
1699            frame1 && frame1 != frame;
1700            frame1 = get_prev_frame (frame1))
1701         level++;
1702     }
1703
1704   if (!frame1)
1705     level = 0;
1706
1707   select_frame (frame, level);
1708 }
1709
1710 /* The "frame" command.  With no arg, print selected frame briefly.
1711    With arg, behaves like select_frame and then prints the selected
1712    frame.  */
1713
1714 void
1715 frame_command (char *level_exp, int from_tty)
1716 {
1717   select_frame_command (level_exp, from_tty);
1718   show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
1719 }
1720
1721 /* The XDB Compatibility command to print the current frame. */
1722
1723 static void
1724 current_frame_command (char *level_exp, int from_tty)
1725 {
1726   if (target_has_stack == 0 || selected_frame == 0)
1727     error ("No stack.");
1728   print_only_stack_frame (selected_frame, selected_frame_level, 1);
1729 }
1730
1731 /* Select the frame up one or COUNT stack levels
1732    from the previously selected frame, and print it briefly.  */
1733
1734 /* ARGSUSED */
1735 static void
1736 up_silently_base (char *count_exp)
1737 {
1738   register struct frame_info *fi;
1739   int count = 1, count1;
1740   if (count_exp)
1741     count = parse_and_eval_long (count_exp);
1742   count1 = count;
1743
1744   if (target_has_stack == 0 || selected_frame == 0)
1745     error ("No stack.");
1746
1747   fi = find_relative_frame (selected_frame, &count1);
1748   if (count1 != 0 && count_exp == 0)
1749     error ("Initial frame selected; you cannot go up.");
1750   select_frame (fi, selected_frame_level + count - count1);
1751 }
1752
1753 static void
1754 up_silently_command (char *count_exp, int from_tty)
1755 {
1756   up_silently_base (count_exp);
1757   if (tui_version)
1758     print_stack_frame (selected_frame, selected_frame_level, 1);
1759 }
1760
1761 static void
1762 up_command (char *count_exp, int from_tty)
1763 {
1764   up_silently_base (count_exp);
1765   show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
1766 }
1767
1768 /* Select the frame down one or COUNT stack levels
1769    from the previously selected frame, and print it briefly.  */
1770
1771 /* ARGSUSED */
1772 static void
1773 down_silently_base (char *count_exp)
1774 {
1775   register struct frame_info *frame;
1776   int count = -1, count1;
1777   if (count_exp)
1778     count = -parse_and_eval_long (count_exp);
1779   count1 = count;
1780
1781   if (target_has_stack == 0 || selected_frame == 0)
1782     error ("No stack.");
1783
1784   frame = find_relative_frame (selected_frame, &count1);
1785   if (count1 != 0 && count_exp == 0)
1786     {
1787
1788       /* We only do this if count_exp is not specified.  That way "down"
1789          means to really go down (and let me know if that is
1790          impossible), but "down 9999" can be used to mean go all the way
1791          down without getting an error.  */
1792
1793       error ("Bottom (i.e., innermost) frame selected; you cannot go down.");
1794     }
1795
1796   select_frame (frame, selected_frame_level + count - count1);
1797 }
1798
1799 /* ARGSUSED */
1800 static void
1801 down_silently_command (char *count_exp, int from_tty)
1802 {
1803   down_silently_base (count_exp);
1804   if (tui_version)
1805     print_stack_frame (selected_frame, selected_frame_level, 1);
1806 }
1807
1808 static void
1809 down_command (char *count_exp, int from_tty)
1810 {
1811   down_silently_base (count_exp);
1812   show_and_print_stack_frame (selected_frame, selected_frame_level, 1);
1813 }
1814 \f
1815 #ifdef UI_OUT
1816 void
1817 return_command_wrapper (char *retval_exp, int from_tty)
1818 {
1819   return_command (retval_exp, from_tty);
1820 }
1821 #endif
1822 static void
1823 return_command (char *retval_exp, int from_tty)
1824 {
1825   struct symbol *thisfun;
1826   CORE_ADDR selected_frame_addr;
1827   CORE_ADDR selected_frame_pc;
1828   struct frame_info *frame;
1829   value_ptr return_value = NULL;
1830
1831   if (selected_frame == NULL)
1832     error ("No selected frame.");
1833   thisfun = get_frame_function (selected_frame);
1834   selected_frame_addr = FRAME_FP (selected_frame);
1835   selected_frame_pc = selected_frame->pc;
1836
1837   /* Compute the return value (if any -- possibly getting errors here).  */
1838
1839   if (retval_exp)
1840     {
1841       struct type *return_type = NULL;
1842
1843       return_value = parse_and_eval (retval_exp);
1844
1845       /* Cast return value to the return type of the function.  */
1846       if (thisfun != NULL)
1847         return_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (thisfun));
1848       if (return_type == NULL)
1849         return_type = builtin_type_int;
1850       return_value = value_cast (return_type, return_value);
1851
1852       /* Make sure we have fully evaluated it, since
1853          it might live in the stack frame we're about to pop.  */
1854       if (VALUE_LAZY (return_value))
1855         value_fetch_lazy (return_value);
1856     }
1857
1858   /* If interactive, require confirmation.  */
1859
1860   if (from_tty)
1861     {
1862       if (thisfun != 0)
1863         {
1864           if (!query ("Make %s return now? ", SYMBOL_SOURCE_NAME (thisfun)))
1865             {
1866               error ("Not confirmed.");
1867               /* NOTREACHED */
1868             }
1869         }
1870       else if (!query ("Make selected stack frame return now? "))
1871         error ("Not confirmed.");
1872     }
1873
1874   /* Do the real work.  Pop until the specified frame is current.  We
1875      use this method because the selected_frame is not valid after
1876      a POP_FRAME.  The pc comparison makes this work even if the
1877      selected frame shares its fp with another frame.  */
1878
1879   while (selected_frame_addr != (frame = get_current_frame ())->frame
1880          || selected_frame_pc != frame->pc)
1881     POP_FRAME;
1882
1883   /* Then pop that frame.  */
1884
1885   POP_FRAME;
1886
1887   /* Compute the return value (if any) and store in the place
1888      for return values.  */
1889
1890   if (retval_exp)
1891     set_return_value (return_value);
1892
1893   /* If we are at the end of a call dummy now, pop the dummy frame too.  */
1894
1895   if (CALL_DUMMY_HAS_COMPLETED (read_pc(), read_sp (),
1896                                 FRAME_FP (get_current_frame ())))
1897     POP_FRAME;
1898
1899   /* If interactive, print the frame that is now current.  */
1900
1901   if (from_tty)
1902     frame_command ("0", 1);
1903   else
1904     select_frame_command ("0", 0);
1905 }
1906
1907 /* Sets the scope to input function name, provided that the
1908    function is within the current stack frame */
1909
1910 struct function_bounds
1911 {
1912   CORE_ADDR low, high;
1913 };
1914
1915 static void func_command (char *arg, int from_tty);
1916 static void
1917 func_command (char *arg, int from_tty)
1918 {
1919   struct frame_info *fp;
1920   int found = 0;
1921   struct symtabs_and_lines sals;
1922   int i;
1923   int level = 1;
1924   struct function_bounds *func_bounds = (struct function_bounds *) NULL;
1925
1926   if (arg != (char *) NULL)
1927     return;
1928
1929   fp = parse_frame_specification ("0");
1930   sals = decode_line_spec (arg, 1);
1931   func_bounds = (struct function_bounds *) xmalloc (
1932                               sizeof (struct function_bounds) * sals.nelts);
1933   for (i = 0; (i < sals.nelts && !found); i++)
1934     {
1935       if (sals.sals[i].pc == (CORE_ADDR) 0 ||
1936           find_pc_partial_function (sals.sals[i].pc,
1937                                     (char **) NULL,
1938                                     &func_bounds[i].low,
1939                                     &func_bounds[i].high) == 0)
1940         {
1941           func_bounds[i].low =
1942             func_bounds[i].high = (CORE_ADDR) NULL;
1943         }
1944     }
1945
1946   do
1947     {
1948       for (i = 0; (i < sals.nelts && !found); i++)
1949         found = (fp->pc >= func_bounds[i].low &&
1950                  fp->pc < func_bounds[i].high);
1951       if (!found)
1952         {
1953           level = 1;
1954           fp = find_relative_frame (fp, &level);
1955         }
1956     }
1957   while (!found && level == 0);
1958
1959   if (func_bounds)
1960     xfree (func_bounds);
1961
1962   if (!found)
1963     printf_filtered ("'%s' not within current stack frame.\n", arg);
1964   else if (fp != selected_frame)
1965     select_and_print_frame (fp, level);
1966 }
1967
1968 /* Gets the language of the current frame.  */
1969
1970 enum language
1971 get_frame_language (void)
1972 {
1973   register struct symtab *s;
1974   enum language flang;          /* The language of the current frame */
1975
1976   if (selected_frame)
1977     {
1978       s = find_pc_symtab (selected_frame->pc);
1979       if (s)
1980         flang = s->language;
1981       else
1982         flang = language_unknown;
1983     }
1984   else
1985     flang = language_unknown;
1986
1987   return flang;
1988 }
1989 \f
1990 void
1991 _initialize_stack (void)
1992 {
1993 #if 0
1994   backtrace_limit = 30;
1995 #endif
1996
1997   add_com ("return", class_stack, return_command,
1998            "Make selected stack frame return to its caller.\n\
1999 Control remains in the debugger, but when you continue\n\
2000 execution will resume in the frame above the one now selected.\n\
2001 If an argument is given, it is an expression for the value to return.");
2002
2003   add_com ("up", class_stack, up_command,
2004            "Select and print stack frame that called this one.\n\
2005 An argument says how many frames up to go.");
2006   add_com ("up-silently", class_support, up_silently_command,
2007            "Same as the `up' command, but does not print anything.\n\
2008 This is useful in command scripts.");
2009
2010   add_com ("down", class_stack, down_command,
2011            "Select and print stack frame called by this one.\n\
2012 An argument says how many frames down to go.");
2013   add_com_alias ("do", "down", class_stack, 1);
2014   add_com_alias ("dow", "down", class_stack, 1);
2015   add_com ("down-silently", class_support, down_silently_command,
2016            "Same as the `down' command, but does not print anything.\n\
2017 This is useful in command scripts.");
2018
2019   add_com ("frame", class_stack, frame_command,
2020            "Select and print a stack frame.\n\
2021 With no argument, print the selected stack frame.  (See also \"info frame\").\n\
2022 An argument specifies the frame to select.\n\
2023 It can be a stack frame number or the address of the frame.\n\
2024 With argument, nothing is printed if input is coming from\n\
2025 a command file or a user-defined command.");
2026
2027   add_com_alias ("f", "frame", class_stack, 1);
2028
2029   if (xdb_commands)
2030     {
2031       add_com ("L", class_stack, current_frame_command,
2032                "Print the current stack frame.\n");
2033       add_com_alias ("V", "frame", class_stack, 1);
2034     }
2035   add_com ("select-frame", class_stack, select_frame_command,
2036            "Select a stack frame without printing anything.\n\
2037 An argument specifies the frame to select.\n\
2038 It can be a stack frame number or the address of the frame.\n");
2039
2040   add_com ("backtrace", class_stack, backtrace_command,
2041            "Print backtrace of all stack frames, or innermost COUNT frames.\n\
2042 With a negative argument, print outermost -COUNT frames.\n\
2043 Use of the 'full' qualifier also prints the values of the local variables.\n");
2044   add_com_alias ("bt", "backtrace", class_stack, 0);
2045   if (xdb_commands)
2046     {
2047       add_com_alias ("t", "backtrace", class_stack, 0);
2048       add_com ("T", class_stack, backtrace_full_command,
2049                "Print backtrace of all stack frames, or innermost COUNT frames \n\
2050 and the values of the local variables.\n\
2051 With a negative argument, print outermost -COUNT frames.\n\
2052 Usage: T <count>\n");
2053     }
2054
2055   add_com_alias ("where", "backtrace", class_alias, 0);
2056   add_info ("stack", backtrace_command,
2057             "Backtrace of the stack, or innermost COUNT frames.");
2058   add_info_alias ("s", "stack", 1);
2059   add_info ("frame", frame_info,
2060             "All about selected stack frame, or frame at ADDR.");
2061   add_info_alias ("f", "frame", 1);
2062   add_info ("locals", locals_info,
2063             "Local variables of current stack frame.");
2064   add_info ("args", args_info,
2065             "Argument variables of current stack frame.");
2066   if (xdb_commands)
2067     add_com ("l", class_info, args_plus_locals_info,
2068              "Argument and local variables of current stack frame.");
2069
2070   if (dbx_commands)
2071     add_com ("func", class_stack, func_command,
2072       "Select the stack frame that contains <func>.\nUsage: func <name>\n");
2073
2074   add_info ("catch", catch_info,
2075             "Exceptions that can be caught in the current stack frame.");
2076
2077 #if 0
2078   add_cmd ("backtrace-limit", class_stack, set_backtrace_limit_command,
2079   "Specify maximum number of frames for \"backtrace\" to print by default.",
2080            &setlist);
2081   add_info ("backtrace-limit", backtrace_limit_info,
2082      "The maximum number of frames for \"backtrace\" to print by default.");
2083 #endif
2084 }