]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/stack.c
sim: bfin: initial bf60x support
[thirdparty/binutils-gdb.git] / gdb / stack.c
index f67a151aeee96f45bdebeae6f9e96c1def4d58c9..fad4b62c6f729f60ffc1f87238a249bff731ffc5 100644 (file)
@@ -1,6 +1,6 @@
 /* Print and select stack frames for GDB, the GNU debugger.
 
-   Copyright (C) 1986-2020 Free Software Foundation, Inc.
+   Copyright (C) 1986-2023 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -55,6 +55,7 @@
 #include "gdbsupport/def-vector.h"
 #include "cli/cli-option.h"
 #include "cli/cli-style.h"
+#include "gdbsupport/buildargv.h"
 
 /* The possible choices of "set print frame-arguments", and the value
    of this setting.  */
@@ -96,7 +97,7 @@ static const char *const print_frame_info_choices[] =
 
 /* print_frame_info_print_what[i] maps a choice to the corresponding
    print_what enum.  */
-static const gdb::optional<enum print_what> print_frame_info_print_what[] =
+static const std::optional<enum print_what> print_frame_info_print_what[] =
   {{}, /* Empty value for "auto".  */
    SRC_LINE, LOCATION, SRC_AND_LOC, LOC_AND_ADDRESS, SHORT_LOCATION};
 
