Home | History | Annotate | Line # | Download | only in gdb
stack.c revision 1.1
      1  1.1  christos /* Print and select stack frames for GDB, the GNU debugger.
      2  1.1  christos 
      3  1.1  christos    Copyright (C) 1986-2014 Free Software Foundation, Inc.
      4  1.1  christos 
      5  1.1  christos    This file is part of GDB.
      6  1.1  christos 
      7  1.1  christos    This program is free software; you can redistribute it and/or modify
      8  1.1  christos    it under the terms of the GNU General Public License as published by
      9  1.1  christos    the Free Software Foundation; either version 3 of the License, or
     10  1.1  christos    (at your option) any later version.
     11  1.1  christos 
     12  1.1  christos    This program is distributed in the hope that it will be useful,
     13  1.1  christos    but WITHOUT ANY WARRANTY; without even the implied warranty of
     14  1.1  christos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15  1.1  christos    GNU General Public License for more details.
     16  1.1  christos 
     17  1.1  christos    You should have received a copy of the GNU General Public License
     18  1.1  christos    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
     19  1.1  christos 
     20  1.1  christos #include "defs.h"
     21  1.1  christos #include "value.h"
     22  1.1  christos #include "symtab.h"
     23  1.1  christos #include "gdbtypes.h"
     24  1.1  christos #include "expression.h"
     25  1.1  christos #include "language.h"
     26  1.1  christos #include "frame.h"
     27  1.1  christos #include "gdbcmd.h"
     28  1.1  christos #include "gdbcore.h"
     29  1.1  christos #include "target.h"
     30  1.1  christos #include "source.h"
     31  1.1  christos #include "breakpoint.h"
     32  1.1  christos #include "demangle.h"
     33  1.1  christos #include "inferior.h"
     34  1.1  christos #include "annotate.h"
     35  1.1  christos #include "ui-out.h"
     36  1.1  christos #include "block.h"
     37  1.1  christos #include "stack.h"
     38  1.1  christos #include "dictionary.h"
     39  1.1  christos #include "exceptions.h"
     40  1.1  christos #include "reggroups.h"
     41  1.1  christos #include "regcache.h"
     42  1.1  christos #include "solib.h"
     43  1.1  christos #include "valprint.h"
     44  1.1  christos #include "gdbthread.h"
     45  1.1  christos #include "cp-support.h"
     46  1.1  christos #include "disasm.h"
     47  1.1  christos #include "inline-frame.h"
     48  1.1  christos #include "linespec.h"
     49  1.1  christos #include "cli/cli-utils.h"
     50  1.1  christos 
     51  1.1  christos #include "gdb_assert.h"
     52  1.1  christos #include <ctype.h>
     53  1.1  christos #include <string.h>
     54  1.1  christos 
     55  1.1  christos #include "symfile.h"
     56  1.1  christos #include "python/python.h"
     57  1.1  christos 
     58  1.1  christos void (*deprecated_selected_frame_level_changed_hook) (int);
     59  1.1  christos 
     60  1.1  christos /* The possible choices of "set print frame-arguments", and the value
     61  1.1  christos    of this setting.  */
     62  1.1  christos 
     63  1.1  christos static const char *const print_frame_arguments_choices[] =
     64  1.1  christos   {"all", "scalars", "none", NULL};
     65  1.1  christos static const char *print_frame_arguments = "scalars";
     66  1.1  christos 
     67  1.1  christos /* If non-zero, don't invoke pretty-printers for frame arguments.  */
     68  1.1  christos static int print_raw_frame_arguments;
     69  1.1  christos 
     70  1.1  christos /* The possible choices of "set print entry-values", and the value
     71  1.1  christos    of this setting.  */
     72  1.1  christos 
     73  1.1  christos const char print_entry_values_no[] = "no";
     74  1.1  christos const char print_entry_values_only[] = "only";
     75  1.1  christos const char print_entry_values_preferred[] = "preferred";
     76  1.1  christos const char print_entry_values_if_needed[] = "if-needed";
     77  1.1  christos const char print_entry_values_both[] = "both";
     78  1.1  christos const char print_entry_values_compact[] = "compact";
     79  1.1  christos const char print_entry_values_default[] = "default";
     80  1.1  christos static const char *const print_entry_values_choices[] =
     81  1.1  christos {
     82  1.1  christos   print_entry_values_no,
     83  1.1  christos   print_entry_values_only,
     84  1.1  christos   print_entry_values_preferred,
     85  1.1  christos   print_entry_values_if_needed,
     86  1.1  christos   print_entry_values_both,
     87  1.1  christos   print_entry_values_compact,
     88  1.1  christos   print_entry_values_default,
     89  1.1  christos   NULL
     90  1.1  christos };
     91  1.1  christos const char *print_entry_values = print_entry_values_default;
     92  1.1  christos 
     93  1.1  christos /* Prototypes for local functions.  */
     94  1.1  christos 
     95  1.1  christos static void print_frame_local_vars (struct frame_info *, int,
     96  1.1  christos 				    struct ui_file *);
     97  1.1  christos 
     98  1.1  christos static void print_frame (struct frame_info *frame, int print_level,
     99  1.1  christos 			 enum print_what print_what,  int print_args,
    100  1.1  christos 			 struct symtab_and_line sal);
    101  1.1  christos 
    102  1.1  christos static void set_last_displayed_sal (int valid,
    103  1.1  christos 				    struct program_space *pspace,
    104  1.1  christos 				    CORE_ADDR addr,
    105  1.1  christos 				    struct symtab *symtab,
    106  1.1  christos 				    int line);
    107  1.1  christos 
    108  1.1  christos /* Zero means do things normally; we are interacting directly with the
    109  1.1  christos    user.  One means print the full filename and linenumber when a
    110  1.1  christos    frame is printed, and do so in a format emacs18/emacs19.22 can
    111  1.1  christos    parse.  Two means print similar annotations, but in many more
    112  1.1  christos    cases and in a slightly different syntax.  */
    113  1.1  christos 
    114  1.1  christos int annotation_level = 0;
    115  1.1  christos 
    116  1.1  christos /* These variables hold the last symtab and line we displayed to the user.
    117  1.1  christos  * This is where we insert a breakpoint or a skiplist entry by default.  */
    118  1.1  christos static int last_displayed_sal_valid = 0;
    119  1.1  christos static struct program_space *last_displayed_pspace = 0;
    120  1.1  christos static CORE_ADDR last_displayed_addr = 0;
    121  1.1  christos static struct symtab *last_displayed_symtab = 0;
    122  1.1  christos static int last_displayed_line = 0;
    123  1.1  christos 
    124  1.1  christos 
    126  1.1  christos /* Return 1 if we should display the address in addition to the location,
    127  1.1  christos    because we are in the middle of a statement.  */
    128  1.1  christos 
    129  1.1  christos static int
    130  1.1  christos frame_show_address (struct frame_info *frame,
    131  1.1  christos 		    struct symtab_and_line sal)
    132  1.1  christos {
    133  1.1  christos   /* If there is a line number, but no PC, then there is no location
    134  1.1  christos      information associated with this sal.  The only way that should
    135  1.1  christos      happen is for the call sites of inlined functions (SAL comes from
    136  1.1  christos      find_frame_sal).  Otherwise, we would have some PC range if the
    137  1.1  christos      SAL came from a line table.  */
    138  1.1  christos   if (sal.line != 0 && sal.pc == 0 && sal.end == 0)
    139  1.1  christos     {
    140  1.1  christos       if (get_next_frame (frame) == NULL)
    141  1.1  christos 	gdb_assert (inline_skipped_frames (inferior_ptid) > 0);
    142  1.1  christos       else
    143  1.1  christos 	gdb_assert (get_frame_type (get_next_frame (frame)) == INLINE_FRAME);
    144  1.1  christos       return 0;
    145  1.1  christos     }
    146  1.1  christos 
    147  1.1  christos   return get_frame_pc (frame) != sal.pc;
    148  1.1  christos }
    149  1.1  christos 
    150  1.1  christos /* Show or print a stack frame FRAME briefly.  The output is format
    151  1.1  christos    according to PRINT_LEVEL and PRINT_WHAT printing the frame's
    152  1.1  christos    relative level, function name, argument list, and file name and
    153  1.1  christos    line number.  If the frame's PC is not at the beginning of the
    154  1.1  christos    source line, the actual PC is printed at the beginning.  */
    155  1.1  christos 
    156  1.1  christos void
    157  1.1  christos print_stack_frame (struct frame_info *frame, int print_level,
    158  1.1  christos 		   enum print_what print_what,
    159  1.1  christos 		   int set_current_sal)
    160  1.1  christos {
    161  1.1  christos   volatile struct gdb_exception e;
    162  1.1  christos 
    163  1.1  christos   /* For mi, alway print location and address.  */
    164  1.1  christos   if (ui_out_is_mi_like_p (current_uiout))
    165  1.1  christos     print_what = LOC_AND_ADDRESS;
    166  1.1  christos 
    167  1.1  christos   TRY_CATCH (e, RETURN_MASK_ERROR)
    168  1.1  christos     {
    169  1.1  christos       int center = (print_what == SRC_LINE || print_what == SRC_AND_LOC);
    170  1.1  christos 
    171  1.1  christos       print_frame_info (frame, print_level, print_what, 1 /* print_args */,
    172  1.1  christos 			set_current_sal);
    173  1.1  christos       if (set_current_sal)
    174  1.1  christos 	set_current_sal_from_frame (frame, center);
    175  1.1  christos     }
    176  1.1  christos }
    177  1.1  christos 
    178  1.1  christos /* Print nameless arguments of frame FRAME on STREAM, where START is
    179  1.1  christos    the offset of the first nameless argument, and NUM is the number of
    180  1.1  christos    nameless arguments to print.  FIRST is nonzero if this is the first
    181  1.1  christos    argument (not just the first nameless argument).  */
    182  1.1  christos 
    183  1.1  christos static void
    184  1.1  christos print_frame_nameless_args (struct frame_info *frame, long start, int num,
    185  1.1  christos 			   int first, struct ui_file *stream)
    186  1.1  christos {
    187  1.1  christos   struct gdbarch *gdbarch = get_frame_arch (frame);
    188  1.1  christos   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
    189  1.1  christos   int i;
    190  1.1  christos   CORE_ADDR argsaddr;
    191  1.1  christos   long arg_value;
    192  1.1  christos 
    193  1.1  christos   for (i = 0; i < num; i++)
    194  1.1  christos     {
    195  1.1  christos       QUIT;
    196  1.1  christos       argsaddr = get_frame_args_address (frame);
    197  1.1  christos       if (!argsaddr)
    198  1.1  christos 	return;
    199  1.1  christos       arg_value = read_memory_integer (argsaddr + start,
    200  1.1  christos 				       sizeof (int), byte_order);
    201  1.1  christos       if (!first)
    202  1.1  christos 	fprintf_filtered (stream, ", ");
    203  1.1  christos       fprintf_filtered (stream, "%ld", arg_value);
    204  1.1  christos       first = 0;
    205  1.1  christos       start += sizeof (int);
    206  1.1  christos     }
    207  1.1  christos }
    208  1.1  christos 
    209  1.1  christos /* Print single argument of inferior function.  ARG must be already
    210  1.1  christos    read in.
    211  1.1  christos 
    212  1.1  christos    Errors are printed as if they would be the parameter value.  Use zeroed ARG
    213  1.1  christos    iff it should not be printed accoring to user settings.  */
    214  1.1  christos 
    215  1.1  christos static void
    216  1.1  christos print_frame_arg (const struct frame_arg *arg)
    217  1.1  christos {
    218  1.1  christos   struct ui_out *uiout = current_uiout;
    219  1.1  christos   volatile struct gdb_exception except;
    220  1.1  christos   struct cleanup *old_chain;
    221  1.1  christos   struct ui_file *stb;
    222  1.1  christos 
    223  1.1  christos   stb = mem_fileopen ();
    224  1.1  christos   old_chain = make_cleanup_ui_file_delete (stb);
    225  1.1  christos 
    226  1.1  christos   gdb_assert (!arg->val || !arg->error);
    227  1.1  christos   gdb_assert (arg->entry_kind == print_entry_values_no
    228  1.1  christos 	      || arg->entry_kind == print_entry_values_only
    229  1.1  christos 	      || (!ui_out_is_mi_like_p (uiout)
    230  1.1  christos 		  && arg->entry_kind == print_entry_values_compact));
    231  1.1  christos 
    232  1.1  christos   annotate_arg_begin ();
    233  1.1  christos 
    234  1.1  christos   make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
    235  1.1  christos   fprintf_symbol_filtered (stb, SYMBOL_PRINT_NAME (arg->sym),
    236  1.1  christos 			   SYMBOL_LANGUAGE (arg->sym), DMGL_PARAMS | DMGL_ANSI);
    237  1.1  christos   if (arg->entry_kind == print_entry_values_compact)
    238  1.1  christos     {
    239  1.1  christos       /* It is OK to provide invalid MI-like stream as with
    240  1.1  christos 	 PRINT_ENTRY_VALUE_COMPACT we never use MI.  */
    241  1.1  christos       fputs_filtered ("=", stb);
    242  1.1  christos 
    243  1.1  christos       fprintf_symbol_filtered (stb, SYMBOL_PRINT_NAME (arg->sym),
    244  1.1  christos 			       SYMBOL_LANGUAGE (arg->sym),
    245  1.1  christos 			       DMGL_PARAMS | DMGL_ANSI);
    246  1.1  christos     }
    247  1.1  christos   if (arg->entry_kind == print_entry_values_only
    248  1.1  christos       || arg->entry_kind == print_entry_values_compact)
    249  1.1  christos     fputs_filtered ("@entry", stb);
    250  1.1  christos   ui_out_field_stream (uiout, "name", stb);
    251  1.1  christos   annotate_arg_name_end ();
    252  1.1  christos   ui_out_text (uiout, "=");
    253  1.1  christos 
    254  1.1  christos   if (!arg->val && !arg->error)
    255  1.1  christos     ui_out_text (uiout, "...");
    256  1.1  christos   else
    257  1.1  christos     {
    258  1.1  christos       if (arg->error)
    259  1.1  christos 	except.message = arg->error;
    260  1.1  christos       else
    261  1.1  christos 	{
    262  1.1  christos 	  /* TRY_CATCH has two statements, wrap it in a block.  */
    263  1.1  christos 
    264  1.1  christos 	  TRY_CATCH (except, RETURN_MASK_ERROR)
    265  1.1  christos 	    {
    266  1.1  christos 	      const struct language_defn *language;
    267  1.1  christos 	      struct value_print_options opts;
    268  1.1  christos 
    269  1.1  christos 	      /* Avoid value_print because it will deref ref parameters.  We
    270  1.1  christos 		 just want to print their addresses.  Print ??? for args whose
    271  1.1  christos 		 address we do not know.  We pass 2 as "recurse" to val_print
    272  1.1  christos 		 because our standard indentation here is 4 spaces, and
    273  1.1  christos 		 val_print indents 2 for each recurse.  */
    274  1.1  christos 
    275  1.1  christos 	      annotate_arg_value (value_type (arg->val));
    276  1.1  christos 
    277  1.1  christos 	      /* Use the appropriate language to display our symbol, unless the
    278  1.1  christos 		 user forced the language to a specific language.  */
    279  1.1  christos 	      if (language_mode == language_mode_auto)
    280  1.1  christos 		language = language_def (SYMBOL_LANGUAGE (arg->sym));
    281  1.1  christos 	      else
    282  1.1  christos 		language = current_language;
    283  1.1  christos 
    284  1.1  christos 	      get_no_prettyformat_print_options (&opts);
    285  1.1  christos 	      opts.deref_ref = 1;
    286  1.1  christos 	      opts.raw = print_raw_frame_arguments;
    287  1.1  christos 
    288  1.1  christos 	      /* True in "summary" mode, false otherwise.  */
    289  1.1  christos 	      opts.summary = !strcmp (print_frame_arguments, "scalars");
    290  1.1  christos 
    291  1.1  christos 	      common_val_print (arg->val, stb, 2, &opts, language);
    292  1.1  christos 	    }
    293  1.1  christos 	}
    294  1.1  christos       if (except.message)
    295  1.1  christos 	fprintf_filtered (stb, _("<error reading variable: %s>"),
    296  1.1  christos 			  except.message);
    297  1.1  christos     }
    298  1.1  christos 
    299  1.1  christos   ui_out_field_stream (uiout, "value", stb);
    300  1.1  christos 
    301  1.1  christos   /* Also invoke ui_out_tuple_end.  */
    302  1.1  christos   do_cleanups (old_chain);
    303  1.1  christos 
    304  1.1  christos   annotate_arg_end ();
    305  1.1  christos }
    306  1.1  christos 
    307  1.1  christos /* Read in inferior function local SYM at FRAME into ARGP.  Caller is
    308  1.1  christos    responsible for xfree of ARGP->ERROR.  This function never throws an
    309  1.1  christos    exception.  */
    310  1.1  christos 
    311  1.1  christos void
    312  1.1  christos read_frame_local (struct symbol *sym, struct frame_info *frame,
    313  1.1  christos 		  struct frame_arg *argp)
    314  1.1  christos {
    315  1.1  christos   volatile struct gdb_exception except;
    316  1.1  christos   struct value *val = NULL;
    317  1.1  christos 
    318  1.1  christos   TRY_CATCH (except, RETURN_MASK_ERROR)
    319  1.1  christos     {
    320  1.1  christos       val = read_var_value (sym, frame);
    321  1.1  christos     }
    322  1.1  christos 
    323  1.1  christos   argp->error = (val == NULL) ? xstrdup (except.message) : NULL;
    324  1.1  christos   argp->sym = sym;
    325  1.1  christos   argp->val = val;
    326  1.1  christos }
    327  1.1  christos 
    328  1.1  christos /* Read in inferior function parameter SYM at FRAME into ARGP.  Caller is
    329  1.1  christos    responsible for xfree of ARGP->ERROR.  This function never throws an
    330  1.1  christos    exception.  */
    331  1.1  christos 
    332  1.1  christos void
    333  1.1  christos read_frame_arg (struct symbol *sym, struct frame_info *frame,
    334  1.1  christos 	        struct frame_arg *argp, struct frame_arg *entryargp)
    335  1.1  christos {
    336  1.1  christos   struct value *val = NULL, *entryval = NULL;
    337  1.1  christos   char *val_error = NULL, *entryval_error = NULL;
    338  1.1  christos   int val_equal = 0;
    339  1.1  christos   volatile struct gdb_exception except;
    340  1.1  christos 
    341  1.1  christos   if (print_entry_values != print_entry_values_only
    342  1.1  christos       && print_entry_values != print_entry_values_preferred)
    343  1.1  christos     {
    344  1.1  christos       TRY_CATCH (except, RETURN_MASK_ERROR)
    345  1.1  christos 	{
    346  1.1  christos 	  val = read_var_value (sym, frame);
    347  1.1  christos 	}
    348  1.1  christos       if (!val)
    349  1.1  christos 	{
    350  1.1  christos 	  val_error = alloca (strlen (except.message) + 1);
    351  1.1  christos 	  strcpy (val_error, except.message);
    352  1.1  christos 	}
    353  1.1  christos     }
    354  1.1  christos 
    355  1.1  christos   if (SYMBOL_COMPUTED_OPS (sym) != NULL
    356  1.1  christos       && SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry != NULL
    357  1.1  christos       && print_entry_values != print_entry_values_no
    358  1.1  christos       && (print_entry_values != print_entry_values_if_needed
    359  1.1  christos 	  || !val || value_optimized_out (val)))
    360  1.1  christos     {
    361  1.1  christos       TRY_CATCH (except, RETURN_MASK_ERROR)
    362  1.1  christos 	{
    363  1.1  christos 	  const struct symbol_computed_ops *ops;
    364  1.1  christos 
    365  1.1  christos 	  ops = SYMBOL_COMPUTED_OPS (sym);
    366  1.1  christos 	  entryval = ops->read_variable_at_entry (sym, frame);
    367  1.1  christos 	}
    368  1.1  christos       if (!entryval)
    369  1.1  christos 	{
    370  1.1  christos 	  entryval_error = alloca (strlen (except.message) + 1);
    371  1.1  christos 	  strcpy (entryval_error, except.message);
    372  1.1  christos 	}
    373  1.1  christos 
    374  1.1  christos       if (except.error == NO_ENTRY_VALUE_ERROR
    375  1.1  christos 	  || (entryval && value_optimized_out (entryval)))
    376  1.1  christos 	{
    377  1.1  christos 	  entryval = NULL;
    378  1.1  christos 	  entryval_error = NULL;
    379  1.1  christos 	}
    380  1.1  christos 
    381  1.1  christos       if (print_entry_values == print_entry_values_compact
    382  1.1  christos 	  || print_entry_values == print_entry_values_default)
    383  1.1  christos 	{
    384  1.1  christos 	  /* For MI do not try to use print_entry_values_compact for ARGP.  */
    385  1.1  christos 
    386  1.1  christos 	  if (val && entryval && !ui_out_is_mi_like_p (current_uiout))
    387  1.1  christos 	    {
    388  1.1  christos 	      struct type *type = value_type (val);
    389  1.1  christos 
    390  1.1  christos 	      if (!value_optimized_out (val)
    391  1.1  christos 		  && value_available_contents_eq (val, 0, entryval, 0,
    392  1.1  christos 						  TYPE_LENGTH (type)))
    393  1.1  christos 		{
    394  1.1  christos 		  /* Initialize it just to avoid a GCC false warning.  */
    395  1.1  christos 		  struct value *val_deref = NULL, *entryval_deref;
    396  1.1  christos 
    397  1.1  christos 		  /* DW_AT_GNU_call_site_value does match with the current
    398  1.1  christos 		     value.  If it is a reference still try to verify if
    399  1.1  christos 		     dereferenced DW_AT_GNU_call_site_data_value does not
    400  1.1  christos 		     differ.  */
    401  1.1  christos 
    402  1.1  christos 		  TRY_CATCH (except, RETURN_MASK_ERROR)
    403  1.1  christos 		    {
    404  1.1  christos 		      struct type *type_deref;
    405  1.1  christos 
    406  1.1  christos 		      val_deref = coerce_ref (val);
    407  1.1  christos 		      if (value_lazy (val_deref))
    408  1.1  christos 			value_fetch_lazy (val_deref);
    409  1.1  christos 		      type_deref = value_type (val_deref);
    410  1.1  christos 
    411  1.1  christos 		      entryval_deref = coerce_ref (entryval);
    412  1.1  christos 		      if (value_lazy (entryval_deref))
    413  1.1  christos 			value_fetch_lazy (entryval_deref);
    414  1.1  christos 
    415  1.1  christos 		      /* If the reference addresses match but dereferenced
    416  1.1  christos 			 content does not match print them.  */
    417  1.1  christos 		      if (val != val_deref
    418  1.1  christos 			  && value_available_contents_eq (val_deref, 0,
    419  1.1  christos 							  entryval_deref, 0,
    420  1.1  christos 						      TYPE_LENGTH (type_deref)))
    421  1.1  christos 			val_equal = 1;
    422  1.1  christos 		    }
    423  1.1  christos 
    424  1.1  christos 		  /* Value was not a reference; and its content matches.  */
    425  1.1  christos 		  if (val == val_deref)
    426  1.1  christos 		    val_equal = 1;
    427  1.1  christos 		  /* If the dereferenced content could not be fetched do not
    428  1.1  christos 		     display anything.  */
    429  1.1  christos 		  else if (except.error == NO_ENTRY_VALUE_ERROR)
    430  1.1  christos 		    val_equal = 1;
    431  1.1  christos 		  else if (except.message)
    432  1.1  christos 		    {
    433  1.1  christos 		      entryval_error = alloca (strlen (except.message) + 1);
    434  1.1  christos 		      strcpy (entryval_error, except.message);
    435  1.1  christos 		    }
    436  1.1  christos 
    437  1.1  christos 		  if (val_equal)
    438  1.1  christos 		    entryval = NULL;
    439  1.1  christos 		}
    440  1.1  christos 	    }
    441  1.1  christos 
    442  1.1  christos 	  /* Try to remove possibly duplicate error message for ENTRYARGP even
    443  1.1  christos 	     in MI mode.  */
    444  1.1  christos 
    445  1.1  christos 	  if (val_error && entryval_error
    446  1.1  christos 	      && strcmp (val_error, entryval_error) == 0)
    447  1.1  christos 	    {
    448  1.1  christos 	      entryval_error = NULL;
    449  1.1  christos 
    450  1.1  christos 	      /* Do not se VAL_EQUAL as the same error message may be shown for
    451  1.1  christos 		 the entry value even if no entry values are present in the
    452  1.1  christos 		 inferior.  */
    453  1.1  christos 	    }
    454  1.1  christos 	}
    455  1.1  christos     }
    456  1.1  christos 
    457  1.1  christos   if (entryval == NULL)
    458  1.1  christos     {
    459  1.1  christos       if (print_entry_values == print_entry_values_preferred)
    460  1.1  christos 	{
    461  1.1  christos 	  TRY_CATCH (except, RETURN_MASK_ERROR)
    462  1.1  christos 	    {
    463  1.1  christos 	      val = read_var_value (sym, frame);
    464  1.1  christos 	    }
    465  1.1  christos 	  if (!val)
    466  1.1  christos 	    {
    467  1.1  christos 	      val_error = alloca (strlen (except.message) + 1);
    468  1.1  christos 	      strcpy (val_error, except.message);
    469  1.1  christos 	    }
    470  1.1  christos 	}
    471  1.1  christos       if (print_entry_values == print_entry_values_only
    472  1.1  christos 	  || print_entry_values == print_entry_values_both
    473  1.1  christos 	  || (print_entry_values == print_entry_values_preferred
    474  1.1  christos 	      && (!val || value_optimized_out (val))))
    475  1.1  christos 	{
    476  1.1  christos 	  entryval = allocate_optimized_out_value (SYMBOL_TYPE (sym));
    477  1.1  christos 	  entryval_error = NULL;
    478  1.1  christos 	}
    479  1.1  christos     }
    480  1.1  christos   if ((print_entry_values == print_entry_values_compact
    481  1.1  christos        || print_entry_values == print_entry_values_if_needed
    482  1.1  christos        || print_entry_values == print_entry_values_preferred)
    483  1.1  christos       && (!val || value_optimized_out (val)) && entryval != NULL)
    484  1.1  christos     {
    485  1.1  christos       val = NULL;
    486  1.1  christos       val_error = NULL;
    487  1.1  christos     }
    488  1.1  christos 
    489  1.1  christos   argp->sym = sym;
    490  1.1  christos   argp->val = val;
    491  1.1  christos   argp->error = val_error ? xstrdup (val_error) : NULL;
    492  1.1  christos   if (!val && !val_error)
    493  1.1  christos     argp->entry_kind = print_entry_values_only;
    494  1.1  christos   else if ((print_entry_values == print_entry_values_compact
    495  1.1  christos 	   || print_entry_values == print_entry_values_default) && val_equal)
    496  1.1  christos     {
    497  1.1  christos       argp->entry_kind = print_entry_values_compact;
    498  1.1  christos       gdb_assert (!ui_out_is_mi_like_p (current_uiout));
    499  1.1  christos     }
    500  1.1  christos   else
    501  1.1  christos     argp->entry_kind = print_entry_values_no;
    502  1.1  christos 
    503  1.1  christos   entryargp->sym = sym;
    504  1.1  christos   entryargp->val = entryval;
    505  1.1  christos   entryargp->error = entryval_error ? xstrdup (entryval_error) : NULL;
    506  1.1  christos   if (!entryval && !entryval_error)
    507  1.1  christos     entryargp->entry_kind = print_entry_values_no;
    508  1.1  christos   else
    509  1.1  christos     entryargp->entry_kind = print_entry_values_only;
    510  1.1  christos }
    511  1.1  christos 
    512  1.1  christos /* Print the arguments of frame FRAME on STREAM, given the function
    513  1.1  christos    FUNC running in that frame (as a symbol), where NUM is the number
    514  1.1  christos    of arguments according to the stack frame (or -1 if the number of
    515  1.1  christos    arguments is unknown).  */
    516  1.1  christos 
    517  1.1  christos /* Note that currently the "number of arguments according to the
    518  1.1  christos    stack frame" is only known on VAX where i refers to the "number of
    519  1.1  christos    ints of arguments according to the stack frame".  */
    520  1.1  christos 
    521  1.1  christos static void
    522  1.1  christos print_frame_args (struct symbol *func, struct frame_info *frame,
    523  1.1  christos 		  int num, struct ui_file *stream)
    524  1.1  christos {
    525  1.1  christos   struct ui_out *uiout = current_uiout;
    526  1.1  christos   int first = 1;
    527  1.1  christos   /* Offset of next stack argument beyond the one we have seen that is
    528  1.1  christos      at the highest offset, or -1 if we haven't come to a stack
    529  1.1  christos      argument yet.  */
    530  1.1  christos   long highest_offset = -1;
    531  1.1  christos   /* Number of ints of arguments that we have printed so far.  */
    532  1.1  christos   int args_printed = 0;
    533  1.1  christos   struct cleanup *old_chain;
    534  1.1  christos   struct ui_file *stb;
    535  1.1  christos   /* True if we should print arguments, false otherwise.  */
    536  1.1  christos   int print_args = strcmp (print_frame_arguments, "none");
    537  1.1  christos 
    538  1.1  christos   stb = mem_fileopen ();
    539  1.1  christos   old_chain = make_cleanup_ui_file_delete (stb);
    540  1.1  christos 
    541  1.1  christos   if (func)
    542  1.1  christos     {
    543  1.1  christos       struct block *b = SYMBOL_BLOCK_VALUE (func);
    544  1.1  christos       struct block_iterator iter;
    545  1.1  christos       struct symbol *sym;
    546  1.1  christos 
    547  1.1  christos       ALL_BLOCK_SYMBOLS (b, iter, sym)
    548  1.1  christos         {
    549  1.1  christos 	  struct frame_arg arg, entryarg;
    550  1.1  christos 
    551  1.1  christos 	  QUIT;
    552  1.1  christos 
    553  1.1  christos 	  /* Keep track of the highest stack argument offset seen, and
    554  1.1  christos 	     skip over any kinds of symbols we don't care about.  */
    555  1.1  christos 
    556  1.1  christos 	  if (!SYMBOL_IS_ARGUMENT (sym))
    557  1.1  christos 	    continue;
    558  1.1  christos 
    559  1.1  christos 	  switch (SYMBOL_CLASS (sym))
    560  1.1  christos 	    {
    561  1.1  christos 	    case LOC_ARG:
    562  1.1  christos 	    case LOC_REF_ARG:
    563  1.1  christos 	      {
    564  1.1  christos 		long current_offset = SYMBOL_VALUE (sym);
    565  1.1  christos 		int arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym));
    566  1.1  christos 
    567  1.1  christos 		/* Compute address of next argument by adding the size of
    568  1.1  christos 		   this argument and rounding to an int boundary.  */
    569  1.1  christos 		current_offset =
    570  1.1  christos 		  ((current_offset + arg_size + sizeof (int) - 1)
    571  1.1  christos 		   & ~(sizeof (int) - 1));
    572  1.1  christos 
    573  1.1  christos 		/* If this is the highest offset seen yet, set
    574  1.1  christos 		   highest_offset.  */
    575  1.1  christos 		if (highest_offset == -1
    576  1.1  christos 		    || (current_offset > highest_offset))
    577  1.1  christos 		  highest_offset = current_offset;
    578  1.1  christos 
    579  1.1  christos 		/* Add the number of ints we're about to print to
    580  1.1  christos 		   args_printed.  */
    581  1.1  christos 		args_printed += (arg_size + sizeof (int) - 1) / sizeof (int);
    582  1.1  christos 	      }
    583  1.1  christos 
    584  1.1  christos 	      /* We care about types of symbols, but don't need to
    585  1.1  christos 		 keep track of stack offsets in them.  */
    586  1.1  christos 	    case LOC_REGISTER:
    587  1.1  christos 	    case LOC_REGPARM_ADDR:
    588  1.1  christos 	    case LOC_COMPUTED:
    589  1.1  christos 	    case LOC_OPTIMIZED_OUT:
    590  1.1  christos 	    default:
    591  1.1  christos 	      break;
    592  1.1  christos 	    }
    593  1.1  christos 
    594  1.1  christos 	  /* We have to look up the symbol because arguments can have
    595  1.1  christos 	     two entries (one a parameter, one a local) and the one we
    596  1.1  christos 	     want is the local, which lookup_symbol will find for us.
    597  1.1  christos 	     This includes gcc1 (not gcc2) on SPARC when passing a
    598  1.1  christos 	     small structure and gcc2 when the argument type is float
    599  1.1  christos 	     and it is passed as a double and converted to float by
    600  1.1  christos 	     the prologue (in the latter case the type of the LOC_ARG
    601  1.1  christos 	     symbol is double and the type of the LOC_LOCAL symbol is
    602  1.1  christos 	     float).  */
    603  1.1  christos 	  /* But if the parameter name is null, don't try it.  Null
    604  1.1  christos 	     parameter names occur on the RS/6000, for traceback
    605  1.1  christos 	     tables.  FIXME, should we even print them?  */
    606  1.1  christos 
    607  1.1  christos 	  if (*SYMBOL_LINKAGE_NAME (sym))
    608  1.1  christos 	    {
    609  1.1  christos 	      struct symbol *nsym;
    610  1.1  christos 
    611  1.1  christos 	      nsym = lookup_symbol (SYMBOL_LINKAGE_NAME (sym),
    612  1.1  christos 				    b, VAR_DOMAIN, NULL);
    613  1.1  christos 	      gdb_assert (nsym != NULL);
    614  1.1  christos 	      if (SYMBOL_CLASS (nsym) == LOC_REGISTER
    615  1.1  christos 		  && !SYMBOL_IS_ARGUMENT (nsym))
    616  1.1  christos 		{
    617  1.1  christos 		  /* There is a LOC_ARG/LOC_REGISTER pair.  This means
    618  1.1  christos 		     that it was passed on the stack and loaded into a
    619  1.1  christos 		     register, or passed in a register and stored in a
    620  1.1  christos 		     stack slot.  GDB 3.x used the LOC_ARG; GDB
    621  1.1  christos 		     4.0-4.11 used the LOC_REGISTER.
    622  1.1  christos 
    623  1.1  christos 		     Reasons for using the LOC_ARG:
    624  1.1  christos 
    625  1.1  christos 		     (1) Because find_saved_registers may be slow for
    626  1.1  christos 		         remote debugging.
    627  1.1  christos 
    628  1.1  christos 		     (2) Because registers are often re-used and stack
    629  1.1  christos 		         slots rarely (never?) are.  Therefore using
    630  1.1  christos 		         the stack slot is much less likely to print
    631  1.1  christos 		         garbage.
    632  1.1  christos 
    633  1.1  christos 		     Reasons why we might want to use the LOC_REGISTER:
    634  1.1  christos 
    635  1.1  christos 		     (1) So that the backtrace prints the same value
    636  1.1  christos 		         as "print foo".  I see no compelling reason
    637  1.1  christos 		         why this needs to be the case; having the
    638  1.1  christos 		         backtrace print the value which was passed
    639  1.1  christos 		         in, and "print foo" print the value as
    640  1.1  christos 		         modified within the called function, makes
    641  1.1  christos 		         perfect sense to me.
    642  1.1  christos 
    643  1.1  christos 		     Additional note: It might be nice if "info args"
    644  1.1  christos 		     displayed both values.
    645  1.1  christos 
    646  1.1  christos 		     One more note: There is a case with SPARC
    647  1.1  christos 		     structure passing where we need to use the
    648  1.1  christos 		     LOC_REGISTER, but this is dealt with by creating
    649  1.1  christos 		     a single LOC_REGPARM in symbol reading.  */
    650  1.1  christos 
    651  1.1  christos 		  /* Leave sym (the LOC_ARG) alone.  */
    652  1.1  christos 		  ;
    653  1.1  christos 		}
    654  1.1  christos 	      else
    655  1.1  christos 		sym = nsym;
    656  1.1  christos 	    }
    657  1.1  christos 
    658  1.1  christos 	  /* Print the current arg.  */
    659  1.1  christos 	  if (!first)
    660  1.1  christos 	    ui_out_text (uiout, ", ");
    661  1.1  christos 	  ui_out_wrap_hint (uiout, "    ");
    662  1.1  christos 
    663  1.1  christos 	  if (!print_args)
    664  1.1  christos 	    {
    665  1.1  christos 	      memset (&arg, 0, sizeof (arg));
    666  1.1  christos 	      arg.sym = sym;
    667  1.1  christos 	      arg.entry_kind = print_entry_values_no;
    668  1.1  christos 	      memset (&entryarg, 0, sizeof (entryarg));
    669  1.1  christos 	      entryarg.sym = sym;
    670  1.1  christos 	      entryarg.entry_kind = print_entry_values_no;
    671  1.1  christos 	    }
    672  1.1  christos 	  else
    673  1.1  christos 	    read_frame_arg (sym, frame, &arg, &entryarg);
    674  1.1  christos 
    675  1.1  christos 	  if (arg.entry_kind != print_entry_values_only)
    676  1.1  christos 	    print_frame_arg (&arg);
    677  1.1  christos 
    678  1.1  christos 	  if (entryarg.entry_kind != print_entry_values_no)
    679  1.1  christos 	    {
    680  1.1  christos 	      if (arg.entry_kind != print_entry_values_only)
    681  1.1  christos 		{
    682  1.1  christos 		  ui_out_text (uiout, ", ");
    683  1.1  christos 		  ui_out_wrap_hint (uiout, "    ");
    684  1.1  christos 		}
    685  1.1  christos 
    686  1.1  christos 	      print_frame_arg (&entryarg);
    687  1.1  christos 	    }
    688  1.1  christos 
    689  1.1  christos 	  xfree (arg.error);
    690  1.1  christos 	  xfree (entryarg.error);
    691  1.1  christos 
    692  1.1  christos 	  first = 0;
    693  1.1  christos 	}
    694  1.1  christos     }
    695  1.1  christos 
    696  1.1  christos   /* Don't print nameless args in situations where we don't know
    697  1.1  christos      enough about the stack to find them.  */
    698  1.1  christos   if (num != -1)
    699  1.1  christos     {
    700  1.1  christos       long start;
    701  1.1  christos 
    702  1.1  christos       if (highest_offset == -1)
    703  1.1  christos 	start = gdbarch_frame_args_skip (get_frame_arch (frame));
    704  1.1  christos       else
    705  1.1  christos 	start = highest_offset;
    706  1.1  christos 
    707  1.1  christos       print_frame_nameless_args (frame, start, num - args_printed,
    708  1.1  christos 				 first, stream);
    709  1.1  christos     }
    710  1.1  christos 
    711  1.1  christos   do_cleanups (old_chain);
    712  1.1  christos }
    713  1.1  christos 
    714  1.1  christos /* Set the current source and line to the location given by frame
    715  1.1  christos    FRAME, if possible.  When CENTER is true, adjust so the relevant
    716  1.1  christos    line is in the center of the next 'list'.  */
    717  1.1  christos 
    718  1.1  christos void
    719  1.1  christos set_current_sal_from_frame (struct frame_info *frame, int center)
    720  1.1  christos {
    721  1.1  christos   struct symtab_and_line sal;
    722  1.1  christos 
    723  1.1  christos   find_frame_sal (frame, &sal);
    724  1.1  christos   if (sal.symtab)
    725  1.1  christos     {
    726  1.1  christos       if (center)
    727  1.1  christos         sal.line = max (sal.line - get_lines_to_list () / 2, 1);
    728  1.1  christos       set_current_source_symtab_and_line (&sal);
    729  1.1  christos     }
    730  1.1  christos }
    731  1.1  christos 
    732  1.1  christos /* If ON, GDB will display disassembly of the next source line when
    733  1.1  christos    execution of the program being debugged stops.
    734  1.1  christos    If AUTO (which is the default), or there's no line info to determine
    735  1.1  christos    the source line of the next instruction, display disassembly of next
    736  1.1  christos    instruction instead.  */
    737  1.1  christos 
    738  1.1  christos static enum auto_boolean disassemble_next_line;
    739  1.1  christos 
    740  1.1  christos static void
    741  1.1  christos show_disassemble_next_line (struct ui_file *file, int from_tty,
    742  1.1  christos 				 struct cmd_list_element *c,
    743  1.1  christos 				 const char *value)
    744  1.1  christos {
    745  1.1  christos   fprintf_filtered (file,
    746  1.1  christos 		    _("Debugger's willingness to use "
    747  1.1  christos 		      "disassemble-next-line is %s.\n"),
    748  1.1  christos                     value);
    749  1.1  christos }
    750  1.1  christos 
    751  1.1  christos /* Use TRY_CATCH to catch the exception from the gdb_disassembly
    752  1.1  christos    because it will be broken by filter sometime.  */
    753  1.1  christos 
    754  1.1  christos static void
    755  1.1  christos do_gdb_disassembly (struct gdbarch *gdbarch,
    756  1.1  christos 		    int how_many, CORE_ADDR low, CORE_ADDR high)
    757  1.1  christos {
    758  1.1  christos   volatile struct gdb_exception exception;
    759  1.1  christos 
    760  1.1  christos   TRY_CATCH (exception, RETURN_MASK_ERROR)
    761  1.1  christos     {
    762  1.1  christos       gdb_disassembly (gdbarch, current_uiout, 0,
    763  1.1  christos 		       DISASSEMBLY_RAW_INSN, how_many,
    764  1.1  christos 		       low, high);
    765  1.1  christos     }
    766  1.1  christos   if (exception.reason < 0)
    767  1.1  christos     {
    768  1.1  christos       /* If an exception was thrown while doing the disassembly, print
    769  1.1  christos 	 the error message, to give the user a clue of what happened.  */
    770  1.1  christos       exception_print (gdb_stderr, exception);
    771  1.1  christos     }
    772  1.1  christos }
    773  1.1  christos 
    774  1.1  christos /* Print information about frame FRAME.  The output is format according
    775  1.1  christos    to PRINT_LEVEL and PRINT_WHAT and PRINT_ARGS.  The meaning of
    776  1.1  christos    PRINT_WHAT is:
    777  1.1  christos 
    778  1.1  christos    SRC_LINE: Print only source line.
    779  1.1  christos    LOCATION: Print only location.
    780  1.1  christos    LOC_AND_SRC: Print location and source line.
    781  1.1  christos 
    782  1.1  christos    Used in "where" output, and to emit breakpoint or step
    783  1.1  christos    messages.  */
    784  1.1  christos 
    785  1.1  christos void
    786  1.1  christos print_frame_info (struct frame_info *frame, int print_level,
    787  1.1  christos 		  enum print_what print_what, int print_args,
    788  1.1  christos 		  int set_current_sal)
    789  1.1  christos {
    790  1.1  christos   struct gdbarch *gdbarch = get_frame_arch (frame);
    791  1.1  christos   struct symtab_and_line sal;
    792  1.1  christos   int source_print;
    793  1.1  christos   int location_print;
    794  1.1  christos   struct ui_out *uiout = current_uiout;
    795  1.1  christos 
    796  1.1  christos   if (get_frame_type (frame) == DUMMY_FRAME
    797  1.1  christos       || get_frame_type (frame) == SIGTRAMP_FRAME
    798  1.1  christos       || get_frame_type (frame) == ARCH_FRAME)
    799  1.1  christos     {
    800  1.1  christos       struct cleanup *uiout_cleanup
    801  1.1  christos 	= make_cleanup_ui_out_tuple_begin_end (uiout, "frame");
    802  1.1  christos 
    803  1.1  christos       annotate_frame_begin (print_level ? frame_relative_level (frame) : 0,
    804  1.1  christos 			    gdbarch, get_frame_pc (frame));
    805  1.1  christos 
    806  1.1  christos       /* Do this regardless of SOURCE because we don't have any source
    807  1.1  christos          to list for this frame.  */
    808  1.1  christos       if (print_level)
    809  1.1  christos         {
    810  1.1  christos           ui_out_text (uiout, "#");
    811  1.1  christos           ui_out_field_fmt_int (uiout, 2, ui_left, "level",
    812  1.1  christos 				frame_relative_level (frame));
    813  1.1  christos         }
    814  1.1  christos       if (ui_out_is_mi_like_p (uiout))
    815  1.1  christos         {
    816  1.1  christos           annotate_frame_address ();
    817  1.1  christos           ui_out_field_core_addr (uiout, "addr",
    818  1.1  christos 				  gdbarch, get_frame_pc (frame));
    819  1.1  christos           annotate_frame_address_end ();
    820  1.1  christos         }
    821  1.1  christos 
    822  1.1  christos       if (get_frame_type (frame) == DUMMY_FRAME)
    823  1.1  christos         {
    824  1.1  christos           annotate_function_call ();
    825  1.1  christos           ui_out_field_string (uiout, "func", "<function called from gdb>");
    826  1.1  christos 	}
    827  1.1  christos       else if (get_frame_type (frame) == SIGTRAMP_FRAME)
    828  1.1  christos         {
    829  1.1  christos 	  annotate_signal_handler_caller ();
    830  1.1  christos           ui_out_field_string (uiout, "func", "<signal handler called>");
    831  1.1  christos         }
    832  1.1  christos       else if (get_frame_type (frame) == ARCH_FRAME)
    833  1.1  christos         {
    834  1.1  christos           ui_out_field_string (uiout, "func", "<cross-architecture call>");
    835  1.1  christos 	}
    836  1.1  christos       ui_out_text (uiout, "\n");
    837  1.1  christos       annotate_frame_end ();
    838  1.1  christos 
    839  1.1  christos       do_cleanups (uiout_cleanup);
    840  1.1  christos       return;
    841  1.1  christos     }
    842  1.1  christos 
    843  1.1  christos   /* If FRAME is not the innermost frame, that normally means that
    844  1.1  christos      FRAME->pc points to *after* the call instruction, and we want to
    845  1.1  christos      get the line containing the call, never the next line.  But if
    846  1.1  christos      the next frame is a SIGTRAMP_FRAME or a DUMMY_FRAME, then the
    847  1.1  christos      next frame was not entered as the result of a call, and we want
    848  1.1  christos      to get the line containing FRAME->pc.  */
    849  1.1  christos   find_frame_sal (frame, &sal);
    850  1.1  christos 
    851  1.1  christos   location_print = (print_what == LOCATION
    852  1.1  christos 		    || print_what == LOC_AND_ADDRESS
    853  1.1  christos 		    || print_what == SRC_AND_LOC);
    854  1.1  christos 
    855  1.1  christos   if (location_print || !sal.symtab)
    856  1.1  christos     print_frame (frame, print_level, print_what, print_args, sal);
    857  1.1  christos 
    858  1.1  christos   source_print = (print_what == SRC_LINE || print_what == SRC_AND_LOC);
    859  1.1  christos 
    860  1.1  christos   /* If disassemble-next-line is set to auto or on and doesn't have
    861  1.1  christos      the line debug messages for $pc, output the next instruction.  */
    862  1.1  christos   if ((disassemble_next_line == AUTO_BOOLEAN_AUTO
    863  1.1  christos        || disassemble_next_line == AUTO_BOOLEAN_TRUE)
    864  1.1  christos       && source_print && !sal.symtab)
    865  1.1  christos     do_gdb_disassembly (get_frame_arch (frame), 1,
    866  1.1  christos 			get_frame_pc (frame), get_frame_pc (frame) + 1);
    867  1.1  christos 
    868  1.1  christos   if (source_print && sal.symtab)
    869  1.1  christos     {
    870  1.1  christos       int done = 0;
    871  1.1  christos       int mid_statement = ((print_what == SRC_LINE)
    872  1.1  christos 			   && frame_show_address (frame, sal));
    873  1.1  christos 
    874  1.1  christos       if (annotation_level)
    875  1.1  christos 	done = identify_source_line (sal.symtab, sal.line, mid_statement,
    876  1.1  christos 				     get_frame_pc (frame));
    877  1.1  christos       if (!done)
    878  1.1  christos 	{
    879  1.1  christos 	  if (deprecated_print_frame_info_listing_hook)
    880  1.1  christos 	    deprecated_print_frame_info_listing_hook (sal.symtab,
    881  1.1  christos 						      sal.line,
    882  1.1  christos 						      sal.line + 1, 0);
    883  1.1  christos 	  else
    884  1.1  christos 	    {
    885  1.1  christos 	      struct value_print_options opts;
    886  1.1  christos 
    887  1.1  christos 	      get_user_print_options (&opts);
    888  1.1  christos 	      /* We used to do this earlier, but that is clearly
    889  1.1  christos 		 wrong.  This function is used by many different
    890  1.1  christos 		 parts of gdb, including normal_stop in infrun.c,
    891  1.1  christos 		 which uses this to print out the current PC
    892  1.1  christos 		 when we stepi/nexti into the middle of a source
    893  1.1  christos 		 line.  Only the command line really wants this
    894  1.1  christos 		 behavior.  Other UIs probably would like the
    895  1.1  christos 		 ability to decide for themselves if it is desired.  */
    896  1.1  christos 	      if (opts.addressprint && mid_statement)
    897  1.1  christos 		{
    898  1.1  christos 		  ui_out_field_core_addr (uiout, "addr",
    899  1.1  christos 					  gdbarch, get_frame_pc (frame));
    900  1.1  christos 		  ui_out_text (uiout, "\t");
    901  1.1  christos 		}
    902  1.1  christos 
    903  1.1  christos 	      print_source_lines (sal.symtab, sal.line, sal.line + 1, 0);
    904  1.1  christos 	    }
    905  1.1  christos 	}
    906  1.1  christos 
    907  1.1  christos       /* If disassemble-next-line is set to on and there is line debug
    908  1.1  christos          messages, output assembly codes for next line.  */
    909  1.1  christos       if (disassemble_next_line == AUTO_BOOLEAN_TRUE)
    910  1.1  christos 	do_gdb_disassembly (get_frame_arch (frame), -1, sal.pc, sal.end);
    911  1.1  christos     }
    912  1.1  christos 
    913  1.1  christos   if (set_current_sal)
    914  1.1  christos     {
    915  1.1  christos       CORE_ADDR pc;
    916  1.1  christos 
    917  1.1  christos       if (get_frame_pc_if_available (frame, &pc))
    918  1.1  christos 	set_last_displayed_sal (1, sal.pspace, pc, sal.symtab, sal.line);
    919  1.1  christos       else
    920  1.1  christos 	set_last_displayed_sal (0, 0, 0, 0, 0);
    921  1.1  christos     }
    922  1.1  christos 
    923  1.1  christos   annotate_frame_end ();
    924  1.1  christos 
    925  1.1  christos   gdb_flush (gdb_stdout);
    926  1.1  christos }
    927  1.1  christos 
    928  1.1  christos /* Remember the last symtab and line we displayed, which we use e.g.
    929  1.1  christos  * as the place to put a breakpoint when the `break' command is
    930  1.1  christos  * invoked with no arguments.  */
    931  1.1  christos 
    932  1.1  christos static void
    933  1.1  christos set_last_displayed_sal (int valid, struct program_space *pspace,
    934  1.1  christos 			CORE_ADDR addr, struct symtab *symtab,
    935  1.1  christos 			int line)
    936  1.1  christos {
    937  1.1  christos   last_displayed_sal_valid = valid;
    938  1.1  christos   last_displayed_pspace = pspace;
    939  1.1  christos   last_displayed_addr = addr;
    940  1.1  christos   last_displayed_symtab = symtab;
    941  1.1  christos   last_displayed_line = line;
    942  1.1  christos   if (valid && pspace == NULL)
    943  1.1  christos     {
    944  1.1  christos       clear_last_displayed_sal ();
    945  1.1  christos       internal_error (__FILE__, __LINE__,
    946  1.1  christos 		      _("Trying to set NULL pspace."));
    947  1.1  christos     }
    948  1.1  christos }
    949  1.1  christos 
    950  1.1  christos /* Forget the last sal we displayed.  */
    951  1.1  christos 
    952  1.1  christos void
    953  1.1  christos clear_last_displayed_sal (void)
    954  1.1  christos {
    955  1.1  christos   last_displayed_sal_valid = 0;
    956  1.1  christos   last_displayed_pspace = 0;
    957  1.1  christos   last_displayed_addr = 0;
    958  1.1  christos   last_displayed_symtab = 0;
    959  1.1  christos   last_displayed_line = 0;
    960  1.1  christos }
    961  1.1  christos 
    962  1.1  christos /* Is our record of the last sal we displayed valid?  If not,
    963  1.1  christos  * the get_last_displayed_* functions will return NULL or 0, as
    964  1.1  christos  * appropriate.  */
    965  1.1  christos 
    966  1.1  christos int
    967  1.1  christos last_displayed_sal_is_valid (void)
    968  1.1  christos {
    969  1.1  christos   return last_displayed_sal_valid;
    970  1.1  christos }
    971  1.1  christos 
    972  1.1  christos /* Get the pspace of the last sal we displayed, if it's valid.  */
    973  1.1  christos 
    974  1.1  christos struct program_space *
    975  1.1  christos get_last_displayed_pspace (void)
    976  1.1  christos {
    977  1.1  christos   if (last_displayed_sal_valid)
    978  1.1  christos     return last_displayed_pspace;
    979  1.1  christos   return 0;
    980  1.1  christos }
    981  1.1  christos 
    982  1.1  christos /* Get the address of the last sal we displayed, if it's valid.  */
    983  1.1  christos 
    984  1.1  christos CORE_ADDR
    985  1.1  christos get_last_displayed_addr (void)
    986  1.1  christos {
    987  1.1  christos   if (last_displayed_sal_valid)
    988  1.1  christos     return last_displayed_addr;
    989  1.1  christos   return 0;
    990  1.1  christos }
    991  1.1  christos 
    992  1.1  christos /* Get the symtab of the last sal we displayed, if it's valid.  */
    993  1.1  christos 
    994  1.1  christos struct symtab*
    995  1.1  christos get_last_displayed_symtab (void)
    996  1.1  christos {
    997  1.1  christos   if (last_displayed_sal_valid)
    998  1.1  christos     return last_displayed_symtab;
    999  1.1  christos   return 0;
   1000  1.1  christos }
   1001  1.1  christos 
   1002  1.1  christos /* Get the line of the last sal we displayed, if it's valid.  */
   1003  1.1  christos 
   1004  1.1  christos int
   1005  1.1  christos get_last_displayed_line (void)
   1006  1.1  christos {
   1007  1.1  christos   if (last_displayed_sal_valid)
   1008  1.1  christos     return last_displayed_line;
   1009  1.1  christos   return 0;
   1010  1.1  christos }
   1011  1.1  christos 
   1012  1.1  christos /* Get the last sal we displayed, if it's valid.  */
   1013  1.1  christos 
   1014  1.1  christos void
   1015  1.1  christos get_last_displayed_sal (struct symtab_and_line *sal)
   1016  1.1  christos {
   1017  1.1  christos   if (last_displayed_sal_valid)
   1018  1.1  christos     {
   1019  1.1  christos       sal->pspace = last_displayed_pspace;
   1020  1.1  christos       sal->pc = last_displayed_addr;
   1021  1.1  christos       sal->symtab = last_displayed_symtab;
   1022  1.1  christos       sal->line = last_displayed_line;
   1023  1.1  christos     }
   1024  1.1  christos   else
   1025  1.1  christos     {
   1026  1.1  christos       sal->pspace = 0;
   1027  1.1  christos       sal->pc = 0;
   1028  1.1  christos       sal->symtab = 0;
   1029  1.1  christos       sal->line = 0;
   1030  1.1  christos     }
   1031  1.1  christos }
   1032  1.1  christos 
   1033  1.1  christos 
   1034  1.1  christos /* Attempt to obtain the FUNNAME, FUNLANG and optionally FUNCP of the function
   1035  1.1  christos    corresponding to FRAME.  FUNNAME needs to be freed by the caller.  */
   1036  1.1  christos 
   1037  1.1  christos void
   1038  1.1  christos find_frame_funname (struct frame_info *frame, char **funname,
   1039  1.1  christos 		    enum language *funlang, struct symbol **funcp)
   1040  1.1  christos {
   1041  1.1  christos   struct symbol *func;
   1042  1.1  christos 
   1043  1.1  christos   *funname = NULL;
   1044  1.1  christos   *funlang = language_unknown;
   1045  1.1  christos   if (funcp)
   1046  1.1  christos     *funcp = NULL;
   1047  1.1  christos 
   1048  1.1  christos   func = get_frame_function (frame);
   1049  1.1  christos   if (func)
   1050  1.1  christos     {
   1051  1.1  christos       /* In certain pathological cases, the symtabs give the wrong
   1052  1.1  christos          function (when we are in the first function in a file which
   1053  1.1  christos          is compiled without debugging symbols, the previous function
   1054  1.1  christos          is compiled with debugging symbols, and the "foo.o" symbol
   1055  1.1  christos          that is supposed to tell us where the file with debugging
   1056  1.1  christos          symbols ends has been truncated by ar because it is longer
   1057  1.1  christos          than 15 characters).  This also occurs if the user uses asm()
   1058  1.1  christos          to create a function but not stabs for it (in a file compiled
   1059  1.1  christos          with -g).
   1060  1.1  christos 
   1061  1.1  christos          So look in the minimal symbol tables as well, and if it comes
   1062  1.1  christos          up with a larger address for the function use that instead.
   1063  1.1  christos          I don't think this can ever cause any problems; there
   1064  1.1  christos          shouldn't be any minimal symbols in the middle of a function;
   1065  1.1  christos          if this is ever changed many parts of GDB will need to be
   1066  1.1  christos          changed (and we'll create a find_pc_minimal_function or some
   1067  1.1  christos          such).  */
   1068  1.1  christos 
   1069  1.1  christos       struct bound_minimal_symbol msymbol;
   1070  1.1  christos 
   1071  1.1  christos       /* Don't attempt to do this for inlined functions, which do not
   1072  1.1  christos 	 have a corresponding minimal symbol.  */
   1073  1.1  christos       if (!block_inlined_p (SYMBOL_BLOCK_VALUE (func)))
   1074  1.1  christos 	msymbol
   1075  1.1  christos 	  = lookup_minimal_symbol_by_pc (get_frame_address_in_block (frame));
   1076  1.1  christos       else
   1077  1.1  christos 	memset (&msymbol, 0, sizeof (msymbol));
   1078  1.1  christos 
   1079  1.1  christos       if (msymbol.minsym != NULL
   1080  1.1  christos 	  && (SYMBOL_VALUE_ADDRESS (msymbol.minsym)
   1081  1.1  christos 	      > BLOCK_START (SYMBOL_BLOCK_VALUE (func))))
   1082  1.1  christos 	{
   1083  1.1  christos 	  /* We also don't know anything about the function besides
   1084  1.1  christos 	     its address and name.  */
   1085  1.1  christos 	  func = 0;
   1086  1.1  christos 	  *funname = xstrdup (SYMBOL_PRINT_NAME (msymbol.minsym));
   1087  1.1  christos 	  *funlang = SYMBOL_LANGUAGE (msymbol.minsym);
   1088  1.1  christos 	}
   1089  1.1  christos       else
   1090  1.1  christos 	{
   1091  1.1  christos 	  *funname = xstrdup (SYMBOL_PRINT_NAME (func));
   1092  1.1  christos 	  *funlang = SYMBOL_LANGUAGE (func);
   1093  1.1  christos 	  if (funcp)
   1094  1.1  christos 	    *funcp = func;
   1095  1.1  christos 	  if (*funlang == language_cplus)
   1096  1.1  christos 	    {
   1097  1.1  christos 	      /* It seems appropriate to use SYMBOL_PRINT_NAME() here,
   1098  1.1  christos 		 to display the demangled name that we already have
   1099  1.1  christos 		 stored in the symbol table, but we stored a version
   1100  1.1  christos 		 with DMGL_PARAMS turned on, and here we don't want to
   1101  1.1  christos 		 display parameters.  So remove the parameters.  */
   1102  1.1  christos 	      char *func_only = cp_remove_params (*funname);
   1103  1.1  christos 
   1104  1.1  christos 	      if (func_only)
   1105  1.1  christos 		{
   1106  1.1  christos 		  xfree (*funname);
   1107  1.1  christos 		  *funname = func_only;
   1108  1.1  christos 		}
   1109  1.1  christos 	    }
   1110  1.1  christos 	}
   1111  1.1  christos     }
   1112  1.1  christos   else
   1113  1.1  christos     {
   1114  1.1  christos       struct bound_minimal_symbol msymbol;
   1115  1.1  christos       CORE_ADDR pc;
   1116  1.1  christos 
   1117  1.1  christos       if (!get_frame_address_in_block_if_available (frame, &pc))
   1118  1.1  christos 	return;
   1119  1.1  christos 
   1120  1.1  christos       msymbol = lookup_minimal_symbol_by_pc (pc);
   1121  1.1  christos       if (msymbol.minsym != NULL)
   1122  1.1  christos 	{
   1123  1.1  christos 	  *funname = xstrdup (SYMBOL_PRINT_NAME (msymbol.minsym));
   1124  1.1  christos 	  *funlang = SYMBOL_LANGUAGE (msymbol.minsym);
   1125  1.1  christos 	}
   1126  1.1  christos     }
   1127  1.1  christos }
   1128  1.1  christos 
   1129  1.1  christos static void
   1130  1.1  christos print_frame (struct frame_info *frame, int print_level,
   1131  1.1  christos 	     enum print_what print_what, int print_args,
   1132  1.1  christos 	     struct symtab_and_line sal)
   1133  1.1  christos {
   1134  1.1  christos   struct gdbarch *gdbarch = get_frame_arch (frame);
   1135  1.1  christos   struct ui_out *uiout = current_uiout;
   1136  1.1  christos   char *funname = NULL;
   1137  1.1  christos   enum language funlang = language_unknown;
   1138  1.1  christos   struct ui_file *stb;
   1139  1.1  christos   struct cleanup *old_chain, *list_chain;
   1140  1.1  christos   struct value_print_options opts;
   1141  1.1  christos   struct symbol *func;
   1142  1.1  christos   CORE_ADDR pc = 0;
   1143  1.1  christos   int pc_p;
   1144  1.1  christos 
   1145  1.1  christos   pc_p = get_frame_pc_if_available (frame, &pc);
   1146  1.1  christos 
   1147  1.1  christos   stb = mem_fileopen ();
   1148  1.1  christos   old_chain = make_cleanup_ui_file_delete (stb);
   1149  1.1  christos 
   1150  1.1  christos   find_frame_funname (frame, &funname, &funlang, &func);
   1151  1.1  christos   make_cleanup (xfree, funname);
   1152  1.1  christos 
   1153  1.1  christos   annotate_frame_begin (print_level ? frame_relative_level (frame) : 0,
   1154  1.1  christos 			gdbarch, pc);
   1155  1.1  christos 
   1156  1.1  christos   list_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "frame");
   1157  1.1  christos 
   1158  1.1  christos   if (print_level)
   1159  1.1  christos     {
   1160  1.1  christos       ui_out_text (uiout, "#");
   1161  1.1  christos       ui_out_field_fmt_int (uiout, 2, ui_left, "level",
   1162  1.1  christos 			    frame_relative_level (frame));
   1163  1.1  christos     }
   1164  1.1  christos   get_user_print_options (&opts);
   1165  1.1  christos   if (opts.addressprint)
   1166  1.1  christos     if (!sal.symtab
   1167  1.1  christos 	|| frame_show_address (frame, sal)
   1168  1.1  christos 	|| print_what == LOC_AND_ADDRESS)
   1169  1.1  christos       {
   1170  1.1  christos 	annotate_frame_address ();
   1171  1.1  christos 	if (pc_p)
   1172  1.1  christos 	  ui_out_field_core_addr (uiout, "addr", gdbarch, pc);
   1173  1.1  christos 	else
   1174  1.1  christos 	  ui_out_field_string (uiout, "addr", "<unavailable>");
   1175  1.1  christos 	annotate_frame_address_end ();
   1176  1.1  christos 	ui_out_text (uiout, " in ");
   1177  1.1  christos       }
   1178  1.1  christos   annotate_frame_function_name ();
   1179  1.1  christos   fprintf_symbol_filtered (stb, funname ? funname : "??",
   1180  1.1  christos 			   funlang, DMGL_ANSI);
   1181  1.1  christos   ui_out_field_stream (uiout, "func", stb);
   1182  1.1  christos   ui_out_wrap_hint (uiout, "   ");
   1183  1.1  christos   annotate_frame_args ();
   1184  1.1  christos 
   1185  1.1  christos   ui_out_text (uiout, " (");
   1186  1.1  christos   if (print_args)
   1187  1.1  christos     {
   1188  1.1  christos       struct gdbarch *gdbarch = get_frame_arch (frame);
   1189  1.1  christos       int numargs;
   1190  1.1  christos       struct cleanup *args_list_chain;
   1191  1.1  christos       volatile struct gdb_exception e;
   1192  1.1  christos 
   1193  1.1  christos       if (gdbarch_frame_num_args_p (gdbarch))
   1194  1.1  christos 	{
   1195  1.1  christos 	  numargs = gdbarch_frame_num_args (gdbarch, frame);
   1196  1.1  christos 	  gdb_assert (numargs >= 0);
   1197  1.1  christos 	}
   1198  1.1  christos       else
   1199  1.1  christos 	numargs = -1;
   1200  1.1  christos 
   1201  1.1  christos       args_list_chain = make_cleanup_ui_out_list_begin_end (uiout, "args");
   1202  1.1  christos       TRY_CATCH (e, RETURN_MASK_ERROR)
   1203  1.1  christos 	{
   1204  1.1  christos 	  print_frame_args (func, frame, numargs, gdb_stdout);
   1205  1.1  christos 	}
   1206  1.1  christos       /* FIXME: ARGS must be a list.  If one argument is a string it
   1207  1.1  christos 	  will have " that will not be properly escaped.  */
   1208  1.1  christos       /* Invoke ui_out_tuple_end.  */
   1209  1.1  christos       do_cleanups (args_list_chain);
   1210  1.1  christos       QUIT;
   1211  1.1  christos     }
   1212  1.1  christos   ui_out_text (uiout, ")");
   1213  1.1  christos   if (sal.symtab)
   1214  1.1  christos     {
   1215  1.1  christos       const char *filename_display;
   1216  1.1  christos 
   1217  1.1  christos       filename_display = symtab_to_filename_for_display (sal.symtab);
   1218  1.1  christos       annotate_frame_source_begin ();
   1219  1.1  christos       ui_out_wrap_hint (uiout, "   ");
   1220  1.1  christos       ui_out_text (uiout, " at ");
   1221  1.1  christos       annotate_frame_source_file ();
   1222  1.1  christos       ui_out_field_string (uiout, "file", filename_display);
   1223  1.1  christos       if (ui_out_is_mi_like_p (uiout))
   1224  1.1  christos 	{
   1225  1.1  christos 	  const char *fullname = symtab_to_fullname (sal.symtab);
   1226  1.1  christos 
   1227  1.1  christos 	  ui_out_field_string (uiout, "fullname", fullname);
   1228  1.1  christos 	}
   1229  1.1  christos       annotate_frame_source_file_end ();
   1230  1.1  christos       ui_out_text (uiout, ":");
   1231  1.1  christos       annotate_frame_source_line ();
   1232  1.1  christos       ui_out_field_int (uiout, "line", sal.line);
   1233  1.1  christos       annotate_frame_source_end ();
   1234  1.1  christos     }
   1235  1.1  christos 
   1236  1.1  christos   if (pc_p && (funname == NULL || sal.symtab == NULL))
   1237  1.1  christos     {
   1238  1.1  christos       char *lib = solib_name_from_address (get_frame_program_space (frame),
   1239  1.1  christos 					   get_frame_pc (frame));
   1240  1.1  christos 
   1241  1.1  christos       if (lib)
   1242  1.1  christos 	{
   1243  1.1  christos 	  annotate_frame_where ();
   1244  1.1  christos 	  ui_out_wrap_hint (uiout, "  ");
   1245  1.1  christos 	  ui_out_text (uiout, " from ");
   1246  1.1  christos 	  ui_out_field_string (uiout, "from", lib);
   1247  1.1  christos 	}
   1248  1.1  christos     }
   1249  1.1  christos 
   1250  1.1  christos   /* do_cleanups will call ui_out_tuple_end() for us.  */
   1251  1.1  christos   do_cleanups (list_chain);
   1252  1.1  christos   ui_out_text (uiout, "\n");
   1253  1.1  christos   do_cleanups (old_chain);
   1254  1.1  christos }
   1255  1.1  christos 
   1256  1.1  christos 
   1258  1.1  christos /* Read a frame specification in whatever the appropriate format is
   1259  1.1  christos    from FRAME_EXP.  Call error(), printing MESSAGE, if the
   1260  1.1  christos    specification is in any way invalid (so this function never returns
   1261  1.1  christos    NULL).  When SEPECTED_P is non-NULL set its target to indicate that
   1262  1.1  christos    the default selected frame was used.  */
   1263  1.1  christos 
   1264  1.1  christos static struct frame_info *
   1265  1.1  christos parse_frame_specification_1 (const char *frame_exp, const char *message,
   1266  1.1  christos 			     int *selected_frame_p)
   1267  1.1  christos {
   1268  1.1  christos   int numargs;
   1269  1.1  christos   struct value *args[4];
   1270  1.1  christos   CORE_ADDR addrs[ARRAY_SIZE (args)];
   1271  1.1  christos 
   1272  1.1  christos   if (frame_exp == NULL)
   1273  1.1  christos     numargs = 0;
   1274  1.1  christos   else
   1275  1.1  christos     {
   1276  1.1  christos       numargs = 0;
   1277  1.1  christos       while (1)
   1278  1.1  christos 	{
   1279  1.1  christos 	  char *addr_string;
   1280  1.1  christos 	  struct cleanup *cleanup;
   1281  1.1  christos 	  const char *p;
   1282  1.1  christos 
   1283  1.1  christos 	  /* Skip leading white space, bail of EOL.  */
   1284  1.1  christos 	  frame_exp = skip_spaces_const (frame_exp);
   1285  1.1  christos 	  if (!*frame_exp)
   1286  1.1  christos 	    break;
   1287  1.1  christos 
   1288  1.1  christos 	  /* Parse the argument, extract it, save it.  */
   1289  1.1  christos 	  for (p = frame_exp;
   1290  1.1  christos 	       *p && !isspace (*p);
   1291  1.1  christos 	       p++);
   1292  1.1  christos 	  addr_string = savestring (frame_exp, p - frame_exp);
   1293  1.1  christos 	  frame_exp = p;
   1294  1.1  christos 	  cleanup = make_cleanup (xfree, addr_string);
   1295  1.1  christos 
   1296  1.1  christos 	  /* NOTE: Parse and evaluate expression, but do not use
   1297  1.1  christos 	     functions such as parse_and_eval_long or
   1298  1.1  christos 	     parse_and_eval_address to also extract the value.
   1299  1.1  christos 	     Instead value_as_long and value_as_address are used.
   1300  1.1  christos 	     This avoids problems with expressions that contain
   1301  1.1  christos 	     side-effects.  */
   1302  1.1  christos 	  if (numargs >= ARRAY_SIZE (args))
   1303  1.1  christos 	    error (_("Too many args in frame specification"));
   1304  1.1  christos 	  args[numargs++] = parse_and_eval (addr_string);
   1305  1.1  christos 
   1306  1.1  christos 	  do_cleanups (cleanup);
   1307  1.1  christos 	}
   1308  1.1  christos     }
   1309  1.1  christos 
   1310  1.1  christos   /* If no args, default to the selected frame.  */
   1311  1.1  christos   if (numargs == 0)
   1312  1.1  christos     {
   1313  1.1  christos       if (selected_frame_p != NULL)
   1314  1.1  christos 	(*selected_frame_p) = 1;
   1315  1.1  christos       return get_selected_frame (message);
   1316  1.1  christos     }
   1317  1.1  christos 
   1318  1.1  christos   /* None of the remaining use the selected frame.  */
   1319  1.1  christos   if (selected_frame_p != NULL)
   1320  1.1  christos     (*selected_frame_p) = 0;
   1321  1.1  christos 
   1322  1.1  christos   /* Assume the single arg[0] is an integer, and try using that to
   1323  1.1  christos      select a frame relative to current.  */
   1324  1.1  christos   if (numargs == 1)
   1325  1.1  christos     {
   1326  1.1  christos       struct frame_info *fid;
   1327  1.1  christos       int level = value_as_long (args[0]);
   1328  1.1  christos 
   1329  1.1  christos       fid = find_relative_frame (get_current_frame (), &level);
   1330  1.1  christos       if (level == 0)
   1331  1.1  christos 	/* find_relative_frame was successful.  */
   1332  1.1  christos 	return fid;
   1333  1.1  christos     }
   1334  1.1  christos 
   1335  1.1  christos   /* Convert each value into a corresponding address.  */
   1336  1.1  christos   {
   1337  1.1  christos     int i;
   1338  1.1  christos 
   1339  1.1  christos     for (i = 0; i < numargs; i++)
   1340  1.1  christos       addrs[i] = value_as_address (args[i]);
   1341  1.1  christos   }
   1342  1.1  christos 
   1343  1.1  christos   /* Assume that the single arg[0] is an address, use that to identify
   1344  1.1  christos      a frame with a matching ID.  Should this also accept stack/pc or
   1345  1.1  christos      stack/pc/special.  */
   1346  1.1  christos   if (numargs == 1)
   1347  1.1  christos     {
   1348  1.1  christos       struct frame_id id = frame_id_build_wild (addrs[0]);
   1349  1.1  christos       struct frame_info *fid;
   1350  1.1  christos 
   1351  1.1  christos       /* If (s)he specifies the frame with an address, he deserves
   1352  1.1  christos 	 what (s)he gets.  Still, give the highest one that matches.
   1353  1.1  christos 	 (NOTE: cagney/2004-10-29: Why highest, or outer-most, I don't
   1354  1.1  christos 	 know).  */
   1355  1.1  christos       for (fid = get_current_frame ();
   1356  1.1  christos 	   fid != NULL;
   1357  1.1  christos 	   fid = get_prev_frame (fid))
   1358  1.1  christos 	{
   1359  1.1  christos 	  if (frame_id_eq (id, get_frame_id (fid)))
   1360  1.1  christos 	    {
   1361  1.1  christos 	      struct frame_info *prev_frame;
   1362  1.1  christos 
   1363  1.1  christos 	      while (1)
   1364  1.1  christos 		{
   1365  1.1  christos 		  prev_frame = get_prev_frame (fid);
   1366  1.1  christos 		  if (!prev_frame
   1367  1.1  christos 		      || !frame_id_eq (id, get_frame_id (prev_frame)))
   1368  1.1  christos 		    break;
   1369  1.1  christos 		  fid = prev_frame;
   1370  1.1  christos 		}
   1371  1.1  christos 	      return fid;
   1372  1.1  christos 	    }
   1373  1.1  christos 	}
   1374  1.1  christos       }
   1375  1.1  christos 
   1376  1.1  christos   /* We couldn't identify the frame as an existing frame, but
   1377  1.1  christos      perhaps we can create one with a single argument.  */
   1378  1.1  christos   if (numargs == 1)
   1379  1.1  christos     return create_new_frame (addrs[0], 0);
   1380  1.1  christos   else if (numargs == 2)
   1381  1.1  christos     return create_new_frame (addrs[0], addrs[1]);
   1382  1.1  christos   else
   1383  1.1  christos     error (_("Too many args in frame specification"));
   1384  1.1  christos }
   1385  1.1  christos 
   1386  1.1  christos static struct frame_info *
   1387  1.1  christos parse_frame_specification (char *frame_exp)
   1388  1.1  christos {
   1389  1.1  christos   return parse_frame_specification_1 (frame_exp, NULL, NULL);
   1390  1.1  christos }
   1391  1.1  christos 
   1392  1.1  christos /* Print verbosely the selected frame or the frame at address
   1393  1.1  christos    ADDR_EXP.  Absolutely all information in the frame is printed.  */
   1394  1.1  christos 
   1395  1.1  christos static void
   1396  1.1  christos frame_info (char *addr_exp, int from_tty)
   1397  1.1  christos {
   1398  1.1  christos   struct frame_info *fi;
   1399  1.1  christos   struct symtab_and_line sal;
   1400  1.1  christos   struct symbol *func;
   1401  1.1  christos   struct symtab *s;
   1402  1.1  christos   struct frame_info *calling_frame_info;
   1403  1.1  christos   int numregs;
   1404  1.1  christos   const char *funname = 0;
   1405  1.1  christos   enum language funlang = language_unknown;
   1406  1.1  christos   const char *pc_regname;
   1407  1.1  christos   int selected_frame_p;
   1408  1.1  christos   struct gdbarch *gdbarch;
   1409  1.1  christos   struct cleanup *back_to = make_cleanup (null_cleanup, NULL);
   1410  1.1  christos   CORE_ADDR frame_pc;
   1411  1.1  christos   int frame_pc_p;
   1412  1.1  christos   /* Initialize it to avoid "may be used uninitialized" warning.  */
   1413  1.1  christos   CORE_ADDR caller_pc = 0;
   1414  1.1  christos   volatile struct gdb_exception ex;
   1415  1.1  christos 
   1416  1.1  christos   fi = parse_frame_specification_1 (addr_exp, "No stack.", &selected_frame_p);
   1417  1.1  christos   gdbarch = get_frame_arch (fi);
   1418  1.1  christos 
   1419  1.1  christos   /* Name of the value returned by get_frame_pc().  Per comments, "pc"
   1420  1.1  christos      is not a good name.  */
   1421  1.1  christos   if (gdbarch_pc_regnum (gdbarch) >= 0)
   1422  1.1  christos     /* OK, this is weird.  The gdbarch_pc_regnum hardware register's value can
   1423  1.1  christos        easily not match that of the internal value returned by
   1424  1.1  christos        get_frame_pc().  */
   1425  1.1  christos     pc_regname = gdbarch_register_name (gdbarch, gdbarch_pc_regnum (gdbarch));
   1426  1.1  christos   else
   1427  1.1  christos     /* But then, this is weird to.  Even without gdbarch_pc_regnum, an
   1428  1.1  christos        architectures will often have a hardware register called "pc",
   1429  1.1  christos        and that register's value, again, can easily not match
   1430  1.1  christos        get_frame_pc().  */
   1431  1.1  christos     pc_regname = "pc";
   1432  1.1  christos 
   1433  1.1  christos   frame_pc_p = get_frame_pc_if_available (fi, &frame_pc);
   1434  1.1  christos   find_frame_sal (fi, &sal);
   1435  1.1  christos   func = get_frame_function (fi);
   1436  1.1  christos   s = sal.symtab;
   1437  1.1  christos   if (func)
   1438  1.1  christos     {
   1439  1.1  christos       funname = SYMBOL_PRINT_NAME (func);
   1440  1.1  christos       funlang = SYMBOL_LANGUAGE (func);
   1441  1.1  christos       if (funlang == language_cplus)
   1442  1.1  christos 	{
   1443  1.1  christos 	  /* It seems appropriate to use SYMBOL_PRINT_NAME() here,
   1444  1.1  christos 	     to display the demangled name that we already have
   1445  1.1  christos 	     stored in the symbol table, but we stored a version
   1446  1.1  christos 	     with DMGL_PARAMS turned on, and here we don't want to
   1447  1.1  christos 	     display parameters.  So remove the parameters.  */
   1448  1.1  christos 	  char *func_only = cp_remove_params (funname);
   1449  1.1  christos 
   1450  1.1  christos 	  if (func_only)
   1451  1.1  christos 	    {
   1452  1.1  christos 	      funname = func_only;
   1453  1.1  christos 	      make_cleanup (xfree, func_only);
   1454  1.1  christos 	    }
   1455  1.1  christos 	}
   1456  1.1  christos     }
   1457  1.1  christos   else if (frame_pc_p)
   1458  1.1  christos     {
   1459  1.1  christos       struct bound_minimal_symbol msymbol;
   1460  1.1  christos 
   1461  1.1  christos       msymbol = lookup_minimal_symbol_by_pc (frame_pc);
   1462  1.1  christos       if (msymbol.minsym != NULL)
   1463  1.1  christos 	{
   1464  1.1  christos 	  funname = SYMBOL_PRINT_NAME (msymbol.minsym);
   1465  1.1  christos 	  funlang = SYMBOL_LANGUAGE (msymbol.minsym);
   1466  1.1  christos 	}
   1467  1.1  christos     }
   1468  1.1  christos   calling_frame_info = get_prev_frame (fi);
   1469  1.1  christos 
   1470  1.1  christos   if (selected_frame_p && frame_relative_level (fi) >= 0)
   1471  1.1  christos     {
   1472  1.1  christos       printf_filtered (_("Stack level %d, frame at "),
   1473  1.1  christos 		       frame_relative_level (fi));
   1474  1.1  christos     }
   1475  1.1  christos   else
   1476  1.1  christos     {
   1477  1.1  christos       printf_filtered (_("Stack frame at "));
   1478  1.1  christos     }
   1479  1.1  christos   fputs_filtered (paddress (gdbarch, get_frame_base (fi)), gdb_stdout);
   1480  1.1  christos   printf_filtered (":\n");
   1481  1.1  christos   printf_filtered (" %s = ", pc_regname);
   1482  1.1  christos   if (frame_pc_p)
   1483  1.1  christos     fputs_filtered (paddress (gdbarch, get_frame_pc (fi)), gdb_stdout);
   1484  1.1  christos   else
   1485  1.1  christos     fputs_filtered ("<unavailable>", gdb_stdout);
   1486  1.1  christos 
   1487  1.1  christos   wrap_here ("   ");
   1488  1.1  christos   if (funname)
   1489  1.1  christos     {
   1490  1.1  christos       printf_filtered (" in ");
   1491  1.1  christos       fprintf_symbol_filtered (gdb_stdout, funname, funlang,
   1492  1.1  christos 			       DMGL_ANSI | DMGL_PARAMS);
   1493  1.1  christos     }
   1494  1.1  christos   wrap_here ("   ");
   1495  1.1  christos   if (sal.symtab)
   1496  1.1  christos     printf_filtered (" (%s:%d)", symtab_to_filename_for_display (sal.symtab),
   1497  1.1  christos 		     sal.line);
   1498  1.1  christos   puts_filtered ("; ");
   1499  1.1  christos   wrap_here ("    ");
   1500  1.1  christos   printf_filtered ("saved %s = ", pc_regname);
   1501  1.1  christos 
   1502  1.1  christos   TRY_CATCH (ex, RETURN_MASK_ERROR)
   1503  1.1  christos     {
   1504  1.1  christos       caller_pc = frame_unwind_caller_pc (fi);
   1505  1.1  christos     }
   1506  1.1  christos   if (ex.reason < 0)
   1507  1.1  christos     {
   1508  1.1  christos       switch (ex.error)
   1509  1.1  christos 	{
   1510  1.1  christos 	case NOT_AVAILABLE_ERROR:
   1511  1.1  christos 	  val_print_unavailable (gdb_stdout);
   1512  1.1  christos 	  break;
   1513  1.1  christos 	case OPTIMIZED_OUT_ERROR:
   1514  1.1  christos 	  val_print_not_saved (gdb_stdout);
   1515  1.1  christos 	  break;
   1516  1.1  christos 	default:
   1517  1.1  christos 	  fprintf_filtered (gdb_stdout, _("<error: %s>"), ex.message);
   1518  1.1  christos 	  break;
   1519  1.1  christos 	}
   1520  1.1  christos     }
   1521  1.1  christos   else
   1522  1.1  christos     fputs_filtered (paddress (gdbarch, caller_pc), gdb_stdout);
   1523  1.1  christos   printf_filtered ("\n");
   1524  1.1  christos 
   1525  1.1  christos   if (calling_frame_info == NULL)
   1526  1.1  christos     {
   1527  1.1  christos       enum unwind_stop_reason reason;
   1528  1.1  christos 
   1529  1.1  christos       reason = get_frame_unwind_stop_reason (fi);
   1530  1.1  christos       if (reason != UNWIND_NO_REASON)
   1531  1.1  christos 	printf_filtered (_(" Outermost frame: %s\n"),
   1532  1.1  christos 			 frame_stop_reason_string (reason));
   1533  1.1  christos     }
   1534  1.1  christos   else if (get_frame_type (fi) == TAILCALL_FRAME)
   1535  1.1  christos     puts_filtered (" tail call frame");
   1536  1.1  christos   else if (get_frame_type (fi) == INLINE_FRAME)
   1537  1.1  christos     printf_filtered (" inlined into frame %d",
   1538  1.1  christos 		     frame_relative_level (get_prev_frame (fi)));
   1539  1.1  christos   else
   1540  1.1  christos     {
   1541  1.1  christos       printf_filtered (" called by frame at ");
   1542  1.1  christos       fputs_filtered (paddress (gdbarch, get_frame_base (calling_frame_info)),
   1543  1.1  christos 		      gdb_stdout);
   1544  1.1  christos     }
   1545  1.1  christos   if (get_next_frame (fi) && calling_frame_info)
   1546  1.1  christos     puts_filtered (",");
   1547  1.1  christos   wrap_here ("   ");
   1548  1.1  christos   if (get_next_frame (fi))
   1549  1.1  christos     {
   1550  1.1  christos       printf_filtered (" caller of frame at ");
   1551  1.1  christos       fputs_filtered (paddress (gdbarch, get_frame_base (get_next_frame (fi))),
   1552  1.1  christos 		      gdb_stdout);
   1553  1.1  christos     }
   1554  1.1  christos   if (get_next_frame (fi) || calling_frame_info)
   1555  1.1  christos     puts_filtered ("\n");
   1556  1.1  christos 
   1557  1.1  christos   if (s)
   1558  1.1  christos     printf_filtered (" source language %s.\n",
   1559  1.1  christos 		     language_str (s->language));
   1560  1.1  christos 
   1561  1.1  christos   {
   1562  1.1  christos     /* Address of the argument list for this frame, or 0.  */
   1563  1.1  christos     CORE_ADDR arg_list = get_frame_args_address (fi);
   1564  1.1  christos     /* Number of args for this frame, or -1 if unknown.  */
   1565  1.1  christos     int numargs;
   1566  1.1  christos 
   1567  1.1  christos     if (arg_list == 0)
   1568  1.1  christos       printf_filtered (" Arglist at unknown address.\n");
   1569  1.1  christos     else
   1570  1.1  christos       {
   1571  1.1  christos 	printf_filtered (" Arglist at ");
   1572  1.1  christos 	fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
   1573  1.1  christos 	printf_filtered (",");
   1574  1.1  christos 
   1575  1.1  christos 	if (!gdbarch_frame_num_args_p (gdbarch))
   1576  1.1  christos 	  {
   1577  1.1  christos 	    numargs = -1;
   1578  1.1  christos 	    puts_filtered (" args: ");
   1579  1.1  christos 	  }
   1580  1.1  christos 	else
   1581  1.1  christos 	  {
   1582  1.1  christos 	    numargs = gdbarch_frame_num_args (gdbarch, fi);
   1583  1.1  christos 	    gdb_assert (numargs >= 0);
   1584  1.1  christos 	    if (numargs == 0)
   1585  1.1  christos 	      puts_filtered (" no args.");
   1586  1.1  christos 	    else if (numargs == 1)
   1587  1.1  christos 	      puts_filtered (" 1 arg: ");
   1588  1.1  christos 	    else
   1589  1.1  christos 	      printf_filtered (" %d args: ", numargs);
   1590  1.1  christos 	  }
   1591  1.1  christos 	print_frame_args (func, fi, numargs, gdb_stdout);
   1592  1.1  christos 	puts_filtered ("\n");
   1593  1.1  christos       }
   1594  1.1  christos   }
   1595  1.1  christos   {
   1596  1.1  christos     /* Address of the local variables for this frame, or 0.  */
   1597  1.1  christos     CORE_ADDR arg_list = get_frame_locals_address (fi);
   1598  1.1  christos 
   1599  1.1  christos     if (arg_list == 0)
   1600  1.1  christos       printf_filtered (" Locals at unknown address,");
   1601  1.1  christos     else
   1602  1.1  christos       {
   1603  1.1  christos 	printf_filtered (" Locals at ");
   1604  1.1  christos 	fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
   1605  1.1  christos 	printf_filtered (",");
   1606  1.1  christos       }
   1607  1.1  christos   }
   1608  1.1  christos 
   1609  1.1  christos   /* Print as much information as possible on the location of all the
   1610  1.1  christos      registers.  */
   1611  1.1  christos   {
   1612  1.1  christos     enum lval_type lval;
   1613  1.1  christos     int optimized;
   1614  1.1  christos     int unavailable;
   1615  1.1  christos     CORE_ADDR addr;
   1616  1.1  christos     int realnum;
   1617  1.1  christos     int count;
   1618  1.1  christos     int i;
   1619  1.1  christos     int need_nl = 1;
   1620  1.1  christos 
   1621  1.1  christos     /* The sp is special; what's displayed isn't the save address, but
   1622  1.1  christos        the value of the previous frame's sp.  This is a legacy thing,
   1623  1.1  christos        at one stage the frame cached the previous frame's SP instead
   1624  1.1  christos        of its address, hence it was easiest to just display the cached
   1625  1.1  christos        value.  */
   1626  1.1  christos     if (gdbarch_sp_regnum (gdbarch) >= 0)
   1627  1.1  christos       {
   1628  1.1  christos 	/* Find out the location of the saved stack pointer with out
   1629  1.1  christos            actually evaluating it.  */
   1630  1.1  christos 	frame_register_unwind (fi, gdbarch_sp_regnum (gdbarch),
   1631  1.1  christos 			       &optimized, &unavailable, &lval, &addr,
   1632  1.1  christos 			       &realnum, NULL);
   1633  1.1  christos 	if (!optimized && !unavailable && lval == not_lval)
   1634  1.1  christos 	  {
   1635  1.1  christos 	    enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   1636  1.1  christos 	    int sp_size = register_size (gdbarch, gdbarch_sp_regnum (gdbarch));
   1637  1.1  christos 	    gdb_byte value[MAX_REGISTER_SIZE];
   1638  1.1  christos 	    CORE_ADDR sp;
   1639  1.1  christos 
   1640  1.1  christos 	    frame_register_unwind (fi, gdbarch_sp_regnum (gdbarch),
   1641  1.1  christos 				   &optimized, &unavailable, &lval, &addr,
   1642  1.1  christos 				   &realnum, value);
   1643  1.1  christos 	    /* NOTE: cagney/2003-05-22: This is assuming that the
   1644  1.1  christos                stack pointer was packed as an unsigned integer.  That
   1645  1.1  christos                may or may not be valid.  */
   1646  1.1  christos 	    sp = extract_unsigned_integer (value, sp_size, byte_order);
   1647  1.1  christos 	    printf_filtered (" Previous frame's sp is ");
   1648  1.1  christos 	    fputs_filtered (paddress (gdbarch, sp), gdb_stdout);
   1649  1.1  christos 	    printf_filtered ("\n");
   1650  1.1  christos 	    need_nl = 0;
   1651  1.1  christos 	  }
   1652  1.1  christos 	else if (!optimized && !unavailable && lval == lval_memory)
   1653  1.1  christos 	  {
   1654  1.1  christos 	    printf_filtered (" Previous frame's sp at ");
   1655  1.1  christos 	    fputs_filtered (paddress (gdbarch, addr), gdb_stdout);
   1656  1.1  christos 	    printf_filtered ("\n");
   1657  1.1  christos 	    need_nl = 0;
   1658  1.1  christos 	  }
   1659  1.1  christos 	else if (!optimized && !unavailable && lval == lval_register)
   1660  1.1  christos 	  {
   1661  1.1  christos 	    printf_filtered (" Previous frame's sp in %s\n",
   1662  1.1  christos 			     gdbarch_register_name (gdbarch, realnum));
   1663  1.1  christos 	    need_nl = 0;
   1664  1.1  christos 	  }
   1665  1.1  christos 	/* else keep quiet.  */
   1666  1.1  christos       }
   1667  1.1  christos 
   1668  1.1  christos     count = 0;
   1669  1.1  christos     numregs = gdbarch_num_regs (gdbarch)
   1670  1.1  christos 	      + gdbarch_num_pseudo_regs (gdbarch);
   1671  1.1  christos     for (i = 0; i < numregs; i++)
   1672  1.1  christos       if (i != gdbarch_sp_regnum (gdbarch)
   1673  1.1  christos 	  && gdbarch_register_reggroup_p (gdbarch, i, all_reggroup))
   1674  1.1  christos 	{
   1675  1.1  christos 	  /* Find out the location of the saved register without
   1676  1.1  christos              fetching the corresponding value.  */
   1677  1.1  christos 	  frame_register_unwind (fi, i, &optimized, &unavailable,
   1678  1.1  christos 				 &lval, &addr, &realnum, NULL);
   1679  1.1  christos 	  /* For moment, only display registers that were saved on the
   1680  1.1  christos 	     stack.  */
   1681  1.1  christos 	  if (!optimized && !unavailable && lval == lval_memory)
   1682  1.1  christos 	    {
   1683  1.1  christos 	      if (count == 0)
   1684  1.1  christos 		puts_filtered (" Saved registers:\n ");
   1685  1.1  christos 	      else
   1686  1.1  christos 		puts_filtered (",");
   1687  1.1  christos 	      wrap_here (" ");
   1688  1.1  christos 	      printf_filtered (" %s at ",
   1689  1.1  christos 			       gdbarch_register_name (gdbarch, i));
   1690  1.1  christos 	      fputs_filtered (paddress (gdbarch, addr), gdb_stdout);
   1691  1.1  christos 	      count++;
   1692  1.1  christos 	    }
   1693  1.1  christos 	}
   1694  1.1  christos     if (count || need_nl)
   1695  1.1  christos       puts_filtered ("\n");
   1696  1.1  christos   }
   1697  1.1  christos 
   1698  1.1  christos   do_cleanups (back_to);
   1699  1.1  christos }
   1700  1.1  christos 
   1701  1.1  christos /* Print briefly all stack frames or just the innermost COUNT_EXP
   1702  1.1  christos    frames.  */
   1703  1.1  christos 
   1704  1.1  christos static void
   1705  1.1  christos backtrace_command_1 (char *count_exp, int show_locals, int no_filters,
   1706  1.1  christos 		     int from_tty)
   1707  1.1  christos {
   1708  1.1  christos   struct frame_info *fi;
   1709  1.1  christos   int count;
   1710  1.1  christos   int i;
   1711  1.1  christos   struct frame_info *trailing;
   1712  1.1  christos   int trailing_level, py_start = 0, py_end = 0;
   1713  1.1  christos   enum py_bt_status result = PY_BT_ERROR;
   1714  1.1  christos 
   1715  1.1  christos   if (!target_has_stack)
   1716  1.1  christos     error (_("No stack."));
   1717  1.1  christos 
   1718  1.1  christos   /* The following code must do two things.  First, it must set the
   1719  1.1  christos      variable TRAILING to the frame from which we should start
   1720  1.1  christos      printing.  Second, it must set the variable count to the number
   1721  1.1  christos      of frames which we should print, or -1 if all of them.  */
   1722  1.1  christos   trailing = get_current_frame ();
   1723  1.1  christos 
   1724  1.1  christos   trailing_level = 0;
   1725  1.1  christos   if (count_exp)
   1726  1.1  christos     {
   1727  1.1  christos       count = parse_and_eval_long (count_exp);
   1728  1.1  christos       if (count < 0)
   1729  1.1  christos 	{
   1730  1.1  christos 	  struct frame_info *current;
   1731  1.1  christos 
   1732  1.1  christos 	  py_start = count;
   1733  1.1  christos 	  count = -count;
   1734  1.1  christos 
   1735  1.1  christos 	  current = trailing;
   1736  1.1  christos 	  while (current && count--)
   1737  1.1  christos 	    {
   1738  1.1  christos 	      QUIT;
   1739  1.1  christos 	      current = get_prev_frame (current);
   1740  1.1  christos 	    }
   1741  1.1  christos 
   1742  1.1  christos 	  /* Will stop when CURRENT reaches the top of the stack.
   1743  1.1  christos 	     TRAILING will be COUNT below it.  */
   1744  1.1  christos 	  while (current)
   1745  1.1  christos 	    {
   1746  1.1  christos 	      QUIT;
   1747  1.1  christos 	      trailing = get_prev_frame (trailing);
   1748  1.1  christos 	      current = get_prev_frame (current);
   1749  1.1  christos 	      trailing_level++;
   1750  1.1  christos 	    }
   1751  1.1  christos 
   1752  1.1  christos 	  count = -1;
   1753  1.1  christos 	}
   1754  1.1  christos       else
   1755  1.1  christos 	{
   1756  1.1  christos 	  py_start = 0;
   1757  1.1  christos 	  py_end = count;
   1758  1.1  christos 	}
   1759  1.1  christos     }
   1760  1.1  christos   else
   1761  1.1  christos     {
   1762  1.1  christos       py_end = -1;
   1763  1.1  christos       count = -1;
   1764  1.1  christos     }
   1765  1.1  christos 
   1766  1.1  christos   if (info_verbose)
   1767  1.1  christos     {
   1768  1.1  christos       /* Read in symbols for all of the frames.  Need to do this in a
   1769  1.1  christos          separate pass so that "Reading in symbols for xxx" messages
   1770  1.1  christos          don't screw up the appearance of the backtrace.  Also if
   1771  1.1  christos          people have strong opinions against reading symbols for
   1772  1.1  christos          backtrace this may have to be an option.  */
   1773  1.1  christos       i = count;
   1774  1.1  christos       for (fi = trailing; fi != NULL && i--; fi = get_prev_frame (fi))
   1775  1.1  christos 	{
   1776  1.1  christos 	  CORE_ADDR pc;
   1777  1.1  christos 
   1778  1.1  christos 	  QUIT;
   1779  1.1  christos 	  pc = get_frame_address_in_block (fi);
   1780  1.1  christos 	  find_pc_sect_symtab_via_partial (pc, find_pc_mapped_section (pc));
   1781  1.1  christos 	}
   1782  1.1  christos     }
   1783  1.1  christos 
   1784  1.1  christos   if (! no_filters)
   1785  1.1  christos     {
   1786  1.1  christos       int flags = PRINT_LEVEL | PRINT_FRAME_INFO | PRINT_ARGS;
   1787  1.1  christos       enum py_frame_args arg_type;
   1788  1.1  christos 
   1789  1.1  christos       if (show_locals)
   1790  1.1  christos 	flags |= PRINT_LOCALS;
   1791  1.1  christos 
   1792  1.1  christos       if (!strcmp (print_frame_arguments, "scalars"))
   1793  1.1  christos 	arg_type = CLI_SCALAR_VALUES;
   1794  1.1  christos       else if (!strcmp (print_frame_arguments, "all"))
   1795  1.1  christos 	arg_type = CLI_ALL_VALUES;
   1796  1.1  christos       else
   1797  1.1  christos 	arg_type = NO_VALUES;
   1798  1.1  christos 
   1799  1.1  christos       result = apply_frame_filter (get_current_frame (), flags, arg_type,
   1800  1.1  christos 				   current_uiout, py_start, py_end);
   1801  1.1  christos 
   1802  1.1  christos     }
   1803  1.1  christos   /* Run the inbuilt backtrace if there are no filters registered, or
   1804  1.1  christos      "no-filters" has been specified from the command.  */
   1805  1.1  christos   if (no_filters ||  result == PY_BT_NO_FILTERS)
   1806  1.1  christos     {
   1807  1.1  christos       for (i = 0, fi = trailing; fi && count--; i++, fi = get_prev_frame (fi))
   1808  1.1  christos 	{
   1809  1.1  christos 	  QUIT;
   1810  1.1  christos 
   1811  1.1  christos 	  /* Don't use print_stack_frame; if an error() occurs it probably
   1812  1.1  christos 	     means further attempts to backtrace would fail (on the other
   1813  1.1  christos 	     hand, perhaps the code does or could be fixed to make sure
   1814  1.1  christos 	     the frame->prev field gets set to NULL in that case).  */
   1815  1.1  christos 
   1816  1.1  christos 	  print_frame_info (fi, 1, LOCATION, 1, 0);
   1817  1.1  christos 	  if (show_locals)
   1818  1.1  christos 	    {
   1819  1.1  christos 	      struct frame_id frame_id = get_frame_id (fi);
   1820  1.1  christos 
   1821  1.1  christos 	      print_frame_local_vars (fi, 1, gdb_stdout);
   1822  1.1  christos 
   1823  1.1  christos 	      /* print_frame_local_vars invalidates FI.  */
   1824  1.1  christos 	      fi = frame_find_by_id (frame_id);
   1825  1.1  christos 	      if (fi == NULL)
   1826  1.1  christos 		{
   1827  1.1  christos 		  trailing = NULL;
   1828  1.1  christos 		  warning (_("Unable to restore previously selected frame."));
   1829  1.1  christos 		  break;
   1830  1.1  christos 		}
   1831  1.1  christos 	    }
   1832  1.1  christos 
   1833  1.1  christos 	  /* Save the last frame to check for error conditions.  */
   1834  1.1  christos 	  trailing = fi;
   1835  1.1  christos 	}
   1836  1.1  christos 
   1837  1.1  christos       /* If we've stopped before the end, mention that.  */
   1838  1.1  christos       if (fi && from_tty)
   1839  1.1  christos 	printf_filtered (_("(More stack frames follow...)\n"));
   1840  1.1  christos 
   1841  1.1  christos       /* If we've run out of frames, and the reason appears to be an error
   1842  1.1  christos 	 condition, print it.  */
   1843  1.1  christos       if (fi == NULL && trailing != NULL)
   1844  1.1  christos 	{
   1845  1.1  christos 	  enum unwind_stop_reason reason;
   1846  1.1  christos 
   1847  1.1  christos 	  reason = get_frame_unwind_stop_reason (trailing);
   1848  1.1  christos 	  if (reason >= UNWIND_FIRST_ERROR)
   1849  1.1  christos 	    printf_filtered (_("Backtrace stopped: %s\n"),
   1850  1.1  christos 			     frame_stop_reason_string (reason));
   1851  1.1  christos 	}
   1852  1.1  christos     }
   1853  1.1  christos }
   1854  1.1  christos 
   1855  1.1  christos static void
   1856  1.1  christos backtrace_command (char *arg, int from_tty)
   1857  1.1  christos {
   1858  1.1  christos   struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
   1859  1.1  christos   int fulltrace_arg = -1, arglen = 0, argc = 0, no_filters  = -1;
   1860  1.1  christos   int user_arg = 0;
   1861  1.1  christos 
   1862  1.1  christos   if (arg)
   1863  1.1  christos     {
   1864  1.1  christos       char **argv;
   1865  1.1  christos       int i;
   1866  1.1  christos 
   1867  1.1  christos       argv = gdb_buildargv (arg);
   1868  1.1  christos       make_cleanup_freeargv (argv);
   1869  1.1  christos       argc = 0;
   1870  1.1  christos       for (i = 0; argv[i]; i++)
   1871  1.1  christos 	{
   1872  1.1  christos 	  unsigned int j;
   1873  1.1  christos 
   1874  1.1  christos 	  for (j = 0; j < strlen (argv[i]); j++)
   1875  1.1  christos 	    argv[i][j] = tolower (argv[i][j]);
   1876  1.1  christos 
   1877  1.1  christos 	  if (no_filters < 0 && subset_compare (argv[i], "no-filters"))
   1878  1.1  christos 	    no_filters = argc;
   1879  1.1  christos 	  else
   1880  1.1  christos 	    {
   1881  1.1  christos 	      if (fulltrace_arg < 0 && subset_compare (argv[i], "full"))
   1882  1.1  christos 		fulltrace_arg = argc;
   1883  1.1  christos 	      else
   1884  1.1  christos 		{
   1885  1.1  christos 		  user_arg++;
   1886  1.1  christos 		  arglen += strlen (argv[i]);
   1887  1.1  christos 		}
   1888  1.1  christos 	    }
   1889  1.1  christos 	  argc++;
   1890  1.1  christos 	}
   1891  1.1  christos       arglen += user_arg;
   1892  1.1  christos       if (fulltrace_arg >= 0 || no_filters >= 0)
   1893  1.1  christos 	{
   1894  1.1  christos 	  if (arglen > 0)
   1895  1.1  christos 	    {
   1896  1.1  christos 	      arg = xmalloc (arglen + 1);
   1897  1.1  christos 	      make_cleanup (xfree, arg);
   1898  1.1  christos 	      arg[0] = 0;
   1899  1.1  christos 	      for (i = 0; i < argc; i++)
   1900  1.1  christos 		{
   1901  1.1  christos 		  if (i != fulltrace_arg && i != no_filters)
   1902  1.1  christos 		    {
   1903  1.1  christos 		      strcat (arg, argv[i]);
   1904  1.1  christos 		      strcat (arg, " ");
   1905  1.1  christos 		    }
   1906  1.1  christos 		}
   1907  1.1  christos 	    }
   1908  1.1  christos 	  else
   1909  1.1  christos 	    arg = NULL;
   1910  1.1  christos 	}
   1911  1.1  christos     }
   1912  1.1  christos 
   1913  1.1  christos   backtrace_command_1 (arg, fulltrace_arg >= 0 /* show_locals */,
   1914  1.1  christos 		       no_filters >= 0 /* no frame-filters */, from_tty);
   1915  1.1  christos 
   1916  1.1  christos   do_cleanups (old_chain);
   1917  1.1  christos }
   1918  1.1  christos 
   1919  1.1  christos static void
   1920  1.1  christos backtrace_full_command (char *arg, int from_tty)
   1921  1.1  christos {
   1922  1.1  christos   backtrace_command_1 (arg, 1 /* show_locals */, 0, from_tty);
   1923  1.1  christos }
   1924  1.1  christos 
   1925  1.1  christos 
   1927  1.1  christos /* Iterate over the local variables of a block B, calling CB with
   1928  1.1  christos    CB_DATA.  */
   1929  1.1  christos 
   1930  1.1  christos static void
   1931  1.1  christos iterate_over_block_locals (struct block *b,
   1932  1.1  christos 			   iterate_over_block_arg_local_vars_cb cb,
   1933  1.1  christos 			   void *cb_data)
   1934  1.1  christos {
   1935  1.1  christos   struct block_iterator iter;
   1936  1.1  christos   struct symbol *sym;
   1937  1.1  christos 
   1938  1.1  christos   ALL_BLOCK_SYMBOLS (b, iter, sym)
   1939  1.1  christos     {
   1940  1.1  christos       switch (SYMBOL_CLASS (sym))
   1941  1.1  christos 	{
   1942  1.1  christos 	case LOC_LOCAL:
   1943  1.1  christos 	case LOC_REGISTER:
   1944  1.1  christos 	case LOC_STATIC:
   1945  1.1  christos 	case LOC_COMPUTED:
   1946  1.1  christos 	  if (SYMBOL_IS_ARGUMENT (sym))
   1947  1.1  christos 	    break;
   1948  1.1  christos 	  if (SYMBOL_DOMAIN (sym) == COMMON_BLOCK_DOMAIN)
   1949  1.1  christos 	    break;
   1950  1.1  christos 	  (*cb) (SYMBOL_PRINT_NAME (sym), sym, cb_data);
   1951  1.1  christos 	  break;
   1952  1.1  christos 
   1953  1.1  christos 	default:
   1954  1.1  christos 	  /* Ignore symbols which are not locals.  */
   1955  1.1  christos 	  break;
   1956  1.1  christos 	}
   1957  1.1  christos     }
   1958  1.1  christos }
   1959  1.1  christos 
   1960  1.1  christos 
   1961  1.1  christos /* Same, but print labels.  */
   1962  1.1  christos 
   1963  1.1  christos #if 0
   1964  1.1  christos /* Commented out, as the code using this function has also been
   1965  1.1  christos    commented out.  FIXME:brobecker/2009-01-13: Find out why the code
   1966  1.1  christos    was commented out in the first place.  The discussion introducing
   1967  1.1  christos    this change (2007-12-04: Support lexical blocks and function bodies
   1968  1.1  christos    that occupy non-contiguous address ranges) did not explain why
   1969  1.1  christos    this change was made.  */
   1970  1.1  christos static int
   1971  1.1  christos print_block_frame_labels (struct gdbarch *gdbarch, struct block *b,
   1972  1.1  christos 			  int *have_default, struct ui_file *stream)
   1973  1.1  christos {
   1974  1.1  christos   struct block_iterator iter;
   1975  1.1  christos   struct symbol *sym;
   1976  1.1  christos   int values_printed = 0;
   1977  1.1  christos 
   1978  1.1  christos   ALL_BLOCK_SYMBOLS (b, iter, sym)
   1979  1.1  christos     {
   1980  1.1  christos       if (strcmp (SYMBOL_LINKAGE_NAME (sym), "default") == 0)
   1981  1.1  christos 	{
   1982  1.1  christos 	  if (*have_default)
   1983  1.1  christos 	    continue;
   1984  1.1  christos 	  *have_default = 1;
   1985  1.1  christos 	}
   1986  1.1  christos       if (SYMBOL_CLASS (sym) == LOC_LABEL)
   1987  1.1  christos 	{
   1988  1.1  christos 	  struct symtab_and_line sal;
   1989  1.1  christos 	  struct value_print_options opts;
   1990  1.1  christos 
   1991  1.1  christos 	  sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
   1992  1.1  christos 	  values_printed = 1;
   1993  1.1  christos 	  fputs_filtered (SYMBOL_PRINT_NAME (sym), stream);
   1994  1.1  christos 	  get_user_print_options (&opts);
   1995  1.1  christos 	  if (opts.addressprint)
   1996  1.1  christos 	    {
   1997  1.1  christos 	      fprintf_filtered (stream, " ");
   1998  1.1  christos 	      fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (sym)),
   1999  1.1  christos 			      stream);
   2000  1.1  christos 	    }
   2001  1.1  christos 	  fprintf_filtered (stream, " in file %s, line %d\n",
   2002  1.1  christos 			    sal.symtab->filename, sal.line);
   2003  1.1  christos 	}
   2004  1.1  christos     }
   2005  1.1  christos 
   2006  1.1  christos   return values_printed;
   2007  1.1  christos }
   2008  1.1  christos #endif
   2009  1.1  christos 
   2010  1.1  christos /* Iterate over all the local variables in block B, including all its
   2011  1.1  christos    superblocks, stopping when the top-level block is reached.  */
   2012  1.1  christos 
   2013  1.1  christos void
   2014  1.1  christos iterate_over_block_local_vars (struct block *block,
   2015  1.1  christos 			       iterate_over_block_arg_local_vars_cb cb,
   2016  1.1  christos 			       void *cb_data)
   2017  1.1  christos {
   2018  1.1  christos   while (block)
   2019  1.1  christos     {
   2020  1.1  christos       iterate_over_block_locals (block, cb, cb_data);
   2021  1.1  christos       /* After handling the function's top-level block, stop.  Don't
   2022  1.1  christos 	 continue to its superblock, the block of per-file
   2023  1.1  christos 	 symbols.  */
   2024  1.1  christos       if (BLOCK_FUNCTION (block))
   2025  1.1  christos 	break;
   2026  1.1  christos       block = BLOCK_SUPERBLOCK (block);
   2027  1.1  christos     }
   2028  1.1  christos }
   2029  1.1  christos 
   2030  1.1  christos /* Data to be passed around in the calls to the locals and args
   2031  1.1  christos    iterators.  */
   2032  1.1  christos 
   2033  1.1  christos struct print_variable_and_value_data
   2034  1.1  christos {
   2035  1.1  christos   struct frame_id frame_id;
   2036  1.1  christos   int num_tabs;
   2037  1.1  christos   struct ui_file *stream;
   2038  1.1  christos   int values_printed;
   2039  1.1  christos };
   2040  1.1  christos 
   2041  1.1  christos /* The callback for the locals and args iterators.  */
   2042  1.1  christos 
   2043  1.1  christos static void
   2044  1.1  christos do_print_variable_and_value (const char *print_name,
   2045  1.1  christos 			     struct symbol *sym,
   2046  1.1  christos 			     void *cb_data)
   2047  1.1  christos {
   2048  1.1  christos   struct print_variable_and_value_data *p = cb_data;
   2049  1.1  christos   struct frame_info *frame;
   2050  1.1  christos 
   2051  1.1  christos   frame = frame_find_by_id (p->frame_id);
   2052  1.1  christos   if (frame == NULL)
   2053  1.1  christos     {
   2054  1.1  christos       warning (_("Unable to restore previously selected frame."));
   2055  1.1  christos       return;
   2056  1.1  christos     }
   2057  1.1  christos 
   2058  1.1  christos   print_variable_and_value (print_name, sym, frame, p->stream, p->num_tabs);
   2059  1.1  christos 
   2060  1.1  christos   /* print_variable_and_value invalidates FRAME.  */
   2061  1.1  christos   frame = NULL;
   2062  1.1  christos 
   2063  1.1  christos   p->values_printed = 1;
   2064  1.1  christos }
   2065  1.1  christos 
   2066  1.1  christos /* Print all variables from the innermost up to the function block of FRAME.
   2067  1.1  christos    Print them with values to STREAM indented by NUM_TABS.
   2068  1.1  christos 
   2069  1.1  christos    This function will invalidate FRAME.  */
   2070  1.1  christos 
   2071  1.1  christos static void
   2072  1.1  christos print_frame_local_vars (struct frame_info *frame, int num_tabs,
   2073  1.1  christos 			struct ui_file *stream)
   2074  1.1  christos {
   2075  1.1  christos   struct print_variable_and_value_data cb_data;
   2076  1.1  christos   struct block *block;
   2077  1.1  christos   CORE_ADDR pc;
   2078  1.1  christos 
   2079  1.1  christos   if (!get_frame_pc_if_available (frame, &pc))
   2080  1.1  christos     {
   2081  1.1  christos       fprintf_filtered (stream,
   2082  1.1  christos 			_("PC unavailable, cannot determine locals.\n"));
   2083  1.1  christos       return;
   2084  1.1  christos     }
   2085  1.1  christos 
   2086  1.1  christos   block = get_frame_block (frame, 0);
   2087  1.1  christos   if (block == 0)
   2088  1.1  christos     {
   2089  1.1  christos       fprintf_filtered (stream, "No symbol table info available.\n");
   2090  1.1  christos       return;
   2091  1.1  christos     }
   2092  1.1  christos 
   2093  1.1  christos   cb_data.frame_id = get_frame_id (frame);
   2094  1.1  christos   cb_data.num_tabs = 4 * num_tabs;
   2095  1.1  christos   cb_data.stream = stream;
   2096  1.1  christos   cb_data.values_printed = 0;
   2097  1.1  christos 
   2098  1.1  christos   iterate_over_block_local_vars (block,
   2099  1.1  christos 				 do_print_variable_and_value,
   2100  1.1  christos 				 &cb_data);
   2101  1.1  christos 
   2102  1.1  christos   /* do_print_variable_and_value invalidates FRAME.  */
   2103  1.1  christos   frame = NULL;
   2104  1.1  christos 
   2105  1.1  christos   if (!cb_data.values_printed)
   2106  1.1  christos     fprintf_filtered (stream, _("No locals.\n"));
   2107  1.1  christos }
   2108  1.1  christos 
   2109  1.1  christos void
   2110  1.1  christos locals_info (char *args, int from_tty)
   2111  1.1  christos {
   2112  1.1  christos   print_frame_local_vars (get_selected_frame (_("No frame selected.")),
   2113  1.1  christos 			  0, gdb_stdout);
   2114  1.1  christos }
   2115  1.1  christos 
   2116  1.1  christos /* Iterate over all the argument variables in block B.
   2117  1.1  christos 
   2118  1.1  christos    Returns 1 if any argument was walked; 0 otherwise.  */
   2119  1.1  christos 
   2120  1.1  christos void
   2121  1.1  christos iterate_over_block_arg_vars (struct block *b,
   2122  1.1  christos 			     iterate_over_block_arg_local_vars_cb cb,
   2123  1.1  christos 			     void *cb_data)
   2124  1.1  christos {
   2125  1.1  christos   struct block_iterator iter;
   2126  1.1  christos   struct symbol *sym, *sym2;
   2127  1.1  christos 
   2128  1.1  christos   ALL_BLOCK_SYMBOLS (b, iter, sym)
   2129  1.1  christos     {
   2130  1.1  christos       /* Don't worry about things which aren't arguments.  */
   2131  1.1  christos       if (SYMBOL_IS_ARGUMENT (sym))
   2132  1.1  christos 	{
   2133  1.1  christos 	  /* We have to look up the symbol because arguments can have
   2134  1.1  christos 	     two entries (one a parameter, one a local) and the one we
   2135  1.1  christos 	     want is the local, which lookup_symbol will find for us.
   2136  1.1  christos 	     This includes gcc1 (not gcc2) on the sparc when passing a
   2137  1.1  christos 	     small structure and gcc2 when the argument type is float
   2138  1.1  christos 	     and it is passed as a double and converted to float by
   2139  1.1  christos 	     the prologue (in the latter case the type of the LOC_ARG
   2140  1.1  christos 	     symbol is double and the type of the LOC_LOCAL symbol is
   2141  1.1  christos 	     float).  There are also LOC_ARG/LOC_REGISTER pairs which
   2142  1.1  christos 	     are not combined in symbol-reading.  */
   2143  1.1  christos 
   2144  1.1  christos 	  sym2 = lookup_symbol (SYMBOL_LINKAGE_NAME (sym),
   2145  1.1  christos 				b, VAR_DOMAIN, NULL);
   2146  1.1  christos 	  (*cb) (SYMBOL_PRINT_NAME (sym), sym2, cb_data);
   2147  1.1  christos 	}
   2148  1.1  christos     }
   2149  1.1  christos }
   2150  1.1  christos 
   2151  1.1  christos /* Print all argument variables of the function of FRAME.
   2152  1.1  christos    Print them with values to STREAM.
   2153  1.1  christos 
   2154  1.1  christos    This function will invalidate FRAME.  */
   2155  1.1  christos 
   2156  1.1  christos static void
   2157  1.1  christos print_frame_arg_vars (struct frame_info *frame, struct ui_file *stream)
   2158  1.1  christos {
   2159  1.1  christos   struct print_variable_and_value_data cb_data;
   2160  1.1  christos   struct symbol *func;
   2161  1.1  christos   CORE_ADDR pc;
   2162  1.1  christos 
   2163  1.1  christos   if (!get_frame_pc_if_available (frame, &pc))
   2164  1.1  christos     {
   2165  1.1  christos       fprintf_filtered (stream, _("PC unavailable, cannot determine args.\n"));
   2166  1.1  christos       return;
   2167  1.1  christos     }
   2168  1.1  christos 
   2169  1.1  christos   func = get_frame_function (frame);
   2170  1.1  christos   if (func == NULL)
   2171  1.1  christos     {
   2172  1.1  christos       fprintf_filtered (stream, _("No symbol table info available.\n"));
   2173  1.1  christos       return;
   2174  1.1  christos     }
   2175  1.1  christos 
   2176  1.1  christos   cb_data.frame_id = get_frame_id (frame);
   2177  1.1  christos   cb_data.num_tabs = 0;
   2178  1.1  christos   cb_data.stream = gdb_stdout;
   2179  1.1  christos   cb_data.values_printed = 0;
   2180  1.1  christos 
   2181  1.1  christos   iterate_over_block_arg_vars (SYMBOL_BLOCK_VALUE (func),
   2182  1.1  christos 			       do_print_variable_and_value, &cb_data);
   2183  1.1  christos 
   2184  1.1  christos   /* do_print_variable_and_value invalidates FRAME.  */
   2185  1.1  christos   frame = NULL;
   2186  1.1  christos 
   2187  1.1  christos   if (!cb_data.values_printed)
   2188  1.1  christos     fprintf_filtered (stream, _("No arguments.\n"));
   2189  1.1  christos }
   2190  1.1  christos 
   2191  1.1  christos void
   2192  1.1  christos args_info (char *ignore, int from_tty)
   2193  1.1  christos {
   2194  1.1  christos   print_frame_arg_vars (get_selected_frame (_("No frame selected.")),
   2195  1.1  christos 			gdb_stdout);
   2196  1.1  christos }
   2197  1.1  christos 
   2198  1.1  christos 
   2199  1.1  christos static void
   2200  1.1  christos args_plus_locals_info (char *ignore, int from_tty)
   2201  1.1  christos {
   2202  1.1  christos   args_info (ignore, from_tty);
   2203  1.1  christos   locals_info (ignore, from_tty);
   2204  1.1  christos }
   2205  1.1  christos 
   2206  1.1  christos 
   2208  1.1  christos /* Select frame FRAME.  Also print the stack frame and show the source
   2209  1.1  christos    if this is the tui version.  */
   2210  1.1  christos static void
   2211  1.1  christos select_and_print_frame (struct frame_info *frame)
   2212  1.1  christos {
   2213  1.1  christos   select_frame (frame);
   2214  1.1  christos   if (frame)
   2215  1.1  christos     print_stack_frame (frame, 1, SRC_AND_LOC, 1);
   2216  1.1  christos }
   2217  1.1  christos 
   2218  1.1  christos /* Return the symbol-block in which the selected frame is executing.
   2220  1.1  christos    Can return zero under various legitimate circumstances.
   2221  1.1  christos 
   2222  1.1  christos    If ADDR_IN_BLOCK is non-zero, set *ADDR_IN_BLOCK to the relevant
   2223  1.1  christos    code address within the block returned.  We use this to decide
   2224  1.1  christos    which macros are in scope.  */
   2225  1.1  christos 
   2226  1.1  christos struct block *
   2227  1.1  christos get_selected_block (CORE_ADDR *addr_in_block)
   2228  1.1  christos {
   2229  1.1  christos   if (!has_stack_frames ())
   2230  1.1  christos     return 0;
   2231  1.1  christos 
   2232  1.1  christos   return get_frame_block (get_selected_frame (NULL), addr_in_block);
   2233  1.1  christos }
   2234  1.1  christos 
   2235  1.1  christos /* Find a frame a certain number of levels away from FRAME.
   2236  1.1  christos    LEVEL_OFFSET_PTR points to an int containing the number of levels.
   2237  1.1  christos    Positive means go to earlier frames (up); negative, the reverse.
   2238  1.1  christos    The int that contains the number of levels is counted toward
   2239  1.1  christos    zero as the frames for those levels are found.
   2240  1.1  christos    If the top or bottom frame is reached, that frame is returned,
   2241  1.1  christos    but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
   2242  1.1  christos    how much farther the original request asked to go.  */
   2243  1.1  christos 
   2244  1.1  christos struct frame_info *
   2245  1.1  christos find_relative_frame (struct frame_info *frame, int *level_offset_ptr)
   2246  1.1  christos {
   2247  1.1  christos   /* Going up is simple: just call get_prev_frame enough times or
   2248  1.1  christos      until the initial frame is reached.  */
   2249  1.1  christos   while (*level_offset_ptr > 0)
   2250  1.1  christos     {
   2251  1.1  christos       struct frame_info *prev = get_prev_frame (frame);
   2252  1.1  christos 
   2253  1.1  christos       if (!prev)
   2254  1.1  christos 	break;
   2255  1.1  christos       (*level_offset_ptr)--;
   2256  1.1  christos       frame = prev;
   2257  1.1  christos     }
   2258  1.1  christos 
   2259  1.1  christos   /* Going down is just as simple.  */
   2260  1.1  christos   while (*level_offset_ptr < 0)
   2261  1.1  christos     {
   2262  1.1  christos       struct frame_info *next = get_next_frame (frame);
   2263  1.1  christos 
   2264  1.1  christos       if (!next)
   2265  1.1  christos 	break;
   2266  1.1  christos       (*level_offset_ptr)++;
   2267  1.1  christos       frame = next;
   2268  1.1  christos     }
   2269  1.1  christos 
   2270  1.1  christos   return frame;
   2271  1.1  christos }
   2272  1.1  christos 
   2273  1.1  christos /* The "select_frame" command.  With no argument this is a NOP.
   2274  1.1  christos    Select the frame at level LEVEL_EXP if it is a valid level.
   2275  1.1  christos    Otherwise, treat LEVEL_EXP as an address expression and select it.
   2276  1.1  christos 
   2277  1.1  christos    See parse_frame_specification for more info on proper frame
   2278  1.1  christos    expressions.  */
   2279  1.1  christos 
   2280  1.1  christos void
   2281  1.1  christos select_frame_command (char *level_exp, int from_tty)
   2282  1.1  christos {
   2283  1.1  christos   select_frame (parse_frame_specification_1 (level_exp, "No stack.", NULL));
   2284  1.1  christos }
   2285  1.1  christos 
   2286  1.1  christos /* The "frame" command.  With no argument, print the selected frame
   2287  1.1  christos    briefly.  With an argument, behave like select_frame and then print
   2288  1.1  christos    the selected frame.  */
   2289  1.1  christos 
   2290  1.1  christos static void
   2291  1.1  christos frame_command (char *level_exp, int from_tty)
   2292  1.1  christos {
   2293  1.1  christos   select_frame_command (level_exp, from_tty);
   2294  1.1  christos   print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
   2295  1.1  christos }
   2296  1.1  christos 
   2297  1.1  christos /* The XDB Compatibility command to print the current frame.  */
   2298  1.1  christos 
   2299  1.1  christos static void
   2300  1.1  christos current_frame_command (char *level_exp, int from_tty)
   2301  1.1  christos {
   2302  1.1  christos   print_stack_frame (get_selected_frame (_("No stack.")), 1, SRC_AND_LOC, 1);
   2303  1.1  christos }
   2304  1.1  christos 
   2305  1.1  christos /* Select the frame up one or COUNT_EXP stack levels from the
   2306  1.1  christos    previously selected frame, and print it briefly.  */
   2307  1.1  christos 
   2308  1.1  christos static void
   2309  1.1  christos up_silently_base (char *count_exp)
   2310  1.1  christos {
   2311  1.1  christos   struct frame_info *frame;
   2312  1.1  christos   int count = 1;
   2313  1.1  christos 
   2314  1.1  christos   if (count_exp)
   2315  1.1  christos     count = parse_and_eval_long (count_exp);
   2316  1.1  christos 
   2317  1.1  christos   frame = find_relative_frame (get_selected_frame ("No stack."), &count);
   2318  1.1  christos   if (count != 0 && count_exp == NULL)
   2319  1.1  christos     error (_("Initial frame selected; you cannot go up."));
   2320  1.1  christos   select_frame (frame);
   2321  1.1  christos }
   2322  1.1  christos 
   2323  1.1  christos static void
   2324  1.1  christos up_silently_command (char *count_exp, int from_tty)
   2325  1.1  christos {
   2326  1.1  christos   up_silently_base (count_exp);
   2327  1.1  christos }
   2328  1.1  christos 
   2329  1.1  christos static void
   2330  1.1  christos up_command (char *count_exp, int from_tty)
   2331  1.1  christos {
   2332  1.1  christos   up_silently_base (count_exp);
   2333  1.1  christos   print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
   2334  1.1  christos }
   2335  1.1  christos 
   2336  1.1  christos /* Select the frame down one or COUNT_EXP stack levels from the previously
   2337  1.1  christos    selected frame, and print it briefly.  */
   2338  1.1  christos 
   2339  1.1  christos static void
   2340  1.1  christos down_silently_base (char *count_exp)
   2341  1.1  christos {
   2342  1.1  christos   struct frame_info *frame;
   2343  1.1  christos   int count = -1;
   2344  1.1  christos 
   2345  1.1  christos   if (count_exp)
   2346  1.1  christos     count = -parse_and_eval_long (count_exp);
   2347  1.1  christos 
   2348  1.1  christos   frame = find_relative_frame (get_selected_frame ("No stack."), &count);
   2349  1.1  christos   if (count != 0 && count_exp == NULL)
   2350  1.1  christos     {
   2351  1.1  christos       /* We only do this if COUNT_EXP is not specified.  That way
   2352  1.1  christos          "down" means to really go down (and let me know if that is
   2353  1.1  christos          impossible), but "down 9999" can be used to mean go all the
   2354  1.1  christos          way down without getting an error.  */
   2355  1.1  christos 
   2356  1.1  christos       error (_("Bottom (innermost) frame selected; you cannot go down."));
   2357  1.1  christos     }
   2358  1.1  christos 
   2359  1.1  christos   select_frame (frame);
   2360  1.1  christos }
   2361  1.1  christos 
   2362  1.1  christos static void
   2363  1.1  christos down_silently_command (char *count_exp, int from_tty)
   2364  1.1  christos {
   2365  1.1  christos   down_silently_base (count_exp);
   2366  1.1  christos }
   2367  1.1  christos 
   2368  1.1  christos static void
   2369  1.1  christos down_command (char *count_exp, int from_tty)
   2370  1.1  christos {
   2371  1.1  christos   down_silently_base (count_exp);
   2372  1.1  christos   print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
   2373  1.1  christos }
   2374  1.1  christos 
   2375  1.1  christos 
   2377  1.1  christos void
   2378  1.1  christos return_command (char *retval_exp, int from_tty)
   2379  1.1  christos {
   2380  1.1  christos   /* Initialize it just to avoid a GCC false warning.  */
   2381  1.1  christos   enum return_value_convention rv_conv = RETURN_VALUE_STRUCT_CONVENTION;
   2382  1.1  christos   struct frame_info *thisframe;
   2383  1.1  christos   struct gdbarch *gdbarch;
   2384  1.1  christos   struct symbol *thisfun;
   2385  1.1  christos   struct value *return_value = NULL;
   2386  1.1  christos   struct value *function = NULL;
   2387  1.1  christos   const char *query_prefix = "";
   2388  1.1  christos 
   2389  1.1  christos   thisframe = get_selected_frame ("No selected frame.");
   2390  1.1  christos   thisfun = get_frame_function (thisframe);
   2391  1.1  christos   gdbarch = get_frame_arch (thisframe);
   2392  1.1  christos 
   2393  1.1  christos   if (get_frame_type (get_current_frame ()) == INLINE_FRAME)
   2394  1.1  christos     error (_("Can not force return from an inlined function."));
   2395  1.1  christos 
   2396  1.1  christos   /* Compute the return value.  If the computation triggers an error,
   2397  1.1  christos      let it bail.  If the return type can't be handled, set
   2398  1.1  christos      RETURN_VALUE to NULL, and QUERY_PREFIX to an informational
   2399  1.1  christos      message.  */
   2400  1.1  christos   if (retval_exp)
   2401  1.1  christos     {
   2402  1.1  christos       struct expression *retval_expr = parse_expression (retval_exp);
   2403  1.1  christos       struct cleanup *old_chain = make_cleanup (xfree, retval_expr);
   2404  1.1  christos       struct type *return_type = NULL;
   2405  1.1  christos 
   2406  1.1  christos       /* Compute the return value.  Should the computation fail, this
   2407  1.1  christos          call throws an error.  */
   2408  1.1  christos       return_value = evaluate_expression (retval_expr);
   2409  1.1  christos 
   2410  1.1  christos       /* Cast return value to the return type of the function.  Should
   2411  1.1  christos          the cast fail, this call throws an error.  */
   2412  1.1  christos       if (thisfun != NULL)
   2413  1.1  christos 	return_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (thisfun));
   2414  1.1  christos       if (return_type == NULL)
   2415  1.1  christos       	{
   2416  1.1  christos 	  if (retval_expr->elts[0].opcode != UNOP_CAST
   2417  1.1  christos 	      && retval_expr->elts[0].opcode != UNOP_CAST_TYPE)
   2418  1.1  christos 	    error (_("Return value type not available for selected "
   2419  1.1  christos 		     "stack frame.\n"
   2420  1.1  christos 		     "Please use an explicit cast of the value to return."));
   2421  1.1  christos 	  return_type = value_type (return_value);
   2422  1.1  christos 	}
   2423  1.1  christos       do_cleanups (old_chain);
   2424  1.1  christos       CHECK_TYPEDEF (return_type);
   2425  1.1  christos       return_value = value_cast (return_type, return_value);
   2426  1.1  christos 
   2427  1.1  christos       /* Make sure the value is fully evaluated.  It may live in the
   2428  1.1  christos          stack frame we're about to pop.  */
   2429  1.1  christos       if (value_lazy (return_value))
   2430  1.1  christos 	value_fetch_lazy (return_value);
   2431  1.1  christos 
   2432  1.1  christos       if (thisfun != NULL)
   2433  1.1  christos 	function = read_var_value (thisfun, thisframe);
   2434  1.1  christos 
   2435  1.1  christos       rv_conv = RETURN_VALUE_REGISTER_CONVENTION;
   2436  1.1  christos       if (TYPE_CODE (return_type) == TYPE_CODE_VOID)
   2437  1.1  christos 	/* If the return-type is "void", don't try to find the
   2438  1.1  christos            return-value's location.  However, do still evaluate the
   2439  1.1  christos            return expression so that, even when the expression result
   2440  1.1  christos            is discarded, side effects such as "return i++" still
   2441  1.1  christos            occur.  */
   2442  1.1  christos 	return_value = NULL;
   2443  1.1  christos       else if (thisfun != NULL)
   2444  1.1  christos 	{
   2445  1.1  christos 	  rv_conv = struct_return_convention (gdbarch, function, return_type);
   2446  1.1  christos 	  if (rv_conv == RETURN_VALUE_STRUCT_CONVENTION
   2447  1.1  christos 	      || rv_conv == RETURN_VALUE_ABI_RETURNS_ADDRESS)
   2448  1.1  christos 	    {
   2449  1.1  christos 	      query_prefix = "The location at which to store the "
   2450  1.1  christos 		"function's return value is unknown.\n"
   2451  1.1  christos 		"If you continue, the return value "
   2452  1.1  christos 		"that you specified will be ignored.\n";
   2453  1.1  christos 	      return_value = NULL;
   2454  1.1  christos 	    }
   2455  1.1  christos 	}
   2456  1.1  christos     }
   2457  1.1  christos 
   2458  1.1  christos   /* Does an interactive user really want to do this?  Include
   2459  1.1  christos      information, such as how well GDB can handle the return value, in
   2460  1.1  christos      the query message.  */
   2461  1.1  christos   if (from_tty)
   2462  1.1  christos     {
   2463  1.1  christos       int confirmed;
   2464  1.1  christos 
   2465  1.1  christos       if (thisfun == NULL)
   2466  1.1  christos 	confirmed = query (_("%sMake selected stack frame return now? "),
   2467  1.1  christos 			   query_prefix);
   2468  1.1  christos       else
   2469  1.1  christos 	confirmed = query (_("%sMake %s return now? "), query_prefix,
   2470  1.1  christos 			   SYMBOL_PRINT_NAME (thisfun));
   2471  1.1  christos       if (!confirmed)
   2472  1.1  christos 	error (_("Not confirmed"));
   2473  1.1  christos     }
   2474  1.1  christos 
   2475  1.1  christos   /* Discard the selected frame and all frames inner-to it.  */
   2476  1.1  christos   frame_pop (get_selected_frame (NULL));
   2477  1.1  christos 
   2478  1.1  christos   /* Store RETURN_VALUE in the just-returned register set.  */
   2479  1.1  christos   if (return_value != NULL)
   2480  1.1  christos     {
   2481  1.1  christos       struct type *return_type = value_type (return_value);
   2482  1.1  christos       struct gdbarch *gdbarch = get_regcache_arch (get_current_regcache ());
   2483  1.1  christos 
   2484  1.1  christos       gdb_assert (rv_conv != RETURN_VALUE_STRUCT_CONVENTION
   2485  1.1  christos 		  && rv_conv != RETURN_VALUE_ABI_RETURNS_ADDRESS);
   2486  1.1  christos       gdbarch_return_value (gdbarch, function, return_type,
   2487  1.1  christos 			    get_current_regcache (), NULL /*read*/,
   2488  1.1  christos 			    value_contents (return_value) /*write*/);
   2489  1.1  christos     }
   2490  1.1  christos 
   2491  1.1  christos   /* If we are at the end of a call dummy now, pop the dummy frame
   2492  1.1  christos      too.  */
   2493  1.1  christos   if (get_frame_type (get_current_frame ()) == DUMMY_FRAME)
   2494  1.1  christos     frame_pop (get_current_frame ());
   2495  1.1  christos 
   2496  1.1  christos   /* If interactive, print the frame that is now current.  */
   2497  1.1  christos   if (from_tty)
   2498  1.1  christos     frame_command ("0", 1);
   2499  1.1  christos   else
   2500  1.1  christos     select_frame_command ("0", 0);
   2501  1.1  christos }
   2502  1.1  christos 
   2503  1.1  christos /* Sets the scope to input function name, provided that the function
   2504  1.1  christos    is within the current stack frame.  */
   2505  1.1  christos 
   2506  1.1  christos struct function_bounds
   2507  1.1  christos {
   2508  1.1  christos   CORE_ADDR low, high;
   2509  1.1  christos };
   2510  1.1  christos 
   2511  1.1  christos static void
   2512  1.1  christos func_command (char *arg, int from_tty)
   2513  1.1  christos {
   2514  1.1  christos   struct frame_info *frame;
   2515  1.1  christos   int found = 0;
   2516  1.1  christos   struct symtabs_and_lines sals;
   2517  1.1  christos   int i;
   2518  1.1  christos   int level = 1;
   2519  1.1  christos   struct function_bounds *func_bounds = NULL;
   2520  1.1  christos   struct cleanup *cleanups;
   2521  1.1  christos 
   2522  1.1  christos   if (arg != NULL)
   2523  1.1  christos     return;
   2524  1.1  christos 
   2525  1.1  christos   frame = parse_frame_specification ("0");
   2526  1.1  christos   sals = decode_line_with_current_source (arg, DECODE_LINE_FUNFIRSTLINE);
   2527  1.1  christos   cleanups = make_cleanup (xfree, sals.sals);
   2528  1.1  christos   func_bounds = (struct function_bounds *) xmalloc (
   2529  1.1  christos 			      sizeof (struct function_bounds) * sals.nelts);
   2530  1.1  christos   make_cleanup (xfree, func_bounds);
   2531  1.1  christos   for (i = 0; (i < sals.nelts && !found); i++)
   2532  1.1  christos     {
   2533  1.1  christos       if (sals.sals[i].pspace != current_program_space)
   2534  1.1  christos 	func_bounds[i].low = func_bounds[i].high = 0;
   2535  1.1  christos       else if (sals.sals[i].pc == 0
   2536  1.1  christos 	       || find_pc_partial_function (sals.sals[i].pc, NULL,
   2537  1.1  christos 					    &func_bounds[i].low,
   2538  1.1  christos 					    &func_bounds[i].high) == 0)
   2539  1.1  christos 	{
   2540  1.1  christos 	  func_bounds[i].low = func_bounds[i].high = 0;
   2541  1.1  christos 	}
   2542  1.1  christos     }
   2543  1.1  christos 
   2544  1.1  christos   do
   2545  1.1  christos     {
   2546  1.1  christos       for (i = 0; (i < sals.nelts && !found); i++)
   2547  1.1  christos 	found = (get_frame_pc (frame) >= func_bounds[i].low
   2548  1.1  christos 		 && get_frame_pc (frame) < func_bounds[i].high);
   2549  1.1  christos       if (!found)
   2550  1.1  christos 	{
   2551  1.1  christos 	  level = 1;
   2552  1.1  christos 	  frame = find_relative_frame (frame, &level);
   2553  1.1  christos 	}
   2554  1.1  christos     }
   2555  1.1  christos   while (!found && level == 0);
   2556  1.1  christos 
   2557  1.1  christos   do_cleanups (cleanups);
   2558  1.1  christos 
   2559  1.1  christos   if (!found)
   2560  1.1  christos     printf_filtered (_("'%s' not within current stack frame.\n"), arg);
   2561  1.1  christos   else if (frame != get_selected_frame (NULL))
   2562  1.1  christos     select_and_print_frame (frame);
   2563  1.1  christos }
   2564  1.1  christos 
   2565  1.1  christos /* Gets the language of the current frame.  */
   2566  1.1  christos 
   2567  1.1  christos enum language
   2568  1.1  christos get_frame_language (void)
   2569  1.1  christos {
   2570  1.1  christos   struct frame_info *frame = deprecated_safe_get_selected_frame ();
   2571  1.1  christos 
   2572  1.1  christos   if (frame)
   2573  1.1  christos     {
   2574  1.1  christos       volatile struct gdb_exception ex;
   2575  1.1  christos       CORE_ADDR pc = 0;
   2576  1.1  christos       struct symtab *s;
   2577  1.1  christos 
   2578  1.1  christos       /* We determine the current frame language by looking up its
   2579  1.1  christos          associated symtab.  To retrieve this symtab, we use the frame
   2580  1.1  christos          PC.  However we cannot use the frame PC as is, because it
   2581  1.1  christos          usually points to the instruction following the "call", which
   2582  1.1  christos          is sometimes the first instruction of another function.  So
   2583  1.1  christos          we rely on get_frame_address_in_block(), it provides us with
   2584  1.1  christos          a PC that is guaranteed to be inside the frame's code
   2585  1.1  christos          block.  */
   2586  1.1  christos 
   2587  1.1  christos       TRY_CATCH (ex, RETURN_MASK_ERROR)
   2588  1.1  christos 	{
   2589  1.1  christos 	  pc = get_frame_address_in_block (frame);
   2590  1.1  christos 	}
   2591  1.1  christos       if (ex.reason < 0)
   2592  1.1  christos 	{
   2593  1.1  christos 	  if (ex.error != NOT_AVAILABLE_ERROR)
   2594  1.1  christos 	    throw_exception (ex);
   2595  1.1  christos 	}
   2596  1.1  christos       else
   2597  1.1  christos 	{
   2598  1.1  christos 	  s = find_pc_symtab (pc);
   2599  1.1  christos 	  if (s != NULL)
   2600  1.1  christos 	    return s->language;
   2601  1.1  christos 	}
   2602  1.1  christos     }
   2603  1.1  christos 
   2604  1.1  christos   return language_unknown;
   2605  1.1  christos }
   2606  1.1  christos 
   2607  1.1  christos 
   2609  1.1  christos /* Provide a prototype to silence -Wmissing-prototypes.  */
   2610  1.1  christos void _initialize_stack (void);
   2611  1.1  christos 
   2612  1.1  christos void
   2613  1.1  christos _initialize_stack (void)
   2614  1.1  christos {
   2615  1.1  christos   add_com ("return", class_stack, return_command, _("\
   2616  1.1  christos Make selected stack frame return to its caller.\n\
   2617  1.1  christos Control remains in the debugger, but when you continue\n\
   2618  1.1  christos execution will resume in the frame above the one now selected.\n\
   2619  1.1  christos If an argument is given, it is an expression for the value to return."));
   2620  1.1  christos 
   2621  1.1  christos   add_com ("up", class_stack, up_command, _("\
   2622  1.1  christos Select and print stack frame that called this one.\n\
   2623  1.1  christos An argument says how many frames up to go."));
   2624  1.1  christos   add_com ("up-silently", class_support, up_silently_command, _("\
   2625  1.1  christos Same as the `up' command, but does not print anything.\n\
   2626  1.1  christos This is useful in command scripts."));
   2627  1.1  christos 
   2628  1.1  christos   add_com ("down", class_stack, down_command, _("\
   2629  1.1  christos Select and print stack frame called by this one.\n\
   2630  1.1  christos An argument says how many frames down to go."));
   2631  1.1  christos   add_com_alias ("do", "down", class_stack, 1);
   2632  1.1  christos   add_com_alias ("dow", "down", class_stack, 1);
   2633  1.1  christos   add_com ("down-silently", class_support, down_silently_command, _("\
   2634  1.1  christos Same as the `down' command, but does not print anything.\n\
   2635  1.1  christos This is useful in command scripts."));
   2636  1.1  christos 
   2637  1.1  christos   add_com ("frame", class_stack, frame_command, _("\
   2638  1.1  christos Select and print a stack frame.\nWith no argument, \
   2639  1.1  christos print the selected stack frame.  (See also \"info frame\").\n\
   2640  1.1  christos An argument specifies the frame to select.\n\
   2641  1.1  christos It can be a stack frame number or the address of the frame.\n\
   2642  1.1  christos With argument, nothing is printed if input is coming from\n\
   2643  1.1  christos a command file or a user-defined command."));
   2644  1.1  christos 
   2645  1.1  christos   add_com_alias ("f", "frame", class_stack, 1);
   2646  1.1  christos 
   2647  1.1  christos   if (xdb_commands)
   2648  1.1  christos     {
   2649  1.1  christos       add_com ("L", class_stack, current_frame_command,
   2650  1.1  christos 	       _("Print the current stack frame.\n"));
   2651  1.1  christos       add_com_alias ("V", "frame", class_stack, 1);
   2652  1.1  christos     }
   2653  1.1  christos   add_com ("select-frame", class_stack, select_frame_command, _("\
   2654  1.1  christos Select a stack frame without printing anything.\n\
   2655  1.1  christos An argument specifies the frame to select.\n\
   2656  1.1  christos It can be a stack frame number or the address of the frame.\n"));
   2657  1.1  christos 
   2658  1.1  christos   add_com ("backtrace", class_stack, backtrace_command, _("\
   2659  1.1  christos Print backtrace of all stack frames, or innermost COUNT frames.\n\
   2660  1.1  christos With a negative argument, print outermost -COUNT frames.\nUse of the \
   2661  1.1  christos 'full' qualifier also prints the values of the local variables.\n\
   2662  1.1  christos Use of the 'no-filters' qualifier prohibits frame filters from executing\n\
   2663  1.1  christos on this backtrace.\n"));
   2664  1.1  christos   add_com_alias ("bt", "backtrace", class_stack, 0);
   2665  1.1  christos   if (xdb_commands)
   2666  1.1  christos     {
   2667  1.1  christos       add_com_alias ("t", "backtrace", class_stack, 0);
   2668  1.1  christos       add_com ("T", class_stack, backtrace_full_command, _("\
   2669  1.1  christos Print backtrace of all stack frames, or innermost COUNT frames\n\
   2670  1.1  christos and the values of the local variables.\n\
   2671  1.1  christos With a negative argument, print outermost -COUNT frames.\n\
   2672  1.1  christos Usage: T <count>\n"));
   2673  1.1  christos     }
   2674  1.1  christos 
   2675  1.1  christos   add_com_alias ("where", "backtrace", class_alias, 0);
   2676  1.1  christos   add_info ("stack", backtrace_command,
   2677  1.1  christos 	    _("Backtrace of the stack, or innermost COUNT frames."));
   2678  1.1  christos   add_info_alias ("s", "stack", 1);
   2679  1.1  christos   add_info ("frame", frame_info,
   2680  1.1  christos 	    _("All about selected stack frame, or frame at ADDR."));
   2681  1.1  christos   add_info_alias ("f", "frame", 1);
   2682  1.1  christos   add_info ("locals", locals_info,
   2683  1.1  christos 	    _("Local variables of current stack frame."));
   2684  1.1  christos   add_info ("args", args_info,
   2685  1.1  christos 	    _("Argument variables of current stack frame."));
   2686  1.1  christos   if (xdb_commands)
   2687  1.1  christos     add_com ("l", class_info, args_plus_locals_info,
   2688  1.1  christos 	     _("Argument and local variables of current stack frame."));
   2689  1.1  christos 
   2690  1.1  christos   if (dbx_commands)
   2691  1.1  christos     add_com ("func", class_stack, func_command, _("\
   2692  1.1  christos Select the stack frame that contains <func>.\n\
   2693  1.1  christos Usage: func <name>\n"));
   2694  1.1  christos 
   2695  1.1  christos   add_setshow_enum_cmd ("frame-arguments", class_stack,
   2696  1.1  christos 			print_frame_arguments_choices, &print_frame_arguments,
   2697  1.1  christos 			_("Set printing of non-scalar frame arguments"),
   2698  1.1  christos 			_("Show printing of non-scalar frame arguments"),
   2699  1.1  christos 			NULL, NULL, NULL, &setprintlist, &showprintlist);
   2700  1.1  christos 
   2701  1.1  christos   add_setshow_boolean_cmd ("frame-arguments", no_class,
   2702  1.1  christos 			   &print_raw_frame_arguments, _("\
   2703  1.1  christos Set whether to print frame arguments in raw form."), _("\
   2704  1.1  christos Show whether to print frame arguments in raw form."), _("\
   2705  1.1  christos If set, frame arguments are printed in raw form, bypassing any\n\
   2706  1.1  christos pretty-printers for that value."),
   2707  1.1  christos 			   NULL, NULL,
   2708  1.1  christos 			   &setprintrawlist, &showprintrawlist);
   2709  1.1  christos 
   2710  1.1  christos   add_setshow_auto_boolean_cmd ("disassemble-next-line", class_stack,
   2711  1.1  christos 			        &disassemble_next_line, _("\
   2712  1.1  christos Set whether to disassemble next source line or insn when execution stops."),
   2713  1.1  christos 				_("\
   2714  1.1  christos Show whether to disassemble next source line or insn when execution stops."),
   2715  1.1  christos 				_("\
   2716  1.1  christos If ON, GDB will display disassembly of the next source line, in addition\n\
   2717  1.1  christos to displaying the source line itself.  If the next source line cannot\n\
   2718  1.1  christos be displayed (e.g., source is unavailable or there's no line info), GDB\n\
   2719  1.1  christos will display disassembly of next instruction instead of showing the\n\
   2720  1.1  christos source line.\n\
   2721  1.1  christos If AUTO, display disassembly of next instruction only if the source line\n\
   2722  1.1  christos cannot be displayed.\n\
   2723  1.1  christos If OFF (which is the default), never display the disassembly of the next\n\
   2724  1.1  christos source line."),
   2725  1.1  christos 			        NULL,
   2726  1.1  christos 			        show_disassemble_next_line,
   2727  1.1  christos 			        &setlist, &showlist);
   2728  1.1  christos   disassemble_next_line = AUTO_BOOLEAN_FALSE;
   2729  1.1  christos 
   2730  1.1  christos   add_setshow_enum_cmd ("entry-values", class_stack,
   2731  1.1  christos 			print_entry_values_choices, &print_entry_values,
   2732  1.1  christos 			_("Set printing of function arguments at function "
   2733  1.1  christos 			  "entry"),
   2734  1.1  christos 			_("Show printing of function arguments at function "
   2735  1.1  christos 			  "entry"),
   2736                			_("\
   2737                GDB can sometimes determine the values of function arguments at entry,\n\
   2738                in addition to their current values.  This option tells GDB whether\n\
   2739                to print the current value, the value at entry (marked as val@entry),\n\
   2740                or both.  Note that one or both of these values may be <optimized out>."),
   2741                			NULL, NULL, &setprintlist, &showprintlist);
   2742                }
   2743