Change how some psymbol readers access the psymtab storage
authorTom Tromey <tom@tromey.com>
Sat, 20 Mar 2021 23:23:40 +0000 (17:23 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 20 Mar 2021 23:23:42 +0000 (17:23 -0600)
Currently, all psymbol readers access the psymtab storage via the
objfile.  This is done directly at any spot requiring the storage.

In order to move psymbols out of the objfile, the psymtab_storage must
be passed in explicitly.  This patch consolidates the access of the
storage in a single place in these readers, updating various functions
to pass the storage object around.  "Hidden" uses, like
"objfile->psymtabs ()", are also updated.

The DWARF reader is not yet touched.  That requires more complicated
changes.

gdb/ChangeLog
2021-03-20  Tom Tromey  <tom@tromey.com>

* xcoffread.c (xcoff_end_psymtab): Add partial_symtabs parameter.
(xcoff_end_psymtab): Update.
(scan_xcoff_symtab): Add partial_symtabs parameter.
(xcoff_initial_scan): Update.
* stabsread.h (dbx_end_psymtab): Add partial_symtabs parameter.
* mdebugread.c (mdebug_build_psymtabs): Update.
(parse_partial_symbols): Add partial_symtabs parameter.
* dbxread.c (dbx_symfile_read): Update.
(read_dbx_symtab): Add partial_symtabs parameter.
(read_dbx_symtab): Update.
(dbx_end_psymtab): Add partial_symtabs parameter.

gdb/ChangeLog
gdb/dbxread.c
gdb/mdebugread.c
gdb/stabsread.h
gdb/xcoffread.c

index 14440e73c51d841b677df45004d9163c352cfad5..491ddd5e2b20314181333d35371eedf51f6d0288 100644 (file)
@@ -1,3 +1,17 @@
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+       * xcoffread.c (xcoff_end_psymtab): Add partial_symtabs parameter.
+       (xcoff_end_psymtab): Update.
+       (scan_xcoff_symtab): Add partial_symtabs parameter.
+       (xcoff_initial_scan): Update.
+       * stabsread.h (dbx_end_psymtab): Add partial_symtabs parameter.
+       * mdebugread.c (mdebug_build_psymtabs): Update.
+       (parse_partial_symbols): Add partial_symtabs parameter.
+       * dbxread.c (dbx_symfile_read): Update.
+       (read_dbx_symtab): Add partial_symtabs parameter.
+       (read_dbx_symtab): Update.
+       (dbx_end_psymtab): Add partial_symtabs parameter.
+
 2021-03-20  Tom Tromey  <tom@tromey.com>
 
        * quick-symbol.h (struct quick_symbol_functions)
index 9003822a0f1cbd610fcf830e95fa142ccd40188f..9a470bf81778d98bb15269f183efc7f323e6001f 100644 (file)
@@ -270,7 +270,8 @@ static void dbx_read_symtab (legacy_psymtab *self,
 
 static void dbx_expand_psymtab (legacy_psymtab *, struct objfile *);
 
-static void read_dbx_symtab (minimal_symbol_reader &, struct objfile *);
+static void read_dbx_symtab (minimal_symbol_reader &, psymtab_storage *,
+                            struct objfile *);
 
 static legacy_psymtab *find_corresponding_bincl_psymtab (const char *,
                                                                int);
@@ -544,7 +545,8 @@ dbx_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
 
   /* Read stabs data from executable file and define symbols.  */
 
-  read_dbx_symtab (reader, objfile);
+  psymtab_storage *partial_symtabs = objfile->partial_symtabs.get ();
+  read_dbx_symtab (reader, partial_symtabs, objfile);
 
   /* Install any minimal symbols that have been collected as the current
      minimal symbols for this objfile.  */
@@ -946,7 +948,9 @@ function_outside_compilation_unit_complaint (const char *arg1)
    debugging information is available.  */
 
 static void
-read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile)
+read_dbx_symtab (minimal_symbol_reader &reader,
+                psymtab_storage *partial_symtabs,
+                struct objfile *objfile)
 {
   struct gdbarch *gdbarch = objfile->arch ();
   struct external_nlist *bufp = 0;     /* =0 avoids gcc -Wall glitch.  */
@@ -1127,7 +1131,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile)
                     which are not the address.  */
                  && nlist.n_value >= pst->raw_text_low ())
                {
-                 dbx_end_psymtab (objfile, pst, psymtab_include_list,
+                 dbx_end_psymtab (objfile, partial_symtabs,
+                                  pst, psymtab_include_list,
                                   includes_used, symnum * symbol_size,
                                   nlist.n_value > pst->raw_text_high ()
                                   ? nlist.n_value : pst->raw_text_high (),
@@ -1242,7 +1247,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile)
 
                if (pst)
                  {
-                   dbx_end_psymtab (objfile, pst, psymtab_include_list,
+                   dbx_end_psymtab (objfile, partial_symtabs,
+                                    pst, psymtab_include_list,
                                     includes_used, symnum * symbol_size,
                                     (valu > pst->raw_text_high ()
                                      ? valu : pst->raw_text_high ()),
@@ -1813,7 +1819,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile)
             compiled without debugging info follows this module.  */
          if (pst && gdbarch_sofun_address_maybe_missing (gdbarch))
            {
-             dbx_end_psymtab (objfile, pst,
+             dbx_end_psymtab (objfile, partial_symtabs, pst,
                               psymtab_include_list, includes_used,
                               symnum * symbol_size,
                               (CORE_ADDR) 0, dependency_list,
@@ -1879,7 +1885,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, struct objfile *objfile)
         : lowest_text_address)
        + text_size;
 
-      dbx_end_psymtab (objfile, pst, psymtab_include_list, includes_used,
+      dbx_end_psymtab (objfile, partial_symtabs,
+                      pst, psymtab_include_list, includes_used,
                       symnum * symbol_size,
                       (text_end > pst->raw_text_high ()
                        ? text_end : pst->raw_text_high ()),
@@ -1923,7 +1930,8 @@ start_psymtab (struct objfile *objfile, const char *filename, CORE_ADDR textlow,
    FIXME:  List variables and peculiarities of same.  */
 
 legacy_psymtab *
-dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst,
+dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs,
+                legacy_psymtab *pst,
                 const char **include_list, int num_includes,
                 int capping_symbol_offset, CORE_ADDR capping_text,
                 legacy_psymtab **dependency_list,
@@ -1997,7 +2005,7 @@ dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst,
         address, set it to our starting address.  Take care to not set our
         own ending address to our starting address.  */
 
-      for (partial_symtab *p1 : objfile->psymtabs ())
+      for (partial_symtab *p1 : partial_symtabs->range ())
        if (!p1->text_high_valid && p1->text_low_valid && p1 != pst)
          p1->set_text_high (pst->raw_text_low ());
     }
@@ -2010,7 +2018,7 @@ dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst,
   if (number_dependencies)
     {
       pst->dependencies
-       = objfile->partial_symtabs->allocate_dependencies (number_dependencies);
+       = partial_symtabs->allocate_dependencies (number_dependencies);
       memcpy (pst->dependencies, dependency_list,
              number_dependencies * sizeof (legacy_psymtab *));
     }
@@ -2030,7 +2038,7 @@ dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst,
       /* We could save slight bits of space by only making one of these,
         shared by the entire set of include files.  FIXME-someday.  */
       subpst->dependencies =
-       objfile->partial_symtabs->allocate_dependencies (1);
+       partial_symtabs->allocate_dependencies (1);
       subpst->dependencies[0] = pst;
       subpst->number_of_dependencies = 1;
 
@@ -2050,7 +2058,7 @@ dbx_end_psymtab (struct objfile *objfile, legacy_psymtab *pst,
         is not empty, but we don't realize that.  Fixing that without slowing
         things down might be tricky.  */
 
-      objfile->partial_symtabs->discard_psymtab (pst);
+      partial_symtabs->discard_psymtab (pst);
 
       /* Indicate that psymtab was thrown away.  */
       pst = NULL;
index 2fe4ae08d20124c2a4df7e4676654cdcd0f28ef7..d178beef7341566acfc2b8917ffc57ab9e1fed6d 100644 (file)
@@ -222,6 +222,7 @@ static int upgrade_type (int, struct type **, int, union aux_ext *,
                         int, const char *);
 
 static void parse_partial_symbols (minimal_symbol_reader &,
+                                  psymtab_storage *,
                                   struct objfile *);
 
 static int has_opaque_xref (FDR *, SYMR *);
@@ -357,7 +358,8 @@ mdebug_build_psymtabs (minimal_symbol_reader &reader,
        (*swap->swap_fdr_in) (objfile->obfd, fdr_src, fdr_ptr);
     }
 
-  parse_partial_symbols (reader, objfile);
+  psymtab_storage *partial_symtabs = objfile->partial_symtabs.get ();
+  parse_partial_symbols (reader, partial_symtabs, objfile);
 
 #if 0
   /* Check to make sure file was compiled with -g.  If not, warn the
@@ -2281,6 +2283,7 @@ record_minimal_symbol (minimal_symbol_reader &reader,
 
 static void
 parse_partial_symbols (minimal_symbol_reader &reader,
+                      psymtab_storage *partial_symtabs,
                       struct objfile *objfile)
 {
   struct gdbarch *gdbarch = objfile->arch ();
@@ -3642,7 +3645,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
       /* Link pst to FDR.  dbx_end_psymtab returns NULL if the psymtab was
         empty and put on the free list.  */
       fdr_to_pst[f_idx].pst
-       = dbx_end_psymtab (objfile, save_pst,
+       = dbx_end_psymtab (objfile, partial_symtabs, save_pst,
                           psymtab_include_list, includes_used,
                           -1, save_pst->raw_text_high (),
                           dependency_list, dependencies_used,
@@ -3666,7 +3669,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
          && save_pst->text_low_valid
          && !(objfile->flags & OBJF_REORDERED))
        {
-         for (partial_symtab *iter : objfile->psymtabs ())
+         for (partial_symtab *iter : partial_symtabs->range ())
            {
              if (save_pst != iter
                  && save_pst->raw_text_low () >= iter->raw_text_low ()
@@ -3697,7 +3700,7 @@ parse_partial_symbols (minimal_symbol_reader &reader,
         source files or a reverse .h -> .c dependency for header files.  */
       pst->number_of_dependencies = 0;
       pst->dependencies
-       = objfile->partial_symtabs->allocate_dependencies (fh->crfd - 1);
+       = partial_symtabs->allocate_dependencies (fh->crfd - 1);
       for (s_idx = 1; s_idx < fh->crfd; s_idx++)
        {
          RFDT rh;
@@ -3726,11 +3729,11 @@ parse_partial_symbols (minimal_symbol_reader &reader,
 
   /* Remove the dummy psymtab created for -O3 images above, if it is
      still empty, to enable the detection of stripped executables.  */
-  partial_symtab *pst_del = objfile->partial_symtabs->psymtabs;
+  partial_symtab *pst_del = partial_symtabs->psymtabs;
   if (pst_del->next == NULL
       && pst_del->number_of_dependencies == 0
       && pst_del->empty ())
-    objfile->partial_symtabs->discard_psymtab (pst_del);
+    partial_symtabs->discard_psymtab (pst_del);
 }
 
 /* If the current psymbol has an enumerated type, we need to add
index 8b5d70b72f4a311c05d6252a03110c53ca03772e..e9d5663cc970e855a035658a99f056ea46c557ea 100644 (file)
@@ -172,7 +172,8 @@ extern void finish_global_stabs (struct objfile *objfile);
    they are only used by some stabs readers.  */
 
 extern legacy_psymtab *dbx_end_psymtab
-  (struct objfile *objfile, legacy_psymtab *pst,
+  (struct objfile *objfile, psymtab_storage *partial_symtabs,
+   legacy_psymtab *pst,
    const char **include_list, int num_includes,
    int capping_symbol_offset, CORE_ADDR capping_text,
    legacy_psymtab **dependency_list, int number_dependencies,
index e0e7a8f0f5ea0f9d657b27c2856e7260d3d505a8..711d8932706dd0693f2cef06d62e430b2dabb4c5 100644 (file)
@@ -203,6 +203,7 @@ eb_complaint (int arg1)
 static void xcoff_initial_scan (struct objfile *, symfile_add_flags);
 
 static void scan_xcoff_symtab (minimal_symbol_reader &,
+                              psymtab_storage *partial_symtabs,
                               struct objfile *);
 
 static const char *xcoff_next_symbol_text (struct objfile *);
@@ -1986,7 +1987,8 @@ xcoff_start_psymtab (struct objfile *objfile,
    are the information for includes and dependencies.  */
 
 static legacy_psymtab *
-xcoff_end_psymtab (struct objfile *objfile, legacy_psymtab *pst,
+xcoff_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs,
+                  legacy_psymtab *pst,
                   const char **include_list, int num_includes,
                   int capping_symbol_number,
                   legacy_psymtab **dependency_list,
@@ -2008,7 +2010,7 @@ xcoff_end_psymtab (struct objfile *objfile, legacy_psymtab *pst,
   if (number_dependencies)
     {
       pst->dependencies
-       = objfile->partial_symtabs->allocate_dependencies (number_dependencies);
+       = partial_symtabs->allocate_dependencies (number_dependencies);
       memcpy (pst->dependencies, dependency_list,
              number_dependencies * sizeof (legacy_psymtab *));
     }
@@ -2027,7 +2029,7 @@ xcoff_end_psymtab (struct objfile *objfile, legacy_psymtab *pst,
       /* We could save slight bits of space by only making one of these,
         shared by the entire set of include files.  FIXME-someday.  */
       subpst->dependencies =
-       objfile->partial_symtabs->allocate_dependencies (1);
+       partial_symtabs->allocate_dependencies (1);
       subpst->dependencies[0] = pst;
       subpst->number_of_dependencies = 1;
 
@@ -2043,7 +2045,7 @@ xcoff_end_psymtab (struct objfile *objfile, legacy_psymtab *pst,
       /* Empty psymtabs happen as a result of header files which don't have
         any symbols in them.  There can be a lot of them.  */
 
-      objfile->partial_symtabs->discard_psymtab (pst);
+      partial_symtabs->discard_psymtab (pst);
 
       /* Indicate that psymtab was thrown away.  */
       pst = NULL;
@@ -2112,6 +2114,7 @@ function_outside_compilation_unit_complaint (const char *arg1)
 
 static void
 scan_xcoff_symtab (minimal_symbol_reader &reader,
+                  psymtab_storage *partial_symtabs,
                   struct objfile *objfile)
 {
   CORE_ADDR toc_offset = 0;    /* toc offset value in data section.  */
@@ -2233,7 +2236,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader,
                               each program csect, because their text
                               sections need not be adjacent.  */
                            xcoff_end_psymtab
-                             (objfile, pst, psymtab_include_list,
+                             (objfile, partial_symtabs, pst, psymtab_include_list,
                               includes_used, symnum_before, dependency_list,
                               dependencies_used, textlow_not_set);
                            includes_used = 0;
@@ -2402,7 +2405,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader,
 
            if (pst)
              {
-               xcoff_end_psymtab (objfile, pst, psymtab_include_list,
+               xcoff_end_psymtab (objfile, partial_symtabs,
+                                  pst, psymtab_include_list,
                                   includes_used, symnum_before,
                                   dependency_list, dependencies_used,
                                   textlow_not_set);
@@ -2819,7 +2823,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader,
 
   if (pst)
     {
-      xcoff_end_psymtab (objfile, pst, psymtab_include_list, includes_used,
+      xcoff_end_psymtab (objfile, partial_symtabs,
+                        pst, psymtab_include_list, includes_used,
                         ssymnum, dependency_list,
                         dependencies_used, textlow_not_set);
     }
@@ -2930,7 +2935,8 @@ xcoff_initial_scan (struct objfile *objfile, symfile_add_flags symfile_flags)
   /* Now that the symbol table data of the executable file are all in core,
      process them and define symbols accordingly.  */
 
-  scan_xcoff_symtab (reader, objfile);
+  psymtab_storage *partial_symtabs = objfile->partial_symtabs.get ();
+  scan_xcoff_symtab (reader, partial_symtabs, objfile);
 
   /* Install any minimal symbols that have been collected as the current
      minimal symbols for this objfile.  */