gdb/testsuite/tui: Introduce check_box_contents
[deliverable/binutils-gdb.git] / gdb / symmisc.c
index ab50570b9610ca52952ed535ae03b7ad7d683208..a5b17ffa3810e4c8a6b5440178515b651421e611 100644 (file)
@@ -1,6 +1,6 @@
 /* Do various things to symbol tables (other than lookup), for GDB.
 
-   Copyright (C) 1986-2017 Free Software Foundation, Inc.
+   Copyright (C) 1986-2020 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -36,7 +36,7 @@
 #include "typeprint.h"
 #include "gdbcmd.h"
 #include "source.h"
-#include "readline/readline.h"
+#include "readline/tilde.h"
 
 #include "psymtab.h"
 
@@ -52,113 +52,99 @@ FILE *std_err;
 
 /* Prototypes for local functions */
 
-static int block_depth (struct block *);
+static int block_depth (const struct block *);
 
-void _initialize_symmisc (void);
-
-struct print_symbol_args
-  {
-    struct gdbarch *gdbarch;
-    struct symbol *symbol;
-    int depth;
-    struct ui_file *outfile;
-  };
-
-static int print_symbol (void *);
+static void print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
+                         int depth, ui_file *outfile);
 \f
 
 void
 print_symbol_bcache_statistics (void)
 {
   struct program_space *pspace;
-  struct objfile *objfile;
 
   ALL_PSPACES (pspace)
-    ALL_PSPACE_OBJFILES (pspace, objfile)
-  {
-    QUIT;
-    printf_filtered (_("Byte cache statistics for '%s':\n"),
-                    objfile_name (objfile));
-    print_bcache_statistics (psymbol_bcache_get_bcache (objfile->psymbol_cache),
-                             "partial symbol cache");
-    print_bcache_statistics (objfile->per_bfd->macro_cache,
-                            "preprocessor macro cache");
-    print_bcache_statistics (objfile->per_bfd->filename_cache,
-                            "file name cache");
-  }
+    for (objfile *objfile : pspace->objfiles ())
+      {
+       QUIT;
+       printf_filtered (_("Byte cache statistics for '%s':\n"),
+                        objfile_name (objfile));
+       objfile->partial_symtabs->psymbol_cache.print_statistics
+         ("partial symbol cache");
+       objfile->per_bfd->macro_cache.print_statistics
+         ("preprocessor macro cache");
+       objfile->per_bfd->filename_cache.print_statistics ("file name cache");
+      }
 }
 
 void
 print_objfile_statistics (void)
 {
   struct program_space *pspace;
-  struct objfile *objfile;
-  struct compunit_symtab *cu;
-  struct symtab *s;
   int i, linetables, blockvectors;
 
   ALL_PSPACES (pspace)
-    ALL_PSPACE_OBJFILES (pspace, objfile)
-  {
-    QUIT;
-    printf_filtered (_("Statistics for '%s':\n"), objfile_name (objfile));
-    if (OBJSTAT (objfile, n_stabs) > 0)
-      printf_filtered (_("  Number of \"stab\" symbols read: %d\n"),
-                      OBJSTAT (objfile, n_stabs));
-    if (objfile->per_bfd->n_minsyms > 0)
-      printf_filtered (_("  Number of \"minimal\" symbols read: %d\n"),
-                      objfile->per_bfd->n_minsyms);
-    if (OBJSTAT (objfile, n_psyms) > 0)
-      printf_filtered (_("  Number of \"partial\" symbols read: %d\n"),
-                      OBJSTAT (objfile, n_psyms));
-    if (OBJSTAT (objfile, n_syms) > 0)
-      printf_filtered (_("  Number of \"full\" symbols read: %d\n"),
-                      OBJSTAT (objfile, n_syms));
-    if (OBJSTAT (objfile, n_types) > 0)
-      printf_filtered (_("  Number of \"types\" defined: %d\n"),
-                      OBJSTAT (objfile, n_types));
-    if (objfile->sf)
-      objfile->sf->qf->print_stats (objfile);
-    i = linetables = blockvectors = 0;
-    ALL_OBJFILE_FILETABS (objfile, cu, s)
-      {
-        i++;
-        if (SYMTAB_LINETABLE (s) != NULL)
-          linetables++;
-      }
-    ALL_OBJFILE_COMPUNITS (objfile, cu)
-      blockvectors++;
-    printf_filtered (_("  Number of symbol tables: %d\n"), i);
-    printf_filtered (_("  Number of symbol tables with line tables: %d\n"),
-                     linetables);
-    printf_filtered (_("  Number of symbol tables with blockvectors: %d\n"),
-                     blockvectors);
-
-    if (OBJSTAT (objfile, sz_strtab) > 0)
-      printf_filtered (_("  Space used by string tables: %d\n"),
-                      OBJSTAT (objfile, sz_strtab));
-    printf_filtered (_("  Total memory used for objfile obstack: %s\n"),
-                    pulongest (obstack_memory_used (&objfile
-                                                    ->objfile_obstack)));
-    printf_filtered (_("  Total memory used for BFD obstack: %s\n"),
-                    pulongest (obstack_memory_used (&objfile->per_bfd
-                                                    ->storage_obstack)));
-    printf_filtered (_("  Total memory used for psymbol cache: %d\n"),
-                    bcache_memory_used (psymbol_bcache_get_bcache
-                                         (objfile->psymbol_cache)));
-    printf_filtered (_("  Total memory used for macro cache: %d\n"),
-                    bcache_memory_used (objfile->per_bfd->macro_cache));
-    printf_filtered (_("  Total memory used for file name cache: %d\n"),
-                    bcache_memory_used (objfile->per_bfd->filename_cache));
-  }
+  for (objfile *objfile : pspace->objfiles ())
+    {
+      QUIT;
+      printf_filtered (_("Statistics for '%s':\n"), objfile_name (objfile));
+      if (OBJSTAT (objfile, n_stabs) > 0)
+       printf_filtered (_("  Number of \"stab\" symbols read: %d\n"),
+                        OBJSTAT (objfile, n_stabs));
+      if (objfile->per_bfd->n_minsyms > 0)
+       printf_filtered (_("  Number of \"minimal\" symbols read: %d\n"),
+                        objfile->per_bfd->n_minsyms);
+      if (OBJSTAT (objfile, n_psyms) > 0)
+       printf_filtered (_("  Number of \"partial\" symbols read: %d\n"),
+                        OBJSTAT (objfile, n_psyms));
+      if (OBJSTAT (objfile, n_syms) > 0)
+       printf_filtered (_("  Number of \"full\" symbols read: %d\n"),
+                        OBJSTAT (objfile, n_syms));
+      if (OBJSTAT (objfile, n_types) > 0)
+       printf_filtered (_("  Number of \"types\" defined: %d\n"),
+                        OBJSTAT (objfile, n_types));
+      if (objfile->sf)
+       objfile->sf->qf->print_stats (objfile);
+      i = linetables = 0;
+      for (compunit_symtab *cu : objfile->compunits ())
+       {
+         for (symtab *s : compunit_filetabs (cu))
+           {
+             i++;
+             if (SYMTAB_LINETABLE (s) != NULL)
+               linetables++;
+           }
+       }
+      blockvectors = std::distance (objfile->compunits ().begin (),
+                                   objfile->compunits ().end ());
+      printf_filtered (_("  Number of symbol tables: %d\n"), i);
+      printf_filtered (_("  Number of symbol tables with line tables: %d\n"),
+                      linetables);
+      printf_filtered (_("  Number of symbol tables with blockvectors: %d\n"),
+                      blockvectors);
+
+      if (OBJSTAT (objfile, sz_strtab) > 0)
+       printf_filtered (_("  Space used by string tables: %d\n"),
+                        OBJSTAT (objfile, sz_strtab));
+      printf_filtered (_("  Total memory used for objfile obstack: %s\n"),
+                      pulongest (obstack_memory_used (&objfile
+                                                      ->objfile_obstack)));
+      printf_filtered (_("  Total memory used for BFD obstack: %s\n"),
+                      pulongest (obstack_memory_used (&objfile->per_bfd
+                                                      ->storage_obstack)));
+      printf_filtered
+       (_("  Total memory used for psymbol cache: %d\n"),
+        objfile->partial_symtabs->psymbol_cache.memory_used ());
+      printf_filtered (_("  Total memory used for macro cache: %d\n"),
+                      objfile->per_bfd->macro_cache.memory_used ());
+      printf_filtered (_("  Total memory used for file name cache: %d\n"),
+                      objfile->per_bfd->filename_cache.memory_used ());
+    }
 }
 
 static void
 dump_objfile (struct objfile *objfile)
 {
-  struct compunit_symtab *cust;
-  struct symtab *symtab;
-
   printf_filtered ("\nObject file %s:  ", objfile_name (objfile));
   printf_filtered ("Objfile at ");
   gdb_print_host_address (objfile, gdb_stdout);
@@ -173,16 +159,20 @@ dump_objfile (struct objfile *objfile)
   if (objfile->compunit_symtabs != NULL)
     {
       printf_filtered ("Symtabs:\n");
-      ALL_OBJFILE_FILETABS (objfile, cust, symtab)
+      for (compunit_symtab *cu : objfile->compunits ())
        {
-         printf_filtered ("%s at ", symtab_to_filename_for_display (symtab));
-         gdb_print_host_address (symtab, gdb_stdout);
-         printf_filtered (", ");
-         if (SYMTAB_OBJFILE (symtab) != objfile)
+         for (symtab *symtab : compunit_filetabs (cu))
            {
-             printf_filtered ("NOT ON CHAIN!  ");
+             printf_filtered ("%s at ",
+                              symtab_to_filename_for_display (symtab));
+             gdb_print_host_address (symtab, gdb_stdout);
+             printf_filtered (", ");
+             if (SYMTAB_OBJFILE (symtab) != objfile)
+               {
+                 printf_filtered ("NOT ON CHAIN!  ");
+               }
+             wrap_here ("  ");
            }
-         wrap_here ("  ");
        }
       printf_filtered ("\n\n");
     }
@@ -194,7 +184,6 @@ static void
 dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
 {
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  struct minimal_symbol *msymbol;
   int index;
   char ms_type;
 
@@ -205,7 +194,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
       return;
     }
   index = 0;
-  ALL_OBJFILE_MSYMBOLS (objfile, msymbol)
+  for (minimal_symbol *msymbol : objfile->msymbols ())
     {
       struct obj_section *section = MSYMBOL_OBJ_SECTION (objfile, msymbol);
 
@@ -218,6 +207,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
          ms_type = 'T';
          break;
        case mst_text_gnu_ifunc:
+       case mst_data_gnu_ifunc:
          ms_type = 'i';
          break;
        case mst_solib_trampoline:
@@ -246,23 +236,25 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
          break;
        }
       fprintf_filtered (outfile, "[%2d] %c ", index, ms_type);
-      fputs_filtered (paddress (gdbarch, MSYMBOL_VALUE_ADDRESS (objfile,
-                                                               msymbol)),
-                     outfile);
-      fprintf_filtered (outfile, " %s", MSYMBOL_LINKAGE_NAME (msymbol));
+
+      /* Use the relocated address as shown in the symbol here -- do
+        not try to respect copy relocations.  */
+      CORE_ADDR addr = (msymbol->value.address
+                       + objfile->section_offsets[msymbol->section]);
+      fputs_filtered (paddress (gdbarch, addr), outfile);
+      fprintf_filtered (outfile, " %s", msymbol->linkage_name ());
       if (section)
        {
          if (section->the_bfd_section != NULL)
            fprintf_filtered (outfile, " section %s",
-                             bfd_section_name (objfile->obfd,
-                                               section->the_bfd_section));
+                             bfd_section_name (section->the_bfd_section));
          else
            fprintf_filtered (outfile, " spurious section %ld",
                              (long) (section - objfile->sections));
        }
