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