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