-      if (MSYMBOL_DEMANGLED_NAME (msymbol) != NULL)
+      if (msymbol->demangled_name () != NULL)
        {
-         fprintf_filtered (outfile, "  %s", MSYMBOL_DEMANGLED_NAME (msymbol));
+         fprintf_filtered (outfile, "  %s", msymbol->demangled_name ());
        }
       if (msymbol->filename)
        fprintf_filtered (outfile, "  %s", msymbol->filename);
@@ -283,12 +275,12 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
   struct objfile *objfile = SYMTAB_OBJFILE (symtab);
   struct gdbarch *gdbarch = get_objfile_arch (objfile);
   int i;
-  struct dict_iterator iter;
+  struct mdict_iterator miter;
   int len;
   struct linetable *l;
   const struct blockvector *bv;
   struct symbol *sym;
-  struct block *b;
+  const struct block *b;
   int depth;
 
   fprintf_filtered (outfile, "\nSymtab for file %s\n",
@@ -339,34 +331,35 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
             even if we're using a hashtable, but nothing else but this message
             wants it.  */
          fprintf_filtered (outfile, ", %d syms/buckets in ",
-                           dict_size (BLOCK_DICT (b)));
+                           mdict_size (BLOCK_MULTIDICT (b)));
          fputs_filtered (paddress (gdbarch, BLOCK_START (b)), outfile);
          fprintf_filtered (outfile, "..");
          fputs_filtered (paddress (gdbarch, BLOCK_END (b)), outfile);
          if (BLOCK_FUNCTION (b))
            {
              fprintf_filtered (outfile, ", function %s",
-                               SYMBOL_LINKAGE_NAME (BLOCK_FUNCTION (b)));
-             if (SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)) != NULL)
+                               BLOCK_FUNCTION (b)->linkage_name ());
+             if (BLOCK_FUNCTION (b)->demangled_name () != NULL)
                {
                  fprintf_filtered (outfile, ", %s",
-                               SYMBOL_DEMANGLED_NAME (BLOCK_FUNCTION (b)));
+                               BLOCK_FUNCTION (b)->demangled_name ());
                }
            }
          fprintf_filtered (outfile, "\n");
          /* Now print each symbol in this block (in no particular order, if
             we're using a hashtable).  Note that we only want this
             block, not any blocks from included symtabs.  */
