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