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