]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Remove enter_symbol_lookup
authorTom Tromey <tom@tromey.com>
Tue, 11 Feb 2025 20:39:16 +0000 (13:39 -0700)
committerTom Tromey <tom@tromey.com>
Wed, 10 Sep 2025 22:07:58 +0000 (16:07 -0600)
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>
gdb/symtab.c

index 25b6a84fa922c20180976d28138046ab3b5b26f4..d1e040e60a44e9a75d91c1c480c9b7ce58f2534a 100644 (file)
@@ -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