-         ALL_DICT_SYMBOLS (BLOCK_DICT (b), iter, sym)
+         ALL_DICT_SYMBOLS (BLOCK_MULTIDICT (b), miter, sym)
            {
-             struct print_symbol_args s;
-
-             s.gdbarch = gdbarch;
-             s.symbol = sym;
-             s.depth = depth + 1;
-             s.outfile = outfile;
-             catch_errors (print_symbol, &s, "Error printing symbol:\n",
-                           RETURN_MASK_ERROR);
+             try
+               {
+                 print_symbol (gdbarch, sym, depth + 1, outfile);
+               }
+             catch (const gdb_exception_error &ex)
+               {
+                 exception_fprintf (gdb_stderr, ex,
+                                    "Error printing symbol:\n");
+               }
            }
        }
       fprintf_filtered (outfile, "\n");
@@ -392,31 +385,24 @@ dump_symtab (struct symtab *symtab, struct ui_file *outfile)
   if (symtab->language != language_unknown
       && symtab->language != language_auto)
     {
-      enum language saved_lang;
-
-      saved_lang = set_language (symtab->language);
-
+      scoped_restore_current_language save_lang;
+      set_language (symtab->language);
       dump_symtab_1 (symtab, outfile);
-
-      set_language (saved_lang);
     }
   else
     dump_symtab_1 (symtab, outfile);
 }
 
 static void
