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