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