-maintenance_print_symbols (char *args, int from_tty)
+maintenance_print_symbols (const char *args, int from_tty)
 {
-  char **argv;
   struct ui_file *outfile = gdb_stdout;
-  struct cleanup *cleanups;
   char *address_arg = NULL, *source_arg = NULL, *objfile_arg = NULL;
   int i, outfile_idx;
 
   dont_repeat ();
 
-  argv = gdb_buildargv (args);
-  cleanups = make_cleanup_freeargv (argv);
+  gdb_argv argv (args);
 
   for (i = 0; argv != NULL && argv[i] != NULL; ++i)
     {
@@ -461,14 +447,12 @@ maintenance_print_symbols (char *args, int from_tty)
 
   if (argv != NULL && argv[outfile_idx] != NULL)
     {
-      char *outfile_name;
-
       if (argv[outfile_idx + 1] != NULL)
        error (_("Junk at end of command"));
-      outfile_name = tilde_expand (argv[outfile_idx]);
-      make_cleanup (xfree, outfile_name);
-      if (!arg_outfile.open (outfile_name, FOPEN_WT))
-       perror_with_name (outfile_name);
+      gdb::unique_xmalloc_ptr<char> outfile_name
+       (tilde_expand (argv[outfile_idx]));
+      if (!arg_outfile.open (outfile_name.get (), FOPEN_WT))
+       perror_with_name (outfile_name.get ());
       outfile = &arg_outfile;
     }
 
@@ -483,12 +467,9 @@ maintenance_print_symbols (char *args, int from_tty)
     }
   else
     {
-      struct objfile *objfile;
-      struct compunit_symtab *cu;
-      struct symtab *s;
       int found = 0;
 
-      ALL_OBJFILES (objfile)
+      for (objfile *objfile : current_program_space->objfiles ())
        {
          int print_for_objfile = 1;
 
@@ -499,43 +480,38 @@ maintenance_print_symbols (char *args, int from_tty)
          if (!print_for_objfile)
            continue;
 
-         ALL_OBJFILE_FILETABS (objfile, cu, s)
+         for (compunit_symtab *cu : objfile->compunits ())
            {
-             int print_for_source = 0;
-
-             QUIT;
-             if (source_arg != NULL)
+             for (symtab *s : compunit_filetabs (cu))
                {
-                 print_for_source
-                   = compare_filenames_for_search
-                       (symtab_to_filename_for_display (s), source_arg);
-                 found = 1;
+                 int print_for_source = 0;
+
+                 QUIT;
+                 if (source_arg != NULL)
+                   {
+                     print_for_source
+                       = compare_filenames_for_search
+                       (symtab_to_filename_for_display (s), source_arg);
+                     found = 1;
+                   }
+                 if (source_arg == NULL
+                     || print_for_source)
+                   dump_symtab (s, outfile);
                }
-             if (source_arg == NULL
-                 || print_for_source)
-               dump_symtab (s, outfile);
            }
        }
 
       if (source_arg != NULL && !found)
        error (_("No symtab for source file: %s"), source_arg);
     }
-
-  do_cleanups (cleanups);
 }
 
-/* Print symbol ARGS->SYMBOL on ARGS->OUTFILE.  ARGS->DEPTH says how
-   far to indent.  ARGS is really a struct print_symbol_args *, but is
-   declared as char * to get it past catch_errors.  Returns 0 for error,
-   1 for success.  */
+/* Print symbol SYMBOL on OUTFILE.  DEPTH says how far to indent.  */
 
-static int
-print_symbol (void *args)
+static void
+print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
+             int depth, ui_file *outfile)
 {
-  struct gdbarch *gdbarch = ((struct print_symbol_args *) args)->gdbarch;
-  struct symbol *symbol = ((struct print_symbol_args *) args)->symbol;
-  int depth = ((struct print_symbol_args *) args)->depth;
-  struct ui_file *outfile = ((struct print_symbol_args *) args)->outfile;
   struct obj_section *section;
 
   if (SYMBOL_OBJFILE_OWNED (symbol))
@@ -546,20 +522,20 @@ print_symbol (void *args)
   print_spaces (depth, outfile);
   if (SYMBOL_DOMAIN (symbol) == LABEL_DOMAIN)
     {
-      fprintf_filtered (outfile, "label %s at ", SYMBOL_PRINT_NAME (symbol));
+      fprintf_filtered (outfile, "label %s at ", symbol->print_name ());
       fputs_filtered (paddress (gdbarch, SYMBOL_VALUE_ADDRESS (symbol)),
                      outfile);
       if (section)
        fprintf_filtered (outfile, " section %s\n",
-                         bfd_section_name (section->the_bfd_section->owner,
-                                           section->the_bfd_section));
+                         bfd_section_name (section->the_bfd_section));
       else
        fprintf_filtered (outfile, "\n");
-      return 1;
+      return;
     }
