[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