[binutils-gdb] Remove enter_symbol_lookup
Tom Tromey
tromey@sourceware.org
Wed Sep 10 22:19:47 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=00dd832815cd18a18532710846bb529ce22de5c1
commit 00dd832815cd18a18532710846bb529ce22de5c1
Author: Tom Tromey <tom@tromey.com>
Date: Tue Feb 11 13:39:16 2025 -0700
Remove enter_symbol_lookup
The "enter_symbol_lookup" class was introduced to work around the lack
of reentrancy in symbol lookup. There were two problems here:
1. The DWARF reader kept a mark bit on the dwarf2_per_cu_data object.
This bit is gone now, replaced with a local mark vector.
2. Some spots in gdb first examined the expanded symbol tables, and
then on failure expanded some symtabs and searched the newly
expanded ones (skipping previousy-expanded ones). Fixing this has
been the main point of this series.
Now that both of these barriers are gone, I think enter_symbol_lookup
can be removed.
One proof of this idea is that, without the first fix mentioned above,
py-symbol.exp regressed because gdbpy_lookup_static_symbols did not
first ensure that the current language was set -- i.e., there was a
latent bug in the enter_symbol_lookup patch anyway.
Acked-By: Simon Marchi <simon.marchi@efficios.com>
Diff:
---
gdb/symtab.c | 41 -----------------------------------------
1 file changed, 41 deletions(-)
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 25b6a84fa92..d1e040e60a4 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -122,41 +122,6 @@ struct main_info
static const registry<program_space>::key<main_info> main_progspace_key;
-/* Symbol lookup is not reentrant (though this is not an intrinsic
- restriction). Keep track of whether a symbol lookup is active, to be able
- to detect reentrancy. */
-static bool in_symbol_lookup;
-
-/* Struct to mark that a symbol lookup is active for the duration of its
- lifetime. */
-
-struct enter_symbol_lookup
-{
- enter_symbol_lookup ()
- {
- /* Ensure that the current language has been set. Normally the
- language is set lazily. However, when performing a symbol lookup,
- this could result in a recursive call into the lookup code in some
- cases. Set it now to ensure that this does not happen. */
- get_current_language ();
-
- /* Detect symbol lookup reentrance. */
- gdb_assert (!in_symbol_lookup);
-
- in_symbol_lookup = true;
- }
-
- ~enter_symbol_lookup ()
- {
- /* Sanity check. */
- gdb_assert (in_symbol_lookup);
-
- in_symbol_lookup = false;
- }
-
- DISABLE_COPY_AND_ASSIGN (enter_symbol_lookup);
-};
-
/* The default symbol cache size.
There is no extra cpu cost for large N (except when flushing the cache,
which is rare). The value here is just a first attempt. A better default
@@ -2285,8 +2250,6 @@ lookup_symbol_in_block (const char *name, symbol_name_match_type match_type,
const struct block *block,
const domain_search_flags domain)
{
- enter_symbol_lookup tmp;
-
struct symbol *sym;
if (symbol_lookup_debug)
@@ -2322,8 +2285,6 @@ lookup_global_symbol_from_objfile (struct objfile *main_objfile,
const char *name,
const domain_search_flags domain)
{
- enter_symbol_lookup tmp;
-
gdb_assert (block_index == GLOBAL_BLOCK || block_index == STATIC_BLOCK);
for (objfile *objfile : main_objfile->separate_debug_objfiles ())
@@ -2624,8 +2585,6 @@ lookup_global_or_static_symbol (const char *name,
return result;
}
- enter_symbol_lookup tmp;
-
/* Do a global search (of global blocks, heh). */
if (result.symbol == NULL)
current_program_space->iterate_over_objfiles_in_search_order
More information about the Gdb-cvs
mailing list