Move sym_fns::qf to objfile
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:41 +0000 (17:23 -0600)
Currently the "partial" symbol reader is attached to the objfile's
symbol functions.  However, in order to allow multiple separate
partial symbol readers, this association must be changed.  This patch
moves the "qf" member out of sym_fns as a step toward that goal.

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

* psymtab.c (require_partial_symbols): Check that 'sf' is not
null.
* xcoffread.c (xcoff_sym_fns): Update.
* symfile.h (struct sym_fns) <qf>: Remove.
* symfile.c (syms_from_objfile_1, reread_symbols): Update.
* symfile-debug.c (objfile::has_partial_symbols)
(objfile::find_last_source_symtab)
(objfile::forget_cached_source_info)
(objfile::map_symtabs_matching_filename, objfile::lookup_symbol)
(objfile::print_stats, objfile::dump)
(objfile::expand_symtabs_for_function)
(objfile::expand_all_symtabs)
(objfile::expand_symtabs_with_fullname)
(objfile::map_matching_symbols)
(objfile::expand_symtabs_matching)
(objfile::find_pc_sect_compunit_symtab)
(objfile::map_symbol_filenames)
(objfile::find_compunit_symtab_by_address)
(objfile::lookup_global_symbol_language, debug_sym_fns)
(install_symfile_debug_logging): Update.
* objfiles.h (struct objfile) <qf>: New member.
* mipsread.c (ecoff_sym_fns): Update.
* machoread.c (macho_sym_fns): Update.
* elfread.c (elf_sym_fns_gdb_index, elf_sym_fns_debug_names):
Don't declare.
(elf_symfile_read, elf_sym_fns, elf_sym_fns_lazy_psyms): Update.
* dbxread.c (aout_sym_fns): Update.
* coffread.c (coff_sym_fns): Update.

12 files changed:
gdb/ChangeLog
gdb/coffread.c
gdb/dbxread.c
gdb/elfread.c
gdb/machoread.c
gdb/mipsread.c
gdb/objfiles.h
gdb/psymtab.c
gdb/symfile-debug.c
gdb/symfile.c
gdb/symfile.h
gdb/xcoffread.c

index 82a82c9795c2e6acf688073332ccb0740b1610f3..55487d416b6df691b62a4bdf8331dd1e9ef8c412 100644 (file)
@@ -1,3 +1,34 @@
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+       * psymtab.c (require_partial_symbols): Check that 'sf' is not
+       null.
+       * xcoffread.c (xcoff_sym_fns): Update.
+       * symfile.h (struct sym_fns) <qf>: Remove.
+       * symfile.c (syms_from_objfile_1, reread_symbols): Update.
+       * symfile-debug.c (objfile::has_partial_symbols)
+       (objfile::find_last_source_symtab)
+       (objfile::forget_cached_source_info)
+       (objfile::map_symtabs_matching_filename, objfile::lookup_symbol)
+       (objfile::print_stats, objfile::dump)
+       (objfile::expand_symtabs_for_function)
+       (objfile::expand_all_symtabs)
+       (objfile::expand_symtabs_with_fullname)
+       (objfile::map_matching_symbols)
+       (objfile::expand_symtabs_matching)
+       (objfile::find_pc_sect_compunit_symtab)
+       (objfile::map_symbol_filenames)
+       (objfile::find_compunit_symtab_by_address)
+       (objfile::lookup_global_symbol_language, debug_sym_fns)
+       (install_symfile_debug_logging): Update.
+       * objfiles.h (struct objfile) <qf>: New member.
+       * mipsread.c (ecoff_sym_fns): Update.
+       * machoread.c (macho_sym_fns): Update.
+       * elfread.c (elf_sym_fns_gdb_index, elf_sym_fns_debug_names):
+       Don't declare.
+       (elf_symfile_read, elf_sym_fns, elf_sym_fns_lazy_psyms): Update.
+       * dbxread.c (aout_sym_fns): Update.
+       * coffread.c (coff_sym_fns): Update.
+
 2021-03-20  Tom Tromey  <tom@tromey.com>
 
        * symfile.h (symbol_compare_ftype, symbol_filename_ftype)
