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