]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Add quick_symbol_functions::compute_main_name
authorTom Tromey <tom@tromey.com>
Fri, 30 Dec 2022 18:29:12 +0000 (11:29 -0700)
committerTom Tromey <tom@tromey.com>
Tue, 9 Jan 2024 01:40:21 +0000 (18:40 -0700)
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
gdb/quick-symbol.h
gdb/symfile-debug.c
gdb/symtab.c

index 0cad596165913371babcfc52116169818b155c40..a7b5a71485e2421dfa276ef5fdf019dd3fc8e9b5 100644 (file)
@@ -605,6 +605,9 @@ public:
   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);
 
index e48eeeda972f8ad26f1b23d91483ef625ebc1852..56714ba4d6ba4f9f5c100740ca9b0d1dad919191 100644 (file)
@@ -185,6 +185,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'.  */
index d31ff3353eeb718bf52fa745f61bff31f0ca11d4..7b73b42b70df04400d039e2f16a6065c42750ea7 100644 (file)
@@ -467,6 +467,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)
 {
index ffb095a260cae16d89bbdd370c05b0aec526b113..cc0bdb80c7c32730cf254fb47cbe41f01b9d60bc 100644 (file)
@@ -6334,6 +6334,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,