@@ -214,18 +215,18 @@ static const gdb::option::option_def backtrace_command_option_defs[] = {
 
 /* Prototypes for local functions.  */
 
-static void print_frame_local_vars (struct frame_info *frame,
+static void print_frame_local_vars (frame_info_ptr frame,
                                    bool quiet,
                                    const char *regexp, const char *t_regexp,
                                    int num_tabs, struct ui_file *stream);
 
 static void print_frame (const frame_print_options &opts,
-                        frame_info *frame, int print_level,
+                        frame_info_ptr frame, int print_level,
                         enum print_what print_what,  int print_args,
                         struct symtab_and_line sal);
 
-static struct frame_info *find_frame_for_function (const char *);
-static struct frame_info *find_frame_for_address (CORE_ADDR);
+static frame_info_ptr find_frame_for_function (const char *);
+static frame_info_ptr find_frame_for_address (CORE_ADDR);
 
 /* Zero means do things normally; we are interacting directly with the
    user.  One means print the full filename and linenumber when a
@@ -313,7 +314,7 @@ static last_displayed_symtab_info_type last_displayed_symtab_info;
 /* See stack.h.  */
 
 bool
-frame_show_address (struct frame_info *frame,
+frame_show_address (frame_info_ptr frame,
                    struct symtab_and_line sal)
 {
   /* If there is a line number, but no PC, then there is no location
@@ -336,7 +337,7 @@ frame_show_address (struct frame_info *frame,
 /* See frame.h.  */
 
 void
-print_stack_frame_to_uiout (struct ui_out *uiout, struct frame_info *frame,
+print_stack_frame_to_uiout (struct ui_out *uiout, frame_info_ptr frame,
                            int print_level, enum print_what print_what,
                            int set_current_sal)
 {
@@ -352,7 +353,7 @@ print_stack_frame_to_uiout (struct ui_out *uiout, struct frame_info *frame,
    source line, the actual PC is printed at the beginning.  */
 
 void
-print_stack_frame (struct frame_info *frame, int print_level,
+print_stack_frame (frame_info_ptr frame, int print_level,
                   enum print_what print_what,
                   int set_current_sal)
 {
@@ -380,7 +381,7 @@ print_stack_frame (struct frame_info *frame, int print_level,
    argument (not just the first nameless argument).  */
 
 static void
-print_frame_nameless_args (struct frame_info *frame, long start, int num,
+print_frame_nameless_args (frame_info_ptr frame, long start, int num,
                           int first, struct ui_file *stream)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
@@ -398,8 +399,8 @@ print_frame_nameless_args (struct frame_info *frame, long start, int num,
       arg_value = read_memory_integer (argsaddr + start,
                                       sizeof (int), byte_order);
       if (!first)
-       fprintf_filtered (stream, ", ");
-      fprintf_filtered (stream, "%ld", arg_value);
+       gdb_printf (stream, ", ");
+      gdb_printf (stream, "%ld", arg_value);
       first = 0;
       start += sizeof (int);
     }
@@ -427,17 +428,14 @@ print_frame_arg (const frame_print_options &fp_opts,
 
   annotate_arg_emitter arg_emitter;
   ui_out_emit_tuple tuple_emitter (uiout, NULL);
-  fprintf_symbol_filtered (&stb, arg->sym->print_name (),
-                          arg->sym->language (), DMGL_PARAMS | DMGL_ANSI);
+  gdb_puts (arg->sym->print_name (), &stb);
   if (arg->entry_kind == print_entry_values_compact)
     {
       /* It is OK to provide invalid MI-like stream as with
         PRINT_ENTRY_VALUE_COMPACT we never use MI.  */
       stb.puts ("=");
 
-      fprintf_symbol_filtered (&stb, arg->sym->print_name (),
-                              arg->sym->language (),
-                              DMGL_PARAMS | DMGL_ANSI);
+      gdb_puts (arg->sym->print_name (), &stb);
     }
   if (arg->entry_kind == print_entry_values_only
       || arg->entry_kind == print_entry_values_compact)
@@ -469,7 +467,7 @@ print_frame_arg (const frame_print_options &fp_opts,
                 because our standard indentation here is 4 spaces, and
                 val_print indents 2 for each recurse.  */ 
 
-             annotate_arg_value (value_type (arg->val));
+             annotate_arg_value (arg->val->type ());
 
              /* Use the appropriate language to display our symbol, unless the
                 user forced the language to a specific language.  */
@@ -479,7 +477,7 @@ print_frame_arg (const frame_print_options &fp_opts,
                language = current_language;
 
              get_no_prettyformat_print_options (&vp_opts);
-             vp_opts.deref_ref = 1;
+             vp_opts.deref_ref = true;
              vp_opts.raw = fp_opts.print_raw_frame_arguments;
 
              /* True in "summary" mode, false otherwise.  */
@@ -505,7 +503,7 @@ print_frame_arg (const frame_print_options &fp_opts,
    exception.  */
 
 void
-read_frame_local (struct symbol *sym, struct frame_info *frame,
+read_frame_local (struct symbol *sym, frame_info_ptr frame,
                  struct frame_arg *argp)
 {
   argp->sym = sym;
@@ -527,8 +525,8 @@ read_frame_local (struct symbol *sym, struct frame_info *frame,
 
 void
 read_frame_arg (const frame_print_options &fp_opts,
-               symbol *sym, frame_info *frame,
-               struct frame_arg *argp, struct frame_arg *entryargp)
+               symbol *sym, frame_info_ptr frame,
+               struct frame_arg *argp, struct frame_arg *entryargp)
 {
   struct value *val = NULL, *entryval = NULL;
   char *val_error = NULL, *entryval_error = NULL;
@@ -552,7 +550,7 @@ read_frame_arg (const frame_print_options &fp_opts,
       && SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry != NULL
       && fp_opts.print_entry_values != print_entry_values_no
       && (fp_opts.print_entry_values != print_entry_values_if_needed
-         || !val || value_optimized_out (val)))
+         || !val || val->optimized_out ()))
     {
       try
        {
@@ -570,7 +568,7 @@ read_frame_arg (const frame_print_options &fp_opts,
            }
        }
 
-      if (entryval != NULL && value_optimized_out (entryval))
+      if (entryval != NULL && entryval->optimized_out ())
        entryval = NULL;
 
       if (fp_opts.print_entry_values == print_entry_values_compact
@@ -580,14 +578,14 @@ read_frame_arg (const frame_print_options &fp_opts,
 
          if (val && entryval && !current_uiout->is_mi_like_p ())
            {
-             struct type *type = value_type (val);
+             struct type *type = val->type ();
 
-             if (value_lazy (val))
-               value_fetch_lazy (val);
-             if (value_lazy (entryval))
-               value_fetch_lazy (entryval);
+             if (val->lazy ())
+               val->fetch_lazy ();
+             if (entryval->lazy ())
+               entryval->fetch_lazy ();
 
-             if (value_contents_eq (val, 0, entryval, 0, TYPE_LENGTH (type)))
+             if (val->contents_eq (0, entryval, 0, type->length ()))
                {
                  /* Initialize it just to avoid a GCC false warning.  */
                  struct value *val_deref = NULL, *entryval_deref;
@@ -601,20 +599,20 @@ read_frame_arg (const frame_print_options &fp_opts,
                      struct type *type_deref;
 
                      val_deref = coerce_ref (val);
-                     if (value_lazy (val_deref))
-                       value_fetch_lazy (val_deref);
-                     type_deref = value_type (val_deref);
+                     if (val_deref->lazy ())
+                       val_deref->fetch_lazy ();
+                     type_deref = val_deref->type ();
 
                      entryval_deref = coerce_ref (entryval);
-                     if (value_lazy (entryval_deref))
-                       value_fetch_lazy (entryval_deref);
+                     if (entryval_deref->lazy ())
+                       entryval_deref->fetch_lazy ();
 
                      /* If the reference addresses match but dereferenced
                         content does not match print them.  */
                      if (val != val_deref
-                         && value_contents_eq (val_deref, 0,
-                                               entryval_deref, 0,
-                                               TYPE_LENGTH (type_deref)))
+                         && val_deref->contents_eq (0,
+                                                    entryval_deref, 0,
+                                                    type_deref->length ()))
                        val_equal = 1;
                    }
                  catch (const gdb_exception_error &except)
@@ -674,16 +672,16 @@ read_frame_arg (const frame_print_options &fp_opts,
       if (fp_opts.print_entry_values == print_entry_values_only
          || fp_opts.print_entry_values == print_entry_values_both
          || (fp_opts.print_entry_values == print_entry_values_preferred
-             && (!val || value_optimized_out (val))))
+             && (!val || val->optimized_out ())))
        {
-         entryval = allocate_optimized_out_value (SYMBOL_TYPE (sym));
+         entryval = value::allocate_optimized_out (sym->type ());
          entryval_error = NULL;
        }
     }
   if ((fp_opts.print_entry_values == print_entry_values_compact
        || fp_opts.print_entry_values == print_entry_values_if_needed
        || fp_opts.print_entry_values == print_entry_values_preferred)
-      && (!val || value_optimized_out (val)) && entryval != NULL)
+      && (!val || val->optimized_out ()) && entryval != NULL)
     {
       val = NULL;
       val_error = NULL;
@@ -724,7 +722,7 @@ read_frame_arg (const frame_print_options &fp_opts,
 
 static void
 print_frame_args (const frame_print_options &fp_opts,
-                 struct symbol *func, struct frame_info *frame,
+                 struct symbol *func, frame_info_ptr frame,
                  int num, struct ui_file *stream)
 {
   struct ui_out *uiout = current_uiout;
@@ -746,12 +744,10 @@ print_frame_args (const frame_print_options &fp_opts,
 
   if (func)
     {
-      const struct block *b = SYMBOL_BLOCK_VALUE (func);
-      struct block_iterator iter;
-      struct symbol *sym;
+      const struct block *b = func->value_block ();
 
-      ALL_BLOCK_SYMBOLS (b, iter, sym)
-        {
+      for (struct symbol *sym : block_iterator_range (b))
+       {
          struct frame_arg arg, entryarg;
 
          QUIT;
@@ -759,7 +755,7 @@ print_frame_args (const frame_print_options &fp_opts,
          /* Keep track of the highest stack argument offset seen, and
             skip over any kinds of symbols we don't care about.  */
 
-         if (!SYMBOL_IS_ARGUMENT (sym))
+         if (!sym->is_argument ())
            continue;
 
          if (!print_names)
@@ -769,13 +765,13 @@ print_frame_args (const frame_print_options &fp_opts,
              break;
            }
 
-         switch (SYMBOL_CLASS (sym))
+         switch (sym->aclass ())
            {
            case LOC_ARG:
            case LOC_REF_ARG:
              {
-               long current_offset = SYMBOL_VALUE (sym);
-               int arg_size = TYPE_LENGTH (SYMBOL_TYPE (sym));
+               long current_offset = sym->value_longest ();
+               int arg_size = sym->type ()->length ();
 
                /* Compute address of next argument by adding the size of
                   this argument and rounding to an int boundary.  */
@@ -824,8 +820,8 @@ print_frame_args (const frame_print_options &fp_opts,
              nsym = lookup_symbol_search_name (sym->search_name (),
                                                b, VAR_DOMAIN).symbol;
              gdb_assert (nsym != NULL);
-             if (SYMBOL_CLASS (nsym) == LOC_REGISTER
-                 && !SYMBOL_IS_ARGUMENT (nsym))
+             if (nsym->aclass () == LOC_REGISTER
+                 && !nsym->is_argument ())
                {
                  /* There is a LOC_ARG/LOC_REGISTER pair.  This means
                     that it was passed on the stack and loaded into a
@@ -836,22 +832,22 @@ print_frame_args (const frame_print_options &fp_opts,
                     Reasons for using the LOC_ARG:
 
                     (1) Because find_saved_registers may be slow for
-                        remote debugging.
+                        remote debugging.
 
                     (2) Because registers are often re-used and stack
-                        slots rarely (never?) are.  Therefore using
-                        the stack slot is much less likely to print
-                        garbage.
+                        slots rarely (never?) are.  Therefore using
+                        the stack slot is much less likely to print
+                        garbage.
 
                     Reasons why we might want to use the LOC_REGISTER:
 
                     (1) So that the backtrace prints the same value
-                        as "print foo".  I see no compelling reason
-                        why this needs to be the case; having the
-                        backtrace print the value which was passed
-                        in, and "print foo" print the value as
-                        modified within the called function, makes
-                        perfect sense to me.
+                        as "print foo".  I see no compelling reason
+                        why this needs to be the case; having the
+                        backtrace print the value which was passed
+                        in, and "print foo" print the value as
+                        modified within the called function, makes
+                        perfect sense to me.
 
                     Additional note: It might be nice if "info args"
                     displayed both values.
@@ -871,7 +867,7 @@ print_frame_args (const frame_print_options &fp_opts,
          /* Print the current arg.  */
          if (!first)
            uiout->text (", ");
-         uiout->wrap_hint ("    ");
+         uiout->wrap_hint (4);
 
          if (!print_args)
            {
@@ -891,7 +887,7 @@ print_frame_args (const frame_print_options &fp_opts,
              if (arg.entry_kind != print_entry_values_only)
                {
                  uiout->text (", ");
-                 uiout->wrap_hint ("    ");
+                 uiout->wrap_hint (4);
                }
 
              print_frame_arg (fp_opts, &entryarg);
@@ -925,7 +921,7 @@ print_frame_args (const frame_print_options &fp_opts,
    line is in the center of the next 'list'.  */
 
 void
-set_current_sal_from_frame (struct frame_info *frame)
+set_current_sal_from_frame (frame_info_ptr frame)
 {
   symtab_and_line sal = find_frame_sal (frame);
   if (sal.symtab != NULL)
@@ -945,10 +941,10 @@ show_disassemble_next_line (struct ui_file *file, int from_tty,
                                 struct cmd_list_element *c,
                                 const char *value)
 {
-  fprintf_filtered (file,
-                   _("Debugger's willingness to use "
-                     "disassemble-next-line is %s.\n"),
-                    value);
+  gdb_printf (file,
+             _("Debugger's willingness to use "
+               "disassemble-next-line is %s.\n"),
+             value);
 }
 
 /* Use TRY_CATCH to catch the exception from the gdb_disassembly
@@ -977,43 +973,42 @@ do_gdb_disassembly (struct gdbarch *gdbarch,
    Value not present indicates to the caller to use default values
    specific to the command being executed.  */
 
-static gdb::optional<enum print_what>
+static std::optional<enum print_what>
 print_frame_info_to_print_what (const char *print_frame_info)
 {
   for (int i = 0; print_frame_info_choices[i] != NULL; i++)
     if (print_frame_info == print_frame_info_choices[i])
       return print_frame_info_print_what[i];
 
-  internal_error (__FILE__, __LINE__,
-                 "Unexpected print frame-info value `%s'.",
+  internal_error ("Unexpected print frame-info value `%s'.",
                  print_frame_info);
 }
 
 /* Print the PC from FRAME, plus any flags, to UIOUT.  */
 
 static void
-print_pc (struct ui_out *uiout, struct gdbarch *gdbarch, frame_info *frame,
+print_pc (struct ui_out *uiout, struct gdbarch *gdbarch, frame_info_ptr frame,
          CORE_ADDR pc)
 {
   uiout->field_core_addr ("addr", gdbarch, pc);
 
   std::string flags = gdbarch_get_pc_address_flags (gdbarch, frame, pc);
   if (!flags.empty ())
-  {
-    uiout->text (" [");
-    uiout->field_string ("addr_flags", flags);
-    uiout->text ("]");
-  }
+    {
+      uiout->text (" [");
+      uiout->field_string ("addr_flags", flags);
+      uiout->text ("]");
+    }
 }
 
 /* See stack.h.  */
 
 void
-get_user_print_what_frame_info (gdb::optional<enum print_what> *what)
+get_user_print_what_frame_info (std::optional<enum print_what> *what)
 {
   *what
     = print_frame_info_to_print_what
-        (user_frame_print_options.print_frame_info);
+       (user_frame_print_options.print_frame_info);
 }
 
 /* Print information about frame FRAME.  The output is format according
@@ -1027,7 +1022,7 @@ get_user_print_what_frame_info (gdb::optional<enum print_what> *what)
 
 void
 print_frame_info (const frame_print_options &fp_opts,
-                 frame_info *frame, int print_level,
+                 frame_info_ptr frame, int print_level,
                  enum print_what print_what, int print_args,
                  int set_current_sal)
 {
@@ -1053,35 +1048,35 @@ print_frame_info (const frame_print_options &fp_opts,
                            gdbarch, get_frame_pc (frame));
 
       /* Do this regardless of SOURCE because we don't have any source
-         to list for this frame.  */
+        to list for this frame.  */
       if (print_level)
-        {
-          uiout->text ("#");
-          uiout->field_fmt_signed (2, ui_left, "level",
+       {
+         uiout->text ("#");
+         uiout->field_fmt_signed (2, ui_left, "level",
                                   frame_relative_level (frame));
-        }
+       }
       if (uiout->is_mi_like_p ())
-        {
-          annotate_frame_address ();
+       {
+         annotate_frame_address ();
          print_pc (uiout, gdbarch, frame, get_frame_pc (frame));
-          annotate_frame_address_end ();
-        }
+         annotate_frame_address_end ();
+       }
 
       if (get_frame_type (frame) == DUMMY_FRAME)
-        {
-          annotate_function_call ();
-          uiout->field_string ("func", "<function called from gdb>",
+       {
+         annotate_function_call ();
+         uiout->field_string ("func", "<function called from gdb>",
                               metadata_style.style ());
        }
       else if (get_frame_type (frame) == SIGTRAMP_FRAME)
-        {
+       {
          annotate_signal_handler_caller ();
-          uiout->field_string ("func", "<signal handler called>",
+         uiout->field_string ("func", "<signal handler called>",
                               metadata_style.style ());
-        }
+       }
       else if (get_frame_type (frame) == ARCH_FRAME)
-        {
-          uiout->field_string ("func", "<cross-architecture call>",
+       {
+         uiout->field_string ("func", "<cross-architecture call>",
                               metadata_style.style ());
        }
       uiout->text ("\n");
@@ -1126,10 +1121,25 @@ print_frame_info (const frame_print_options &fp_opts,
     {
       int mid_statement = ((print_what == SRC_LINE)
                           && frame_show_address (frame, sal));
-      annotate_source_line (sal.symtab, sal.line, mid_statement,
-                           get_frame_pc (frame));
-
-      if (deprecated_print_frame_info_listing_hook)
+      if (annotation_level > 0
+         && annotate_source_line (sal.symtab, sal.line, mid_statement,
+                                  get_frame_pc (frame)))
+       {
+         /* The call to ANNOTATE_SOURCE_LINE already printed the
+            annotation for this source line, so we avoid the two cases
+            below and do not print the actual source line.  The
+            documentation for annotations makes it clear that the source
+            line annotation is printed __instead__ of printing the source
+            line, not as well as.
+
+            However, if we fail to print the source line, which usually
+            means either the source file is missing, or the requested
+            line is out of range of the file, then we don't print the
+            source annotation, and will pass through the "normal" print
+            source line code below, the expectation is that this code
+            will print an appropriate error.  */
+       }
+      else if (deprecated_print_frame_info_listing_hook)
        deprecated_print_frame_info_listing_hook (sal.symtab, sal.line,
                                                  sal.line + 1, 0);
       else
@@ -1246,7 +1256,7 @@ get_last_displayed_sal ()
    corresponding to FRAME.  */
 
 gdb::unique_xmalloc_ptr<char>
-find_frame_funname (struct frame_info *frame, enum language *funlang,
+find_frame_funname (frame_info_ptr frame, enum language *funlang,
                    struct symbol **funcp)
 {
   struct symbol *func;
@@ -1300,7 +1310,7 @@ find_frame_funname (struct frame_info *frame, enum language *funlang,
 
 static void
 print_frame (const frame_print_options &fp_opts,
-            frame_info *frame, int print_level,
+            frame_info_ptr frame, int print_level,
             enum print_what print_what, int print_args,
             struct symtab_and_line sal)
 {
@@ -1347,10 +1357,9 @@ print_frame (const frame_print_options &fp_opts,
     annotate_frame_function_name ();
 
     string_file stb;
-    fprintf_symbol_filtered (&stb, funname ? funname.get () : "??",
-                            funlang, DMGL_ANSI);
+    gdb_puts (funname ? funname.get () : "??", &stb);
     uiout->field_stream ("func", stb, function_name_style.style ());
-    uiout->wrap_hint ("   ");
+    uiout->wrap_hint (3);
     annotate_frame_args ();
 
     uiout->text (" (");
@@ -1388,7 +1397,7 @@ print_frame (const frame_print_options &fp_opts,
       
        filename_display = symtab_to_filename_for_display (sal.symtab);
        annotate_frame_source_begin ();
-       uiout->wrap_hint ("   ");
+       uiout->wrap_hint (3);
        uiout->text (" at ");
        annotate_frame_source_file ();
        uiout->field_string ("file", filename_display,
@@ -1409,13 +1418,14 @@ print_frame (const frame_print_options &fp_opts,
     if (print_what != SHORT_LOCATION
        && pc_p && (funname == NULL || sal.symtab == NULL))
       {
-       char *lib = solib_name_from_address (get_frame_program_space (frame),
-                                            get_frame_pc (frame));
+       const char *lib
+         = solib_name_from_address (get_frame_program_space (frame),
+                                    get_frame_address_in_block (frame));
 
        if (lib)
          {
            annotate_frame_where ();
-           uiout->wrap_hint ("  ");
+           uiout->wrap_hint (2);
            uiout->text (" from ");
            uiout->field_string ("from", lib, file_name_style.style ());
          }
@@ -1455,11 +1465,11 @@ frame_selection_by_function_completer (struct cmd_list_element *ignore,
    level 1') then SELECTED_FRAME_P will be false.  */
 
 static void
-info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
+info_frame_command_core (frame_info_ptr fi, bool selected_frame_p)
 {
   struct symbol *func;
   struct symtab *s;
-  struct frame_info *calling_frame_info;
+  frame_info_ptr calling_frame_info;
   int numregs;
   const char *funname = 0;
   enum language funlang = language_unknown;
@@ -1524,38 +1534,37 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
 
   if (selected_frame_p && frame_relative_level (fi) >= 0)
     {
-      printf_filtered (_("Stack level %d, frame at "),
-                      frame_relative_level (fi));
+      gdb_printf (_("Stack level %d, frame at "),
+                 frame_relative_level (fi));
     }
   else
     {
-      printf_filtered (_("Stack frame at "));
+      gdb_printf (_("Stack frame at "));
     }
-  fputs_filtered (paddress (gdbarch, get_frame_base (fi)), gdb_stdout);
-  printf_filtered (":\n");
-  printf_filtered (" %s = ", pc_regname);
+  gdb_puts (paddress (gdbarch, get_frame_base (fi)));
+  gdb_printf (":\n");
+  gdb_printf (" %s = ", pc_regname);
   if (frame_pc_p)
-    fputs_filtered (paddress (gdbarch, get_frame_pc (fi)), gdb_stdout);
+    gdb_puts (paddress (gdbarch, get_frame_pc (fi)));
   else
     fputs_styled ("<unavailable>", metadata_style.style (), gdb_stdout);
 
-  wrap_here ("   ");
+  gdb_stdout->wrap_here (3);
   if (funname)
     {
-      printf_filtered (" in ");
-      fprintf_symbol_filtered (gdb_stdout, funname, funlang,
-                              DMGL_ANSI | DMGL_PARAMS);
+      gdb_printf (" in ");
+      gdb_puts (funname);
     }
-  wrap_here ("   ");
+  gdb_stdout->wrap_here (3);
   if (sal.symtab)
-    printf_filtered
+    gdb_printf
       (" (%ps:%d)",
        styled_string (file_name_style.style (),
                      symtab_to_filename_for_display (sal.symtab)),
        sal.line);
-  puts_filtered ("; ");
-  wrap_here ("    ");
-  printf_filtered ("saved %s = ", pc_regname);
+  gdb_puts ("; ");
+  gdb_stdout->wrap_here (4);
+  gdb_printf ("saved %s = ", pc_regname);
 
   if (!frame_id_p (frame_unwind_caller_id (fi)))
     val_print_not_saved (gdb_stdout);
@@ -1586,8 +1595,8 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
     }
 
   if (caller_pc_p)
-    fputs_filtered (paddress (gdbarch, caller_pc), gdb_stdout);
-  printf_filtered ("\n");
+    gdb_puts (paddress (gdbarch, caller_pc));
+  gdb_printf ("\n");
 
   if (calling_frame_info == NULL)
     {
@@ -1595,35 +1604,33 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
 
       reason = get_frame_unwind_stop_reason (fi);
       if (reason != UNWIND_NO_REASON)
-       printf_filtered (_(" Outermost frame: %s\n"),
-                        frame_stop_reason_string (fi));
+       gdb_printf (_(" Outermost frame: %s\n"),
+                   frame_stop_reason_string (fi));
     }
   else if (get_frame_type (fi) == TAILCALL_FRAME)
-    puts_filtered (" tail call frame");
+    gdb_puts (" tail call frame");
   else if (get_frame_type (fi) == INLINE_FRAME)
-    printf_filtered (" inlined into frame %d",
-                    frame_relative_level (get_prev_frame (fi)));
+    gdb_printf (" inlined into frame %d",
+               frame_relative_level (get_prev_frame (fi)));
   else
     {
-      printf_filtered (" called by frame at ");
-      fputs_filtered (paddress (gdbarch, get_frame_base (calling_frame_info)),
-                     gdb_stdout);
+      gdb_printf (" called by frame at ");
+      gdb_puts (paddress (gdbarch, get_frame_base (calling_frame_info)));
     }
   if (get_next_frame (fi) && calling_frame_info)
-    puts_filtered (",");
-  wrap_here ("   ");
+    gdb_puts (",");
+  gdb_stdout->wrap_here (3);
   if (get_next_frame (fi))
     {
-      printf_filtered (" caller of frame at ");
-      fputs_filtered (paddress (gdbarch, get_frame_base (get_next_frame (fi))),
-                     gdb_stdout);
+      gdb_printf (" caller of frame at ");
+      gdb_puts (paddress (gdbarch, get_frame_base (get_next_frame (fi))));
     }
   if (get_next_frame (fi) || calling_frame_info)
-    puts_filtered ("\n");
+    gdb_puts ("\n");
 
   if (s)
-    printf_filtered (" source language %s.\n",
-                    language_str (s->language));
+    gdb_printf (" source language %s.\n",
+               language_str (s->language ()));
 
   {
     /* Address of the argument list for this frame, or 0.  */
@@ -1632,32 +1639,33 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
     int numargs;
 
     if (arg_list == 0)
-      printf_filtered (" Arglist at unknown address.\n");
+      gdb_printf (" Arglist at unknown address.\n");
     else
       {
-       printf_filtered (" Arglist at ");
-       fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
-       printf_filtered (",");
+       gdb_printf (" Arglist at ");
+       gdb_puts (paddress (gdbarch, arg_list));
+       gdb_printf (",");
 
        if (!gdbarch_frame_num_args_p (gdbarch))
          {
            numargs = -1;
-           puts_filtered (" args: ");
+           gdb_puts (" args: ");
          }
        else
          {
            numargs = gdbarch_frame_num_args (gdbarch, fi);
            gdb_assert (numargs >= 0);
            if (numargs == 0)
-             puts_filtered (" no args.");
+             gdb_puts (" no args.");
            else if (numargs == 1)
-             puts_filtered (" 1 arg: ");
+             gdb_puts (" 1 arg: ");
            else
-             printf_filtered (" %d args: ", numargs);
+             gdb_printf (" %d args: ", numargs);
          }
+
        print_frame_args (user_frame_print_options,
                          func, fi, numargs, gdb_stdout);
-       puts_filtered ("\n");
+       gdb_puts ("\n");
       }
   }
   {
@@ -1665,12 +1673,12 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
     CORE_ADDR arg_list = get_frame_locals_address (fi);
 
     if (arg_list == 0)
-      printf_filtered (" Locals at unknown address,");
+      gdb_printf (" Locals at unknown address,");
     else
       {
-       printf_filtered (" Locals at ");
-       fputs_filtered (paddress (gdbarch, arg_list), gdb_stdout);
-       printf_filtered (",");
+       gdb_printf (" Locals at ");
+       gdb_puts (paddress (gdbarch, arg_list));
+       gdb_printf (",");
       }
   }
 
@@ -1692,33 +1700,31 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
        struct value *value = frame_unwind_register_value (fi, sp_regnum);
        gdb_assert (value != NULL);
 
-       if (!value_optimized_out (value) && value_entirely_available (value))
+       if (!value->optimized_out () && value->entirely_available ())
          {
-           if (VALUE_LVAL (value) == not_lval)
+           if (value->lval () == not_lval)
              {
                CORE_ADDR sp;
                enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
                int sp_size = register_size (gdbarch, sp_regnum);
 
-               sp = extract_unsigned_integer (value_contents_all (value),
-                                              sp_size, byte_order);
+               sp = extract_unsigned_integer
+                 (value->contents_all ().data (), sp_size, byte_order);
 
-               printf_filtered (" Previous frame's sp is ");
-               fputs_filtered (paddress (gdbarch, sp), gdb_stdout);
-               printf_filtered ("\n");
+               gdb_printf (" Previous frame's sp is ");
+               gdb_puts (paddress (gdbarch, sp));
+               gdb_printf ("\n");
              }
-           else if (VALUE_LVAL (value) == lval_memory)
+           else if (value->lval () == lval_memory)
              {
-               printf_filtered (" Previous frame's sp at ");
-               fputs_filtered (paddress (gdbarch, value_address (value)),
-                               gdb_stdout);
-               printf_filtered ("\n");
+               gdb_printf (" Previous frame's sp at ");
+               gdb_puts (paddress (gdbarch, value->address ()));
+               gdb_printf ("\n");
              }
-           else if (VALUE_LVAL (value) == lval_register)
+           else if (value->lval () == lval_register)
              {
-               printf_filtered (" Previous frame's sp in %s\n",
-                                gdbarch_register_name (gdbarch,
-                                                       VALUE_REGNUM (value)));
+               gdb_printf (" Previous frame's sp in %s\n",
+                           gdbarch_register_name (gdbarch, value->regnum ()));
              }
 
            release_value (value);
@@ -1740,7 +1746,7 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
          int realnum;
 
          /* Find out the location of the saved register without
-             fetching the corresponding value.  */
+            fetching the corresponding value.  */
          frame_register_unwind (fi, i, &optimized, &unavailable,
                                 &lval, &addr, &realnum, NULL);
          /* For moment, only display registers that were saved on the
@@ -1748,27 +1754,27 @@ info_frame_command_core (struct frame_info *fi, bool selected_frame_p)
          if (!optimized && !unavailable && lval == lval_memory)
            {
              if (count == 0)
-               puts_filtered (" Saved registers:\n ");
+               gdb_puts (" Saved registers:\n ");
              else
-               puts_filtered (",");
-             wrap_here (" ");
-             printf_filtered (" %s at ",
-                              gdbarch_register_name (gdbarch, i));
-             fputs_filtered (paddress (gdbarch, addr), gdb_stdout);
+               gdb_puts (",");
+             gdb_stdout->wrap_here (1);
+             gdb_printf (" %s at ",
+                         gdbarch_register_name (gdbarch, i));
+             gdb_puts (paddress (gdbarch, addr));
              count++;
            }
        }
     if (count || need_nl)
-      puts_filtered ("\n");
+      gdb_puts ("\n");
   }
 }
 
 /* Return the innermost frame at level LEVEL.  */
 
-static struct frame_info *
+static frame_info_ptr
 leading_innermost_frame (int level)
 {
-  struct frame_info *leading;
+  frame_info_ptr leading;
 
   leading = get_current_frame ();
 
@@ -1786,11 +1792,11 @@ leading_innermost_frame (int level)
 
 /* Return the starting frame needed to handle COUNT outermost frames.  */
 
-static struct frame_info *
+static frame_info_ptr
 trailing_outermost_frame (int count)
 {
-  struct frame_info *current;
-  struct frame_info *trailing;
+  frame_info_ptr current;
+  frame_info_ptr trailing;
 
   trailing = get_current_frame ();
 
@@ -1819,20 +1825,12 @@ trailing_outermost_frame (int count)
    SELECT_FRAME.  */
 
 static void
-select_frame_command_core (struct frame_info *fi, bool ignored)
+select_frame_command_core (frame_info_ptr fi, bool ignored)
 {
-  struct frame_info *prev_frame = get_selected_frame_if_set ();
+  frame_info_ptr prev_frame = get_selected_frame ();
   select_frame (fi);
-  if (get_selected_frame_if_set () != prev_frame)
-    gdb::observers::user_selected_context_changed.notify (USER_SELECTED_FRAME);
-}
-
-/* See stack.h.  */
-
-void
-select_frame_for_mi (struct frame_info *fi)
-{
-  select_frame_command_core (fi, false /* Ignored.  */);
+  if (get_selected_frame () != prev_frame)
+    notify_user_selected_context_changed (USER_SELECTED_FRAME);
 }
 
 /* The core of all the "frame" sub-commands.  Select frame FI, and if this
@@ -1840,13 +1838,12 @@ select_frame_for_mi (struct frame_info *fi)
    reprint the current frame summary).   */
 
 static void
-frame_command_core (struct frame_info *fi, bool ignored)
+frame_command_core (frame_info_ptr fi, bool ignored)
 {
-  struct frame_info *prev_frame = get_selected_frame_if_set ();
-
+  frame_info_ptr prev_frame = get_selected_frame ();
   select_frame (fi);
-  if (get_selected_frame_if_set () != prev_frame)
-    gdb::observers::user_selected_context_changed.notify (USER_SELECTED_FRAME);
+  if (get_selected_frame () != prev_frame)
+    notify_user_selected_context_changed (USER_SELECTED_FRAME);
   else
     print_selected_thread_frame (current_uiout, USER_SELECTED_FRAME);
 }
@@ -1865,7 +1862,7 @@ frame_command_core (struct frame_info *fi, bool ignored)
    'frame' will all cause SELECTED_FRAME_P to be true.  In all other cases
    SELECTED_FRAME_P is false.  */
 
-template <void (*FPTR) (struct frame_info *fi, bool selected_frame_p)>
+template <void (*FPTR) (frame_info_ptr fi, bool selected_frame_p)>
 class frame_command_helper
 {
 public:
@@ -1876,7 +1873,7 @@ public:
   level (const char *arg, int from_tty)
   {
     int level = value_as_long (parse_and_eval (arg));
-    struct frame_info *fid
+    frame_info_ptr fid
       = find_relative_frame (get_current_frame (), &level);
     if (level != 0)
       error (_("No frame at level %s."), arg);
@@ -1891,7 +1888,7 @@ public:
   address (const char *arg, int from_tty)
   {
     CORE_ADDR addr = value_as_address (parse_and_eval (arg));
-    struct frame_info *fid = find_frame_for_address (addr);
+    frame_info_ptr fid = find_frame_for_address (addr);
     if (fid == NULL)
       error (_("No frame at address %s."), arg);
     FPTR (fid, false);
@@ -1904,10 +1901,10 @@ public:
   static void
   view (const char *args, int from_tty)
   {
-    struct frame_info *fid;
+    frame_info_ptr fid;
 
     if (args == NULL)
-    error (_("Missing address argument to view a frame"));
+      error (_("Missing address argument to view a frame"));
 
     gdb_argv argv (args);
 
@@ -1936,7 +1933,7 @@ public:
   {
     if (arg == NULL)
       error (_("Missing function name argument"));
-    struct frame_info *fid = find_frame_for_function (arg);
+    frame_info_ptr fid = find_frame_for_function (arg);
     if (fid == NULL)
       error (_("No frame for function \"%s\"."), arg);
     FPTR (fid, false);
@@ -1975,12 +1972,12 @@ backtrace_command_1 (const frame_print_options &fp_opts,
                     const char *count_exp, int from_tty)
 
 {
-  struct frame_info *fi;
+  frame_info_ptr fi;
   int count;
   int py_start = 0, py_end = 0;
   enum ext_lang_bt_status result = EXT_LANG_BT_ERROR;
 
-  if (!target_has_stack)
+  if (!target_has_stack ())
     error (_("No stack."));
 
   if (count_exp)
@@ -2037,7 +2034,7 @@ backtrace_command_1 (const frame_print_options &fp_opts,
      "-no-filters" has been specified from the command.  */
   if (bt_opts.no_filters || result == EXT_LANG_BT_NO_FILTERS)
     {
-      struct frame_info *trailing;
+      frame_info_ptr trailing;
 
       /* The following code must do two things.  First, it must set the
         variable TRAILING to the frame from which we should start
@@ -2063,20 +2060,7 @@ backtrace_command_1 (const frame_print_options &fp_opts,
 
          print_frame_info (fp_opts, fi, 1, LOCATION, 1, 0);
          if ((flags & PRINT_LOCALS) != 0)
-           {
-             struct frame_id frame_id = get_frame_id (fi);
-
-             print_frame_local_vars (fi, false, NULL, NULL, 1, gdb_stdout);
-
-             /* print_frame_local_vars invalidates FI.  */
-             fi = frame_find_by_id (frame_id);
-             if (fi == NULL)
-               {
-                 trailing = NULL;
-                 warning (_("Unable to restore previously selected frame."));
-                 break;
-               }
-           }
+           print_frame_local_vars (fi, false, NULL, NULL, 1, gdb_stdout);
 
          /* Save the last frame to check for error conditions.  */
          trailing = fi;
@@ -2084,7 +2068,7 @@ backtrace_command_1 (const frame_print_options &fp_opts,
 
       /* If we've stopped before the end, mention that.  */
       if (fi && from_tty)
-       printf_filtered (_("(More stack frames follow...)\n"));
+       gdb_printf (_("(More stack frames follow...)\n"));
 
       /* If we've run out of frames, and the reason appears to be an error
         condition, print it.  */
@@ -2094,8 +2078,8 @@ backtrace_command_1 (const frame_print_options &fp_opts,
 
          reason = get_frame_unwind_stop_reason (trailing);
          if (reason >= UNWIND_FIRST_ERROR)
-           printf_filtered (_("Backtrace stopped: %s\n"),
-                            frame_stop_reason_string (trailing));
+           gdb_printf (_("Backtrace stopped: %s\n"),
+                       frame_stop_reason_string (trailing));
        }
     }
 }
@@ -2131,17 +2115,17 @@ parse_backtrace_qualifiers (const char *arg,
       if (this_arg.empty ())
        return arg;
 
-      if (subset_compare (this_arg.c_str (), "no-filters"))
+      if (startswith ("no-filters", this_arg))
        {
          if (bt_cmd_opts != nullptr)
            bt_cmd_opts->no_filters = true;
        }
-      else if (subset_compare (this_arg.c_str (), "full"))
+      else if (startswith ("full", this_arg))
        {
          if (bt_cmd_opts != nullptr)
            bt_cmd_opts->full = true;
        }
-      else if (subset_compare (this_arg.c_str (), "hide"))
+      else if (startswith ("hide", this_arg))
        {
          if (bt_cmd_opts != nullptr)
            bt_cmd_opts->hide = true;
@@ -2222,20 +2206,15 @@ backtrace_command_completer (struct cmd_list_element *ignore,
   expression_completer (ignore, tracker, text, word);
 }
 
-/* Iterate over the local variables of a block B, calling CB with
-   CB_DATA.  */
+/* Iterate over the local variables of a block B, calling CB.  */
 
 static void
 iterate_over_block_locals (const struct block *b,
-                          iterate_over_block_arg_local_vars_cb cb,
-                          void *cb_data)
+                          iterate_over_block_arg_local_vars_cb cb)
 {
-  struct block_iterator iter;
-  struct symbol *sym;
-
-  ALL_BLOCK_SYMBOLS (b, iter, sym)
+  for (struct symbol *sym : block_iterator_range (b))
     {
-      switch (SYMBOL_CLASS (sym))
+      switch (sym->aclass ())
        {
        case LOC_CONST:
        case LOC_LOCAL:
@@ -2243,11 +2222,11 @@ iterate_over_block_locals (const struct block *b,
        case LOC_STATIC:
        case LOC_COMPUTED:
        case LOC_OPTIMIZED_OUT:
-         if (SYMBOL_IS_ARGUMENT (sym))
+         if (sym->is_argument ())
            break;
-         if (SYMBOL_DOMAIN (sym) == COMMON_BLOCK_DOMAIN)
+         if (sym->domain () == COMMON_BLOCK_DOMAIN)
            break;
-         (*cb) (sym->print_name (), sym, cb_data);
+         cb (sym->print_name (), sym);
          break;
 
        default:
@@ -2262,18 +2241,17 @@ iterate_over_block_locals (const struct block *b,
 
 void
 iterate_over_block_local_vars (const struct block *block,
-                              iterate_over_block_arg_local_vars_cb cb,
-                              void *cb_data)
+                              iterate_over_block_arg_local_vars_cb cb)
 {
   while (block)
     {
-      iterate_over_block_locals (block, cb, cb_data);
+      iterate_over_block_locals (block, cb);
       /* After handling the function's top-level block, stop.  Don't
         continue to its superblock, the block of per-file
         symbols.  */
-      if (BLOCK_FUNCTION (block))
+      if (block->function ())
        break;
-      block = BLOCK_SUPERBLOCK (block);
+      block = block->superblock ();
     }
 }
 
@@ -2282,52 +2260,53 @@ iterate_over_block_local_vars (const struct block *block,
 
 struct print_variable_and_value_data
 {
-  gdb::optional<compiled_regex> preg;
-  gdb::optional<compiled_regex> treg;
+  std::optional<compiled_regex> preg;
+  std::optional<compiled_regex> treg;
   struct frame_id frame_id;
   int num_tabs;
   struct ui_file *stream;
   int values_printed;
+
+  void operator() (const char *print_name, struct symbol *sym);
 };
 
 /* The callback for the locals and args iterators.  */
 
-static void
-do_print_variable_and_value (const char *print_name,
-                            struct symbol *sym,
-                            void *cb_data)
+void
+print_variable_and_value_data::operator() (const char *print_name,
+                                          struct symbol *sym)
 {
-  struct print_variable_and_value_data *p
-    = (struct print_variable_and_value_data *) cb_data;
-  struct frame_info *frame;
+  frame_info_ptr frame;
 
-  if (p->preg.has_value ()
-      && p->preg->exec (sym->natural_name (), 0, NULL, 0) != 0)
+  if (preg.has_value ()
+      && preg->exec (sym->natural_name (), 0, NULL, 0) != 0)
     return;
-  if (p->treg.has_value ()
-      && !treg_matches_sym_type_name (*p->treg, sym))
+  if (treg.has_value ()
+      && !treg_matches_sym_type_name (*treg, sym))
+    return;
+  if (language_def (sym->language ())->symbol_printing_suppressed (sym))
     return;
 
-  frame = frame_find_by_id (p->frame_id);
+  frame = frame_find_by_id (frame_id);
   if (frame == NULL)
     {
       warning (_("Unable to restore previously selected frame."));
       return;
     }
 
-  print_variable_and_value (print_name, sym, frame, p->stream, p->num_tabs);
+  print_variable_and_value (print_name, sym, frame, stream, num_tabs);
 
   /* print_variable_and_value invalidates FRAME.  */
   frame = NULL;
 
-  p->values_printed = 1;
+  values_printed = 1;
 }
 
 /* Prepares the regular expression REG from REGEXP.
    If REGEXP is NULL, it results in an empty regular expression.  */
 
 static void
-prepare_reg (const char *regexp, gdb::optional<compiled_regex> *reg)
+prepare_reg (const char *regexp, std::optional<compiled_regex> *reg)
 {
   if (regexp != NULL)
     {
@@ -2346,12 +2325,10 @@ prepare_reg (const char *regexp, gdb::optional<compiled_regex> *reg)
    If T_REGEXP is not NULL, only print local variables whose type
    matches T_REGEXP.
    If no local variables have been printed and !QUIET, prints a message
-   explaining why no local variables could be printed.
-
-   This function will invalidate FRAME.  */
+   explaining why no local variables could be printed.  */
 
 static void
-print_frame_local_vars (struct frame_info *frame,
+print_frame_local_vars (frame_info_ptr frame,
                        bool quiet,
                        const char *regexp, const char *t_regexp,
                        int num_tabs, struct ui_file *stream)
@@ -2363,8 +2340,8 @@ print_frame_local_vars (struct frame_info *frame,
   if (!get_frame_pc_if_available (frame, &pc))
     {
       if (!quiet)
-       fprintf_filtered (stream,
-                         _("PC unavailable, cannot determine locals.\n"));
+       gdb_printf (stream,
+                   _("PC unavailable, cannot determine locals.\n"));
       return;
     }
 
@@ -2372,7 +2349,7 @@ print_frame_local_vars (struct frame_info *frame,
   if (block == 0)
     {
       if (!quiet)
-       fprintf_filtered (stream, "No symbol table info available.\n");
+       gdb_printf (stream, "No symbol table info available.\n");
       return;
     }
 
@@ -2389,16 +2366,14 @@ print_frame_local_vars (struct frame_info *frame,
   scoped_restore_selected_frame restore_selected_frame;
   select_frame (frame);
 
-  iterate_over_block_local_vars (block,
-                                do_print_variable_and_value,
-                                &cb_data);
+  iterate_over_block_local_vars (block, cb_data);
 
   if (!cb_data.values_printed && !quiet)
     {
       if (regexp == NULL && t_regexp == NULL)
-       fprintf_filtered (stream, _("No locals.\n"));
+       gdb_printf (stream, _("No locals.\n"));
       else
-       fprintf_filtered (stream, _("No matching locals.\n"));
+       gdb_printf (stream, _("No matching locals.\n"));
     }
 }
 
@@ -2409,12 +2384,7 @@ print_frame_local_vars (struct frame_info *frame,
 struct info_print_options
 {
   bool quiet = false;
-  char *type_regexp = nullptr;
-
-  ~info_print_options ()
-  {
-    xfree (type_regexp);
-  }
+  std::string type_regexp;
 };
 
 /* The options used by the 'info locals' and 'info args' commands.  */
@@ -2473,25 +2443,23 @@ info_locals_command (const char *args, int from_tty)
   if (args != nullptr && *args == '\0')
     args = nullptr;
 
-  print_frame_local_vars (get_selected_frame (_("No frame selected.")),
-                         opts.quiet, args, opts.type_regexp,
-                         0, gdb_stdout);
+  print_frame_local_vars
+    (get_selected_frame (_("No frame selected.")),
+     opts.quiet, args,
+     opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
+     0, gdb_stdout);
 }
 
 /* Iterate over all the argument variables in block B.  */
 
 void
 iterate_over_block_arg_vars (const struct block *b,
-                            iterate_over_block_arg_local_vars_cb cb,
-                            void *cb_data)
+                            iterate_over_block_arg_local_vars_cb cb)
 {
-  struct block_iterator iter;
-  struct symbol *sym, *sym2;
-
-  ALL_BLOCK_SYMBOLS (b, iter, sym)
+  for (struct symbol *sym : block_iterator_range (b))
     {
       /* Don't worry about things which aren't arguments.  */
-      if (SYMBOL_IS_ARGUMENT (sym))
+      if (sym->is_argument ())
        {
          /* We have to look up the symbol because arguments can have
             two entries (one a parameter, one a local) and the one we
@@ -2504,9 +2472,10 @@ iterate_over_block_arg_vars (const struct block *b,
             float).  There are also LOC_ARG/LOC_REGISTER pairs which
             are not combined in symbol-reading.  */
 
-         sym2 = lookup_symbol_search_name (sym->search_name (),
-                                           b, VAR_DOMAIN).symbol;
-         (*cb) (sym->print_name (), sym2, cb_data);
+         struct symbol *sym2
+           = lookup_symbol_search_name (sym->search_name (),
+                                        b, VAR_DOMAIN).symbol;
+         cb (sym->print_name (), sym2);
        }
     }
 }
@@ -2518,12 +2487,10 @@ iterate_over_block_arg_vars (const struct block *b,
    If T_REGEXP is not NULL, only print argument variables whose type
    matches T_REGEXP.
    If no argument variables have been printed and !QUIET, prints a message
-   explaining why no argument variables could be printed.
-
-   This function will invalidate FRAME.  */
+   explaining why no argument variables could be printed.  */
 
 static void
-print_frame_arg_vars (struct frame_info *frame,
+print_frame_arg_vars (frame_info_ptr frame,
                      bool quiet,
                      const char *regexp, const char *t_regexp,
                      struct ui_file *stream)
@@ -2531,14 +2498,14 @@ print_frame_arg_vars (struct frame_info *frame,
   struct print_variable_and_value_data cb_data;
   struct symbol *func;
   CORE_ADDR pc;
-  gdb::optional<compiled_regex> preg;
-  gdb::optional<compiled_regex> treg;
+  std::optional<compiled_regex> preg;
+  std::optional<compiled_regex> treg;
 
   if (!get_frame_pc_if_available (frame, &pc))
     {
       if (!quiet)
-       fprintf_filtered (stream,
-                         _("PC unavailable, cannot determine args.\n"));
+       gdb_printf (stream,
+                   _("PC unavailable, cannot determine args.\n"));
       return;
     }
 
@@ -2546,7 +2513,7 @@ print_frame_arg_vars (struct frame_info *frame,
   if (func == NULL)
     {
       if (!quiet)
-       fprintf_filtered (stream, _("No symbol table info available.\n"));
+       gdb_printf (stream, _("No symbol table info available.\n"));
       return;
     }
 
@@ -2557,18 +2524,14 @@ print_frame_arg_vars (struct frame_info *frame,
   cb_data.stream = stream;
   cb_data.values_printed = 0;
 
-  iterate_over_block_arg_vars (SYMBOL_BLOCK_VALUE (func),
-                              do_print_variable_and_value, &cb_data);
-
-  /* do_print_variable_and_value invalidates FRAME.  */
-  frame = NULL;
+  iterate_over_block_arg_vars (func->value_block (), cb_data);
 
   if (!cb_data.values_printed && !quiet)
     {
       if (regexp == NULL && t_regexp == NULL)
-       fprintf_filtered (stream, _("No arguments.\n"));
+       gdb_printf (stream, _("No arguments.\n"));
       else
-       fprintf_filtered (stream, _("No matching arguments.\n"));
+       gdb_printf (stream, _("No matching arguments.\n"));
     }
 }
 
@@ -2584,8 +2547,11 @@ info_args_command (const char *args, int from_tty)
   if (args != nullptr && *args == '\0')
     args = nullptr;
 
-  print_frame_arg_vars (get_selected_frame (_("No frame selected.")),
-                       opts.quiet, args, opts.type_regexp, gdb_stdout);
+  print_frame_arg_vars
+    (get_selected_frame (_("No frame selected.")),
+     opts.quiet, args,
+     opts.type_regexp.empty () ? nullptr : opts.type_regexp.c_str (),
+     gdb_stdout);
 }
 \f
 /* Return the symbol-block in which the selected frame is executing.
@@ -2613,14 +2579,14 @@ get_selected_block (CORE_ADDR *addr_in_block)
    but the final value of *LEVEL_OFFSET_PTR is nonzero and indicates
    how much farther the original request asked to go.  */
 
-struct frame_info *
-find_relative_frame (struct frame_info *frame, int *level_offset_ptr)
+frame_info_ptr
+find_relative_frame (frame_info_ptr frame, int *level_offset_ptr)
 {
   /* Going up is simple: just call get_prev_frame enough times or
      until the initial frame is reached.  */
   while (*level_offset_ptr > 0)
     {
-      struct frame_info *prev = get_prev_frame (frame);
+      frame_info_ptr prev = get_prev_frame (frame);
 
       if (!prev)
        break;
@@ -2631,7 +2597,7 @@ find_relative_frame (struct frame_info *frame, int *level_offset_ptr)
   /* Going down is just as simple.  */
   while (*level_offset_ptr < 0)
     {
-      struct frame_info *next = get_next_frame (frame);
+      frame_info_ptr next = get_next_frame (frame);
 
       if (!next)
        break;
@@ -2648,7 +2614,7 @@ find_relative_frame (struct frame_info *frame, int *level_offset_ptr)
 static void
 up_silently_base (const char *count_exp)
 {
-  struct frame_info *frame;
+  frame_info_ptr frame;
   int count = 1;
 
   if (count_exp)
@@ -2670,7 +2636,7 @@ static void
 up_command (const char *count_exp, int from_tty)
 {
   up_silently_base (count_exp);
-  gdb::observers::user_selected_context_changed.notify (USER_SELECTED_FRAME);
+  notify_user_selected_context_changed (USER_SELECTED_FRAME);
 }
 
 /* Select the frame down one or COUNT_EXP stack levels from the previously
@@ -2679,7 +2645,7 @@ up_command (const char *count_exp, int from_tty)
 static void
 down_silently_base (const char *count_exp)
 {
-  struct frame_info *frame;
+  frame_info_ptr frame;
   int count = -1;
 
   if (count_exp)
@@ -2689,9 +2655,9 @@ down_silently_base (const char *count_exp)
   if (count != 0 && count_exp == NULL)
     {
       /* We only do this if COUNT_EXP is not specified.  That way
-         "down" means to really go down (and let me know if that is
-         impossible), but "down 9999" can be used to mean go all the
-         way down without getting an error.  */
+        "down" means to really go down (and let me know if that is
+        impossible), but "down 9999" can be used to mean go all the
+        way down without getting an error.  */
 
       error (_("Bottom (innermost) frame selected; you cannot go down."));
     }
@@ -2709,7 +2675,7 @@ static void
 down_command (const char *count_exp, int from_tty)
 {
   down_silently_base (count_exp);
-  gdb::observers::user_selected_context_changed.notify (USER_SELECTED_FRAME);
+  notify_user_selected_context_changed (USER_SELECTED_FRAME);
 }
 
 void
@@ -2717,12 +2683,12 @@ return_command (const char *retval_exp, int from_tty)
 {
   /* Initialize it just to avoid a GCC false warning.  */
   enum return_value_convention rv_conv = RETURN_VALUE_STRUCT_CONVENTION;
-  struct frame_info *thisframe;
+  frame_info_ptr thisframe;
   struct gdbarch *gdbarch;
   struct symbol *thisfun;
   struct value *return_value = NULL;
   struct value *function = NULL;
-  const char *query_prefix = "";
+  std::string query_prefix;
 
   thisframe = get_selected_frame ("No selected frame.");
   thisfun = get_frame_function (thisframe);
@@ -2741,29 +2707,29 @@ return_command (const char *retval_exp, int from_tty)
       struct type *return_type = NULL;
 
       /* Compute the return value.  Should the computation fail, this
-         call throws an error.  */
-      return_value = evaluate_expression (retval_expr.get ());
+        call throws an error.  */
+      return_value = retval_expr->evaluate ();
 
       /* Cast return value to the return type of the function.  Should
-         the cast fail, this call throws an error.  */
+        the cast fail, this call throws an error.  */
       if (thisfun != NULL)
-       return_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (thisfun));
+       return_type = thisfun->type ()->target_type ();
       if (return_type == NULL)
-       {
-         if (retval_expr->elts[0].opcode != UNOP_CAST
-             && retval_expr->elts[0].opcode != UNOP_CAST_TYPE)
+       {
+         if (retval_expr->first_opcode () != UNOP_CAST
+             && retval_expr->first_opcode () != UNOP_CAST_TYPE)
            error (_("Return value type not available for selected "
                     "stack frame.\n"
                     "Please use an explicit cast of the value to return."));
-         return_type = value_type (return_value);
+         return_type = return_value->type ();
        }
       return_type = check_typedef (return_type);
       return_value = value_cast (return_type, return_value);
 
       /* Make sure the value is fully evaluated.  It may live in the
-         stack frame we're about to pop.  */
-      if (value_lazy (return_value))
-       value_fetch_lazy (return_value);
+        stack frame we're about to pop.  */
+      if (return_value->lazy ())
+       return_value->fetch_lazy ();
 
       if (thisfun != NULL)
        function = read_var_value (thisfun, NULL, thisframe);
@@ -2771,13 +2737,24 @@ return_command (const char *retval_exp, int from_tty)
       rv_conv = RETURN_VALUE_REGISTER_CONVENTION;
       if (return_type->code () == TYPE_CODE_VOID)
        /* If the return-type is "void", don't try to find the
-           return-value's location.  However, do still evaluate the
-           return expression so that, even when the expression result
-           is discarded, side effects such as "return i++" still
-           occur.  */
+          return-value's location.  However, do still evaluate the
+          return expression so that, even when the expression result
+          is discarded, side effects such as "return i++" still
+          occur.  */
        return_value = NULL;
       else if (thisfun != NULL)
        {
+         if (is_nocall_function (check_typedef (function->type ())))
+           {
+             query_prefix =
+               string_printf ("Function '%s' does not follow the target "
+                              "calling convention.\n"
+                              "If you continue, setting the return value "
+                              "will probably lead to unpredictable "
+                              "behaviors.\n",
+                              thisfun->print_name ());
+           }
+
          rv_conv = struct_return_convention (gdbarch, function, return_type);
          if (rv_conv == RETURN_VALUE_STRUCT_CONVENTION
              || rv_conv == RETURN_VALUE_ABI_RETURNS_ADDRESS)
@@ -2800,12 +2777,13 @@ return_command (const char *retval_exp, int from_tty)
 
       if (thisfun == NULL)
        confirmed = query (_("%sMake selected stack frame return now? "),
-                          query_prefix);
+                          query_prefix.c_str ());
       else
        {
-         if (TYPE_NO_RETURN (thisfun->type))
+         if (TYPE_NO_RETURN (thisfun->type ()))
            warning (_("Function does not return normally to caller."));
-         confirmed = query (_("%sMake %s return now? "), query_prefix,
+         confirmed = query (_("%sMake %s return now? "),
+                            query_prefix.c_str (),
                             thisfun->print_name ());
        }
       if (!confirmed)
@@ -2818,14 +2796,15 @@ return_command (const char *retval_exp, int from_tty)
   /* Store RETURN_VALUE in the just-returned register set.  */
   if (return_value != NULL)
     {
-      struct type *return_type = value_type (return_value);
-      struct gdbarch *cache_arch = get_current_regcache ()->arch ();
+      struct type *return_type = return_value->type ();
+      regcache *regcache = get_thread_regcache (inferior_thread ());
+      struct gdbarch *cache_arch = regcache->arch ();
 
       gdb_assert (rv_conv != RETURN_VALUE_STRUCT_CONVENTION
                  && rv_conv != RETURN_VALUE_ABI_RETURNS_ADDRESS);
-      gdbarch_return_value (cache_arch, function, return_type,
-                           get_current_regcache (), NULL /*read*/,
-                           value_contents (return_value) /*write*/);
+      gdbarch_return_value_as_value
+       (cache_arch, function, return_type, regcache, NULL /*read*/,
+        return_value->contents ().data () /*write*/);
     }
 
   /* If we are at the end of a call dummy now, pop the dummy frame
@@ -2842,7 +2821,7 @@ return_command (const char *retval_exp, int from_tty)
 /* Find the most inner frame in the current stack for a function called
    FUNCTION_NAME.  If no matching frame is found return NULL.  */
 
-static struct frame_info *
+static frame_info_ptr
 find_frame_for_function (const char *function_name)
 {
   /* Used to hold the lower and upper addresses for each of the
@@ -2851,7 +2830,7 @@ find_frame_for_function (const char *function_name)
   {
     CORE_ADDR low, high;
   };
-  struct frame_info *frame;
+  frame_info_ptr frame;
   bool found = false;
   int level = 1;
 
@@ -2892,24 +2871,6 @@ find_frame_for_function (const char *function_name)
   return frame;
 }
 
-/* Implements the dbx 'func' command.  */
-
-static void
-func_command (const char *arg, int from_tty)
-{
-  if (arg == NULL)
-    return;
-
-  struct frame_info *frame = find_frame_for_function (arg);
-  if (frame == NULL)
-    error (_("'%s' not within current stack frame."), arg);
-  if (frame != get_selected_frame (NULL))
-    {
-      select_frame (frame);
-      print_stack_frame (get_selected_frame (NULL), 1, SRC_AND_LOC, 1);
-    }
-}
-
 /* The qcs command line flags for the "frame apply" commands.  Keep
    this in sync with the "thread apply" commands.  */
 
@@ -2954,15 +2915,15 @@ make_frame_apply_options_def_group (qcs_flags *flags,
    frame apply -3 info frame    Apply 'info frame' to outermost 3 frames.
    frame apply all x/i $pc      Apply 'x/i $pc' cmd to all frames.
    frame apply all -s p local_var_no_idea_in_which_frame
-                If a frame has a local variable called
-                local_var_no_idea_in_which_frame, print frame
-                and value of local_var_no_idea_in_which_frame.
+               If a frame has a local variable called
+               local_var_no_idea_in_which_frame, print frame
+               and value of local_var_no_idea_in_which_frame.
    frame apply all -s -q p local_var_no_idea_in_which_frame
-                Same as before, but only print the variable value.
+               Same as before, but only print the variable value.
    frame apply level 2-5 0 4-7 -s p i = i + 1
-                Adds 1 to the variable i in the specified frames.
-                Note that i will be incremented twice in
-                frames 4 and 5.  */
+               Adds 1 to the variable i in the specified frames.
+               Note that i will be incremented twice in
+               frames 4 and 5.  */
 
 /* Apply a GDB command to COUNT stack frames, starting at TRAILING.
    CMD starts with 0 or more qcs flags followed by the GDB command to apply.
@@ -2972,7 +2933,7 @@ make_frame_apply_options_def_group (qcs_flags *flags,
 static void
 frame_apply_command_count (const char *which_command,
                           const char *cmd, int from_tty,
-                          struct frame_info *trailing, int count)
+                          frame_info_ptr trailing, int count)
 {
   qcs_flags flags;
   set_backtrace_options set_bt_opts = user_set_backtrace_options;
@@ -2997,7 +2958,7 @@ frame_apply_command_count (const char *which_command,
   scoped_restore restore_set_backtrace_options
     = make_scoped_restore (&user_set_backtrace_options, set_bt_opts);
 
-  for (frame_info *fi = trailing; fi && count--; fi = get_prev_frame (fi))
+  for (frame_info_ptr fi = trailing; fi && count--; fi = get_prev_frame (fi))
     {
       QUIT;
 
@@ -3011,8 +2972,8 @@ frame_apply_command_count (const char *which_command,
               set to the selected frame.  */
            scoped_restore_current_thread restore_fi_current_frame;
 
-           cmd_result = execute_command_to_string
-             (cmd, from_tty, gdb_stdout->term_out ());
+           execute_command_to_string
+             (cmd_result, cmd, from_tty, gdb_stdout->term_out ());
          }
          fi = get_selected_frame (_("frame apply "
                                     "unable to get selected frame."));
@@ -3020,7 +2981,7 @@ frame_apply_command_count (const char *which_command,
            {
              if (!flags.quiet)
                print_stack_frame (fi, 1, LOCATION, 0);
-             printf_filtered ("%s", cmd_result.c_str ());
+             gdb_printf ("%s", cmd_result.c_str ());
            }
        }
       catch (const gdb_exception_error &ex)
@@ -3032,7 +2993,7 @@ frame_apply_command_count (const char *which_command,
              if (!flags.quiet)
                print_stack_frame (fi, 1, LOCATION, 0);
              if (flags.cont)
-               printf_filtered ("%s\n", ex.what ());
+               gdb_printf ("%s\n", ex.what ());
              else
                throw;
            }
@@ -3143,7 +3104,7 @@ frame_apply_cmd_completer (struct cmd_list_element *ignore,
 static void
 frame_apply_level_command (const char *cmd, int from_tty)
 {
-  if (!target_has_stack)
+  if (!target_has_stack ())
     error (_("No stack."));
 
   bool level_found = false;
@@ -3191,7 +3152,7 @@ frame_apply_level_command (const char *cmd, int from_tty)
 static void
 frame_apply_all_command (const char *cmd, int from_tty)
 {
-  if (!target_has_stack)
+  if (!target_has_stack ())
     error (_("No stack."));
 
   frame_apply_command_count ("frame apply all", cmd, from_tty,
@@ -3204,9 +3165,9 @@ static void
 frame_apply_command (const char* cmd, int from_tty)
 {
   int count;
-  struct frame_info *trailing;
+  frame_info_ptr trailing;
 
-  if (!target_has_stack)
+  if (!target_has_stack ())
     error (_("No stack."));
 
   if (cmd == NULL)
@@ -3242,11 +3203,11 @@ faas_command (const char *cmd, int from_tty)
 /* Find inner-mode frame with frame address ADDRESS.  Return NULL if no
    matching frame can be found.  */
 
-static struct frame_info *
+static frame_info_ptr
 find_frame_for_address (CORE_ADDR address)
 {
   struct frame_id id;
-  struct frame_info *fid;
+  frame_info_ptr fid;
 
   id = frame_id_build_wild (address);
 
@@ -3258,15 +3219,15 @@ find_frame_for_address (CORE_ADDR address)
        fid != NULL;
        fid = get_prev_frame (fid))
     {
-      if (frame_id_eq (id, get_frame_id (fid)))
+      if (id == get_frame_id (fid))
        {
-         struct frame_info *prev_frame;
+         frame_info_ptr prev_frame;
 
          while (1)
            {
              prev_frame = get_prev_frame (fid);
              if (!prev_frame
-                 || !frame_id_eq (id, get_frame_id (prev_frame)))
+                 || id != get_frame_id (prev_frame))
                break;
              fid = prev_frame;
            }
@@ -3309,22 +3270,24 @@ An argument says how many frames up to go."));
 Same as the `up' command, but does not print anything.\n\
 This is useful in command scripts."));
 
-  add_com ("down", class_stack, down_command, _("\
+  cmd_list_element *down_cmd
+    = add_com ("down", class_stack, down_command, _("\
 Select and print stack frame called by this one.\n\
 An argument says how many frames down to go."));
-  add_com_alias ("do", "down", class_stack, 1);
-  add_com_alias ("dow", "down", class_stack, 1);
+  add_com_alias ("do", down_cmd, class_stack, 1);
+  add_com_alias ("dow", down_cmd, class_stack, 1);
   add_com ("down-silently", class_support, down_silently_command, _("\
 Same as the `down' command, but does not print anything.\n\
 This is useful in command scripts."));
 
-  add_prefix_cmd ("frame", class_stack,
-                  &frame_cmd.base_command, _("\
+  cmd_list_element *frame_cmd_el
+    = add_prefix_cmd ("frame", class_stack,
+                     &frame_cmd.base_command, _("\
 Select and print a stack frame.\n\
 With no argument, print the selected stack frame.  (See also \"info frame\").\n\
 A single numerical argument specifies the frame to select."),
-                  &frame_cmd_list, "frame ", 1, &cmdlist);
-  add_com_alias ("f", "frame", class_stack, 1);
+                     &frame_cmd_list, 1, &cmdlist);
+  add_com_alias ("f", frame_cmd_el, class_stack, 1);
 
 #define FRAME_APPLY_OPTION_HELP "\
 Prints the frame location information followed by COMMAND output.\n\
@@ -3347,7 +3310,7 @@ With a negative COUNT argument, applies the command on outermost -COUNT frames.\
 
   cmd = add_prefix_cmd ("apply", class_stack, frame_apply_command,
                        frame_apply_cmd_help.c_str (),
-                       &frame_apply_cmd_list, "frame apply ", 1,
+                       &frame_apply_cmd_list, 1,
                        &frame_cmd_list);
   set_cmd_completer_handle_brkchars (cmd, frame_apply_cmd_completer);
 
@@ -3420,7 +3383,7 @@ Usage: frame level LEVEL"),
                      &select_frame_cmd.base_command, _("\
 Select a stack frame without printing anything.\n\
 A single numerical argument specifies the frame to select."),
-                     &select_frame_cmd_list, "select-frame ", 1, &cmdlist,
+                     &select_frame_cmd_list, 1, &cmdlist,
                      &cli_suppress_notification.user_selected_context);
 
   add_cmd_suppress_notification ("address", class_stack,
@@ -3478,25 +3441,27 @@ For backward compatibility, the following qualifiers are supported:\n\
 With a negative COUNT, print outermost -COUNT frames."),
                               backtrace_opts);
 
-  cmd_list_element *c = add_com ("backtrace", class_stack,
-                                backtrace_command,
-                                backtrace_help.c_str ());
-  set_cmd_completer_handle_brkchars (c, backtrace_command_completer);
+  cmd_list_element *backtrace_cmd
+    = add_com ("backtrace", class_stack, backtrace_command,
+              backtrace_help.c_str ());
+  set_cmd_completer_handle_brkchars (backtrace_cmd, backtrace_command_completer);
 
-  add_com_alias ("bt", "backtrace", class_stack, 0);
+  add_com_alias ("bt", backtrace_cmd, class_stack, 0);
 
-  add_com_alias ("where", "backtrace", class_alias, 0);
-  add_info ("stack", backtrace_command,
-           _("Backtrace of the stack, or innermost COUNT frames."));
-  add_info_alias ("s", "stack", 1);
+  add_com_alias ("where", backtrace_cmd, class_stack, 0);
+  cmd_list_element *info_stack_cmd
+    = add_info ("stack", backtrace_command,
+               _("Backtrace of the stack, or innermost COUNT frames."));
+  add_info_alias ("s", info_stack_cmd, 1);
 
-  add_prefix_cmd ("frame", class_info, &info_frame_cmd.base_command,
-                 _("All about the selected stack frame.\n\
+  cmd_list_element *info_frame_cmd_el
+    = add_prefix_cmd ("frame", class_info, &info_frame_cmd.base_command,
+                     _("All about the selected stack frame.\n\
 With no arguments, displays information about the currently selected stack\n\
 frame.  Alternatively a frame specification may be provided (See \"frame\")\n\
 the information is then printed about the specified frame."),
-                 &info_frame_cmd_list, "info frame ", 1, &infolist);
-  add_info_alias ("f", "frame", 1);
+                     &info_frame_cmd_list, 1, &infolist);
+  add_info_alias ("f", info_frame_cmd_el, 1);
 
   add_cmd ("address", class_stack, &info_frame_cmd.address,
           _("\
@@ -3545,27 +3510,23 @@ Prints the argument variables of the current stack frame.\n"),
                                        false));
   set_cmd_completer_handle_brkchars (cmd, info_print_command_completer);
 
-  if (dbx_commands)
-    add_com ("func", class_stack, func_command, _("\
-Select the stack frame that contains NAME.\n\
-Usage: func NAME"));
-
   /* Install "set print raw frame-arguments", a deprecated spelling of
      "set print raw-frame-arguments".  */
-  cmd = add_setshow_boolean_cmd
-    ("frame-arguments", no_class,
-     &user_frame_print_options.print_raw_frame_arguments,
-     _("\
+  set_show_commands set_show_frame_args
+    = add_setshow_boolean_cmd
+      ("frame-arguments", no_class,
+       &user_frame_print_options.print_raw_frame_arguments,
+       _("\
 Set whether to print frame arguments in raw form."), _("\
 Show whether to print frame arguments in raw form."), _("\
 If set, frame arguments are printed in raw form, bypassing any\n\
 pretty-printers for that value."),
-     NULL, NULL,
-     &setprintrawlist, &showprintrawlist);
-  deprecate_cmd (cmd, "set print raw-frame-arguments");
+       NULL, NULL,
+       &setprintrawlist, &showprintrawlist);
+  deprecate_cmd (set_show_frame_args.set, "set print raw-frame-arguments");
 
   add_setshow_auto_boolean_cmd ("disassemble-next-line", class_stack,
-                               &disassemble_next_line, _("\
+                               &disassemble_next_line, _("\
 Set whether to disassemble next source line or insn when execution stops."),
                                _("\
 Show whether to disassemble next source line or insn when execution stops."),
@@ -3579,9 +3540,9 @@ If AUTO, display disassembly of next instruction only if the source line\n\
 cannot be displayed.\n\
 If OFF (which is the default), never display the disassembly of the next\n\
 source line."),
-                               NULL,
-                               show_disassemble_next_line,
-                               &setlist, &showlist);
+                               NULL,
+                               show_disassemble_next_line,
+                               &setlist, &showlist);
   disassemble_next_line = AUTO_BOOLEAN_FALSE;
 
   gdb::option::add_setshow_cmds_for_options