Home | History | Annotate | Line # | Download | only in gdb
stack.c revision 1.11
      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.11  christos #include "extract-store-integer.h"
     22  1.11  christos #include "top.h"
     23   1.1  christos #include "value.h"
     24   1.1  christos #include "symtab.h"
     25   1.1  christos #include "gdbtypes.h"
     26   1.1  christos #include "expression.h"
     27   1.1  christos #include "language.h"
     28   1.1  christos #include "frame.h"
     29  1.11  christos #include "cli/cli-cmds.h"
     30   1.1  christos #include "gdbcore.h"
     31   1.1  christos #include "target.h"
     32   1.1  christos #include "source.h"
     33   1.1  christos #include "breakpoint.h"
     34   1.1  christos #include "demangle.h"
     35   1.1  christos #include "inferior.h"
     36   1.1  christos #include "annotate.h"
     37   1.1  christos #include "ui-out.h"
     38   1.1  christos #include "block.h"
     39   1.1  christos #include "stack.h"
     40   1.1  christos #include "dictionary.h"
     41   1.1  christos #include "reggroups.h"
     42   1.1  christos #include "regcache.h"
     43   1.1  christos #include "solib.h"
     44   1.1  christos #include "valprint.h"
     45   1.1  christos #include "gdbthread.h"
     46   1.1  christos #include "cp-support.h"
     47   1.1  christos #include "disasm.h"
     48   1.1  christos #include "inline-frame.h"
     49   1.1  christos #include "linespec.h"
     50   1.1  christos #include "cli/cli-utils.h"
     51   1.3  christos #include "objfiles.h"
     52   1.9  christos #include "annotate.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       struct bound_minimal_symbol msymbol;
   1303   1.1  christos       CORE_ADDR pc;
   1304   1.1  christos 
   1305   1.8  christos       if (!get_frame_address_in_block_if_available (frame, &pc))
   1306   1.1  christos 	return funname;
   1307   1.1  christos 
   1308   1.1  christos       msymbol = lookup_minimal_symbol_by_pc (pc);
   1309   1.1  christos       if (msymbol.minsym != NULL)
   1310   1.9  christos 	{
   1311   1.9  christos 	  funname.reset (xstrdup (msymbol.minsym->print_name ()));
   1312   1.1  christos 	  *funlang = msymbol.minsym->language ();
   1313   1.1  christos 	}
   1314   1.8  christos     }
   1315   1.8  christos 
   1316   1.1  christos   return funname;
   1317   1.1  christos }
   1318   1.1  christos 
   1319  1.11  christos static void
   1320  1.11  christos print_frame (struct ui_out *uiout,
   1321  1.11  christos 	     const frame_print_options &fp_opts,
   1322   1.1  christos 	     const frame_info_ptr &frame, int print_level,
   1323   1.1  christos 	     enum print_what print_what, int print_args,
   1324   1.1  christos 	     struct symtab_and_line sal)
   1325   1.1  christos {
   1326   1.1  christos   struct gdbarch *gdbarch = get_frame_arch (frame);
   1327   1.1  christos   enum language funlang = language_unknown;
   1328   1.1  christos   struct value_print_options opts;
   1329   1.1  christos   struct symbol *func;
   1330   1.1  christos   CORE_ADDR pc = 0;
   1331   1.1  christos   int pc_p;
   1332   1.1  christos 
   1333   1.1  christos   pc_p = get_frame_pc_if_available (frame, &pc);
   1334   1.8  christos 
   1335   1.8  christos   gdb::unique_xmalloc_ptr<char> funname
   1336   1.1  christos     = find_frame_funname (frame, &funlang, &func);
   1337   1.1  christos 
   1338   1.1  christos   annotate_frame_begin (print_level ? frame_relative_level (frame) : 0,
   1339   1.1  christos 			gdbarch, pc);
   1340   1.8  christos 
   1341   1.8  christos   {
   1342   1.1  christos     ui_out_emit_tuple tuple_emitter (uiout, "frame");
   1343   1.8  christos 
   1344   1.1  christos     if (print_level)
   1345   1.8  christos       {
   1346   1.9  christos 	uiout->text ("#");
   1347   1.9  christos 	uiout->field_fmt_signed (2, ui_left, "level",
   1348   1.1  christos 				 frame_relative_level (frame));
   1349   1.8  christos       }
   1350   1.8  christos     get_user_print_options (&opts);
   1351   1.8  christos     if (opts.addressprint)
   1352   1.8  christos       if (!sal.symtab
   1353   1.8  christos 	  || frame_show_address (frame, sal)
   1354   1.8  christos 	  || print_what == LOC_AND_ADDRESS)
   1355   1.8  christos 	{
   1356   1.8  christos 	  annotate_frame_address ();
   1357   1.9  christos 	  if (pc_p)
   1358   1.8  christos 	    print_pc (uiout, gdbarch, frame, pc);
   1359   1.8  christos 	  else
   1360   1.9  christos 	    uiout->field_string ("addr", "<unavailable>",
   1361   1.8  christos 				 metadata_style.style ());
   1362   1.8  christos 	  annotate_frame_address_end ();
   1363   1.8  christos 	  uiout->text (" in ");
   1364   1.8  christos 	}
   1365   1.8  christos     annotate_frame_function_name ();
   1366   1.8  christos 
   1367  1.10  christos     string_file stb;
   1368   1.9  christos     gdb_puts (funname ? funname.get () : "??", &stb);
   1369  1.10  christos     uiout->field_stream ("func", stb, function_name_style.style ());
   1370   1.8  christos     uiout->wrap_hint (3);
   1371   1.7  christos     annotate_frame_args ();
   1372   1.8  christos 
   1373   1.8  christos     uiout->text (" (");
   1374   1.8  christos     if (print_args)
   1375   1.8  christos       {
   1376   1.1  christos 	int numargs;
   1377   1.8  christos 
   1378   1.8  christos 	if (gdbarch_frame_num_args_p (gdbarch))
   1379   1.8  christos 	  {
   1380   1.8  christos 	    numargs = gdbarch_frame_num_args (gdbarch, frame);
   1381   1.8  christos 	    gdb_assert (numargs >= 0);
   1382   1.8  christos 	  }
   1383   1.8  christos 	else
   1384   1.1  christos 	  numargs = -1;
   1385   1.1  christos 
   1386   1.8  christos 	{
   1387   1.9  christos 	  ui_out_emit_list list_emitter (uiout, "args");
   1388   1.8  christos 	  try
   1389   1.9  christos 	    {
   1390   1.8  christos 	      print_frame_args (fp_opts, func, frame, numargs, gdb_stdout);
   1391   1.9  christos 	    }
   1392   1.8  christos 	  catch (const gdb_exception_error &e)
   1393   1.8  christos 	    {
   1394   1.5  christos 	    }
   1395   1.8  christos 
   1396   1.8  christos 	    /* FIXME: ARGS must be a list.  If one argument is a string it
   1397   1.8  christos 	       will have " that will not be properly escaped.  */
   1398   1.8  christos 	    }
   1399   1.8  christos 	QUIT;
   1400   1.8  christos       }
   1401   1.9  christos     uiout->text (")");
   1402   1.8  christos     if (print_what != SHORT_LOCATION && sal.symtab)
   1403   1.8  christos       {
   1404   1.1  christos 	const char *filename_display;
   1405   1.8  christos 
   1406   1.8  christos 	filename_display = symtab_to_filename_for_display (sal.symtab);
   1407  1.10  christos 	annotate_frame_source_begin ();
   1408   1.8  christos 	uiout->wrap_hint (3);
   1409   1.8  christos 	uiout->text (" at ");
   1410   1.9  christos 	annotate_frame_source_file ();
   1411   1.9  christos 	uiout->field_string ("file", filename_display,
   1412   1.8  christos 			     file_name_style.style ());
   1413   1.8  christos 	if (uiout->is_mi_like_p ())
   1414   1.8  christos 	  {
   1415   1.1  christos 	    const char *fullname = symtab_to_fullname (sal.symtab);
   1416   1.8  christos 
   1417   1.8  christos 	    uiout->field_string ("fullname", fullname);
   1418   1.8  christos 	  }
   1419   1.8  christos 	annotate_frame_source_file_end ();
   1420   1.8  christos 	uiout->text (":");
   1421   1.9  christos 	annotate_frame_source_line ();
   1422   1.8  christos 	uiout->field_signed ("line", sal.line);
   1423   1.8  christos 	annotate_frame_source_end ();
   1424   1.1  christos       }
   1425   1.9  christos 
   1426   1.9  christos     if (print_what != SHORT_LOCATION
   1427   1.8  christos 	&& pc_p && (funname == NULL || sal.symtab == NULL))
   1428  1.10  christos       {
   1429  1.10  christos 	const char *lib
   1430  1.11  christos 	  = solib_name_from_address (get_frame_program_space (frame),
   1431   1.1  christos 				     get_frame_address_in_block (frame));
   1432   1.8  christos 
   1433   1.8  christos 	if (lib)
   1434   1.8  christos 	  {
   1435  1.10  christos 	    annotate_frame_where ();
   1436   1.8  christos 	    uiout->wrap_hint (2);
   1437   1.9  christos 	    uiout->text (" from ");
   1438   1.8  christos 	    uiout->field_string ("from", lib, file_name_style.style ());
   1439   1.8  christos 	  }
   1440   1.8  christos       }
   1441   1.8  christos     if (uiout->is_mi_like_p ())
   1442   1.8  christos       uiout->field_string ("arch",
   1443   1.8  christos 			   (gdbarch_bfd_arch_info (gdbarch))->printable_name);
   1444   1.1  christos   }
   1445   1.7  christos 
   1446   1.1  christos   uiout->text ("\n");
   1447   1.1  christos }
   1448   1.1  christos 
   1449   1.8  christos 
   1451   1.1  christos /* Completion function for "frame function", "info frame function", and
   1452   1.9  christos    "select-frame function" commands.  */
   1453   1.8  christos 
   1454   1.8  christos static void
   1455   1.8  christos frame_selection_by_function_completer (struct cmd_list_element *ignore,
   1456   1.8  christos 				       completion_tracker &tracker,
   1457   1.8  christos 				       const char *text, const char *word)
   1458   1.8  christos {
   1459   1.8  christos   /* This is used to complete function names within a stack.  It would be
   1460   1.8  christos      nice if we only offered functions that were actually in the stack.
   1461   1.8  christos      However, this would mean unwinding the stack to completion, which
   1462   1.8  christos      could take too long, or on a corrupted stack, possibly not end.
   1463   1.8  christos      Instead, we offer all symbol names as a safer choice.  */
   1464   1.8  christos   collect_symbol_completion_matches (tracker,
   1465   1.8  christos 				     complete_symbol_mode::EXPRESSION,
   1466   1.8  christos 				     symbol_name_match_type::EXPRESSION,
   1467   1.8  christos 				     text, word);
   1468   1.8  christos }
   1469   1.8  christos 
   1470   1.8  christos /* Core of all the "info frame" sub-commands.  Print information about a
   1471   1.8  christos    frame FI.  If SELECTED_FRAME_P is true then the user didn't provide a
   1472   1.8  christos    frame specification, they just entered 'info frame'.  If the user did
   1473   1.1  christos    provide a frame specification (for example 'info frame 0', 'info frame
   1474   1.1  christos    level 1') then SELECTED_FRAME_P will be false.  */
   1475  1.11  christos 
   1476   1.1  christos static void
   1477   1.1  christos info_frame_command_core (const frame_info_ptr &fi, bool selected_frame_p)
   1478   1.1  christos {
   1479  1.10  christos   struct symbol *func;
   1480   1.1  christos   struct symtab *s;
   1481   1.1  christos   frame_info_ptr calling_frame_info;
   1482   1.1  christos   int numregs;
   1483   1.1  christos   const char *funname = 0;
   1484   1.1  christos   enum language funlang = language_unknown;
   1485   1.1  christos   const char *pc_regname;
   1486   1.1  christos   struct gdbarch *gdbarch;
   1487   1.1  christos   CORE_ADDR frame_pc;
   1488   1.1  christos   int frame_pc_p;
   1489   1.5  christos   /* Initialize it to avoid "may be used uninitialized" warning.  */
   1490   1.1  christos   CORE_ADDR caller_pc = 0;
   1491   1.1  christos   int caller_pc_p = 0;
   1492   1.1  christos 
   1493   1.1  christos   gdbarch = get_frame_arch (fi);
   1494   1.1  christos 
   1495   1.1  christos   /* Name of the value returned by get_frame_pc().  Per comments, "pc"
   1496   1.1  christos      is not a good name.  */
   1497   1.1  christos   if (gdbarch_pc_regnum (gdbarch) >= 0)
   1498   1.1  christos     /* OK, this is weird.  The gdbarch_pc_regnum hardware register's value can
   1499   1.1  christos        easily not match that of the internal value returned by
   1500   1.1  christos        get_frame_pc().  */
   1501   1.1  christos     pc_regname = gdbarch_register_name (gdbarch, gdbarch_pc_regnum (gdbarch));
   1502   1.1  christos   else
   1503   1.1  christos     /* But then, this is weird to.  Even without gdbarch_pc_regnum, an
   1504   1.1  christos        architectures will often have a hardware register called "pc",
   1505   1.1  christos        and that register's value, again, can easily not match
   1506   1.1  christos        get_frame_pc().  */
   1507   1.1  christos     pc_regname = "pc";
   1508   1.1  christos 
   1509   1.8  christos   frame_pc_p = get_frame_pc_if_available (fi, &frame_pc);
   1510   1.1  christos   func = get_frame_function (fi);
   1511   1.8  christos   symtab_and_line sal = find_frame_sal (fi);
   1512   1.1  christos   s = sal.symtab;
   1513   1.1  christos   gdb::unique_xmalloc_ptr<char> func_only;
   1514   1.9  christos   if (func)
   1515   1.9  christos     {
   1516   1.1  christos       funname = func->print_name ();
   1517   1.1  christos       funlang = func->language ();
   1518   1.9  christos       if (funlang == language_cplus)
   1519   1.1  christos 	{
   1520   1.1  christos 	  /* It seems appropriate to use print_name() here,
   1521   1.1  christos 	     to display the demangled name that we already have
   1522   1.1  christos 	     stored in the symbol table, but we stored a version
   1523   1.8  christos 	     with DMGL_PARAMS turned on, and here we don't want to
   1524   1.1  christos 	     display parameters.  So remove the parameters.  */
   1525   1.1  christos 	  func_only = cp_remove_params (funname);
   1526   1.8  christos 
   1527   1.1  christos 	  if (func_only)
   1528   1.1  christos 	    funname = func_only.get ();
   1529   1.1  christos 	}
   1530   1.1  christos     }
   1531   1.1  christos   else if (frame_pc_p)
   1532   1.1  christos     {
   1533   1.1  christos       struct bound_minimal_symbol msymbol;
   1534   1.1  christos 
   1535   1.1  christos       msymbol = lookup_minimal_symbol_by_pc (frame_pc);
   1536   1.9  christos       if (msymbol.minsym != NULL)
   1537   1.9  christos 	{
   1538   1.1  christos 	  funname = msymbol.minsym->print_name ();
   1539   1.1  christos 	  funlang = msymbol.minsym->language ();
   1540   1.1  christos 	}
   1541   1.1  christos     }
   1542   1.1  christos   calling_frame_info = get_prev_frame (fi);
   1543   1.1  christos 
   1544  1.10  christos   if (selected_frame_p && frame_relative_level (fi) >= 0)
   1545  1.10  christos     {
   1546   1.1  christos       gdb_printf (_("Stack level %d, frame at "),
   1547   1.1  christos 		  frame_relative_level (fi));
   1548   1.1  christos     }
   1549  1.10  christos   else
   1550   1.1  christos     {
   1551  1.10  christos       gdb_printf (_("Stack frame at "));
   1552  1.10  christos     }
   1553  1.10  christos   gdb_puts (paddress (gdbarch, get_frame_base (fi)));
   1554   1.1  christos   gdb_printf (":\n");
   1555  1.10  christos   gdb_printf (" %s = ", pc_regname);
   1556   1.1  christos   if (frame_pc_p)
   1557   1.9  christos     gdb_puts (paddress (gdbarch, get_frame_pc (fi)));
   1558   1.1  christos   else
   1559  1.10  christos     fputs_styled ("<unavailable>", metadata_style.style (), gdb_stdout);
   1560   1.1  christos 
   1561   1.1  christos   gdb_stdout->wrap_here (3);
   1562  1.10  christos   if (funname)
   1563  1.10  christos     {
   1564   1.1  christos       gdb_printf (" in ");
   1565  1.10  christos       gdb_puts (funname);
   1566   1.1  christos     }
   1567  1.10  christos   gdb_stdout->wrap_here (3);
   1568   1.9  christos   if (sal.symtab)
   1569   1.9  christos     gdb_printf
   1570   1.9  christos       (" (%ps:%d)",
   1571   1.9  christos        styled_string (file_name_style.style (),
   1572  1.10  christos 		      symtab_to_filename_for_display (sal.symtab)),
   1573  1.10  christos        sal.line);
   1574  1.10  christos   gdb_puts ("; ");
   1575   1.1  christos   gdb_stdout->wrap_here (4);
   1576   1.6  christos   gdb_printf ("saved %s = ", pc_regname);
   1577   1.6  christos 
   1578   1.6  christos   if (!frame_id_p (frame_unwind_caller_id (fi)))
   1579   1.1  christos     val_print_not_saved (gdb_stdout);
   1580   1.9  christos   else
   1581   1.6  christos     {
   1582   1.6  christos       try
   1583   1.6  christos 	{
   1584   1.6  christos 	  caller_pc = frame_unwind_caller_pc (fi);
   1585   1.9  christos 	  caller_pc_p = 1;
   1586   1.1  christos 	}
   1587   1.6  christos       catch (const gdb_exception_error &ex)
   1588   1.6  christos 	{
   1589   1.6  christos 	  switch (ex.error)
   1590   1.6  christos 	    {
   1591   1.6  christos 	    case NOT_AVAILABLE_ERROR:
   1592   1.6  christos 	      val_print_unavailable (gdb_stdout);
   1593   1.6  christos 	      break;
   1594   1.6  christos 	    case OPTIMIZED_OUT_ERROR:
   1595   1.6  christos 	      val_print_not_saved (gdb_stdout);
   1596   1.9  christos 	      break;
   1597   1.9  christos 	    default:
   1598   1.9  christos 	      fprintf_styled (gdb_stdout, metadata_style.style (),
   1599   1.6  christos 			      _("<error: %s>"),
   1600   1.6  christos 			      ex.what ());
   1601   1.1  christos 	      break;
   1602   1.1  christos 	    }
   1603   1.5  christos 	}
   1604   1.5  christos     }
   1605  1.10  christos 
   1606  1.10  christos   if (caller_pc_p)
   1607   1.1  christos     gdb_puts (paddress (gdbarch, caller_pc));
   1608   1.1  christos   gdb_printf ("\n");
   1609   1.1  christos 
   1610   1.1  christos   if (calling_frame_info == NULL)
   1611   1.1  christos     {
   1612   1.1  christos       enum unwind_stop_reason reason;
   1613   1.1  christos 
   1614  1.10  christos       reason = get_frame_unwind_stop_reason (fi);
   1615  1.10  christos       if (reason != UNWIND_NO_REASON)
   1616   1.1  christos 	gdb_printf (_(" Outermost frame: %s\n"),
   1617   1.1  christos 		    frame_stop_reason_string (fi));
   1618  1.10  christos     }
   1619   1.1  christos   else if (get_frame_type (fi) == TAILCALL_FRAME)
   1620  1.10  christos     gdb_puts (" tail call frame");
   1621  1.10  christos   else if (get_frame_type (fi) == INLINE_FRAME)
   1622   1.1  christos     gdb_printf (" inlined into frame %d",
   1623   1.1  christos 		frame_relative_level (get_prev_frame (fi)));
   1624  1.10  christos   else
   1625  1.10  christos     {
   1626   1.1  christos       gdb_printf (" called by frame at ");
   1627   1.1  christos       gdb_puts (paddress (gdbarch, get_frame_base (calling_frame_info)));
   1628  1.10  christos     }
   1629  1.10  christos   if (get_next_frame (fi) && calling_frame_info)
   1630   1.1  christos     gdb_puts (",");
   1631   1.1  christos   gdb_stdout->wrap_here (3);
   1632  1.10  christos   if (get_next_frame (fi))
   1633  1.10  christos     {
   1634   1.1  christos       gdb_printf (" caller of frame at ");
   1635   1.1  christos       gdb_puts (paddress (gdbarch, get_frame_base (get_next_frame (fi))));
   1636  1.10  christos     }
   1637   1.1  christos   if (get_next_frame (fi) || calling_frame_info)
   1638   1.1  christos     gdb_puts ("\n");
   1639  1.10  christos 
   1640  1.10  christos   if (s)
   1641   1.1  christos     gdb_printf (" source language %s.\n",
   1642   1.1  christos 		language_str (s->language ()));
   1643   1.1  christos 
   1644   1.1  christos   {
   1645   1.1  christos     /* Address of the argument list for this frame, or 0.  */
   1646   1.1  christos     CORE_ADDR arg_list = get_frame_args_address (fi);
   1647   1.1  christos     /* Number of args for this frame, or -1 if unknown.  */
   1648   1.1  christos     int numargs;
   1649  1.10  christos 
   1650   1.1  christos     if (arg_list == 0)
   1651   1.1  christos       gdb_printf (" Arglist at unknown address.\n");
   1652  1.10  christos     else
   1653  1.10  christos       {
   1654  1.10  christos 	gdb_printf (" Arglist at ");
   1655   1.1  christos 	gdb_puts (paddress (gdbarch, arg_list));
   1656   1.1  christos 	gdb_printf (",");
   1657   1.1  christos 
   1658   1.1  christos 	if (!gdbarch_frame_num_args_p (gdbarch))
   1659  1.10  christos 	  {
   1660   1.1  christos 	    numargs = -1;
   1661   1.1  christos 	    gdb_puts (" args: ");
   1662   1.1  christos 	  }
   1663   1.1  christos 	else
   1664   1.1  christos 	  {
   1665   1.1  christos 	    numargs = gdbarch_frame_num_args (gdbarch, fi);
   1666  1.10  christos 	    gdb_assert (numargs >= 0);
   1667   1.1  christos 	    if (numargs == 0)
   1668  1.10  christos 	      gdb_puts (" no args.");
   1669   1.1  christos 	    else if (numargs == 1)
   1670  1.10  christos 	      gdb_puts (" 1 arg: ");
   1671   1.1  christos 	    else
   1672  1.10  christos 	      gdb_printf (" %d args: ", numargs);
   1673   1.9  christos 	  }
   1674   1.9  christos 
   1675  1.10  christos 	print_frame_args (user_frame_print_options,
   1676   1.1  christos 			  func, fi, numargs, gdb_stdout);
   1677   1.1  christos 	gdb_puts ("\n");
   1678   1.1  christos       }
   1679   1.1  christos   }
   1680   1.1  christos   {
   1681   1.1  christos     /* Address of the local variables for this frame, or 0.  */
   1682   1.1  christos     CORE_ADDR arg_list = get_frame_locals_address (fi);
   1683  1.10  christos 
   1684   1.1  christos     if (arg_list == 0)
   1685   1.1  christos       gdb_printf (" Locals at unknown address,");
   1686  1.10  christos     else
   1687  1.10  christos       {
   1688  1.10  christos 	gdb_printf (" Locals at ");
   1689   1.1  christos 	gdb_puts (paddress (gdbarch, arg_list));
   1690   1.1  christos 	gdb_printf (",");
   1691   1.1  christos       }
   1692   1.1  christos   }
   1693   1.1  christos 
   1694   1.1  christos   /* Print as much information as possible on the location of all the
   1695   1.1  christos      registers.  */
   1696   1.1  christos   {
   1697   1.1  christos     int count;
   1698   1.7  christos     int i;
   1699   1.1  christos     int need_nl = 1;
   1700   1.1  christos     int sp_regnum = gdbarch_sp_regnum (gdbarch);
   1701   1.1  christos 
   1702   1.1  christos     /* The sp is special; what's displayed isn't the save address, but
   1703   1.1  christos        the value of the previous frame's sp.  This is a legacy thing,
   1704   1.1  christos        at one stage the frame cached the previous frame's SP instead
   1705   1.7  christos        of its address, hence it was easiest to just display the cached
   1706   1.1  christos        value.  */
   1707   1.7  christos     if (sp_regnum >= 0)
   1708   1.7  christos       {
   1709   1.7  christos 	struct value *value = frame_unwind_register_value (fi, sp_regnum);
   1710  1.11  christos 	gdb_assert (value != NULL);
   1711   1.1  christos 
   1712  1.11  christos 	if (!value->optimized_out () && value->entirely_available ())
   1713   1.7  christos 	  {
   1714   1.7  christos 	    if (value->lval () == not_lval)
   1715   1.7  christos 	      {
   1716   1.7  christos 		CORE_ADDR sp;
   1717   1.7  christos 		enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   1718  1.10  christos 		int sp_size = register_size (gdbarch, sp_regnum);
   1719  1.11  christos 
   1720   1.7  christos 		sp = extract_unsigned_integer
   1721  1.10  christos 		  (value->contents_all ().data (), sp_size, byte_order);
   1722  1.10  christos 
   1723  1.10  christos 		gdb_printf (" Previous frame's sp is ");
   1724   1.7  christos 		gdb_puts (paddress (gdbarch, sp));
   1725  1.11  christos 		gdb_printf ("\n");
   1726   1.7  christos 	      }
   1727  1.10  christos 	    else if (value->lval () == lval_memory)
   1728  1.11  christos 	      {
   1729  1.10  christos 		gdb_printf (" Previous frame's sp at ");
   1730   1.7  christos 		gdb_puts (paddress (gdbarch, value->address ()));
   1731  1.11  christos 		gdb_printf ("\n");
   1732  1.11  christos 	      }
   1733  1.11  christos 	    else if (value->lval () == lval_register)
   1734   1.7  christos 	      gdb_printf (" Previous frame's sp in %s\n",
   1735   1.7  christos 			  gdbarch_register_name (gdbarch, value->regnum ()));
   1736   1.1  christos 
   1737   1.1  christos 	    release_value (value);
   1738   1.1  christos 	    need_nl = 0;
   1739   1.1  christos 	  }
   1740   1.1  christos 	/* else keep quiet.  */
   1741   1.1  christos       }
   1742   1.8  christos 
   1743   1.1  christos     count = 0;
   1744   1.7  christos     numregs = gdbarch_num_cooked_regs (gdbarch);
   1745   1.1  christos     for (i = 0; i < numregs; i++)
   1746   1.1  christos       if (i != sp_regnum
   1747   1.7  christos 	  && gdbarch_register_reggroup_p (gdbarch, i, all_reggroup))
   1748   1.7  christos 	{
   1749   1.7  christos 	  enum lval_type lval;
   1750   1.7  christos 	  int optimized;
   1751   1.7  christos 	  int unavailable;
   1752   1.7  christos 	  CORE_ADDR addr;
   1753   1.1  christos 	  int realnum;
   1754  1.10  christos 
   1755   1.1  christos 	  /* Find out the location of the saved register without
   1756   1.1  christos 	     fetching the corresponding value.  */
   1757   1.1  christos 	  frame_register_unwind (fi, i, &optimized, &unavailable,
   1758   1.1  christos 				 &lval, &addr, &realnum, NULL);
   1759   1.1  christos 	  /* For moment, only display registers that were saved on the
   1760   1.1  christos 	     stack.  */
   1761   1.1  christos 	  if (!optimized && !unavailable && lval == lval_memory)
   1762  1.10  christos 	    {
   1763   1.1  christos 	      if (count == 0)
   1764  1.10  christos 		gdb_puts (" Saved registers:\n ");
   1765  1.10  christos 	      else
   1766  1.10  christos 		gdb_puts (",");
   1767  1.10  christos 	      gdb_stdout->wrap_here (1);
   1768  1.10  christos 	      gdb_printf (" %s at ",
   1769   1.1  christos 			  gdbarch_register_name (gdbarch, i));
   1770   1.1  christos 	      gdb_puts (paddress (gdbarch, addr));
   1771   1.1  christos 	      count++;
   1772   1.1  christos 	    }
   1773  1.10  christos 	}
   1774   1.1  christos     if (count || need_nl)
   1775   1.8  christos       gdb_puts ("\n");
   1776   1.8  christos   }
   1777   1.8  christos }
   1778   1.8  christos 
   1779  1.10  christos /* Return the innermost frame at level LEVEL.  */
   1780   1.8  christos 
   1781   1.8  christos static frame_info_ptr
   1782  1.10  christos leading_innermost_frame (int level)
   1783   1.8  christos {
   1784   1.8  christos   frame_info_ptr leading;
   1785   1.8  christos 
   1786   1.8  christos   leading = get_current_frame ();
   1787   1.8  christos 
   1788   1.8  christos   gdb_assert (level >= 0);
   1789   1.8  christos 
   1790   1.8  christos   while (leading != nullptr && level)
   1791   1.8  christos     {
   1792   1.8  christos       QUIT;
   1793   1.8  christos       leading = get_prev_frame (leading);
   1794   1.8  christos       level--;
   1795   1.8  christos     }
   1796   1.8  christos 
   1797   1.8  christos   return leading;
   1798   1.8  christos }
   1799   1.8  christos 
   1800  1.10  christos /* Return the starting frame needed to handle COUNT outermost frames.  */
   1801   1.8  christos 
   1802   1.8  christos static frame_info_ptr
   1803  1.10  christos trailing_outermost_frame (int count)
   1804  1.10  christos {
   1805   1.8  christos   frame_info_ptr current;
   1806   1.8  christos   frame_info_ptr trailing;
   1807   1.8  christos 
   1808   1.8  christos   trailing = get_current_frame ();
   1809   1.8  christos 
   1810   1.8  christos   gdb_assert (count > 0);
   1811   1.8  christos 
   1812   1.8  christos   current = trailing;
   1813   1.8  christos   while (current != nullptr && count--)
   1814   1.8  christos     {
   1815   1.8  christos       QUIT;
   1816   1.8  christos       current = get_prev_frame (current);
   1817   1.8  christos     }
   1818   1.8  christos 
   1819   1.8  christos   /* Will stop when CURRENT reaches the top of the stack.
   1820   1.8  christos      TRAILING will be COUNT below it.  */
   1821   1.8  christos   while (current != nullptr)
   1822   1.8  christos     {
   1823   1.8  christos       QUIT;
   1824   1.8  christos       trailing = get_prev_frame (trailing);
   1825   1.8  christos       current = get_prev_frame (current);
   1826   1.8  christos     }
   1827   1.8  christos 
   1828   1.8  christos   return trailing;
   1829   1.8  christos }
   1830   1.8  christos 
   1831   1.8  christos /* The core of all the "select-frame" sub-commands.  Just wraps a call to
   1832   1.8  christos    SELECT_FRAME.  */
   1833  1.11  christos 
   1834   1.8  christos static void
   1835  1.10  christos select_frame_command_core (const frame_info_ptr &fi, bool ignored)
   1836   1.8  christos {
   1837  1.10  christos   frame_info_ptr prev_frame = get_selected_frame ();
   1838  1.11  christos   select_frame (fi);
   1839   1.8  christos   if (get_selected_frame () != prev_frame)
   1840   1.8  christos     notify_user_selected_context_changed (USER_SELECTED_FRAME);
   1841   1.8  christos }
   1842   1.8  christos 
   1843   1.8  christos /* The core of all the "frame" sub-commands.  Select frame FI, and if this
   1844   1.8  christos    means we change frame send out a change notification (otherwise, just
   1845   1.8  christos    reprint the current frame summary).   */
   1846  1.11  christos 
   1847   1.8  christos static void
   1848  1.10  christos frame_command_core (const frame_info_ptr &fi, bool ignored)
   1849   1.8  christos {
   1850  1.10  christos   frame_info_ptr prev_frame = get_selected_frame ();
   1851  1.11  christos   select_frame (fi);
   1852   1.8  christos   if (get_selected_frame () != prev_frame)
   1853   1.8  christos     notify_user_selected_context_changed (USER_SELECTED_FRAME);
   1854   1.1  christos   else
   1855   1.1  christos     print_selected_thread_frame (current_uiout, USER_SELECTED_FRAME);
   1856   1.8  christos }
   1857   1.8  christos 
   1858   1.8  christos /* The three commands 'frame', 'select-frame', and 'info frame' all have a
   1859   1.8  christos    common set of sub-commands that allow a specific frame to be selected.
   1860   1.8  christos    All of the sub-command functions are static methods within this class
   1861   1.8  christos    template which is then instantiated below.  The template parameter is a
   1862   1.8  christos    callback used to implement the functionality of the base command
   1863   1.8  christos    ('frame', 'select-frame', or 'info frame').
   1864   1.8  christos 
   1865   1.8  christos    In the template parameter FI is the frame being selected.  The
   1866   1.8  christos    SELECTED_FRAME_P flag is true if the frame being selected was done by
   1867   1.8  christos    default, which happens when the user uses the base command with no
   1868   1.8  christos    arguments.  For example the commands 'info frame', 'select-frame',
   1869   1.8  christos    'frame' will all cause SELECTED_FRAME_P to be true.  In all other cases
   1870  1.11  christos    SELECTED_FRAME_P is false.  */
   1871   1.8  christos 
   1872   1.8  christos template <void (*FPTR) (const frame_info_ptr &fi, bool selected_frame_p)>
   1873   1.8  christos class frame_command_helper
   1874   1.8  christos {
   1875   1.8  christos public:
   1876   1.8  christos 
   1877   1.8  christos   /* The "frame level" family of commands.  The ARG is an integer that is
   1878   1.8  christos      the frame's level in the stack.  */
   1879   1.8  christos   static void
   1880   1.8  christos   level (const char *arg, int from_tty)
   1881  1.10  christos   {
   1882   1.8  christos     int level = value_as_long (parse_and_eval (arg));
   1883   1.8  christos     frame_info_ptr fid
   1884   1.8  christos       = find_relative_frame (get_current_frame (), &level);
   1885   1.8  christos     if (level != 0)
   1886   1.8  christos       error (_("No frame at level %s."), arg);
   1887   1.8  christos     FPTR (fid, false);
   1888   1.8  christos   }
   1889   1.8  christos 
   1890   1.8  christos   /* The "frame address" family of commands.  ARG is a stack-pointer
   1891   1.8  christos      address for an existing frame.  This command does not allow new
   1892   1.8  christos      frames to be created.  */
   1893   1.8  christos 
   1894   1.8  christos   static void
   1895   1.8  christos   address (const char *arg, int from_tty)
   1896  1.10  christos   {
   1897   1.8  christos     CORE_ADDR addr = value_as_address (parse_and_eval (arg));
   1898   1.8  christos     frame_info_ptr fid = find_frame_for_address (addr);
   1899   1.8  christos     if (fid == NULL)
   1900   1.8  christos       error (_("No frame at address %s."), arg);
   1901   1.8  christos     FPTR (fid, false);
   1902   1.8  christos   }
   1903   1.8  christos 
   1904   1.8  christos   /* The "frame view" family of commands.  ARG is one or two addresses and
   1905   1.8  christos      is used to view a frame that might be outside the current backtrace.
   1906   1.8  christos      The addresses are stack-pointer address, and (optional) pc-address.  */
   1907   1.8  christos 
   1908   1.8  christos   static void
   1909  1.10  christos   view (const char *args, int from_tty)
   1910   1.8  christos   {
   1911   1.8  christos     frame_info_ptr fid;
   1912  1.10  christos 
   1913   1.8  christos     if (args == NULL)
   1914   1.8  christos       error (_("Missing address argument to view a frame"));
   1915   1.8  christos 
   1916   1.8  christos     gdb_argv argv (args);
   1917   1.8  christos 
   1918   1.8  christos     if (argv.count () == 2)
   1919   1.8  christos       {
   1920   1.8  christos 	CORE_ADDR addr[2];
   1921   1.8  christos 
   1922   1.8  christos 	addr [0] = value_as_address (parse_and_eval (argv[0]));
   1923   1.8  christos 	addr [1] = value_as_address (parse_and_eval (argv[1]));
   1924   1.8  christos 	fid = create_new_frame (addr[0], addr[1]);
   1925   1.8  christos       }
   1926   1.8  christos     else
   1927   1.8  christos       {
   1928   1.8  christos 	CORE_ADDR addr = value_as_address (parse_and_eval (argv[0]));
   1929   1.8  christos 	fid = create_new_frame (addr, false);
   1930   1.8  christos       }
   1931   1.8  christos     FPTR (fid, false);
   1932   1.8  christos   }
   1933   1.8  christos 
   1934   1.8  christos   /* The "frame function" family of commands.  ARG is the name of a
   1935   1.8  christos      function within the stack, the first function (searching from frame
   1936   1.8  christos      0) with that name will be selected.  */
   1937   1.8  christos 
   1938   1.8  christos   static void
   1939   1.8  christos   function (const char *arg, int from_tty)
   1940   1.8  christos   {
   1941  1.10  christos     if (arg == NULL)
   1942   1.8  christos       error (_("Missing function name argument"));
   1943   1.8  christos     frame_info_ptr fid = find_frame_for_function (arg);
   1944   1.8  christos     if (fid == NULL)
   1945   1.8  christos       error (_("No frame for function \"%s\"."), arg);
   1946   1.8  christos     FPTR (fid, false);
   1947   1.8  christos   }
   1948   1.8  christos 
   1949   1.8  christos   /* The "frame" base command, that is, when no sub-command is specified.
   1950   1.8  christos      If one argument is provided then we assume that this is a frame's
   1951   1.8  christos      level as historically, this was the supported command syntax that was
   1952   1.8  christos      used most often.
   1953   1.8  christos 
   1954   1.8  christos      If no argument is provided, then the current frame is selected.  */
   1955   1.8  christos 
   1956   1.8  christos   static void
   1957   1.8  christos   base_command (const char *arg, int from_tty)
   1958   1.8  christos   {
   1959   1.8  christos     if (arg == NULL)
   1960   1.8  christos       FPTR (get_selected_frame (_("No stack.")), true);
   1961   1.8  christos     else
   1962   1.8  christos       level (arg, from_tty);
   1963   1.8  christos   }
   1964   1.8  christos };
   1965   1.8  christos 
   1966   1.8  christos /* Instantiate three FRAME_COMMAND_HELPER instances to implement the
   1967   1.8  christos    sub-commands for 'info frame', 'frame', and 'select-frame' commands.  */
   1968   1.8  christos 
   1969   1.8  christos static frame_command_helper <info_frame_command_core> info_frame_cmd;
   1970   1.8  christos static frame_command_helper <frame_command_core> frame_cmd;
   1971   1.1  christos static frame_command_helper <select_frame_command_core> select_frame_cmd;
   1972   1.1  christos 
   1973   1.1  christos /* Print briefly all stack frames or just the innermost COUNT_EXP
   1974   1.1  christos    frames.  */
   1975   1.9  christos 
   1976   1.9  christos static void
   1977   1.9  christos backtrace_command_1 (const frame_print_options &fp_opts,
   1978   1.9  christos 		     const backtrace_cmd_options &bt_opts,
   1979   1.1  christos 		     const char *count_exp, int from_tty)
   1980  1.10  christos 
   1981   1.1  christos {
   1982   1.8  christos   frame_info_ptr fi;
   1983   1.3  christos   int count;
   1984   1.1  christos   int py_start = 0, py_end = 0;
   1985  1.10  christos   enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
   1986   1.1  christos 
   1987   1.1  christos   if (!target_has_stack ())
   1988   1.1  christos     error (_("No stack."));
   1989   1.1  christos 
   1990   1.1  christos   if (count_exp)
   1991   1.1  christos     {
   1992   1.8  christos       count = parse_and_eval_long (count_exp);
   1993   1.1  christos       if (count < 0)
   1994   1.1  christos 	py_start = count;
   1995   1.1  christos       else
   1996   1.8  christos 	{
   1997   1.8  christos 	  py_start = 0;
   1998   1.8  christos 	  /* The argument to apply_ext_lang_frame_filter is the number
   1999   1.1  christos 	     of the final frame to print, and frames start at 0.  */
   2000   1.1  christos 	  py_end = count - 1;
   2001   1.1  christos 	}
   2002   1.1  christos     }
   2003   1.1  christos   else
   2004   1.1  christos     {
   2005   1.1  christos       py_end = -1;
   2006   1.1  christos       count = -1;
   2007   1.9  christos     }
   2008   1.9  christos 
   2009   1.9  christos   frame_filter_flags flags = 0;
   2010   1.9  christos 
   2011   1.9  christos   if (bt_opts.full)
   2012   1.9  christos     flags |= PRINT_LOCALS;
   2013  1.11  christos   if (bt_opts.hide)
   2014  1.11  christos     flags |= PRINT_HIDE;
   2015   1.9  christos   if (fp_opts.print_raw_frame_arguments)
   2016   1.9  christos     flags |= PRINT_RAW_FRAME_ARGUMENTS;
   2017   1.1  christos 
   2018   1.3  christos   if (!bt_opts.no_filters)
   2019   1.1  christos     {
   2020   1.8  christos       enum ext_lang_frame_args arg_type;
   2021   1.8  christos 
   2022   1.8  christos       flags |= PRINT_LEVEL | PRINT_FRAME_INFO | PRINT_ARGS;
   2023   1.1  christos       if (from_tty)
   2024   1.9  christos 	flags |= PRINT_MORE_FRAMES;
   2025   1.1  christos 
   2026   1.9  christos       if (fp_opts.print_frame_arguments == print_frame_arguments_scalars)
   2027   1.1  christos 	arg_type = CLI_SCALAR_VALUES;
   2028   1.9  christos       else if (fp_opts.print_frame_arguments == print_frame_arguments_all)
   2029   1.9  christos 	arg_type = CLI_ALL_VALUES;
   2030   1.9  christos       else if (fp_opts.print_frame_arguments == print_frame_arguments_presence)
   2031   1.9  christos 	arg_type = CLI_PRESENCE;
   2032   1.1  christos       else if (fp_opts.print_frame_arguments == print_frame_arguments_none)
   2033   1.9  christos 	arg_type = NO_VALUES;
   2034   1.1  christos       else
   2035   1.3  christos 	gdb_assert (0);
   2036   1.3  christos 
   2037   1.3  christos       result = apply_ext_lang_frame_filter (get_current_frame (), flags,
   2038   1.3  christos 					    arg_type, current_uiout,
   2039   1.1  christos 					    py_start, py_end);
   2040   1.1  christos     }
   2041   1.9  christos 
   2042   1.9  christos   /* Run the inbuilt backtrace if there are no filters registered, or
   2043   1.1  christos      "-no-filters" has been specified from the command.  */
   2044  1.10  christos   if (bt_opts.no_filters || result == EXT_LANG_BT_NO_FILTERS)
   2045   1.8  christos     {
   2046   1.8  christos       frame_info_ptr trailing;
   2047   1.8  christos 
   2048   1.8  christos       /* The following code must do two things.  First, it must set the
   2049   1.8  christos 	 variable TRAILING to the frame from which we should start
   2050   1.8  christos 	 printing.  Second, it must set the variable count to the number
   2051   1.8  christos 	 of frames which we should print, or -1 if all of them.  */
   2052   1.8  christos 
   2053   1.8  christos       if (count_exp != NULL && count < 0)
   2054   1.8  christos 	{
   2055   1.8  christos 	  trailing = trailing_outermost_frame (-count);
   2056   1.8  christos 	  count = -1;
   2057   1.8  christos 	}
   2058   1.8  christos       else
   2059   1.8  christos 	trailing = get_current_frame ();
   2060   1.1  christos 
   2061   1.1  christos       for (fi = trailing; fi && count--; fi = get_prev_frame (fi))
   2062   1.1  christos 	{
   2063   1.1  christos 	  QUIT;
   2064   1.1  christos 
   2065   1.1  christos 	  /* Don't use print_stack_frame; if an error() occurs it probably
   2066   1.1  christos 	     means further attempts to backtrace would fail (on the other
   2067   1.1  christos 	     hand, perhaps the code does or could be fixed to make sure
   2068   1.9  christos 	     the frame->prev field gets set to NULL in that case).  */
   2069   1.8  christos 
   2070  1.10  christos 	  print_frame_info (fp_opts, fi, 1, LOCATION, 1, 0);
   2071   1.1  christos 	  if ((flags & PRINT_LOCALS) != 0)
   2072   1.1  christos 	    print_frame_local_vars (fi, false, NULL, NULL, 1, gdb_stdout);
   2073   1.1  christos 
   2074   1.1  christos 	  /* Save the last frame to check for error conditions.  */
   2075   1.1  christos 	  trailing = fi;
   2076   1.1  christos 	}
   2077   1.1  christos 
   2078  1.10  christos       /* If we've stopped before the end, mention that.  */
   2079   1.1  christos       if (fi && from_tty)
   2080   1.1  christos 	gdb_printf (_("(More stack frames follow...)\n"));
   2081   1.1  christos 
   2082   1.1  christos       /* If we've run out of frames, and the reason appears to be an error
   2083   1.1  christos 	 condition, print it.  */
   2084   1.1  christos       if (fi == NULL && trailing != NULL)
   2085   1.1  christos 	{
   2086   1.1  christos 	  enum unwind_stop_reason reason;
   2087   1.1  christos 
   2088  1.10  christos 	  reason = get_frame_unwind_stop_reason (trailing);
   2089  1.10  christos 	  if (reason >= UNWIND_FIRST_ERROR)
   2090   1.1  christos 	    gdb_printf (_("Backtrace stopped: %s\n"),
   2091   1.1  christos 			frame_stop_reason_string (trailing));
   2092   1.1  christos 	}
   2093   1.1  christos     }
   2094   1.9  christos }
   2095   1.9  christos 
   2096   1.9  christos /* Create an option_def_group array grouping all the "backtrace"
   2097   1.9  christos    options, with FP_OPTS, BT_CMD_OPT, SET_BT_OPTS as contexts.  */
   2098   1.9  christos 
   2099   1.9  christos static inline std::array<gdb::option::option_def_group, 3>
   2100   1.9  christos make_backtrace_options_def_group (frame_print_options *fp_opts,
   2101   1.1  christos 				  backtrace_cmd_options *bt_cmd_opts,
   2102   1.9  christos 				  set_backtrace_options *set_bt_opts)
   2103   1.9  christos {
   2104   1.9  christos   return {{
   2105   1.9  christos     { {frame_print_option_defs}, fp_opts },
   2106   1.9  christos     { {set_backtrace_option_defs}, set_bt_opts },
   2107   1.9  christos     { {backtrace_command_option_defs}, bt_cmd_opts }
   2108   1.9  christos   }};
   2109   1.9  christos }
   2110   1.9  christos 
   2111   1.9  christos /* Parse the backtrace command's qualifiers.  Returns ARG advanced
   2112   1.1  christos    past the qualifiers, if any.  BT_CMD_OPTS, if not null, is used to
   2113   1.9  christos    store the parsed qualifiers.  */
   2114   1.9  christos 
   2115   1.9  christos static const char *
   2116   1.9  christos parse_backtrace_qualifiers (const char *arg,
   2117   1.9  christos 			    backtrace_cmd_options *bt_cmd_opts = nullptr)
   2118   1.1  christos {
   2119   1.9  christos   while (true)
   2120   1.9  christos     {
   2121   1.9  christos       const char *save_arg = arg;
   2122   1.9  christos       std::string this_arg = extract_arg (&arg);
   2123   1.9  christos 
   2124   1.1  christos       if (this_arg.empty ())
   2125  1.10  christos 	return arg;
   2126   1.9  christos 
   2127   1.9  christos       if (startswith ("no-filters", this_arg))
   2128   1.9  christos 	{
   2129   1.9  christos 	  if (bt_cmd_opts != nullptr)
   2130  1.10  christos 	    bt_cmd_opts->no_filters = true;
   2131   1.9  christos 	}
   2132   1.9  christos       else if (startswith ("full", this_arg))
   2133   1.9  christos 	{
   2134   1.9  christos 	  if (bt_cmd_opts != nullptr)
   2135  1.10  christos 	    bt_cmd_opts->full = true;
   2136   1.1  christos 	}
   2137   1.9  christos       else if (startswith ("hide", this_arg))
   2138   1.9  christos 	{
   2139   1.9  christos 	  if (bt_cmd_opts != nullptr)
   2140   1.9  christos 	    bt_cmd_opts->hide = true;
   2141   1.9  christos 	}
   2142   1.9  christos       else
   2143   1.9  christos 	{
   2144   1.1  christos 	  /* Not a recognized qualifier, so stop.  */
   2145   1.9  christos 	  return save_arg;
   2146   1.9  christos 	}
   2147   1.8  christos     }
   2148   1.9  christos }
   2149   1.9  christos 
   2150   1.9  christos static void
   2151   1.9  christos backtrace_command (const char *arg, int from_tty)
   2152   1.9  christos {
   2153   1.9  christos   frame_print_options fp_opts = user_frame_print_options;
   2154   1.9  christos   backtrace_cmd_options bt_cmd_opts;
   2155   1.9  christos   set_backtrace_options set_bt_opts = user_set_backtrace_options;
   2156   1.9  christos 
   2157   1.9  christos   auto grp
   2158   1.9  christos     = make_backtrace_options_def_group (&fp_opts, &bt_cmd_opts, &set_bt_opts);
   2159   1.9  christos   gdb::option::process_options
   2160   1.9  christos     (&arg, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
   2161   1.9  christos 
   2162   1.9  christos   /* Parse non-'-'-prefixed qualifiers, for backwards
   2163   1.9  christos      compatibility.  */
   2164   1.9  christos   if (arg != NULL)
   2165   1.8  christos     {
   2166   1.8  christos       arg = parse_backtrace_qualifiers (arg, &bt_cmd_opts);
   2167   1.1  christos       if (*arg == '\0')
   2168   1.1  christos 	arg = NULL;
   2169   1.9  christos     }
   2170   1.9  christos 
   2171   1.9  christos   /* These options are handled quite deep in the unwind machinery, so
   2172   1.9  christos      we get to pass them down by swapping globals.  */
   2173   1.9  christos   scoped_restore restore_set_backtrace_options
   2174   1.9  christos     = make_scoped_restore (&user_set_backtrace_options, set_bt_opts);
   2175   1.9  christos 
   2176   1.9  christos   backtrace_command_1 (fp_opts, bt_cmd_opts, arg, from_tty);
   2177   1.9  christos }
   2178   1.9  christos 
   2179   1.9  christos /* Completer for the "backtrace" command.  */
   2180   1.9  christos 
   2181   1.9  christos static void
   2182   1.9  christos backtrace_command_completer (struct cmd_list_element *ignore,
   2183   1.9  christos 			     completion_tracker &tracker,
   2184   1.9  christos 			     const char *text, const char */*word*/)
   2185   1.9  christos {
   2186   1.9  christos   const auto group
   2187   1.9  christos     = make_backtrace_options_def_group (nullptr, nullptr, nullptr);
   2188   1.9  christos   if (gdb::option::complete_options
   2189   1.9  christos       (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
   2190   1.9  christos     return;
   2191   1.9  christos 
   2192   1.9  christos   if (*text != '\0')
   2193   1.9  christos     {
   2194   1.9  christos       const char *p = skip_to_space (text);
   2195   1.9  christos       if (*p == '\0')
   2196   1.9  christos 	{
   2197   1.9  christos 	  static const char *const backtrace_cmd_qualifier_choices[] = {
   2198   1.9  christos 	    "full", "no-filters", "hide", nullptr,
   2199   1.9  christos 	  };
   2200   1.9  christos 	  complete_on_enum (tracker, backtrace_cmd_qualifier_choices,
   2201   1.9  christos 			    text, text);
   2202   1.9  christos 
   2203   1.9  christos 	  if (tracker.have_completions ())
   2204   1.9  christos 	    return;
   2205   1.9  christos 	}
   2206   1.9  christos       else
   2207   1.9  christos 	{
   2208   1.9  christos 	  const char *cmd = parse_backtrace_qualifiers (text);
   2209   1.9  christos 	  tracker.advance_custom_word_point_by (cmd - text);
   2210   1.9  christos 	  text = cmd;
   2211   1.9  christos 	}
   2212   1.9  christos     }
   2213   1.9  christos 
   2214   1.1  christos   const char *word = advance_to_expression_complete_word_point (tracker, text);
   2215   1.1  christos   expression_completer (ignore, tracker, text, word);
   2216  1.10  christos }
   2217   1.1  christos 
   2218   1.1  christos /* Iterate over the local variables of a block B, calling CB.  */
   2219   1.3  christos 
   2220  1.10  christos static void
   2221   1.1  christos iterate_over_block_locals (const struct block *b,
   2222  1.11  christos 			   iterate_over_block_arg_local_vars_cb cb)
   2223   1.1  christos {
   2224  1.10  christos   for (struct symbol *sym : block_iterator_range (b))
   2225   1.1  christos     {
   2226   1.9  christos       switch (sym->aclass ())
   2227   1.1  christos 	{
   2228   1.1  christos 	case LOC_CONST:
   2229   1.1  christos 	case LOC_LOCAL:
   2230   1.1  christos 	case LOC_REGISTER:
   2231   1.8  christos 	case LOC_STATIC:
   2232  1.10  christos 	case LOC_COMPUTED:
   2233   1.1  christos 	case LOC_OPTIMIZED_OUT:
   2234  1.10  christos 	  if (sym->is_argument ())
   2235   1.1  christos 	    break;
   2236  1.10  christos 	  if (sym->domain () == COMMON_BLOCK_DOMAIN)
   2237   1.1  christos 	    break;
   2238   1.1  christos 	  cb (sym->print_name (), sym);
   2239   1.1  christos 	  break;
   2240   1.1  christos 
   2241   1.1  christos 	default:
   2242   1.1  christos 	  /* Ignore symbols which are not locals.  */
   2243   1.1  christos 	  break;
   2244   1.1  christos 	}
   2245   1.1  christos     }
   2246   1.1  christos }
   2247   1.1  christos 
   2248   1.1  christos /* Iterate over all the local variables in block B, including all its
   2249   1.1  christos    superblocks, stopping when the top-level block is reached.  */
   2250   1.3  christos 
   2251  1.10  christos void
   2252   1.1  christos iterate_over_block_local_vars (const struct block *block,
   2253   1.1  christos 			       iterate_over_block_arg_local_vars_cb cb)
   2254   1.1  christos {
   2255  1.10  christos   while (block)
   2256   1.1  christos     {
   2257   1.1  christos       iterate_over_block_locals (block, cb);
   2258   1.1  christos       /* After handling the function's top-level block, stop.  Don't
   2259  1.10  christos 	 continue to its superblock, the block of per-file
   2260   1.1  christos 	 symbols.  */
   2261  1.10  christos       if (block->function ())
   2262   1.1  christos 	break;
   2263   1.1  christos       block = block->superblock ();
   2264   1.1  christos     }
   2265   1.1  christos }
   2266   1.1  christos 
   2267   1.1  christos /* Data to be passed around in the calls to the locals and args
   2268   1.1  christos    iterators.  */
   2269   1.1  christos 
   2270  1.11  christos struct print_variable_and_value_data
   2271  1.11  christos {
   2272   1.1  christos   std::optional<compiled_regex> preg;
   2273   1.1  christos   std::optional<compiled_regex> treg;
   2274   1.1  christos   struct frame_id frame_id;
   2275   1.1  christos   int num_tabs;
   2276  1.10  christos   struct ui_file *stream;
   2277  1.10  christos   int values_printed;
   2278   1.1  christos 
   2279   1.1  christos   void operator() (const char *print_name, struct symbol *sym);
   2280   1.1  christos };
   2281   1.1  christos 
   2282  1.10  christos /* The callback for the locals and args iterators.  */
   2283  1.10  christos 
   2284  1.10  christos void
   2285  1.10  christos print_variable_and_value_data::operator() (const char *print_name,
   2286  1.10  christos 					   struct symbol *sym)
   2287   1.1  christos {
   2288  1.10  christos   frame_info_ptr frame;
   2289  1.10  christos 
   2290  1.10  christos   if (preg.has_value ()
   2291  1.10  christos       && preg->exec (sym->natural_name (), 0, NULL, 0) != 0)
   2292  1.10  christos     return;
   2293   1.8  christos   if (treg.has_value ()
   2294  1.10  christos       && !treg_matches_sym_type_name (*treg, sym))
   2295   1.8  christos     return;
   2296   1.8  christos   if (language_def (sym->language ())->symbol_printing_suppressed (sym))
   2297  1.10  christos     return;
   2298   1.1  christos 
   2299   1.1  christos   frame = frame_find_by_id (frame_id);
   2300   1.1  christos   if (frame == NULL)
   2301   1.1  christos     {
   2302   1.1  christos       warning (_("Unable to restore previously selected frame."));
   2303   1.1  christos       return;
   2304  1.10  christos     }
   2305   1.1  christos 
   2306  1.10  christos   print_variable_and_value (print_name, sym, frame, stream, num_tabs);
   2307   1.1  christos 
   2308   1.1  christos   values_printed = 1;
   2309   1.8  christos }
   2310   1.8  christos 
   2311   1.8  christos /* Prepares the regular expression REG from REGEXP.
   2312   1.8  christos    If REGEXP is NULL, it results in an empty regular expression.  */
   2313  1.11  christos 
   2314   1.8  christos static void
   2315   1.8  christos prepare_reg (const char *regexp, std::optional<compiled_regex> *reg)
   2316   1.8  christos {
   2317   1.8  christos   if (regexp != NULL)
   2318   1.8  christos     {
   2319   1.8  christos       int cflags = REG_NOSUB | (case_sensitivity == case_sensitive_off
   2320   1.8  christos 				? REG_ICASE : 0);
   2321   1.8  christos       reg->emplace (regexp, cflags, _("Invalid regexp"));
   2322   1.8  christos     }
   2323   1.8  christos   else
   2324   1.8  christos     reg->reset ();
   2325   1.1  christos }
   2326   1.1  christos 
   2327   1.8  christos /* Print all variables from the innermost up to the function block of FRAME.
   2328   1.8  christos    Print them with values to STREAM indented by NUM_TABS.
   2329   1.8  christos    If REGEXP is not NULL, only print local variables whose name
   2330   1.8  christos    matches REGEXP.
   2331   1.8  christos    If T_REGEXP is not NULL, only print local variables whose type
   2332  1.11  christos    matches T_REGEXP.
   2333   1.1  christos    If no local variables have been printed and !QUIET, prints a message
   2334   1.1  christos    explaining why no local variables could be printed.  */
   2335  1.11  christos 
   2336   1.8  christos static void
   2337   1.8  christos print_frame_local_vars (const frame_info_ptr &frame,
   2338   1.8  christos 			bool quiet,
   2339   1.1  christos 			const char *regexp, const char *t_regexp,
   2340   1.1  christos 			int num_tabs, struct ui_file *stream)
   2341   1.3  christos {
   2342   1.1  christos   struct print_variable_and_value_data cb_data;
   2343   1.1  christos   const struct block *block;
   2344   1.1  christos   CORE_ADDR pc;
   2345   1.1  christos 
   2346   1.8  christos   if (!get_frame_pc_if_available (frame, &pc))
   2347  1.10  christos     {
   2348  1.10  christos       if (!quiet)
   2349   1.1  christos 	gdb_printf (stream,
   2350   1.1  christos 		    _("PC unavailable, cannot determine locals.\n"));
   2351   1.1  christos       return;
   2352   1.1  christos     }
   2353   1.1  christos 
   2354   1.1  christos   block = get_frame_block (frame, 0);
   2355   1.8  christos   if (block == 0)
   2356  1.10  christos     {
   2357   1.1  christos       if (!quiet)
   2358   1.1  christos 	gdb_printf (stream, "No symbol table info available.\n");
   2359   1.1  christos       return;
   2360   1.8  christos     }
   2361   1.8  christos 
   2362   1.1  christos   prepare_reg (regexp, &cb_data.preg);
   2363   1.1  christos   prepare_reg (t_regexp, &cb_data.treg);
   2364   1.1  christos   cb_data.frame_id = get_frame_id (frame);
   2365   1.1  christos   cb_data.num_tabs = 4 * num_tabs;
   2366   1.1  christos   cb_data.stream = stream;
   2367   1.6  christos   cb_data.values_printed = 0;
   2368   1.6  christos 
   2369   1.6  christos   /* Temporarily change the selected frame to the given FRAME.
   2370   1.8  christos      This allows routines that rely on the selected frame instead
   2371   1.6  christos      of being given a frame as parameter to use the correct frame.  */
   2372   1.6  christos   scoped_restore_selected_frame restore_selected_frame;
   2373  1.10  christos   select_frame (frame);
   2374   1.8  christos 
   2375   1.8  christos   iterate_over_block_local_vars (block, cb_data);
   2376   1.6  christos 
   2377   1.8  christos   if (!cb_data.values_printed && !quiet)
   2378  1.10  christos     {
   2379   1.8  christos       if (regexp == NULL && t_regexp == NULL)
   2380  1.10  christos 	gdb_printf (stream, _("No locals.\n"));
   2381   1.6  christos       else
   2382   1.1  christos 	gdb_printf (stream, _("No matching locals.\n"));
   2383   1.1  christos     }
   2384   1.9  christos }
   2385   1.9  christos 
   2386   1.9  christos /* Structure to hold the values of the options used by the 'info
   2387   1.9  christos    variables' command and other similar commands.  These correspond to the
   2388   1.9  christos    -q and -t options.  */
   2389   1.1  christos 
   2390   1.8  christos struct info_print_options
   2391  1.10  christos {
   2392   1.9  christos   bool quiet = false;
   2393   1.9  christos   std::string type_regexp;
   2394   1.9  christos };
   2395   1.9  christos 
   2396   1.9  christos /* The options used by the 'info locals' and 'info args' commands.  */
   2397   1.9  christos 
   2398   1.9  christos static const gdb::option::option_def info_print_options_defs[] = {
   2399   1.9  christos   gdb::option::boolean_option_def<info_print_options> {
   2400   1.9  christos     "q",
   2401   1.9  christos     [] (info_print_options *opt) { return &opt->quiet; },
   2402   1.9  christos     nullptr, /* show_cmd_cb */
   2403   1.9  christos     nullptr /* set_doc */
   2404   1.9  christos   },
   2405   1.9  christos 
   2406   1.9  christos   gdb::option::string_option_def<info_print_options> {
   2407   1.9  christos     "t",
   2408   1.9  christos     [] (info_print_options *opt) { return &opt->type_regexp; },
   2409   1.9  christos     nullptr, /* show_cmd_cb */
   2410   1.9  christos     nullptr /* set_doc */
   2411   1.9  christos   }
   2412   1.9  christos };
   2413   1.9  christos 
   2414   1.9  christos /* Returns the option group used by 'info locals' and 'info args'
   2415   1.9  christos    commands.  */
   2416   1.9  christos 
   2417   1.9  christos static gdb::option::option_def_group
   2418   1.9  christos make_info_print_options_def_group (info_print_options *opts)
   2419   1.9  christos {
   2420   1.8  christos   return {{info_print_options_defs}, opts};
   2421   1.9  christos }
   2422   1.8  christos 
   2423   1.9  christos /* Command completer for 'info locals' and 'info args'.  */
   2424   1.9  christos 
   2425   1.9  christos static void
   2426   1.9  christos info_print_command_completer (struct cmd_list_element *ignore,
   2427   1.9  christos 			      completion_tracker &tracker,
   2428   1.9  christos 			      const char *text, const char * /* word */)
   2429   1.9  christos {
   2430   1.9  christos   const auto group
   2431   1.9  christos     = make_info_print_options_def_group (nullptr);
   2432   1.9  christos   if (gdb::option::complete_options
   2433   1.9  christos       (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
   2434   1.9  christos     return;
   2435   1.9  christos 
   2436   1.9  christos   const char *word = advance_to_expression_complete_word_point (tracker, text);
   2437   1.9  christos   symbol_completer (ignore, tracker, text, word);
   2438   1.9  christos }
   2439   1.9  christos 
   2440   1.9  christos /* Implement the 'info locals' command.  */
   2441   1.9  christos 
   2442   1.9  christos void
   2443   1.9  christos info_locals_command (const char *args, int from_tty)
   2444   1.9  christos {
   2445   1.9  christos   info_print_options opts;
   2446   1.9  christos   auto grp = make_info_print_options_def_group (&opts);
   2447   1.9  christos   gdb::option::process_options
   2448   1.9  christos     (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
   2449   1.8  christos   if (args != nullptr && *args == '\0')
   2450  1.10  christos     args = nullptr;
   2451  1.10  christos 
   2452  1.10  christos   print_frame_local_vars
   2453  1.10  christos     (get_selected_frame (_("No frame selected.")),
   2454  1.10  christos      opts.quiet, args,
   2455   1.1  christos      opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
   2456   1.1  christos      0, gdb_stdout);
   2457   1.8  christos }
   2458   1.1  christos 
   2459   1.1  christos /* Iterate over all the argument variables in block B.  */
   2460   1.3  christos 
   2461  1.10  christos void
   2462   1.1  christos iterate_over_block_arg_vars (const struct block *b,
   2463  1.11  christos 			     iterate_over_block_arg_local_vars_cb cb)
   2464   1.1  christos {
   2465   1.1  christos   for (struct symbol *sym : block_iterator_range (b))
   2466  1.10  christos     {
   2467   1.1  christos       /* Don't worry about things which aren't arguments.  */
   2468   1.1  christos       if (sym->is_argument ())
   2469   1.1  christos 	{
   2470   1.1  christos 	  /* We have to look up the symbol because arguments can have
   2471   1.1  christos 	     two entries (one a parameter, one a local) and the one we
   2472   1.1  christos 	     want is the local, which lookup_symbol will find for us.
   2473   1.1  christos 	     This includes gcc1 (not gcc2) on the sparc when passing a
   2474   1.1  christos 	     small structure and gcc2 when the argument type is float
   2475   1.1  christos 	     and it is passed as a double and converted to float by
   2476   1.1  christos 	     the prologue (in the latter case the type of the LOC_ARG
   2477   1.1  christos 	     symbol is double and the type of the LOC_LOCAL symbol is
   2478   1.1  christos 	     float).  There are also LOC_ARG/LOC_REGISTER pairs which
   2479  1.11  christos 	     are not combined in symbol-reading.  */
   2480  1.11  christos 
   2481  1.11  christos 	  struct symbol *sym2
   2482  1.10  christos 	    = lookup_symbol_search_name (sym->search_name (),
   2483   1.1  christos 					 b, SEARCH_VAR_DOMAIN).symbol;
   2484   1.1  christos 	  cb (sym->print_name (), sym2);
   2485   1.1  christos 	}
   2486   1.1  christos     }
   2487   1.1  christos }
   2488   1.1  christos 
   2489   1.8  christos /* Print all argument variables of the function of FRAME.
   2490   1.8  christos    Print them with values to STREAM.
   2491   1.8  christos    If REGEXP is not NULL, only print argument variables whose name
   2492   1.8  christos    matches REGEXP.
   2493   1.8  christos    If T_REGEXP is not NULL, only print argument variables whose type
   2494  1.11  christos    matches T_REGEXP.
   2495   1.1  christos    If no argument variables have been printed and !QUIET, prints a message
   2496   1.1  christos    explaining why no argument variables could be printed.  */
   2497  1.11  christos 
   2498   1.8  christos static void
   2499   1.8  christos print_frame_arg_vars (const frame_info_ptr &frame,
   2500   1.8  christos 		      bool quiet,
   2501   1.1  christos 		      const char *regexp, const char *t_regexp,
   2502   1.1  christos 		      struct ui_file *stream)
   2503   1.1  christos {
   2504   1.1  christos   struct print_variable_and_value_data cb_data;
   2505  1.11  christos   struct symbol *func;
   2506  1.11  christos   CORE_ADDR pc;
   2507   1.1  christos   std::optional<compiled_regex> preg;
   2508   1.1  christos   std::optional<compiled_regex> treg;
   2509   1.1  christos 
   2510   1.8  christos   if (!get_frame_pc_if_available (frame, &pc))
   2511  1.10  christos     {
   2512  1.10  christos       if (!quiet)
   2513   1.1  christos 	gdb_printf (stream,
   2514   1.1  christos 		    _("PC unavailable, cannot determine args.\n"));
   2515   1.1  christos       return;
   2516   1.1  christos     }
   2517   1.1  christos 
   2518   1.1  christos   func = get_frame_function (frame);
   2519   1.8  christos   if (func == NULL)
   2520  1.10  christos     {
   2521   1.1  christos       if (!quiet)
   2522   1.1  christos 	gdb_printf (stream, _("No symbol table info available.\n"));
   2523   1.1  christos       return;
   2524   1.8  christos     }
   2525   1.8  christos 
   2526   1.1  christos   prepare_reg (regexp, &cb_data.preg);
   2527   1.1  christos   prepare_reg (t_regexp, &cb_data.treg);
   2528   1.8  christos   cb_data.frame_id = get_frame_id (frame);
   2529   1.1  christos   cb_data.num_tabs = 0;
   2530   1.1  christos   cb_data.stream = stream;
   2531  1.10  christos   cb_data.values_printed = 0;
   2532   1.1  christos 
   2533   1.8  christos   iterate_over_block_arg_vars (func->value_block (), cb_data);
   2534   1.8  christos 
   2535   1.8  christos   if (!cb_data.values_printed && !quiet)
   2536  1.10  christos     {
   2537   1.8  christos       if (regexp == NULL && t_regexp == NULL)
   2538  1.10  christos 	gdb_printf (stream, _("No arguments.\n"));
   2539   1.8  christos       else
   2540   1.1  christos 	gdb_printf (stream, _("No matching arguments.\n"));
   2541   1.1  christos     }
   2542   1.9  christos }
   2543   1.9  christos 
   2544   1.1  christos /* Implement the 'info args' command.  */
   2545   1.8  christos 
   2546   1.1  christos void
   2547   1.9  christos info_args_command (const char *args, int from_tty)
   2548   1.9  christos {
   2549   1.9  christos   info_print_options opts;
   2550   1.9  christos   auto grp = make_info_print_options_def_group (&opts);
   2551   1.9  christos   gdb::option::process_options
   2552   1.9  christos     (&args, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, grp);
   2553   1.8  christos   if (args != nullptr && *args == '\0')
   2554  1.10  christos     args = nullptr;
   2555  1.10  christos 
   2556  1.10  christos   print_frame_arg_vars
   2557  1.10  christos     (get_selected_frame (_("No frame selected.")),
   2558  1.10  christos      opts.quiet, args,
   2559   1.1  christos      opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
   2560   1.1  christos      gdb_stdout);
   2561   1.1  christos }
   2562   1.1  christos 
   2563   1.1  christos /* Return the symbol-block in which the selected frame is executing.
   2565   1.1  christos    Can return zero under various legitimate circumstances.
   2566   1.1  christos 
   2567   1.1  christos    If ADDR_IN_BLOCK is non-zero, set *ADDR_IN_BLOCK to the relevant
   2568   1.3  christos    code address within the block returned.  We use this to decide
   2569   1.1  christos    which macros are in scope.  */
   2570   1.1  christos 
   2571   1.1  christos const struct block *
   2572   1.1  christos get_selected_block (CORE_ADDR *addr_in_block)
   2573   1.1  christos {
   2574   1.1  christos   if (!has_stack_frames ())
   2575   1.1  christos     return 0;
   2576   1.1  christos 
   2577   1.1  christos   return get_frame_block (get_selected_frame (NULL), addr_in_block);
   2578   1.1  christos }
   2579   1.1  christos 
   2580   1.1  christos /* Find a frame a certain number of levels away from FRAME.
   2581   1.1  christos    LEVEL_OFFSET_PTR points to an int containing the number of levels.
   2582   1.1  christos    Positive means go to earlier frames (up); negative, the reverse.
   2583   1.1  christos    The int that contains the number of levels is counted toward
   2584   1.1  christos    zero as the frames for those levels are found.
   2585   1.1  christos    If the top or bottom frame is reached, that frame is returned,
   2586  1.10  christos    but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
   2587  1.10  christos    how much farther the original request asked to go.  */
   2588   1.1  christos 
   2589   1.1  christos frame_info_ptr
   2590   1.1  christos find_relative_frame (frame_info_ptr frame, int *level_offset_ptr)
   2591   1.1  christos {
   2592   1.1  christos   /* Going up is simple: just call get_prev_frame enough times or
   2593  1.10  christos      until the initial frame is reached.  */
   2594   1.1  christos   while (*level_offset_ptr > 0)
   2595   1.1  christos     {
   2596   1.1  christos       frame_info_ptr prev = get_prev_frame (frame);
   2597   1.1  christos 
   2598   1.1  christos       if (!prev)
   2599   1.1  christos 	break;
   2600   1.1  christos       (*level_offset_ptr)--;
   2601   1.1  christos       frame = prev;
   2602   1.1  christos     }
   2603   1.1  christos 
   2604  1.10  christos   /* Going down is just as simple.  */
   2605   1.1  christos   while (*level_offset_ptr < 0)
   2606   1.1  christos     {
   2607   1.1  christos       frame_info_ptr next = get_next_frame (frame);
   2608   1.1  christos 
   2609   1.1  christos       if (!next)
   2610   1.1  christos 	break;
   2611   1.1  christos       (*level_offset_ptr)++;
   2612   1.1  christos       frame = next;
   2613   1.1  christos     }
   2614   1.1  christos 
   2615   1.1  christos   return frame;
   2616   1.1  christos }
   2617   1.1  christos 
   2618   1.1  christos /* Select the frame up one or COUNT_EXP stack levels from the
   2619   1.3  christos    previously selected frame, and print it briefly.  */
   2620   1.1  christos 
   2621  1.10  christos static void
   2622   1.1  christos up_silently_base (const char *count_exp)
   2623   1.1  christos {
   2624   1.1  christos   frame_info_ptr frame;
   2625   1.1  christos   int count = 1;
   2626   1.1  christos 
   2627   1.1  christos   if (count_exp)
   2628   1.1  christos     count = parse_and_eval_long (count_exp);
   2629   1.1  christos 
   2630   1.1  christos   frame = find_relative_frame (get_selected_frame ("No stack."), &count);
   2631   1.1  christos   if (count != 0 && count_exp == NULL)
   2632   1.1  christos     error (_("Initial frame selected; you cannot go up."));
   2633   1.1  christos   select_frame (frame);
   2634   1.8  christos }
   2635   1.1  christos 
   2636   1.1  christos static void
   2637   1.1  christos up_silently_command (const char *count_exp, int from_tty)
   2638   1.1  christos {
   2639   1.1  christos   up_silently_base (count_exp);
   2640   1.8  christos }
   2641   1.1  christos 
   2642   1.1  christos static void
   2643  1.11  christos up_command (const char *count_exp, int from_tty)
   2644   1.1  christos {
   2645   1.1  christos   up_silently_base (count_exp);
   2646   1.1  christos   notify_user_selected_context_changed (USER_SELECTED_FRAME);
   2647   1.1  christos }
   2648   1.1  christos 
   2649   1.1  christos /* Select the frame down one or COUNT_EXP stack levels from the previously
   2650   1.3  christos    selected frame, and print it briefly.  */
   2651   1.1  christos 
   2652  1.10  christos static void
   2653   1.1  christos down_silently_base (const char *count_exp)
   2654   1.1  christos {
   2655   1.1  christos   frame_info_ptr frame;
   2656   1.1  christos   int count = -1;
   2657   1.1  christos 
   2658   1.1  christos   if (count_exp)
   2659   1.1  christos     count = -parse_and_eval_long (count_exp);
   2660   1.1  christos 
   2661   1.1  christos   frame = find_relative_frame (get_selected_frame ("No stack."), &count);
   2662  1.10  christos   if (count != 0 && count_exp == NULL)
   2663  1.10  christos     {
   2664  1.10  christos       /* We only do this if COUNT_EXP is not specified.  That way
   2665   1.1  christos 	 "down" means to really go down (and let me know if that is
   2666   1.1  christos 	 impossible), but "down 9999" can be used to mean go all the
   2667   1.1  christos 	 way down without getting an error.  */
   2668   1.1  christos 
   2669   1.1  christos       error (_("Bottom (innermost) frame selected; you cannot go down."));
   2670   1.1  christos     }
   2671   1.1  christos 
   2672   1.1  christos   select_frame (frame);
   2673   1.8  christos }
   2674   1.1  christos 
   2675   1.1  christos static void
   2676   1.1  christos down_silently_command (const char *count_exp, int from_tty)
   2677   1.1  christos {
   2678   1.1  christos   down_silently_base (count_exp);
   2679   1.8  christos }
   2680   1.1  christos 
   2681   1.1  christos static void
   2682  1.11  christos down_command (const char *count_exp, int from_tty)
   2683   1.1  christos {
   2684   1.1  christos   down_silently_base (count_exp);
   2685   1.1  christos   notify_user_selected_context_changed (USER_SELECTED_FRAME);
   2686   1.8  christos }
   2687   1.1  christos 
   2688   1.1  christos void
   2689   1.1  christos return_command (const char *retval_exp, int from_tty)
   2690  1.10  christos {
   2691   1.1  christos   /* Initialize it just to avoid a GCC false warning.  */
   2692   1.1  christos   enum return_value_convention rv_conv = RETURN_VALUE_STRUCT_CONVENTION;
   2693   1.1  christos   frame_info_ptr thisframe;
   2694   1.1  christos   struct gdbarch *gdbarch;
   2695  1.10  christos   struct symbol *thisfun;
   2696   1.1  christos   struct value *return_value = NULL;
   2697   1.1  christos   struct value *function = NULL;
   2698   1.1  christos   std::string query_prefix;
   2699   1.1  christos 
   2700   1.1  christos   thisframe = get_selected_frame ("No selected frame.");
   2701   1.1  christos   thisfun = get_frame_function (thisframe);
   2702   1.1  christos   gdbarch = get_frame_arch (thisframe);
   2703   1.1  christos 
   2704   1.1  christos   if (get_frame_type (get_current_frame ()) == INLINE_FRAME)
   2705   1.1  christos     error (_("Can not force return from an inlined function."));
   2706   1.1  christos 
   2707   1.1  christos   /* Compute the return value.  If the computation triggers an error,
   2708   1.1  christos      let it bail.  If the return type can't be handled, set
   2709   1.1  christos      RETURN_VALUE to NULL, and QUERY_PREFIX to an informational
   2710   1.7  christos      message.  */
   2711   1.1  christos   if (retval_exp)
   2712   1.1  christos     {
   2713   1.1  christos       expression_up retval_expr = parse_expression (retval_exp);
   2714  1.10  christos       struct type *return_type = NULL;
   2715  1.11  christos 
   2716   1.1  christos       /* Compute the return value.  Should the computation fail, this
   2717   1.1  christos 	 call throws an error.  */
   2718  1.10  christos       return_value = retval_expr->evaluate ();
   2719   1.1  christos 
   2720  1.10  christos       /* Cast return value to the return type of the function.  Should
   2721   1.1  christos 	 the cast fail, this call throws an error.  */
   2722  1.10  christos       if (thisfun != NULL)
   2723  1.10  christos 	return_type = thisfun->type ()->target_type ();
   2724  1.10  christos       if (return_type == NULL)
   2725   1.1  christos 	{
   2726   1.1  christos 	  if (retval_expr->first_opcode () != UNOP_CAST
   2727   1.1  christos 	      && retval_expr->first_opcode () != UNOP_CAST_TYPE)
   2728  1.11  christos 	    error (_("Return value type not available for selected "
   2729   1.1  christos 		     "stack frame.\n"
   2730   1.6  christos 		     "Please use an explicit cast of the value to return."));
   2731   1.1  christos 	  return_type = return_value->type ();
   2732   1.1  christos 	}
   2733   1.1  christos       return_type = check_typedef (return_type);
   2734  1.10  christos       return_value = value_cast (return_type, return_value);
   2735  1.11  christos 
   2736  1.11  christos       /* Make sure the value is fully evaluated.  It may live in the
   2737   1.1  christos 	 stack frame we're about to pop.  */
   2738   1.1  christos       if (return_value->lazy ())
   2739   1.6  christos 	return_value->fetch_lazy ();
   2740   1.1  christos 
   2741   1.1  christos       if (thisfun != NULL)
   2742   1.9  christos 	function = read_var_value (thisfun, NULL, thisframe);
   2743   1.1  christos 
   2744  1.10  christos       rv_conv = RETURN_VALUE_REGISTER_CONVENTION;
   2745  1.10  christos       if (return_type->code () == TYPE_CODE_VOID)
   2746  1.10  christos 	/* If the return-type is "void", don't try to find the
   2747  1.10  christos 	   return-value's location.  However, do still evaluate the
   2748   1.1  christos 	   return expression so that, even when the expression result
   2749   1.1  christos 	   is discarded, side effects such as "return i++" still
   2750   1.1  christos 	   occur.  */
   2751  1.11  christos 	return_value = NULL;
   2752  1.10  christos       else if (thisfun != NULL)
   2753  1.10  christos 	{
   2754  1.10  christos 	  if (is_nocall_function (check_typedef (function->type ())))
   2755  1.10  christos 	    {
   2756  1.10  christos 	      query_prefix =
   2757  1.10  christos 		string_printf ("Function '%s' does not follow the target "
   2758  1.10  christos 			       "calling convention.\n"
   2759  1.10  christos 			       "If you continue, setting the return value "
   2760  1.10  christos 			       "will probably lead to unpredictable "
   2761  1.10  christos 			       "behaviors.\n",
   2762   1.1  christos 			       thisfun->print_name ());
   2763   1.1  christos 	    }
   2764   1.1  christos 
   2765   1.1  christos 	  rv_conv = struct_return_convention (gdbarch, function, return_type);
   2766   1.1  christos 	  if (rv_conv == RETURN_VALUE_STRUCT_CONVENTION
   2767   1.1  christos 	      || rv_conv == RETURN_VALUE_ABI_RETURNS_ADDRESS)
   2768   1.1  christos 	    {
   2769   1.1  christos 	      query_prefix = "The location at which to store the "
   2770   1.1  christos 		"function's return value is unknown.\n"
   2771   1.1  christos 		"If you continue, the return value "
   2772   1.1  christos 		"that you specified will be ignored.\n";
   2773   1.1  christos 	      return_value = NULL;
   2774   1.1  christos 	    }
   2775   1.1  christos 	}
   2776   1.1  christos     }
   2777   1.1  christos 
   2778   1.1  christos   /* Does an interactive user really want to do this?  Include
   2779   1.1  christos      information, such as how well GDB can handle the return value, in
   2780   1.1  christos      the query message.  */
   2781   1.1  christos   if (from_tty)
   2782   1.1  christos     {
   2783   1.1  christos       int confirmed;
   2784  1.10  christos 
   2785   1.1  christos       if (thisfun == NULL)
   2786   1.5  christos 	confirmed = query (_("%sMake selected stack frame return now? "),
   2787  1.10  christos 			   query_prefix.c_str ());
   2788   1.5  christos       else
   2789  1.10  christos 	{
   2790  1.10  christos 	  if (TYPE_NO_RETURN (thisfun->type ()))
   2791   1.9  christos 	    warning (_("Function does not return normally to caller."));
   2792   1.5  christos 	  confirmed = query (_("%sMake %s return now? "),
   2793   1.1  christos 			     query_prefix.c_str (),
   2794   1.1  christos 			     thisfun->print_name ());
   2795   1.1  christos 	}
   2796   1.1  christos       if (!confirmed)
   2797   1.1  christos 	error (_("Not confirmed"));
   2798   1.1  christos     }
   2799   1.1  christos 
   2800   1.1  christos   /* Discard the selected frame and all frames inner-to it.  */
   2801   1.1  christos   frame_pop (get_selected_frame (NULL));
   2802   1.1  christos 
   2803  1.11  christos   /* Store RETURN_VALUE in the just-returned register set.  */
   2804  1.11  christos   if (return_value != NULL)
   2805  1.11  christos     {
   2806   1.1  christos       struct type *return_type = return_value->type ();
   2807   1.1  christos       regcache *regcache = get_thread_regcache (inferior_thread ());
   2808   1.1  christos       struct gdbarch *cache_arch = regcache->arch ();
   2809  1.11  christos 
   2810  1.11  christos       gdb_assert (rv_conv != RETURN_VALUE_STRUCT_CONVENTION
   2811  1.11  christos 		  && rv_conv != RETURN_VALUE_ABI_RETURNS_ADDRESS);
   2812   1.1  christos       gdbarch_return_value_as_value
   2813   1.1  christos 	(cache_arch, function, return_type, regcache, NULL /*read*/,
   2814   1.1  christos 	 return_value->contents ().data () /*write*/);
   2815   1.1  christos     }
   2816   1.1  christos 
   2817   1.1  christos   /* If we are at the end of a call dummy now, pop the dummy frame
   2818   1.1  christos      too.  */
   2819   1.6  christos   if (get_frame_type (get_current_frame ()) == DUMMY_FRAME)
   2820   1.1  christos     frame_pop (get_current_frame ());
   2821   1.1  christos 
   2822   1.6  christos   select_frame (get_current_frame ());
   2823   1.1  christos   /* If interactive, print the frame that is now current.  */
   2824   1.1  christos   if (from_tty)
   2825   1.8  christos     print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
   2826   1.8  christos }
   2827   1.1  christos 
   2828  1.10  christos /* Find the most inner frame in the current stack for a function called
   2829   1.8  christos    FUNCTION_NAME.  If no matching frame is found return NULL.  */
   2830   1.1  christos 
   2831   1.8  christos static frame_info_ptr
   2832   1.8  christos find_frame_for_function (const char *function_name)
   2833   1.8  christos {
   2834   1.8  christos   /* Used to hold the lower and upper addresses for each of the
   2835   1.8  christos      SYMTAB_AND_LINEs found for functions matching FUNCTION_NAME.  */
   2836   1.8  christos   struct function_bounds
   2837  1.10  christos   {
   2838   1.8  christos     CORE_ADDR low, high;
   2839   1.1  christos   };
   2840   1.1  christos   frame_info_ptr frame;
   2841   1.8  christos   bool found = false;
   2842   1.1  christos   int level = 1;
   2843   1.6  christos 
   2844   1.8  christos   gdb_assert (function_name != NULL);
   2845   1.8  christos 
   2846   1.8  christos   frame = get_current_frame ();
   2847   1.8  christos   std::vector<symtab_and_line> sals
   2848   1.8  christos     = decode_line_with_current_source (function_name,
   2849   1.1  christos 				       DECODE_LINE_FUNFIRSTLINE);
   2850   1.8  christos   gdb::def_vector<function_bounds> func_bounds (sals.size ());
   2851   1.1  christos   for (size_t i = 0; i < sals.size (); i++)
   2852   1.8  christos     {
   2853   1.8  christos       if (sals[i].pspace != current_program_space)
   2854   1.1  christos 	func_bounds[i].low = func_bounds[i].high = 0;
   2855   1.1  christos       else if (sals[i].pc == 0
   2856   1.8  christos 	       || find_pc_partial_function (sals[i].pc, NULL,
   2857   1.1  christos 					    &func_bounds[i].low,
   2858   1.1  christos 					    &func_bounds[i].high) == 0)
   2859   1.1  christos 	func_bounds[i].low = func_bounds[i].high = 0;
   2860   1.1  christos     }
   2861   1.8  christos 
   2862   1.1  christos   do
   2863   1.1  christos     {
   2864   1.1  christos       for (size_t i = 0; (i < sals.size () && !found); i++)
   2865   1.1  christos 	found = (get_frame_pc (frame) >= func_bounds[i].low
   2866   1.1  christos 		 && get_frame_pc (frame) < func_bounds[i].high);
   2867   1.1  christos       if (!found)
   2868   1.1  christos 	{
   2869   1.1  christos 	  level = 1;
   2870   1.1  christos 	  frame = find_relative_frame (frame, &level);
   2871   1.1  christos 	}
   2872   1.8  christos     }
   2873   1.8  christos   while (!found && level == 0);
   2874   1.1  christos 
   2875   1.8  christos   if (!found)
   2876   1.8  christos     frame = NULL;
   2877   1.8  christos 
   2878   1.9  christos   return frame;
   2879   1.9  christos }
   2880   1.9  christos 
   2881   1.9  christos /* The qcs command line flags for the "frame apply" commands.  Keep
   2882   1.9  christos    this in sync with the "thread apply" commands.  */
   2883   1.9  christos 
   2884   1.9  christos using qcs_flag_option_def
   2885   1.9  christos   = gdb::option::flag_option_def<qcs_flags>;
   2886   1.9  christos 
   2887   1.9  christos static const gdb::option::option_def fr_qcs_flags_option_defs[] = {
   2888   1.9  christos   qcs_flag_option_def {
   2889   1.9  christos     "q", [] (qcs_flags *opt) { return &opt->quiet; },
   2890   1.9  christos     N_("Disables printing the frame location information."),
   2891   1.9  christos   },
   2892   1.9  christos 
   2893   1.9  christos   qcs_flag_option_def {
   2894   1.9  christos     "c", [] (qcs_flags *opt) { return &opt->cont; },
   2895   1.9  christos     N_("Print any error raised by COMMAND and continue."),
   2896   1.9  christos   },
   2897   1.9  christos 
   2898   1.9  christos   qcs_flag_option_def {
   2899   1.9  christos     "s", [] (qcs_flags *opt) { return &opt->silent; },
   2900   1.9  christos     N_("Silently ignore any errors or empty output produced by COMMAND."),
   2901   1.9  christos   },
   2902   1.9  christos };
   2903   1.9  christos 
   2904   1.9  christos /* Create an option_def_group array for all the "frame apply" options,
   2905   1.9  christos    with FLAGS and SET_BT_OPTS as context.  */
   2906   1.9  christos 
   2907   1.9  christos static inline std::array<gdb::option::option_def_group, 2>
   2908   1.9  christos make_frame_apply_options_def_group (qcs_flags *flags,
   2909   1.9  christos 				    set_backtrace_options *set_bt_opts)
   2910   1.9  christos {
   2911   1.9  christos   return {{
   2912   1.9  christos     { {fr_qcs_flags_option_defs}, flags },
   2913   1.9  christos     { {set_backtrace_option_defs}, set_bt_opts },
   2914   1.8  christos   }};
   2915   1.8  christos }
   2916   1.8  christos 
   2917   1.8  christos /* Apply a GDB command to all stack frames, or a set of identified frames,
   2918   1.8  christos    or innermost COUNT frames.
   2919   1.8  christos    With a negative COUNT, apply command on outermost -COUNT frames.
   2920   1.8  christos 
   2921   1.8  christos    frame apply 3 info frame     Apply 'info frame' to frames 0, 1, 2
   2922  1.10  christos    frame apply -3 info frame    Apply 'info frame' to outermost 3 frames.
   2923  1.10  christos    frame apply all x/i $pc      Apply 'x/i $pc' cmd to all frames.
   2924  1.10  christos    frame apply all -s p local_var_no_idea_in_which_frame
   2925   1.8  christos 		If a frame has a local variable called
   2926  1.10  christos 		local_var_no_idea_in_which_frame, print frame
   2927   1.8  christos 		and value of local_var_no_idea_in_which_frame.
   2928  1.10  christos    frame apply all -s -q p local_var_no_idea_in_which_frame
   2929  1.10  christos 		Same as before, but only print the variable value.
   2930  1.10  christos    frame apply level 2-5 0 4-7 -s p i = i + 1
   2931   1.8  christos 		Adds 1 to the variable i in the specified frames.
   2932   1.8  christos 		Note that i will be incremented twice in
   2933   1.8  christos 		frames 4 and 5.  */
   2934   1.8  christos 
   2935   1.8  christos /* Apply a GDB command to COUNT stack frames, starting at TRAILING.
   2936   1.8  christos    CMD starts with 0 or more qcs flags followed by the GDB command to apply.
   2937   1.8  christos    COUNT -1 means all frames starting at TRAILING.  WHICH_COMMAND is used
   2938   1.8  christos    for error messages.  */
   2939   1.8  christos 
   2940  1.10  christos static void
   2941   1.8  christos frame_apply_command_count (const char *which_command,
   2942   1.8  christos 			   const char *cmd, int from_tty,
   2943   1.9  christos 			   frame_info_ptr trailing, int count)
   2944   1.9  christos {
   2945   1.9  christos   qcs_flags flags;
   2946   1.9  christos   set_backtrace_options set_bt_opts = user_set_backtrace_options;
   2947   1.9  christos 
   2948   1.8  christos   auto group = make_frame_apply_options_def_group (&flags, &set_bt_opts);
   2949   1.9  christos   gdb::option::process_options
   2950   1.8  christos     (&cmd, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group);
   2951   1.8  christos 
   2952   1.8  christos   validate_flags_qcs (which_command, &flags);
   2953   1.8  christos 
   2954   1.8  christos   if (cmd == NULL || *cmd == '\0')
   2955   1.8  christos     error (_("Please specify a command to apply on the selected frames"));
   2956   1.8  christos 
   2957   1.8  christos   /* The below will restore the current inferior/thread/frame.
   2958   1.8  christos      Usually, only the frame is effectively to be restored.
   2959   1.8  christos      But in case CMD switches of inferior/thread, better restore
   2960   1.9  christos      these also.  */
   2961   1.9  christos   scoped_restore_current_thread restore_thread;
   2962   1.9  christos 
   2963   1.9  christos   /* These options are handled quite deep in the unwind machinery, so
   2964   1.9  christos      we get to pass them down by swapping globals.  */
   2965  1.10  christos   scoped_restore restore_set_backtrace_options
   2966   1.8  christos     = make_scoped_restore (&user_set_backtrace_options, set_bt_opts);
   2967   1.8  christos 
   2968   1.8  christos   for (frame_info_ptr fi = trailing; fi && count--; fi = get_prev_frame (fi))
   2969   1.8  christos     {
   2970   1.9  christos       QUIT;
   2971   1.8  christos 
   2972   1.8  christos       select_frame (fi);
   2973   1.8  christos       try
   2974   1.8  christos 	{
   2975   1.8  christos 	  std::string cmd_result;
   2976   1.8  christos 	  {
   2977   1.8  christos 	    /* In case CMD switches of inferior/thread/frame, the below
   2978   1.8  christos 	       restores the inferior/thread/frame.  FI can then be
   2979  1.10  christos 	       set to the selected frame.  */
   2980  1.10  christos 	    scoped_restore_current_thread restore_fi_current_frame;
   2981   1.8  christos 
   2982   1.8  christos 	    execute_command_to_string
   2983   1.8  christos 	      (cmd_result, cmd, from_tty, gdb_stdout->term_out ());
   2984   1.8  christos 	  }
   2985   1.8  christos 	  fi = get_selected_frame (_("frame apply "
   2986   1.8  christos 				     "unable to get selected frame."));
   2987   1.8  christos 	  if (!flags.silent || cmd_result.length () > 0)
   2988  1.10  christos 	    {
   2989   1.8  christos 	      if (!flags.quiet)
   2990   1.8  christos 		print_stack_frame (fi, 1, LOCATION, 0);
   2991   1.9  christos 	      gdb_printf ("%s", cmd_result.c_str ());
   2992   1.8  christos 	    }
   2993   1.8  christos 	}
   2994   1.8  christos       catch (const gdb_exception_error &ex)
   2995   1.8  christos 	{
   2996   1.8  christos 	  fi = get_selected_frame (_("frame apply "
   2997   1.8  christos 				     "unable to get selected frame."));
   2998   1.8  christos 	  if (!flags.silent)
   2999   1.8  christos 	    {
   3000  1.10  christos 	      if (!flags.quiet)
   3001   1.8  christos 		print_stack_frame (fi, 1, LOCATION, 0);
   3002   1.9  christos 	      if (flags.cont)
   3003   1.8  christos 		gdb_printf ("%s\n", ex.what ());
   3004   1.8  christos 	      else
   3005   1.8  christos 		throw;
   3006   1.8  christos 	    }
   3007   1.8  christos 	}
   3008   1.9  christos     }
   3009   1.9  christos }
   3010   1.9  christos 
   3011   1.9  christos /* Completer for the "frame apply ..." commands.  */
   3012   1.9  christos 
   3013   1.9  christos static void
   3014   1.9  christos frame_apply_completer (completion_tracker &tracker, const char *text)
   3015   1.9  christos {
   3016   1.9  christos   const auto group = make_frame_apply_options_def_group (nullptr, nullptr);
   3017   1.9  christos   if (gdb::option::complete_options
   3018   1.9  christos       (tracker, &text, gdb::option::PROCESS_OPTIONS_UNKNOWN_IS_OPERAND, group))
   3019   1.9  christos     return;
   3020   1.9  christos 
   3021   1.9  christos   complete_nested_command_line (tracker, text);
   3022   1.9  christos }
   3023   1.9  christos 
   3024   1.9  christos /* Completer for the "frame apply" commands.  */
   3025   1.9  christos 
   3026   1.9  christos static void
   3027   1.9  christos frame_apply_level_cmd_completer (struct cmd_list_element *ignore,
   3028   1.9  christos 				 completion_tracker &tracker,
   3029   1.9  christos 				 const char *text, const char */*word*/)
   3030   1.9  christos {
   3031   1.9  christos   /* Do this explicitly because there's an early return below.  */
   3032   1.9  christos   tracker.set_use_custom_word_point (true);
   3033   1.9  christos 
   3034   1.9  christos   number_or_range_parser levels (text);
   3035   1.9  christos 
   3036   1.9  christos   /* Skip the LEVEL list to find the options and command args.  */
   3037   1.9  christos   try
   3038   1.9  christos     {
   3039   1.9  christos       while (!levels.finished ())
   3040   1.9  christos 	{
   3041   1.9  christos 	  /* Call for effect.  */
   3042   1.9  christos 	  levels.get_number ();
   3043   1.9  christos 
   3044   1.9  christos 	  if (levels.in_range ())
   3045   1.9  christos 	    levels.skip_range ();
   3046   1.9  christos 	}
   3047   1.9  christos     }
   3048   1.9  christos   catch (const gdb_exception_error &ex)
   3049   1.9  christos     {
   3050   1.9  christos       /* get_number throws if it parses a negative number, for
   3051   1.9  christos 	 example.  But a seemingly negative number may be the start of
   3052   1.9  christos 	 an option instead.  */
   3053   1.9  christos     }
   3054   1.9  christos 
   3055   1.9  christos   const char *cmd = levels.cur_tok ();
   3056   1.9  christos 
   3057   1.9  christos   if (cmd == text)
   3058   1.9  christos     {
   3059   1.9  christos       /* No level list yet.  */
   3060   1.9  christos       return;
   3061   1.9  christos     }
   3062  1.11  christos 
   3063   1.9  christos   /* Check if we're past a valid LEVEL already.  */
   3064   1.9  christos   if (levels.finished ()
   3065   1.9  christos       && cmd > text && !isspace ((unsigned char)cmd[-1]))
   3066   1.9  christos     return;
   3067   1.9  christos 
   3068   1.9  christos   /* We're past LEVELs, advance word point.  */
   3069   1.9  christos   tracker.advance_custom_word_point_by (cmd - text);
   3070   1.9  christos   text = cmd;
   3071   1.9  christos 
   3072   1.9  christos   frame_apply_completer (tracker, text);
   3073   1.9  christos }
   3074   1.9  christos 
   3075   1.9  christos /* Completer for the "frame apply all" command.  */
   3076   1.9  christos 
   3077   1.9  christos void
   3078   1.9  christos frame_apply_all_cmd_completer (struct cmd_list_element *ignore,
   3079   1.9  christos 			       completion_tracker &tracker,
   3080   1.9  christos 			       const char *text, const char */*word*/)
   3081   1.9  christos {
   3082   1.9  christos   frame_apply_completer (tracker, text);
   3083   1.9  christos }
   3084   1.9  christos 
   3085   1.9  christos /* Completer for the "frame apply COUNT" command.  */
   3086   1.9  christos 
   3087   1.9  christos static void
   3088   1.9  christos frame_apply_cmd_completer (struct cmd_list_element *ignore,
   3089   1.9  christos 			   completion_tracker &tracker,
   3090   1.9  christos 			   const char *text, const char */*word*/)
   3091   1.9  christos {
   3092   1.9  christos   const char *cmd = text;
   3093   1.9  christos 
   3094   1.9  christos   int count = get_number_trailer (&cmd, 0);
   3095   1.9  christos   if (count == 0)
   3096  1.11  christos     return;
   3097   1.9  christos 
   3098   1.9  christos   /* Check if we're past a valid COUNT already.  */
   3099   1.9  christos   if (cmd > text && !isspace ((unsigned char)cmd[-1]))
   3100   1.9  christos     return;
   3101   1.9  christos 
   3102   1.9  christos   /* We're past COUNT, advance word point.  */
   3103   1.9  christos   tracker.advance_custom_word_point_by (cmd - text);
   3104   1.9  christos   text = cmd;
   3105   1.9  christos 
   3106   1.8  christos   frame_apply_completer (tracker, text);
   3107   1.8  christos }
   3108   1.8  christos 
   3109   1.8  christos /* Implementation of the "frame apply level" command.  */
   3110   1.8  christos 
   3111  1.10  christos static void
   3112   1.8  christos frame_apply_level_command (const char *cmd, int from_tty)
   3113   1.8  christos {
   3114   1.8  christos   if (!target_has_stack ())
   3115   1.8  christos     error (_("No stack."));
   3116   1.8  christos 
   3117   1.8  christos   bool level_found = false;
   3118   1.8  christos   const char *levels_str = cmd;
   3119   1.8  christos   number_or_range_parser levels (levels_str);
   3120   1.8  christos 
   3121   1.8  christos   /* Skip the LEVEL list to find the flags and command args.  */
   3122   1.8  christos   while (!levels.finished ())
   3123   1.8  christos     {
   3124   1.8  christos       /* Call for effect.  */
   3125   1.8  christos       levels.get_number ();
   3126   1.8  christos 
   3127   1.8  christos       level_found = true;
   3128   1.8  christos       if (levels.in_range ())
   3129   1.8  christos 	levels.skip_range ();
   3130   1.8  christos     }
   3131   1.8  christos 
   3132   1.8  christos   if (!level_found)
   3133   1.8  christos     error (_("Missing or invalid LEVEL... argument"));
   3134   1.8  christos 
   3135   1.8  christos   cmd = levels.cur_tok ();
   3136   1.8  christos 
   3137   1.8  christos   /* Redo the LEVELS parsing, but applying COMMAND.  */
   3138   1.8  christos   levels.init (levels_str);
   3139   1.8  christos   while (!levels.finished ())
   3140   1.8  christos     {
   3141   1.8  christos       const int level_beg = levels.get_number ();
   3142   1.8  christos       int n_frames;
   3143   1.8  christos 
   3144   1.8  christos       if (levels.in_range ())
   3145   1.8  christos 	{
   3146   1.8  christos 	  n_frames = levels.end_value () - level_beg + 1;
   3147   1.8  christos 	  levels.skip_range ();
   3148   1.8  christos 	}
   3149   1.8  christos       else
   3150   1.8  christos 	n_frames = 1;
   3151   1.8  christos 
   3152   1.8  christos       frame_apply_command_count ("frame apply level", cmd, from_tty,
   3153   1.8  christos 				 leading_innermost_frame (level_beg), n_frames);
   3154   1.8  christos     }
   3155   1.8  christos }
   3156   1.8  christos 
   3157   1.8  christos /* Implementation of the "frame apply all" command.  */
   3158   1.8  christos 
   3159  1.10  christos static void
   3160   1.8  christos frame_apply_all_command (const char *cmd, int from_tty)
   3161   1.8  christos {
   3162   1.8  christos   if (!target_has_stack ())
   3163   1.8  christos     error (_("No stack."));
   3164   1.8  christos 
   3165   1.8  christos   frame_apply_command_count ("frame apply all", cmd, from_tty,
   3166   1.8  christos 			     get_current_frame (), INT_MAX);
   3167   1.8  christos }
   3168   1.8  christos 
   3169   1.8  christos /* Implementation of the "frame apply" command.  */
   3170   1.8  christos 
   3171   1.8  christos static void
   3172  1.10  christos frame_apply_command (const char* cmd, int from_tty)
   3173   1.8  christos {
   3174  1.10  christos   int count;
   3175   1.8  christos   frame_info_ptr trailing;
   3176   1.8  christos 
   3177   1.8  christos   if (!target_has_stack ())
   3178   1.8  christos     error (_("No stack."));
   3179   1.8  christos 
   3180   1.8  christos   if (cmd == NULL)
   3181   1.8  christos     error (_("Missing COUNT argument."));
   3182   1.8  christos   count = get_number_trailer (&cmd, 0);
   3183   1.8  christos   if (count == 0)
   3184   1.8  christos     error (_("Invalid COUNT argument."));
   3185   1.8  christos 
   3186   1.8  christos   if (count < 0)
   3187   1.8  christos     {
   3188   1.8  christos       trailing = trailing_outermost_frame (-count);
   3189   1.8  christos       count = -1;
   3190   1.8  christos     }
   3191   1.8  christos   else
   3192   1.8  christos     trailing = get_current_frame ();
   3193   1.8  christos 
   3194   1.8  christos   frame_apply_command_count ("frame apply", cmd, from_tty,
   3195   1.8  christos 			     trailing, count);
   3196   1.8  christos }
   3197   1.8  christos 
   3198   1.8  christos /* Implementation of the "faas" command.  */
   3199   1.8  christos 
   3200   1.9  christos static void
   3201   1.9  christos faas_command (const char *cmd, int from_tty)
   3202   1.8  christos {
   3203   1.8  christos   if (cmd == NULL || *cmd == '\0')
   3204   1.8  christos     error (_("Please specify a command to apply on all frames"));
   3205   1.8  christos   std::string expanded = std::string ("frame apply all -s ") + cmd;
   3206   1.8  christos   execute_command (expanded.c_str (), from_tty);
   3207   1.8  christos }
   3208   1.8  christos 
   3209   1.8  christos 
   3210  1.10  christos /* Find inner-mode frame with frame address ADDRESS.  Return NULL if no
   3211   1.8  christos    matching frame can be found.  */
   3212   1.8  christos 
   3213   1.8  christos static frame_info_ptr
   3214  1.10  christos find_frame_for_address (CORE_ADDR address)
   3215   1.8  christos {
   3216   1.8  christos   struct frame_id id;
   3217   1.8  christos   frame_info_ptr fid;
   3218   1.8  christos 
   3219   1.8  christos   id = frame_id_build_wild (address);
   3220   1.8  christos 
   3221   1.8  christos   /* If (s)he specifies the frame with an address, he deserves
   3222   1.8  christos      what (s)he gets.  Still, give the highest one that matches.
   3223   1.8  christos      (NOTE: cagney/2004-10-29: Why highest, or outer-most, I don't
   3224   1.8  christos      know).  */
   3225   1.8  christos   for (fid = get_current_frame ();
   3226  1.10  christos        fid != NULL;
   3227   1.8  christos        fid = get_prev_frame (fid))
   3228  1.10  christos     {
   3229   1.8  christos       if (id == get_frame_id (fid))
   3230   1.8  christos 	{
   3231   1.8  christos 	  frame_info_ptr prev_frame;
   3232   1.8  christos 
   3233   1.8  christos 	  while (1)
   3234  1.10  christos 	    {
   3235   1.8  christos 	      prev_frame = get_prev_frame (fid);
   3236   1.8  christos 	      if (!prev_frame
   3237   1.8  christos 		  || id != get_frame_id (prev_frame))
   3238   1.8  christos 		break;
   3239   1.8  christos 	      fid = prev_frame;
   3240   1.8  christos 	    }
   3241   1.8  christos 	  return fid;
   3242   1.1  christos 	}
   3243   1.8  christos     }
   3244   1.1  christos   return NULL;
   3245   1.1  christos }
   3246   1.8  christos 
   3247   1.8  christos 
   3248   1.8  christos 
   3250   1.8  christos /* Commands with a prefix of `frame apply'.  */
   3251   1.8  christos static struct cmd_list_element *frame_apply_cmd_list = NULL;
   3252   1.8  christos 
   3253   1.8  christos /* Commands with a prefix of `frame'.  */
   3254   1.8  christos static struct cmd_list_element *frame_cmd_list = NULL;
   3255   1.8  christos 
   3256   1.8  christos /* Commands with a prefix of `select frame'.  */
   3257   1.1  christos static struct cmd_list_element *select_frame_cmd_list = NULL;
   3258   1.9  christos 
   3259   1.1  christos /* Commands with a prefix of `info frame'.  */
   3260   1.9  christos static struct cmd_list_element *info_frame_cmd_list = NULL;
   3261   1.1  christos 
   3262   1.8  christos void _initialize_stack ();
   3263   1.8  christos void
   3264   1.1  christos _initialize_stack ()
   3265   1.1  christos {
   3266   1.1  christos   struct cmd_list_element *cmd;
   3267   1.1  christos 
   3268   1.1  christos   add_com ("return", class_stack, return_command, _("\
   3269   1.1  christos Make selected stack frame return to its caller.\n\
   3270   1.1  christos Control remains in the debugger, but when you continue\n\
   3271   1.1  christos execution will resume in the frame above the one now selected.\n\
   3272   1.1  christos If an argument is given, it is an expression for the value to return."));
   3273   1.1  christos 
   3274   1.1  christos   add_com ("up", class_stack, up_command, _("\
   3275   1.1  christos Select and print stack frame that called this one.\n\
   3276   1.1  christos An argument says how many frames up to go."));
   3277  1.10  christos   add_com ("up-silently", class_support, up_silently_command, _("\
   3278  1.10  christos Same as the `up' command, but does not print anything.\n\
   3279   1.1  christos This is useful in command scripts."));
   3280   1.1  christos 
   3281  1.10  christos   cmd_list_element *down_cmd
   3282  1.10  christos     = add_com ("down", class_stack, down_command, _("\
   3283   1.1  christos Select and print stack frame called by this one.\n\
   3284   1.1  christos An argument says how many frames down to go."));
   3285   1.1  christos   add_com_alias ("do", down_cmd, class_stack, 1);
   3286   1.1  christos   add_com_alias ("dow", down_cmd, class_stack, 1);
   3287  1.10  christos   add_com ("down-silently", class_support, down_silently_command, _("\
   3288  1.10  christos Same as the `down' command, but does not print anything.\n\
   3289  1.10  christos This is useful in command scripts."));
   3290   1.8  christos 
   3291   1.8  christos   cmd_list_element *frame_cmd_el
   3292   1.8  christos     = add_prefix_cmd ("frame", class_stack,
   3293  1.10  christos 		      &frame_cmd.base_command, _("\
   3294  1.10  christos Select and print a stack frame.\n\
   3295   1.1  christos With no argument, print the selected stack frame.  (See also \"info frame\").\n\
   3296   1.9  christos A single numerical argument specifies the frame to select."),
   3297   1.8  christos 		      &frame_cmd_list, 1, &cmdlist);
   3298   1.9  christos   add_com_alias ("f", frame_cmd_el, class_stack, 1);
   3299   1.9  christos 
   3300   1.9  christos #define FRAME_APPLY_OPTION_HELP "\
   3301   1.9  christos Prints the frame location information followed by COMMAND output.\n\
   3302   1.9  christos \n\
   3303   1.9  christos By default, an error raised during the execution of COMMAND\n\
   3304   1.9  christos aborts \"frame apply\".\n\
   3305   1.9  christos \n\
   3306   1.9  christos Options:\n\
   3307   1.9  christos %OPTIONS%"
   3308   1.9  christos 
   3309   1.9  christos   const auto frame_apply_opts
   3310   1.9  christos     = make_frame_apply_options_def_group (nullptr, nullptr);
   3311   1.8  christos 
   3312   1.9  christos   static std::string frame_apply_cmd_help = gdb::option::build_help (_("\
   3313   1.9  christos Apply a command to a number of frames.\n\
   3314   1.9  christos Usage: frame apply COUNT [OPTION]... COMMAND\n\
   3315   1.9  christos With a negative COUNT argument, applies the command on outermost -COUNT frames.\n"
   3316   1.9  christos 				  FRAME_APPLY_OPTION_HELP),
   3317  1.10  christos 			       frame_apply_opts);
   3318   1.9  christos 
   3319   1.9  christos   cmd = add_prefix_cmd ("apply", class_stack, frame_apply_command,
   3320   1.8  christos 			frame_apply_cmd_help.c_str (),
   3321   1.9  christos 			&frame_apply_cmd_list, 1,
   3322   1.8  christos 			&frame_cmd_list);
   3323   1.8  christos   set_cmd_completer_handle_brkchars (cmd, frame_apply_cmd_completer);
   3324   1.9  christos 
   3325   1.9  christos   static std::string frame_apply_all_cmd_help = gdb::option::build_help (_("\
   3326   1.9  christos Apply a command to all frames.\n\
   3327   1.9  christos \n\
   3328   1.9  christos Usage: frame apply all [OPTION]... COMMAND\n"
   3329   1.9  christos 				  FRAME_APPLY_OPTION_HELP),
   3330   1.9  christos 			       frame_apply_opts);
   3331   1.9  christos 
   3332   1.8  christos   cmd = add_cmd ("all", class_stack, frame_apply_all_command,
   3333   1.9  christos 		 frame_apply_all_cmd_help.c_str (),
   3334   1.8  christos 		 &frame_apply_cmd_list);
   3335   1.8  christos   set_cmd_completer_handle_brkchars (cmd, frame_apply_all_cmd_completer);
   3336   1.9  christos 
   3337   1.9  christos   static std::string frame_apply_level_cmd_help = gdb::option::build_help (_("\
   3338   1.9  christos Apply a command to a list of frames.\n\
   3339   1.9  christos \n\
   3340   1.9  christos Usage: frame apply level LEVEL... [OPTION]... COMMAND\n\
   3341   1.9  christos LEVEL is a space-separated list of levels of frames to apply COMMAND on.\n"
   3342   1.9  christos 				  FRAME_APPLY_OPTION_HELP),
   3343   1.8  christos 			       frame_apply_opts);
   3344   1.9  christos 
   3345   1.8  christos   cmd = add_cmd ("level", class_stack, frame_apply_level_command,
   3346   1.9  christos 	   frame_apply_level_cmd_help.c_str (),
   3347   1.8  christos 	   &frame_apply_cmd_list);
   3348   1.9  christos   set_cmd_completer_handle_brkchars (cmd, frame_apply_level_cmd_completer);
   3349   1.9  christos 
   3350   1.9  christos   cmd = add_com ("faas", class_stack, faas_command, _("\
   3351   1.9  christos Apply a command to all frames (ignoring errors and empty output).\n\
   3352   1.8  christos Usage: faas [OPTION]... COMMAND\n\
   3353   1.8  christos shortcut for 'frame apply all -s [OPTION]... COMMAND'\n\
   3354   1.8  christos See \"help frame apply all\" for available options."));
   3355   1.9  christos   set_cmd_completer_handle_brkchars (cmd, frame_apply_all_cmd_completer);
   3356   1.8  christos 
   3357   1.8  christos   add_cmd ("address", class_stack, &frame_cmd.address,
   3358   1.8  christos 	   _("\
   3359   1.8  christos Select and print a stack frame by stack address.\n\
   3360   1.8  christos \n\
   3361   1.8  christos Usage: frame address STACK-ADDRESS"),
   3362   1.8  christos 	   &frame_cmd_list);
   3363   1.8  christos 
   3364   1.8  christos   add_cmd ("view", class_stack, &frame_cmd.view,
   3365   1.8  christos 	   _("\
   3366   1.8  christos View a stack frame that might be outside the current backtrace.\n\
   3367   1.8  christos \n\
   3368   1.8  christos Usage: frame view STACK-ADDRESS\n\
   3369   1.8  christos        frame view STACK-ADDRESS PC-ADDRESS"),
   3370   1.8  christos 	   &frame_cmd_list);
   3371   1.8  christos 
   3372   1.8  christos   cmd = add_cmd ("function", class_stack, &frame_cmd.function,
   3373   1.8  christos 	   _("\
   3374   1.8  christos Select and print a stack frame by function name.\n\
   3375   1.8  christos \n\
   3376   1.8  christos Usage: frame function NAME\n\
   3377   1.8  christos \n\
   3378   1.8  christos The innermost frame that visited function NAME is selected."),
   3379   1.8  christos 	   &frame_cmd_list);
   3380   1.8  christos   set_cmd_completer (cmd, frame_selection_by_function_completer);
   3381   1.8  christos 
   3382   1.8  christos 
   3383   1.8  christos   add_cmd ("level", class_stack, &frame_cmd.level,
   3384   1.8  christos 	   _("\
   3385   1.8  christos Select and print a stack frame by level.\n\
   3386   1.8  christos \n\
   3387   1.8  christos Usage: frame level LEVEL"),
   3388   1.1  christos 	   &frame_cmd_list);
   3389   1.8  christos 
   3390  1.10  christos   cmd = add_prefix_cmd_suppress_notification ("select-frame", class_stack,
   3391   1.8  christos 		      &select_frame_cmd.base_command, _("\
   3392   1.8  christos Select a stack frame without printing anything.\n\
   3393   1.8  christos A single numerical argument specifies the frame to select."),
   3394   1.8  christos 		      &select_frame_cmd_list, 1, &cmdlist,
   3395   1.8  christos 		      &cli_suppress_notification.user_selected_context);
   3396   1.8  christos 
   3397   1.8  christos   add_cmd_suppress_notification ("address", class_stack,
   3398   1.8  christos 			 &select_frame_cmd.address, _("\
   3399   1.8  christos Select a stack frame by stack address.\n\
   3400   1.8  christos \n\
   3401   1.8  christos Usage: select-frame address STACK-ADDRESS"),
   3402   1.8  christos 			 &select_frame_cmd_list,
   3403   1.8  christos 			 &cli_suppress_notification.user_selected_context);
   3404   1.8  christos 
   3405   1.8  christos 
   3406   1.8  christos   add_cmd_suppress_notification ("view", class_stack,
   3407   1.8  christos 		 &select_frame_cmd.view, _("\
   3408   1.8  christos Select a stack frame that might be outside the current backtrace.\n\
   3409   1.6  christos \n\
   3410   1.1  christos Usage: select-frame view STACK-ADDRESS\n\
   3411   1.8  christos        select-frame view STACK-ADDRESS PC-ADDRESS"),
   3412   1.8  christos 		 &select_frame_cmd_list,
   3413   1.8  christos 		 &cli_suppress_notification.user_selected_context);
   3414   1.8  christos 
   3415   1.8  christos   cmd = add_cmd_suppress_notification ("function", class_stack,
   3416   1.8  christos 	       &select_frame_cmd.function, _("\
   3417   1.8  christos Select a stack frame by function name.\n\
   3418   1.8  christos \n\
   3419   1.8  christos Usage: select-frame function NAME"),
   3420   1.8  christos 	       &select_frame_cmd_list,
   3421   1.8  christos 	       &cli_suppress_notification.user_selected_context);
   3422   1.8  christos   set_cmd_completer (cmd, frame_selection_by_function_completer);
   3423   1.8  christos 
   3424   1.8  christos   add_cmd_suppress_notification ("level", class_stack,
   3425   1.8  christos 			 &select_frame_cmd.level, _("\
   3426   1.8  christos Select a stack frame by level.\n\
   3427   1.8  christos \n\
   3428   1.9  christos Usage: select-frame level LEVEL"),
   3429   1.9  christos 			 &select_frame_cmd_list,
   3430   1.9  christos 			 &cli_suppress_notification.user_selected_context);
   3431   1.9  christos 
   3432   1.9  christos   const auto backtrace_opts
   3433   1.1  christos     = make_backtrace_options_def_group (nullptr, nullptr, nullptr);
   3434   1.9  christos 
   3435   1.9  christos   static std::string backtrace_help
   3436   1.9  christos     = gdb::option::build_help (_("\
   3437   1.9  christos Print backtrace of all stack frames, or innermost COUNT frames.\n\
   3438   1.9  christos Usage: backtrace [OPTION]... [QUALIFIER]... [COUNT | -COUNT]\n\
   3439   1.9  christos \n\
   3440   1.9  christos Options:\n\
   3441   1.9  christos %OPTIONS%\n\
   3442   1.9  christos \n\
   3443   1.9  christos For backward compatibility, the following qualifiers are supported:\n\
   3444   1.9  christos \n\
   3445   1.9  christos    full       - same as -full option.\n\
   3446   1.9  christos    no-filters - same as -no-filters option.\n\
   3447   1.9  christos    hide       - same as -hide.\n\
   3448  1.10  christos \n\
   3449  1.10  christos With a negative COUNT, print outermost -COUNT frames."),
   3450  1.10  christos 			       backtrace_opts);
   3451  1.10  christos 
   3452  1.10  christos   cmd_list_element *backtrace_cmd
   3453  1.10  christos     = add_com ("backtrace", class_stack, backtrace_command,
   3454  1.10  christos 	       backtrace_help.c_str ());
   3455  1.10  christos   set_cmd_completer_handle_brkchars (backtrace_cmd, backtrace_command_completer);
   3456  1.10  christos 
   3457  1.10  christos   add_com_alias ("bt", backtrace_cmd, class_stack, 0);
   3458  1.10  christos 
   3459  1.10  christos   add_com_alias ("where", backtrace_cmd, class_stack, 0);
   3460  1.10  christos   cmd_list_element *info_stack_cmd
   3461  1.10  christos     = add_info ("stack", backtrace_command,
   3462  1.10  christos 		_("Backtrace of the stack, or innermost COUNT frames."));
   3463  1.10  christos   add_info_alias ("s", info_stack_cmd, 1);
   3464   1.8  christos 
   3465   1.8  christos   cmd_list_element *info_frame_cmd_el
   3466   1.8  christos     = add_prefix_cmd ("frame", class_info, &info_frame_cmd.base_command,
   3467  1.10  christos 		      _("All about the selected stack frame.\n\
   3468  1.10  christos With no arguments, displays information about the currently selected stack\n\
   3469   1.8  christos frame.  Alternatively a frame specification may be provided (See \"frame\")\n\
   3470   1.8  christos the information is then printed about the specified frame."),
   3471   1.8  christos 		      &info_frame_cmd_list, 1, &infolist);
   3472   1.8  christos   add_info_alias ("f", info_frame_cmd_el, 1);
   3473   1.8  christos 
   3474   1.8  christos   add_cmd ("address", class_stack, &info_frame_cmd.address,
   3475   1.8  christos 	   _("\
   3476   1.8  christos Print information about a stack frame selected by stack address.\n\
   3477   1.8  christos \n\
   3478   1.8  christos Usage: info frame address STACK-ADDRESS"),
   3479   1.8  christos 	   &info_frame_cmd_list);
   3480   1.8  christos 
   3481   1.8  christos   add_cmd ("view", class_stack, &info_frame_cmd.view,
   3482   1.8  christos 	   _("\
   3483   1.8  christos Print information about a stack frame outside the current backtrace.\n\
   3484   1.8  christos \n\
   3485   1.8  christos Usage: info frame view STACK-ADDRESS\n\
   3486   1.8  christos        info frame view STACK-ADDRESS PC-ADDRESS"),
   3487   1.8  christos 	   &info_frame_cmd_list);
   3488   1.8  christos 
   3489   1.8  christos   cmd = add_cmd ("function", class_stack, &info_frame_cmd.function,
   3490   1.8  christos 	   _("\
   3491   1.8  christos Print information about a stack frame selected by function name.\n\
   3492   1.8  christos \n\
   3493   1.8  christos Usage: info frame function NAME"),
   3494   1.8  christos 	   &info_frame_cmd_list);
   3495   1.8  christos   set_cmd_completer (cmd, frame_selection_by_function_completer);
   3496   1.8  christos 
   3497   1.8  christos   add_cmd ("level", class_stack, &info_frame_cmd.level,
   3498   1.8  christos 	   _("\
   3499   1.8  christos Print information about a stack frame selected by level.\n\
   3500   1.9  christos \n\
   3501   1.9  christos Usage: info frame level LEVEL"),
   3502   1.8  christos 	   &info_frame_cmd_list);
   3503   1.8  christos 
   3504   1.8  christos   cmd = add_info ("locals", info_locals_command,
   3505   1.9  christos 		  info_print_args_help (_("\
   3506   1.9  christos All local variables of current stack frame or those matching REGEXPs.\n\
   3507   1.9  christos Usage: info locals [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
   3508   1.9  christos Prints the local variables of the current stack frame.\n"),
   3509   1.9  christos 					_("local variables"),
   3510   1.8  christos 					false));
   3511   1.8  christos   set_cmd_completer_handle_brkchars (cmd, info_print_command_completer);
   3512   1.8  christos   cmd = add_info ("args", info_args_command,
   3513   1.9  christos 		  info_print_args_help (_("\
   3514   1.9  christos All argument variables of current stack frame or those matching REGEXPs.\n\
   3515   1.9  christos Usage: info args [-q] [-t TYPEREGEXP] [NAMEREGEXP]\n\
   3516   1.1  christos Prints the argument variables of the current stack frame.\n"),
   3517   1.9  christos 					_("argument variables"),
   3518   1.9  christos 					false));
   3519  1.10  christos   set_cmd_completer_handle_brkchars (cmd, info_print_command_completer);
   3520  1.10  christos 
   3521  1.10  christos   /* Install "set print raw frame-arguments", a deprecated spelling of
   3522  1.10  christos      "set print raw-frame-arguments".  */
   3523  1.10  christos   set_show_commands set_show_frame_args
   3524   1.1  christos     = add_setshow_boolean_cmd
   3525   1.1  christos       ("frame-arguments", no_class,
   3526   1.1  christos        &user_frame_print_options.print_raw_frame_arguments,
   3527   1.1  christos        _("\
   3528  1.10  christos Set whether to print frame arguments in raw form."), _("\
   3529  1.10  christos Show whether to print frame arguments in raw form."), _("\
   3530  1.10  christos If set, frame arguments are printed in raw form, bypassing any\n\
   3531   1.1  christos pretty-printers for that value."),
   3532   1.1  christos        NULL, NULL,
   3533  1.10  christos        &setprintrawlist, &showprintrawlist);
   3534   1.1  christos   deprecate_cmd (set_show_frame_args.set, "set print raw-frame-arguments");
   3535   1.1  christos 
   3536   1.1  christos   add_setshow_auto_boolean_cmd ("disassemble-next-line", class_stack,
   3537   1.1  christos 				&disassemble_next_line, _("\
   3538   1.1  christos Set whether to disassemble next source line or insn when execution stops."),
   3539   1.1  christos 				_("\
   3540   1.1  christos Show whether to disassemble next source line or insn when execution stops."),
   3541   1.1  christos 				_("\
   3542   1.1  christos If ON, GDB will display disassembly of the next source line, in addition\n\
   3543   1.1  christos to displaying the source line itself.  If the next source line cannot\n\
   3544   1.1  christos be displayed (e.g., source is unavailable or there's no line info), GDB\n\
   3545   1.1  christos will display disassembly of next instruction instead of showing the\n\
   3546   1.1  christos source line.\n\
   3547  1.10  christos If AUTO, display disassembly of next instruction only if the source line\n\
   3548  1.10  christos cannot be displayed.\n\
   3549  1.10  christos If OFF (which is the default), never display the disassembly of the next\n\
   3550   1.1  christos source line."),
   3551   1.1  christos 				NULL,
   3552   1.9  christos 				show_disassemble_next_line,
   3553   1.9  christos 				&setlist, &showlist);
   3554   1.9  christos   disassemble_next_line = AUTO_BOOLEAN_FALSE;
   3555   1.1  christos 
   3556                   gdb::option::add_setshow_cmds_for_options
   3557                     (class_stack, &user_frame_print_options,
   3558                      frame_print_option_defs, &setprintlist, &showprintlist);
   3559                 }
   3560