+
   if (SYMBOL_DOMAIN (symbol) == STRUCT_DOMAIN)
     {
-      if (TYPE_TAG_NAME (SYMBOL_TYPE (symbol)))
+      if (TYPE_NAME (SYMBOL_TYPE (symbol)))
        {
          LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth,
                         &type_print_raw_options);
@@ -571,7 +547,7 @@ print_symbol (void *args)
                          ? "enum"
                     : (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_STRUCT
                        ? "struct" : "union")),
-                           SYMBOL_LINKAGE_NAME (symbol));
+                           symbol->linkage_name ());
          LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth,
                         &type_print_raw_options);
        }
@@ -584,7 +560,7 @@ print_symbol (void *args)
       if (SYMBOL_TYPE (symbol))
        {
          /* Print details of types, except for enums where it's clutter.  */
-         LA_PRINT_TYPE (SYMBOL_TYPE (symbol), SYMBOL_PRINT_NAME (symbol),
+         LA_PRINT_TYPE (SYMBOL_TYPE (symbol), symbol->print_name (),
                         outfile,
                         TYPE_CODE (SYMBOL_TYPE (symbol)) != TYPE_CODE_ENUM,
                         depth,
@@ -592,7 +568,7 @@ print_symbol (void *args)
          fprintf_filtered (outfile, "; ");
        }
       else
-       fprintf_filtered (outfile, "%s ", SYMBOL_PRINT_NAME (symbol));
+       fprintf_filtered (outfile, "%s ", symbol->print_name ());
 
       switch (SYMBOL_CLASS (symbol))
        {
@@ -607,8 +583,8 @@ print_symbol (void *args)
            unsigned i;
            struct type *type = check_typedef (SYMBOL_TYPE (symbol));
 
-           fprintf_filtered (outfile, "const %u hex bytes:",
-                             TYPE_LENGTH (type));
+           fprintf_filtered (outfile, "const %s hex bytes:",
+                             pulongest (TYPE_LENGTH (type)));
            for (i = 0; i < TYPE_LENGTH (type); i++)
              fprintf_filtered (outfile, " %02x",
                                (unsigned) SYMBOL_VALUE_BYTES (symbol)[i]);
@@ -621,8 +597,7 @@ print_symbol (void *args)
                          outfile);
          if (section)
            fprintf_filtered (outfile, " section %s",
-                             bfd_section_name (section->the_bfd_section->owner,
-                                               section->the_bfd_section));
+                             bfd_section_name (section->the_bfd_section));
          break;
 
        case LOC_REGISTER:
@@ -663,8 +638,7 @@ print_symbol (void *args)
                          outfile);
          if (section)
            fprintf_filtered (outfile, " section %s",
-                             bfd_section_name (section->the_bfd_section->owner,
-                                               section->the_bfd_section));
+                             bfd_section_name (section->the_bfd_section));
          break;
 
        case LOC_BLOCK:
@@ -680,8 +654,7 @@ print_symbol (void *args)
                          outfile);
          if (section)
            fprintf_filtered (outfile, " section %s",
-                             bfd_section_name (section->the_bfd_section->owner,
-                                               section->the_bfd_section));
+                             bfd_section_name (section->the_bfd_section));
          break;
 
        case LOC_COMPUTED:
@@ -703,23 +676,18 @@ print_symbol (void *args)
        }
     }
   fprintf_filtered (outfile, "\n");
-  return 1;
 }
 
 static void
