[v3,06/18] Add quick_symbol_functions::compute_main_name

Message ID 20231122-t-bg-dwarf-reading-v3-6-fc3180de63c4@tromey.com
State New
Headers
Series Index DWARF in the background |

Checks

Context Check Description
linaro-tcwg-bot/tcwg_gdb_build--master-aarch64 success Testing passed
linaro-tcwg-bot/tcwg_gdb_build--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-arm success Testing passed
linaro-tcwg-bot/tcwg_gdb_check--master-aarch64 success Testing passed

Commit Message

Tom Tromey Nov. 23, 2023, 5:32 a.m. UTC
  This adds a new compute_main_name method to quick_symbol_functions.
Currently there are no implementations of this, but a subsequent patch
will add one.
---
 gdb/objfiles.h      |  3 +++
 gdb/quick-symbol.h  |  9 +++++++++
 gdb/symfile-debug.c | 12 ++++++++++++
 gdb/symtab.c        |  2 ++
 4 files changed, 26 insertions(+)
  

Patch

diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index ec9d354e4a7..63f5db82cfa 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -611,6 +611,9 @@  struct objfile
   void map_symbol_filenames (gdb::function_view<symbol_filename_ftype> fun,
 			     bool need_fullname);
 
+  /* See quick_symbol_functions.  */
+  void compute_main_name ();
+
   /* See quick_symbol_functions.  */
   struct compunit_symtab *find_compunit_symtab_by_address (CORE_ADDR address);
 
diff --git a/gdb/quick-symbol.h b/gdb/quick-symbol.h
index a7fea2ccb49..49505aef64a 100644
--- a/gdb/quick-symbol.h
+++ b/gdb/quick-symbol.h
@@ -212,6 +212,15 @@  struct quick_symbol_functions
 	gdb::function_view<symbol_filename_ftype> fun,
 	bool need_fullname) = 0;
 
+  /* Compute the name and language of the main function for the given
+     objfile.  Normally this is done during symbol reading, but this
+     method exists in case this work is done in a worker thread and
+     must be waited for.  The implementation can call
+     set_objfile_main_name if results are found.  */
+  virtual void compute_main_name (struct objfile *objfile)
+  {
+  }
+
   /* Return true if this class can lazily read the symbols.  This may
      only return true if there are in fact symbols to be read, because
      this is used in the implementation of 'has_partial_symbols'.  */
diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c
index 85c43719dee..ea9d0c47ba5 100644
--- a/gdb/symfile-debug.c
+++ b/gdb/symfile-debug.c
@@ -485,6 +485,18 @@  objfile::map_symbol_filenames (gdb::function_view<symbol_filename_ftype> fun,
     iter->map_symbol_filenames (this, fun, need_fullname);
 }
 
+void
+objfile::compute_main_name ()
+{
+  if (debug_symfile)
+    gdb_printf (gdb_stdlog,
+		"qf->compute_main_name (%s)\n",
+		objfile_debug_name (this));
+
+  for (const auto &iter : qf_require_partial_symbols ())
+    iter->compute_main_name (this);
+}
+
 struct compunit_symtab *
 objfile::find_compunit_symtab_by_address (CORE_ADDR address)
 {
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 15471554f32..68836efa08b 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -6237,6 +6237,8 @@  find_main_name (void)
      accurate.  */
   for (objfile *objfile : current_program_space->objfiles ())
     {
+      objfile->compute_main_name ();
+
       if (objfile->per_bfd->name_of_main != NULL)
 	{
 	  set_main_name (pspace,