OSDN Git Service

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