index badcb5a608483f9cc5e5be58a53da3d3114cff2d..676deec8cbe905e6a1f18bb662155289dc3fd232 100644 (file)
@@ -2180,7 +2180,6 @@ static const struct sym_fns coff_sym_fns =
   default_symfile_relocate,    /* sym_relocate: Relocate a debug
                                   section.  */
   NULL,                                /* sym_probe_fns */
-  &psym_functions
 };
 
 void _initialize_coffread ();
index 6450cd32cb093ba6f3a9ecace56d48897d57e34e..9003822a0f1cbd610fcf830e95fa142ccd40188f 100644 (file)
@@ -3130,7 +3130,6 @@ static const struct sym_fns aout_sym_fns =
   NULL,
   default_symfile_relocate,    /* Relocate a debug section.  */
   NULL,                                /* sym_probe_fns */
-  &psym_functions
 };
 
 void _initialize_dbxread ();
index 439f5cc29a0431e5ad226a22a94e972e85f0f69e..3ba7221bfc9548f10fe50f549fa6cd8432da7d87 100644 (file)
@@ -54,8 +54,6 @@
 #include "dwarf2/public.h"
 
 /* Forward declarations.  */
-extern const struct sym_fns elf_sym_fns_gdb_index;
-extern const struct sym_fns elf_sym_fns_debug_names;
 extern const struct sym_fns elf_sym_fns_lazy_psyms;
 
 /* The struct elfinfo is available only during ELF symbol table and
@@ -1272,10 +1270,10 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
          switch (index_kind)
            {
            case dw_index_kind::GDB_INDEX:
-             objfile_set_sym_fns (objfile, &elf_sym_fns_gdb_index);
+             objfile->qf = &dwarf2_gdb_index_functions;
              break;
            case dw_index_kind::DEBUG_NAMES:
-             objfile_set_sym_fns (objfile, &elf_sym_fns_debug_names);
+             objfile->qf = &dwarf2_debug_names_functions;
              break;
            }
        }
@@ -1437,7 +1435,6 @@ static const struct sym_fns elf_sym_fns =
   NULL,
   default_symfile_relocate,    /* Relocate a debug section.  */
   &elf_probe_fns,              /* sym_probe_fns */
-  &psym_functions
 };
 
 /* The same as elf_sym_fns, but not registered and lazily reads
@@ -1455,41 +1452,6 @@ const struct sym_fns elf_sym_fns_lazy_psyms =
   NULL,
   default_symfile_relocate,    /* Relocate a debug section.  */
   &elf_probe_fns,              /* sym_probe_fns */
-  &psym_functions
-};
-
-/* The same as elf_sym_fns, but not registered and uses the
-   DWARF-specific GNU index rather than psymtab.  */
-const struct sym_fns elf_sym_fns_gdb_index =
-{
-  elf_new_init,                        /* init anything gbl to entire symab */
-  elf_symfile_init,            /* read initial info, setup for sym_red() */
-  elf_symfile_read,            /* read a symbol file into symtab */
-  NULL,                                /* sym_read_psymbols */
-  elf_symfile_finish,          /* finished with file, cleanup */
-  default_symfile_offsets,     /* Translate ext. to int. relocation */
-  elf_symfile_segments,                /* Get segment information from a file.  */
-  NULL,
-  default_symfile_relocate,    /* Relocate a debug section.  */
-  &elf_probe_fns,              /* sym_probe_fns */
-  &dwarf2_gdb_index_functions
-};
-
-/* The same as elf_sym_fns, but not registered and uses the
-   DWARF-specific .debug_names index rather than psymtab.  */
-const struct sym_fns elf_sym_fns_debug_names =
-{
-  elf_new_init,                        /* init anything gbl to entire symab */
-  elf_symfile_init,            /* read initial info, setup for sym_red() */
-  elf_symfile_read,            /* read a symbol file into symtab */
-  NULL,                                /* sym_read_psymbols */
-  elf_symfile_finish,          /* finished with file, cleanup */
-  default_symfile_offsets,     /* Translate ext. to int. relocation */
-  elf_symfile_segments,                /* Get segment information from a file.  */
-  NULL,
-  default_symfile_relocate,    /* Relocate a debug section.  */
-  &elf_probe_fns,              /* sym_probe_fns */
-  &dwarf2_debug_names_functions
 };
 
 /* STT_GNU_IFUNC resolver vector to be installed to gnu_ifunc_fns_p.  */