-maintenance_print_msymbols (char *args, int from_tty)
+maintenance_print_msymbols (const char *args, int from_tty)
 {
-  char **argv;
   struct ui_file *outfile = gdb_stdout;
-  struct cleanup *cleanups;
   char *objfile_arg = NULL;
-  struct objfile *objfile;
   int i, outfile_idx;
 
   dont_repeat ();
 
-  argv = gdb_buildargv (args);
-  cleanups = make_cleanup_freeargv (argv);
+  gdb_argv argv (args);
 
   for (i = 0; argv != NULL && argv[i] != NULL; ++i)
     {
@@ -749,33 +717,28 @@ maintenance_print_msymbols (char *args, int from_tty)
 
   if (argv != NULL && argv[outfile_idx] != NULL)
     {
-      char *outfile_name;
-
       if (argv[outfile_idx + 1] != NULL)
        error (_("Junk at end of command"));
-      outfile_name = tilde_expand (argv[outfile_idx]);
-      make_cleanup (xfree, outfile_name);
-      if (!arg_outfile.open (outfile_name, FOPEN_WT))
-       perror_with_name (outfile_name);
+      gdb::unique_xmalloc_ptr<char> outfile_name
+       (tilde_expand (argv[outfile_idx]));
+      if (!arg_outfile.open (outfile_name.get (), FOPEN_WT))
+       perror_with_name (outfile_name.get ());
       outfile = &arg_outfile;
     }
 
-  ALL_OBJFILES (objfile)
-  {
-    QUIT;
-    if (objfile_arg == NULL
-       || compare_filenames_for_search (objfile_name (objfile), objfile_arg))
-      dump_msymbols (objfile, outfile);
-  }
-
-  do_cleanups (cleanups);
+  for (objfile *objfile : current_program_space->objfiles ())
+    {
+      QUIT;
+      if (objfile_arg == NULL
+         || compare_filenames_for_search (objfile_name (objfile), objfile_arg))
+       dump_msymbols (objfile, outfile);
+    }
 }
 
 static void
-maintenance_print_objfiles (char *regexp, int from_tty)
+maintenance_print_objfiles (const char *regexp, int from_tty)
 {
   struct program_space *pspace;
-  struct objfile *objfile;
 
   dont_repeat ();
 
@@ -783,7 +746,7 @@ maintenance_print_objfiles (char *regexp, int from_tty)
     re_comp (regexp);
 
   ALL_PSPACES (pspace)
-    ALL_PSPACE_OBJFILES (pspace, objfile)
+    for (objfile *objfile : pspace->objfiles ())
       {
        QUIT;
        if (! regexp
@@ -795,10 +758,9 @@ maintenance_print_objfiles (char *regexp, int from_tty)
 /* List all the symbol tables whose names match REGEXP (optional).  */
 
 static void
-maintenance_info_symtabs (char *regexp, int from_tty)
+maintenance_info_symtabs (const char *regexp, int from_tty)
 {
   struct program_space *pspace;
-  struct objfile *objfile;
 
   dont_repeat ();
 
@@ -806,78 +768,75 @@ maintenance_info_symtabs (char *regexp, int from_tty)
     re_comp (regexp);
 
   ALL_PSPACES (pspace)
-    ALL_PSPACE_OBJFILES (pspace, objfile)
-    {
-      struct compunit_symtab *cust;
-      struct symtab *symtab;
-
-      /* We don't want to print anything for this objfile until we
-         actually find a symtab whose name matches.  */
-      int printed_objfile_start = 0;
-
-      ALL_OBJFILE_COMPUNITS (objfile, cust)
-       {
-         int printed_compunit_symtab_start = 0;
-
-         ALL_COMPUNIT_FILETABS (cust, symtab)
-           {
-             QUIT;
+    for (objfile *objfile : pspace->objfiles ())
+      {
+       /* We don't want to print anything for this objfile until we
+          actually find a symtab whose name matches.  */
+       int printed_objfile_start = 0;
 
-             if (! regexp
-                 || re_exec (symtab_to_filename_for_display (symtab)))
-               {
-                 if (! printed_objfile_start)
-                   {
-                     printf_filtered ("{ objfile %s ", objfile_name (objfile));
-                     wrap_here ("  ");
-                     printf_filtered ("((struct objfile *) %s)\n",
-                                      host_address_to_string (objfile));
-                     printed_objfile_start = 1;
-                   }
-                 if (! printed_compunit_symtab_start)
-                   {
-                     printf_filtered ("  { ((struct compunit_symtab *) %s)\n",
-                                      host_address_to_string (cust));
-                     printf_filtered ("    debugformat %s\n",
-                                      COMPUNIT_DEBUGFORMAT (cust));
-                     printf_filtered ("    producer %s\n",
-                                      COMPUNIT_PRODUCER (cust) != NULL
-                                      ? COMPUNIT_PRODUCER (cust)
-                                      : "(null)");
-                     printf_filtered ("    dirname %s\n",
-                                      COMPUNIT_DIRNAME (cust) != NULL
-                                      ? COMPUNIT_DIRNAME (cust)
-                                      : "(null)");
-                     printf_filtered ("    blockvector"
-                                      " ((struct blockvector *) %s)\n",
-                                      host_address_to_string
+       for (compunit_symtab *cust : objfile->compunits ())
+         {
+           int printed_compunit_symtab_start = 0;
+
+           for (symtab *symtab : compunit_filetabs (cust))
+             {
+               QUIT;
+
+               if (! regexp
+                   || re_exec (symtab_to_filename_for_display (symtab)))
+                 {
+                   if (! printed_objfile_start)
+                     {
+                       printf_filtered ("{ objfile %s ", objfile_name (objfile));
+                       wrap_here ("  ");
+                       printf_filtered ("((struct objfile *) %s)\n",
+                                        host_address_to_string (objfile));
+                       printed_objfile_start = 1;
+                     }
+                   if (! printed_compunit_symtab_start)
+                     {
+                       printf_filtered ("  { ((struct compunit_symtab *) %s)\n",
+                                        host_address_to_string (cust));
+                       printf_filtered ("    debugformat %s\n",
+                                        COMPUNIT_DEBUGFORMAT (cust));
+                       printf_filtered ("    producer %s\n",
+                                        COMPUNIT_PRODUCER (cust) != NULL
+                                        ? COMPUNIT_PRODUCER (cust)
+                                        : "(null)");
+                       printf_filtered ("    dirname %s\n",
+                                        COMPUNIT_DIRNAME (cust) != NULL
+                                        ? COMPUNIT_DIRNAME (cust)
+                                        : "(null)");
+                       printf_filtered ("    blockvector"
+                                        " ((struct blockvector *) %s)\n",
+                                        host_address_to_string
                                         (COMPUNIT_BLOCKVECTOR (cust)));
-                     printed_compunit_symtab_start = 1;
-                   }
-
-                 printf_filtered ("\t{ symtab %s ",
-                                  symtab_to_filename_for_display (symtab));
-                 wrap_here ("    ");
-                 printf_filtered ("((struct symtab *) %s)\n",
-                                  host_address_to_string (symtab));
-                 printf_filtered ("\t  fullname %s\n",
-                                  symtab->fullname != NULL
-                                  ? symtab->fullname
-                                  : "(null)");
-                 printf_filtered ("\t  "
-                                  "linetable ((struct linetable *) %s)\n",
-                                  host_address_to_string (symtab->linetable));
-                 printf_filtered ("\t}\n");
-               }
-           }
-
-         if (printed_compunit_symtab_start)
-           printf_filtered ("  }\n");
-       }
+                       printed_compunit_symtab_start = 1;
+                     }
+
+                   printf_filtered ("\t{ symtab %s ",
+                                    symtab_to_filename_for_display (symtab));
+                   wrap_here ("    ");
+                   printf_filtered ("((struct symtab *) %s)\n",
+                                    host_address_to_string (symtab));
+                   printf_filtered ("\t  fullname %s\n",
+                                    symtab->fullname != NULL
+                                    ? symtab->fullname
+                                    : "(null)");
+                   printf_filtered ("\t  "
+                                    "linetable ((struct linetable *) %s)\n",
+                                    host_address_to_string (symtab->linetable));
+                   printf_filtered ("\t}\n");
+                 }
+             }
+
+           if (printed_compunit_symtab_start)
+             printf_filtered ("  }\n");
+         }
 
-      if (printed_objfile_start)
-        printf_filtered ("}\n");
-    }
+       if (printed_objfile_start)
+         printf_filtered ("}\n");
+      }
 }
 
 /* Check consistency of symtabs.
@@ -889,100 +848,62 @@ maintenance_info_symtabs (char *regexp, int from_tty)
    Use "maint check-psymtabs" for that.  */
 
 static void
-maintenance_check_symtabs (char *ignore, int from_tty)
+maintenance_check_symtabs (const char *ignore, int from_tty)
 {
   struct program_space *pspace;
-  struct objfile *objfile;
 
   ALL_PSPACES (pspace)
-    ALL_PSPACE_OBJFILES (pspace, objfile)
-    {
-      struct compunit_symtab *cust;
-
-      /* We don't want to print anything for this objfile until we
-         actually find something worth printing.  */
-      int printed_objfile_start = 0;
-
-      ALL_OBJFILE_COMPUNITS (objfile, cust)
-       {
-         int found_something = 0;
-         struct symtab *symtab = compunit_primary_filetab (cust);
-
-         QUIT;
-
-         if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
-           found_something = 1;
-         /* Add more checks here.  */
-
-         if (found_something)
-           {
-             if (! printed_objfile_start)
-               {
-                 printf_filtered ("{ objfile %s ", objfile_name (objfile));
-                 wrap_here ("  ");
-                 printf_filtered ("((struct objfile *) %s)\n",
-                                  host_address_to_string (objfile));
-                 printed_objfile_start = 1;
-               }
-             printf_filtered ("  { symtab %s\n",
-                              symtab_to_filename_for_display (symtab));
-             if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
-               printf_filtered ("    NULL blockvector\n");
-             printf_filtered ("  }\n");
-           }
-       }
-
-      if (printed_objfile_start)
-        printf_filtered ("}\n");
-    }
-}
-
-/* Helper function for maintenance_expand_symtabs.
-   This is the name_matcher function for expand_symtabs_matching.  */
-
-static int
-maintenance_expand_name_matcher (const char *symname, void *data)
-{
-  /* Since we're not searching on symbols, just return TRUE.  */
-  return 1;
-}
-
-/* Helper function for maintenance_expand_symtabs.
-   This is the file_matcher function for expand_symtabs_matching.  */
-
-static int
-maintenance_expand_file_matcher (const char *filename, void *data,
-                                int basenames)
-{
-  const char *regexp = (const char *) data;
-
-  QUIT;
-
-  /* KISS: Only apply the regexp to the complete file name.  */
-  if (basenames)
-    return 0;
+    for (objfile *objfile : pspace->objfiles ())
+      {
+       /* We don't want to print anything for this objfile until we
+          actually find something worth printing.  */
+       int printed_objfile_start = 0;
 
-  if (regexp == NULL || re_exec (filename))
-    return 1;
+       for (compunit_symtab *cust : objfile->compunits ())
+         {
+           int found_something = 0;
+           struct symtab *symtab = compunit_primary_filetab (cust);
+
+           QUIT;
+
+           if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
+             found_something = 1;
+           /* Add more checks here.  */
+
+           if (found_something)
+             {
+               if (! printed_objfile_start)
+                 {
+                   printf_filtered ("{ objfile %s ", objfile_name (objfile));
+                   wrap_here ("  ");
+                   printf_filtered ("((struct objfile *) %s)\n",
+                                    host_address_to_string (objfile));
+                   printed_objfile_start = 1;
+                 }
+               printf_filtered ("  { symtab %s\n",
+                                symtab_to_filename_for_display (symtab));
+               if (COMPUNIT_BLOCKVECTOR (cust) == NULL)
+                 printf_filtered ("    NULL blockvector\n");
+               printf_filtered ("  }\n");
+             }
+         }
 
-  return 0;
+       if (printed_objfile_start)
+         printf_filtered ("}\n");
+      }
 }
 
 /* Expand all symbol tables whose name matches an optional regexp.  */
 
 static void
-maintenance_expand_symtabs (char *args, int from_tty)
+maintenance_expand_symtabs (const char *args, int from_tty)
 {
   struct program_space *pspace;
-  struct objfile *objfile;
-  struct cleanup *cleanups;
-  char **argv;
   char *regexp = NULL;
 
   /* We use buildargv here so that we handle spaces in the regexp
      in a way that allows adding more arguments later.  */
-  argv = gdb_buildargv (args);
-  cleanups = make_cleanup_freeargv (argv);
+  gdb_argv argv (args);
 
   if (argv != NULL)
     {
@@ -998,24 +919,35 @@ maintenance_expand_symtabs (char *args, int from_tty)
     re_comp (regexp);
 
   ALL_PSPACES (pspace)
-    ALL_PSPACE_OBJFILES (pspace, objfile)
-    {
-      if (objfile->sf)
-       {
-         objfile->sf->qf->expand_symtabs_matching
-           (objfile, maintenance_expand_file_matcher,
-            maintenance_expand_name_matcher, NULL, ALL_DOMAIN, regexp);
-       }
-    }
-
-  do_cleanups (cleanups);
+    for (objfile *objfile : pspace->objfiles ())
+      {
+       if (objfile->sf)
+         {
+           objfile->sf->qf->expand_symtabs_matching
+             (objfile,
+              [&] (const char *filename, bool basenames)
+              {
+                /* KISS: Only apply the regexp to the complete file name.  */
+                return (!basenames
+                        && (regexp == NULL || re_exec (filename)));
+              },
+              lookup_name_info::match_any (),
+              [] (const char *symname)
+              {
+                /* Since we're not searching on symbols, just return true.  */
+                return true;
+              },
+              NULL,
+              ALL_DOMAIN);
+         }
+      }
 }
 \f
 
 /* Return the nexting depth of a block within other blocks in its symtab.  */
 
 static int
-block_depth (struct block *block)
+block_depth (const struct block *block)
 {
   int i = 0;
 
@@ -1078,10 +1010,9 @@ maintenance_print_one_line_table (struct symtab *symtab, void *data)
 /* Implement the 'maint info line-table' command.  */
 
 static void
-maintenance_info_line_tables (char *regexp, int from_tty)
+maintenance_info_line_tables (const char *regexp, int from_tty)
 {
   struct program_space *pspace;
-  struct objfile *objfile;
 
   dont_repeat ();
 
@@ -1089,23 +1020,20 @@ maintenance_info_line_tables (char *regexp, int from_tty)
     re_comp (regexp);
 
   ALL_PSPACES (pspace)
-    ALL_PSPACE_OBJFILES (pspace, objfile)
-    {
-      struct compunit_symtab *cust;
-      struct symtab *symtab;
-
-      ALL_OBJFILE_COMPUNITS (objfile, cust)
-       {
-         ALL_COMPUNIT_FILETABS (cust, symtab)
-           {
-             QUIT;
-
-             if (regexp == NULL
-                 || re_exec (symtab_to_filename_for_display (symtab)))
-               maintenance_print_one_line_table (symtab, NULL);
-           }
-       }
-    }
+    for (objfile *objfile : pspace->objfiles ())
+      {
+       for (compunit_symtab *cust : objfile->compunits ())
+         {
+           for (symtab *symtab : compunit_filetabs (cust))
+             {
+               QUIT;
+
+               if (regexp == NULL
+                   || re_exec (symtab_to_filename_for_display (symtab)))
+                 maintenance_print_one_line_table (symtab, NULL);
+             }
+         }
+      }
 }
 
 \f
@@ -1121,8 +1049,8 @@ _initialize_symmisc (void)
 
   add_cmd ("symbols", class_maintenance, maintenance_print_symbols, _("\
 Print dump of current symbol definitions.\n\
-Usage: mt print symbols [-pc address] [--] [outfile]\n\
-       mt print symbols [-objfile objfile] [-source source] [--] [outfile]\n\
+Usage: mt print symbols [-pc ADDRESS] [--] [OUTFILE]\n\
+       mt print symbols [-objfile OBJFILE] [-source SOURCE] [--] [OUTFILE]\n\
 Entries in the full symbol table are dumped to file OUTFILE,\n\
 or the terminal if OUTFILE is unspecified.\n\
 If ADDRESS is provided, dump only the file for that address.\n\
@@ -1132,7 +1060,7 @@ If OBJFILE is provided, dump only that file's minimal symbols."),
 
   add_cmd ("msymbols", class_maintenance, maintenance_print_msymbols, _("\
 Print dump of current minimal symbol definitions.\n\
-Usage: mt print msymbols [-objfile objfile] [--] [outfile]\n\
+Usage: mt print msymbols [-objfile OBJFILE] [--] [OUTFILE]\n\
 Entries in the minimal symbol table are dumped to file OUTFILE,\n\
 or the terminal if OUTFILE is unspecified.\n\
 If OBJFILE is provided, dump only that file's minimal symbols."),
This page took 0.03721 seconds and 4 git commands to generate.