From 4ea870efec420b8c9010a7bf397ec1806889f535 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 30 Dec 2022 11:29:12 -0700 Subject: [PATCH] Add quick_symbol_functions::compute_main_name 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(+) diff --git a/gdb/objfiles.h b/gdb/objfiles.h index 0cad5961659..a7b5a71485e 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -605,6 +605,9 @@ public: void map_symbol_filenames (gdb::function_view 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 e48eeeda972..56714ba4d6b 100644 --- a/gdb/quick-symbol.h +++ b/gdb/quick-symbol.h @@ -185,6 +185,15 @@ struct quick_symbol_functions gdb::function_view 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 d31ff3353ee..7b73b42b70d 100644 --- a/gdb/symfile-debug.c +++ b/gdb/symfile-debug.c @@ -467,6 +467,18 @@ objfile::map_symbol_filenames (gdb::function_view 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 ffb095a260c..cc0bdb80c7c 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -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,