index ff50ae54f2a0dbfd1905610cf2e2bb308263dacd..44baaa26f654bf7093ba6a14a3b4d2bac8560e7d 100644 (file)
@@ -958,7 +958,6 @@ static const struct sym_fns macho_sym_fns = {
   NULL,
   macho_symfile_relocate,      /* Relocate a debug section.  */
   NULL,                                /* sym_get_probes */
-  &psym_functions
 };
 
 void _initialize_machoread ();
index 052b31c70dbccb8c7ff1fba2498dbbdd3582cf6f..3f0697b9150cb30e7e0c8df4bc8a141a27d1d27d 100644 (file)
@@ -376,7 +376,6 @@ static const struct sym_fns ecoff_sym_fns =
   NULL,
   default_symfile_relocate,    /* Relocate a debug section.  */
   NULL,                                /* sym_probe_fns */
-  &psym_functions
 };
 
 void _initialize_mipsread ();
index c55f0f174fc9220791c4e924c2e547e256617014..8d4a23ae0447e9a441184a11925d26af2b4a621d 100644 (file)
@@ -677,6 +677,10 @@ public:
 
   const struct sym_fns *sf = nullptr;
 
+  /* The "quick" (aka partial) symbol functions for this symbol
+     reader.  */
+  const struct quick_symbol_functions *qf = nullptr;
+
   /* Per objfile data-pointers required by other GDB modules.  */
 
   REGISTRY_FIELDS {};
index 94b5acdea54f5d459937a5df475c42e1e78045d9..8c02fa253dcabd5a190642a75f17de7cc5607674 100644 (file)
@@ -84,7 +84,8 @@ require_partial_symbols (struct objfile *objfile, bool verbose)
     {
       objfile->flags |= OBJF_PSYMTABS_READ;
 
-      if (objfile->sf->sym_read_psymbols)
+      if (objfile->sf != nullptr
+         && objfile->sf->sym_read_psymbols)
        {
          if (verbose)
            printf_filtered (_("Reading symbols from %s...\n"),
index 419f24d2240af788c03557119d079923feb95608..da3439d79280e82919a76ee5e445a869be17a577 100644 (file)
@@ -84,8 +84,8 @@ objfile::has_partial_symbols ()
       && sf != nullptr
       && sf->sym_read_psymbols != NULL)
     retval = true;
-  else if (sf != nullptr)
-    retval = sf->qf->has_symbols (this);
+  else if (qf != nullptr)
+    retval = qf->has_symbols (this);
 
   if (debug_symfile)
     fprintf_filtered (gdb_stdlog, "qf->has_symbols (%s) = %d\n",
@@ -103,8 +103,8 @@ objfile::find_last_source_symtab ()
     fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (%s)\n",
                      objfile_debug_name (this));
 
-  if (sf != nullptr)
-    retval = sf->qf->find_last_source_symtab (this);
+  if (qf != nullptr)
+    retval = qf->find_last_source_symtab (this);
 
   if (debug_symfile)
     fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (...) = %s\n",
@@ -120,8 +120,8 @@ objfile::forget_cached_source_info ()
     fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n",
                      objfile_debug_name (this));
 
-  if (sf != nullptr)
-    sf->qf->forget_cached_source_info (this);
+  if (qf != nullptr)
+    qf->forget_cached_source_info (this);
 }
 
 bool
@@ -138,8 +138,8 @@ objfile::map_symtabs_matching_filename
                      host_address_to_string (&callback));
 
   bool retval = false;
