Pass dwarf2_cu to process_full_{comp,type}_unit
[deliverable/binutils-gdb.git] / gdb / symmisc.c
index 3e67926b1ffbd85470077c60f559ae9ab7274528..fc56cfa9381c3ac36cccbd919563ff9a8c4e5d05 100644 (file)
@@ -1,6 +1,6 @@
 /* Do various things to symbol tables (other than lookup), for GDB.
 
-   Copyright (C) 1986-2019 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,7 +52,7 @@ FILE *std_err;
 
 /* Prototypes for local functions */
 
-static int block_depth (struct block *);
+static int block_depth (const struct block *);
 
 static void print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
                          int depth, ui_file *outfile);
@@ -61,95 +61,83 @@ static void print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
 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 (struct program_space *pspace : program_spaces)
+    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->string_cache.print_statistics ("string 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)
+  for (struct program_space *pspace : program_spaces)
+    for (objfile *objfile : pspace->objfiles ())
       {
-        i++;
-        if (SYMTAB_LINETABLE (s) != NULL)
-          linetables++;
+       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 string cache: %d\n"),
+                        objfile->per_bfd->string_cache.memory_used ());
       }
-    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));
-  }
 }
 
 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);
@@ -164,16 +152,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");
     }
@@ -184,8 +176,7 @@ dump_objfile (struct objfile *objfile)
 static void
 dump_msymbols (struct objfile *objfile, struct ui_file *outfile)
 {
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
-  struct minimal_symbol *msymbol;
+  struct gdbarch *gdbarch = objfile->arch ();
   int index;
   char ms_type;
 
@@ -196,7 +187,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);
 
@@ -238,23 +229,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);
@@ -273,18 +266,20 @@ static void
 dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
 {
   struct objfile *objfile = SYMTAB_OBJFILE (symtab);
-  struct gdbarch *gdbarch = get_objfile_arch (objfile);
+  struct gdbarch *gdbarch = objfile->arch ();
   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",
-                   symtab_to_filename_for_display (symtab));
+  fprintf_filtered (outfile, "\nSymtab for file %s at %s\n",
+                   symtab_to_filename_for_display (symtab),
+                   host_address_to_string (symtab));
+
   if (SYMTAB_DIRNAME (symtab) != NULL)
     fprintf_filtered (outfile, "Compilation directory is %s\n",
                      SYMTAB_DIRNAME (symtab));
@@ -305,12 +300,14 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
        {
          fprintf_filtered (outfile, " line %d at ", l->item[i].line);
          fputs_filtered (paddress (gdbarch, l->item[i].pc), outfile);
+         if (l->item[i].is_stmt)
+           fprintf_filtered (outfile, "\t(stmt)");
          fprintf_filtered (outfile, "\n");
        }
     }
   /* Now print the block info, but only for compunit symtabs since we will
      print lots of duplicate info otherwise.  */
-  if (symtab == COMPUNIT_FILETABS (SYMTAB_COMPUNIT (symtab)))
+  if (is_main_symtab_of_compunit_symtab (symtab))
     {
       fprintf_filtered (outfile, "\nBlockvector:\n\n");
       bv = SYMTAB_BLOCKVECTOR (symtab);
@@ -331,36 +328,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)
            {
-             TRY
+             try
                {
                  print_symbol (gdbarch, sym, depth + 1, outfile);
                }
-             CATCH (ex, RETURN_MASK_ERROR)
+             catch (const gdb_exception_error &ex)
                {
                  exception_fprintf (gdb_stderr, ex,
                                     "Error printing symbol:\n");
                }
-             END_CATCH
            }
        }
       fprintf_filtered (outfile, "\n");
@@ -374,6 +370,30 @@ dump_symtab_1 (struct symtab *symtab, struct ui_file *outfile)
                        "\nBlockvector same as owning compunit: %s\n\n",
                        compunit_filename);
     }
