diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 4b6294f4fa..7b19973118 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,15 @@ +2020-05-15 Tom Tromey + + * symtab.c (lookup_language_this, lookup_symbol_aux): Use + block_objfile. + (lookup_objfile_from_block): Remove. + (lookup_symbol_in_block, lookup_symbol_in_static_block) + (lookup_global_symbol): Use block_objfile. + * symtab.h (lookup_objfile_from_block): Don't declare. + * printcmd.c (clear_dangling_display_expressions): Use + block_objfile. + * parse.c (operator_check_standard): Use block_objfile. + 2020-05-15 Tom Tromey * language.c (language_alloc_type_symbol): Set diff --git a/gdb/parse.c b/gdb/parse.c index b4d9005de5..d5efe4ab3d 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -1340,7 +1340,7 @@ operator_check_standard (struct expression *exp, int pos, return 1; /* Check objfile where is placed the code touching the variable. */ - objfile = lookup_objfile_from_block (block); + objfile = block_objfile (block); type = SYMBOL_TYPE (symbol); } diff --git a/gdb/printcmd.c b/gdb/printcmd.c index c94ad0a560..388a0b2c6d 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -2128,12 +2128,20 @@ clear_dangling_display_expressions (struct objfile *objfile) if (d->pspace != pspace) continue; - if (lookup_objfile_from_block (d->block) == objfile + struct objfile *bl_objf = nullptr; + if (d->block != nullptr) + { + bl_objf = block_objfile (d->block); + if (bl_objf->separate_debug_objfile_backlink != nullptr) + bl_objf = bl_objf->separate_debug_objfile_backlink; + } + + if (bl_objf == objfile || (d->exp != NULL && exp_uses_objfile (d->exp.get (), objfile))) - { - d->exp.reset (); - d->block = NULL; - } + { + d->exp.reset (); + d->block = NULL; + } } } diff --git a/gdb/symtab.c b/gdb/symtab.c index 16ebe4d39f..1a5de4d8aa 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -1917,7 +1917,7 @@ lookup_language_this (const struct language_defn *lang, if (symbol_lookup_debug > 1) { - struct objfile *objfile = lookup_objfile_from_block (block); + struct objfile *objfile = block_objfile (block); fprintf_unfiltered (gdb_stdlog, "lookup_language_this (%s, %s (objfile %s))", @@ -2012,7 +2012,8 @@ lookup_symbol_aux (const char *name, symbol_name_match_type match_type, if (symbol_lookup_debug) { - struct objfile *objfile = lookup_objfile_from_block (block); + struct objfile *objfile = (block == nullptr + ? nullptr : block_objfile (block)); fprintf_unfiltered (gdb_stdlog, "lookup_symbol_aux (%s, %s (objfile %s), %s, %s)\n", @@ -2157,32 +2158,6 @@ lookup_local_symbol (const char *name, /* See symtab.h. */ -struct objfile * -lookup_objfile_from_block (const struct block *block) -{ - if (block == NULL) - return NULL; - - block = block_global_block (block); - /* Look through all blockvectors. */ - for (objfile *obj : current_program_space->objfiles ()) - { - for (compunit_symtab *cust : obj->compunits ()) - if (block == BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), - GLOBAL_BLOCK)) - { - if (obj->separate_debug_objfile_backlink) - obj = obj->separate_debug_objfile_backlink; - - return obj; - } - } - - return NULL; -} - -/* See symtab.h. */ - struct symbol * lookup_symbol_in_block (const char *name, symbol_name_match_type match_type, const struct block *block, @@ -2192,7 +2167,8 @@ lookup_symbol_in_block (const char *name, symbol_name_match_type match_type, if (symbol_lookup_debug > 1) { - struct objfile *objfile = lookup_objfile_from_block (block); + struct objfile *objfile = (block == nullptr + ? nullptr : block_objfile (block)); fprintf_unfiltered (gdb_stdlog, "lookup_symbol_in_block (%s, %s (objfile %s), %s)", @@ -2482,7 +2458,8 @@ lookup_symbol_in_static_block (const char *name, if (symbol_lookup_debug) { - struct objfile *objfile = lookup_objfile_from_block (static_block); + struct objfile *objfile = (block == nullptr + ? nullptr : block_objfile (block)); fprintf_unfiltered (gdb_stdlog, "lookup_symbol_in_static_block (%s, %s (objfile %s)," @@ -2704,7 +2681,14 @@ lookup_global_symbol (const char *name, return { sym, global_block }; } - struct objfile *objfile = lookup_objfile_from_block (block); + struct objfile *objfile = nullptr; + if (block != nullptr) + { + objfile = block_objfile (block); + if (objfile->separate_debug_objfile_backlink != nullptr) + objfile = objfile->separate_debug_objfile_backlink; + } + block_symbol bs = lookup_global_or_static_symbol (name, GLOBAL_BLOCK, objfile, domain); if (better_symbol (sym, bs.symbol, domain) == sym) diff --git a/gdb/symtab.h b/gdb/symtab.h index aaf42a576a..05e6a311b8 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -2238,10 +2238,6 @@ bool producer_is_realview (const char *producer); void fixup_section (struct general_symbol_info *ginfo, CORE_ADDR addr, struct objfile *objfile); -/* Look up objfile containing BLOCK. */ - -struct objfile *lookup_objfile_from_block (const struct block *block); - extern unsigned int symtab_create_debug; extern unsigned int symbol_lookup_debug;