-  if (sf != nullptr)
-    retval = (sf->qf->map_symtabs_matching_filename
+  if (qf != nullptr)
+    retval = (qf->map_symtabs_matching_filename
              (this, name, real_path, callback));
 
   if (debug_symfile)
@@ -161,8 +161,8 @@ objfile::lookup_symbol (block_enum kind, const char *name, domain_enum domain)
                      objfile_debug_name (this), kind, name,
                      domain_name (domain));
 
-  if (sf != nullptr)
-    retval = sf->qf->lookup_symbol (this, kind, name, domain);
+  if (qf != nullptr)
+    retval = qf->lookup_symbol (this, kind, name, domain);
 
   if (debug_symfile)
     fprintf_filtered (gdb_stdlog, "qf->lookup_symbol (...) = %s\n",
@@ -180,8 +180,8 @@ objfile::print_stats ()
     fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n",
                      objfile_debug_name (this));
 
-  if (sf != nullptr)
-    sf->qf->print_stats (this);
+  if (qf != nullptr)
+    qf->print_stats (this);
 }
 
 void
@@ -191,8 +191,8 @@ objfile::dump ()
     fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n",
                      objfile_debug_name (this));
 
-  if (sf != nullptr)
-    sf->qf->dump (this);
+  if (qf != nullptr)
+    qf->dump (this);
 }
 
 void
@@ -203,8 +203,8 @@ objfile::expand_symtabs_for_function (const char *func_name)
                      "qf->expand_symtabs_for_function (%s, \"%s\")\n",
                      objfile_debug_name (this), func_name);
 
-  if (sf != nullptr)
-    sf->qf->expand_symtabs_for_function (this, func_name);
+  if (qf != nullptr)
+    qf->expand_symtabs_for_function (this, func_name);
 }
 
 void
@@ -214,8 +214,8 @@ objfile::expand_all_symtabs ()
     fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n",
                      objfile_debug_name (this));
 
-  if (sf != nullptr)
-    sf->qf->expand_all_symtabs (this);
+  if (qf != nullptr)
+    qf->expand_all_symtabs (this);
 }
 
 void
@@ -226,8 +226,8 @@ objfile::expand_symtabs_with_fullname (const char *fullname)
                      "qf->expand_symtabs_with_fullname (%s, \"%s\")\n",
                      objfile_debug_name (this), fullname);
 
-  if (sf != nullptr)
-    sf->qf->expand_symtabs_with_fullname (this, fullname);
+  if (qf != nullptr)
+    qf->expand_symtabs_with_fullname (this, fullname);
 }
 
 void
@@ -244,9 +244,9 @@ objfile::map_matching_symbols
                      domain_name (domain), global,
                      host_address_to_string (ordered_compare));
 
-  if (sf != nullptr)
-    sf->qf->map_matching_symbols (this, name, domain, global,
-                                 callback, ordered_compare);
+  if (qf != nullptr)
+    qf->map_matching_symbols (this, name, domain, global,
+                             callback, ordered_compare);
 }
 
 void
@@ -266,9 +266,9 @@ objfile::expand_symtabs_matching
                      host_address_to_string (&expansion_notify),
                      search_domain_name (kind));
 
-  if (sf != nullptr)
-    sf->qf->expand_symtabs_matching (this, file_matcher, lookup_name,
-                                    symbol_matcher, expansion_notify, kind);
+  if (qf != nullptr)
+    qf->expand_symtabs_matching (this, file_matcher, lookup_name,
+                                symbol_matcher, expansion_notify, kind);
 }
 
 struct compunit_symtab *
@@ -288,10 +288,9 @@ objfile::find_pc_sect_compunit_symtab (struct bound_minimal_symbol msymbol,
                      host_address_to_string (section),
                      warn_if_readin);
 
-  if (sf != nullptr)
-    retval
-      = sf->qf->find_pc_sect_compunit_symtab (this, msymbol, pc, section,
-                                             warn_if_readin);
+  if (qf != nullptr)
+    retval = qf->find_pc_sect_compunit_symtab (this, msymbol, pc, section,
+                                              warn_if_readin);
 
   if (debug_symfile)
     fprintf_filtered (gdb_stdlog,
@@ -315,8 +314,8 @@ objfile::map_symbol_filenames (symbol_filename_ftype *fun, void *data,
                      host_address_to_string (data),
                      need_fullname);
 
-  if (sf != nullptr)
-    sf->qf->map_symbol_filenames (this, fun, data, need_fullname);
+  if (qf != nullptr)
+    qf->map_symbol_filenames (this, fun, data, need_fullname);
 }
 
 struct compunit_symtab *