+
+  /* Print info about the user of this compunit_symtab, and the
+     compunit_symtabs included by this one. */
+  if (is_main_symtab_of_compunit_symtab (symtab))
+    {
+      struct compunit_symtab *cust = SYMTAB_COMPUNIT (symtab);
+
+      if (cust->user != nullptr)
+       {
+         const char *addr
+           = host_address_to_string (COMPUNIT_FILETABS (cust->user));
+         fprintf_filtered (outfile, "Compunit user: %s\n", addr);
+       }
+      if (cust->includes != nullptr)
+       for (i = 0; ; ++i)
+         {
+           struct compunit_symtab *include = cust->includes[i];
+           if (include == nullptr)
+             break;
+           const char *addr
+             = host_address_to_string (COMPUNIT_FILETABS (include));
+           fprintf_filtered (outfile, "Compunit include: %s\n", addr);
+         }
+    }
 }
 
 static void
@@ -386,13 +406,9 @@ 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);
@@ -472,12 +488,9 @@ maintenance_print_symbols (const 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;
 
@@ -488,21 +501,24 @@ maintenance_print_symbols (const 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);
            }
        }
 
@@ -527,13 +543,12 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
   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;
@@ -541,7 +556,7 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
 
   if (SYMBOL_DOMAIN (symbol) == STRUCT_DOMAIN)
     {
-      if (TYPE_NAME (SYMBOL_TYPE (symbol)))
+      if (SYMBOL_TYPE (symbol)->name ())
        {
          LA_PRINT_TYPE (SYMBOL_TYPE (symbol), "", outfile, 1, depth,
                         &type_print_raw_options);
@@ -549,11 +564,11 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
       else
        {
          fprintf_filtered (outfile, "%s %s = ",
-                        (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_ENUM
+                        (SYMBOL_TYPE (symbol)->code () == TYPE_CODE_ENUM
                          ? "enum"
-                    : (TYPE_CODE (SYMBOL_TYPE (symbol)) == TYPE_CODE_STRUCT
+                    : (SYMBOL_TYPE (symbol)->code () == 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);
        }
@@ -566,15 +581,15 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
       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,
+                        SYMBOL_TYPE (symbol)->code () != TYPE_CODE_ENUM,
                         depth,
                         &type_print_raw_options);
          fprintf_filtered (outfile, "; ");
        }
       else
-       fprintf_filtered (outfile, "%s ", SYMBOL_PRINT_NAME (symbol));
+       fprintf_filtered (outfile, "%s ", symbol->print_name ());
 
       switch (SYMBOL_CLASS (symbol))
        {
@@ -589,8 +604,8 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
            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]);
@@ -603,8 +618,7 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
                          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:
@@ -645,8 +659,7 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
                          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:
@@ -662,8 +675,7 @@ print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
                          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:
@@ -692,7 +704,6 @@ maintenance_print_msymbols (const char *args, int from_tty)
 {
   struct ui_file *outfile = gdb_stdout;
   char *objfile_arg = NULL;
-  struct objfile *objfile;
   int i, outfile_idx;
 
   dont_repeat ();
@@ -736,28 +747,25 @@ maintenance_print_msymbols (const char *args, int from_tty)
       outfile = &arg_outfile;
     }
 
-  ALL_OBJFILES (objfile)
-  {
-    QUIT;
-    if (objfile_arg == NULL
-       || compare_filenames_for_search (objfile_name (objfile), objfile_arg))
-      dump_msymbols (objfile, outfile);
-  }
+  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 (const char *regexp, int from_tty)
 {
-  struct program_space *pspace;
-  struct objfile *objfile;
-
   dont_repeat ();
 
   if (regexp)
     re_comp (regexp);
 
-  ALL_PSPACES (pspace)
-    ALL_PSPACE_OBJFILES (pspace, objfile)
+  for (struct program_space *pspace : program_spaces)
+    for (objfile *objfile : pspace->objfiles ())
       {
        QUIT;
        if (! regexp
@@ -771,87 +779,103 @@ maintenance_print_objfiles (const char *regexp, int from_tty)
 static void
 maintenance_info_symtabs (const char *regexp, int from_tty)
 {
-  struct program_space *pspace;
-  struct objfile *objfile;
-
   dont_repeat ();
 
   if (regexp)
     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 (struct program_space *pspace : program_spaces)
+    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");
-       }
+                       printf_filtered ("    user"
+                                        " ((struct compunit_symtab *) %s)\n",
+                                        cust->user != nullptr
+                                        ? host_address_to_string (cust->user)
+                                        : "(null)");
+                       if (cust->includes != nullptr)
+                         {
+                           printf_filtered ("    ( includes\n");
+                           for (int i = 0; ; ++i)
+                             {
+                               struct compunit_symtab *include
+                                 = cust->includes[i];
+                               if (include == nullptr)
+                                 break;
+                               const char *addr
+                                 = host_address_to_string (include);
+                               printf_filtered ("      (%s %s)\n",
+                                                "(struct compunit_symtab *)",
+                                                addr);
+                             }
+                           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.
@@ -865,50 +889,45 @@ maintenance_info_symtabs (const char *regexp, int from_tty)
 static void
 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.  */
+  for (struct program_space *pspace : program_spaces)
+    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 (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");
-           }
-       }
+       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");
+             }
+         }
 
-      if (printed_objfile_start)
-        printf_filtered ("}\n");
-    }
+       if (printed_objfile_start)
+         printf_filtered ("}\n");
+      }
 }
 
 /* Expand all symbol tables whose name matches an optional regexp.  */
@@ -916,8 +935,6 @@ maintenance_check_symtabs (const char *ignore, int from_tty)
 static void
 maintenance_expand_symtabs (const char *args, int from_tty)
 {
-  struct program_space *pspace;
-  struct objfile *objfile;
   char *regexp = NULL;
 
   /* We use buildargv here so that we handle spaces in the regexp
@@ -937,36 +954,32 @@ maintenance_expand_symtabs (const char *args, int from_tty)
   if (regexp)
     re_comp (regexp);
 
-  ALL_PSPACES (pspace)
-    ALL_PSPACE_OBJFILES (pspace, objfile)
-    {
-      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);
-       }
-    }
+  for (struct program_space *pspace : program_spaces)
+    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)));
+              },
+              NULL,
+              NULL,
+              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;
 
@@ -1006,20 +1019,31 @@ maintenance_print_one_line_table (struct symtab *symtab, void *data)
     printf_filtered (_("Line table has no lines.\n"));
   else
     {
-      int i;
-
       /* Leave space for 6 digits of index and line number.  After that the
         tables will just not format as well.  */
-      printf_filtered (_("%-6s %6s %s\n"),
-                      _("INDEX"), _("LINE"), _("ADDRESS"));
-
-      for (i = 0; i < linetable->nitems; ++i)
+      struct ui_out *uiout = current_uiout;
+      ui_out_emit_table table_emitter (uiout, 4, -1, "line-table");
+      uiout->table_header (6, ui_left, "index", _("INDEX"));
+      uiout->table_header (6, ui_left, "line", _("LINE"));
+      uiout->table_header (18, ui_left, "address", _("ADDRESS"));
+      uiout->table_header (1, ui_left, "is-stmt", _("IS-STMT"));
+      uiout->table_body ();
+
+      for (int i = 0; i < linetable->nitems; ++i)
        {
          struct linetable_entry *item;
 
          item = &linetable->item [i];
-         printf_filtered (_("%-6d %6d %s\n"), i, item->line,
-                          core_addr_to_string (item->pc));
+         ui_out_emit_tuple tuple_emitter (uiout, nullptr);
+         uiout->field_signed ("index", i);
+         if (item->line > 0)
+           uiout->field_signed ("line", item->line);
+         else
+           uiout->field_string ("line", _("END"));
+         uiout->field_core_addr ("address", objfile->arch (),
+                                 item->pc);
+         uiout->field_string ("is-stmt", item->is_stmt ? "Y" : "");
+         uiout->text ("\n");
        }
     }
 
@@ -1031,40 +1055,35 @@ maintenance_print_one_line_table (struct symtab *symtab, void *data)
 static void
 maintenance_info_line_tables (const char *regexp, int from_tty)
 {
-  struct program_space *pspace;
-  struct objfile *objfile;
-
   dont_repeat ();
 
   if (regexp != NULL)
     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 (struct program_space *pspace : program_spaces)
+    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
 
 /* Do early runtime initializations.  */
 
+void _initialize_symmisc ();
 void
-_initialize_symmisc (void)
+_initialize_symmisc ()
 {
   std_in = stdin;
   std_out = stdout;
@@ -1072,8 +1091,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\
@@ -1083,7 +1102,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.04578 seconds and 4 git commands to generate.