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