@@ -329,8 +328,8 @@ objfile::find_compunit_symtab_by_address (CORE_ADDR address)
                      hex_string (address));
 
   struct compunit_symtab *result = NULL;
-  if (sf != nullptr && sf->qf->find_compunit_symtab_by_address != NULL)
-    result = sf->qf->find_compunit_symtab_by_address (this, address);
+  if (qf != nullptr && qf->find_compunit_symtab_by_address != NULL)
+    result = qf->find_compunit_symtab_by_address (this, address);
 
   if (debug_symfile)
     fprintf_filtered (gdb_stdlog,
@@ -349,9 +348,9 @@ objfile::lookup_global_symbol_language (const char *name,
 {
   enum language result = language_unknown;
 
-  if (sf != nullptr && sf->qf->lookup_global_symbol_language != nullptr)
-    result = sf->qf->lookup_global_symbol_language (this, name, domain,
-                                                   symbol_found_p);
+  if (qf != nullptr && qf->lookup_global_symbol_language != nullptr)
+    result = qf->lookup_global_symbol_language (this, name, domain,
+                                               symbol_found_p);
   else
     *symbol_found_p = false;
 
@@ -516,7 +515,6 @@ static const struct sym_fns debug_sym_fns =
   debug_sym_read_linetable,
   debug_sym_relocate,
   &debug_sym_probe_fns,
-  nullptr
 };
 \f
 /* Install the debugging versions of the symfile functions for OBJFILE.
@@ -555,7 +553,6 @@ install_symfile_debug_logging (struct objfile *objfile)
   COPY_SF_PTR (real_sf, debug_data, sym_relocate, debug_sym_relocate);
   if (real_sf->sym_probe_fns)
     debug_data->debug_sf.sym_probe_fns = &debug_sym_probe_fns;
-  debug_data->debug_sf.qf = real_sf->qf;
 
 #undef COPY_SF_PTR
 
index ac9adc816a483fcba4546267b001f1d526da2568..d56d623c588078ecf51508e3c51ecc43abdc1f3e 100644 (file)
@@ -904,6 +904,7 @@ syms_from_objfile_1 (struct objfile *objfile,
   const int mainline = add_flags & SYMFILE_MAINLINE;
 
   objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd));
+  objfile->qf = &psym_functions;
 
   if (objfile->sf == NULL)
     {
@@ -2554,6 +2555,7 @@ reread_symbols (void)
             based on whether .gdb_index is present, and we need it to
             start over.  PR symtab/15885  */
          objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd));
+         objfile->qf = &psym_functions;
 
          build_objfile_section_table (objfile);
 
index c87bbed83d83fe4943e8214da4e85cb656fb5c6b..2c37f88d7631e863e769736e0fa42151215ec26c 100644 (file)
@@ -180,10 +180,6 @@ struct sym_fns
   /* If non-NULL, this objfile has probe support, and all the probe
      functions referred to here will be non-NULL.  */
   const struct sym_probe_fns *sym_probe_fns;
-
-  /* The "quick" (aka partial) symbol functions for this symbol
-     reader.  */
-  const struct quick_symbol_functions *qf;
 };
 
 extern section_addr_info
index 612ffb178c5b46efbd5151e422fdbc0b0fde8054..e0e7a8f0f5ea0f9d657b27c2856e7260d3d505a8 100644 (file)
@@ -3006,7 +3006,6 @@ static const struct sym_fns xcoff_sym_fns =
   aix_process_linenos,
   default_symfile_relocate,    /* Relocate a debug section.  */
   NULL,                                /* sym_probe_fns */
-  &psym_functions
 };
 
 /* Same as xcoff_get_n_import_files, but for core files.  */