mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 06:17:47 +08:00
Simplify psym_map_matching_symbols
This introduces a new helper function, iterate_over_symbols_terminated, and changes psym_map_matching_symbols to use it. A subsequent patch will introduce a new user of this function in the DWARF reader. gdb/ChangeLog 2019-09-10 Tom Tromey <tromey@adacore.com> * psymtab.c (map_block): Remove. (psym_map_matching_symbols): Use iterate_over_symbols_terminated. * symtab.c (iterate_over_symbols_terminated): New function. * symtab.c (iterate_over_symbols_terminated): Declare.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2019-09-10 Tom Tromey <tromey@adacore.com>
|
||||||
|
|
||||||
|
* psymtab.c (map_block): Remove.
|
||||||
|
(psym_map_matching_symbols): Use iterate_over_symbols_terminated.
|
||||||
|
* symtab.c (iterate_over_symbols_terminated): New function.
|
||||||
|
* symtab.c (iterate_over_symbols_terminated): Declare.
|
||||||
|
|
||||||
2019-09-10 Tom Tromey <tromey@adacore.com>
|
2019-09-10 Tom Tromey <tromey@adacore.com>
|
||||||
|
|
||||||
* ada-lang.c (ada_iterate_over_symbols): Return bool.
|
* ada-lang.c (ada_iterate_over_symbols): Return bool.
|
||||||
|
@ -1168,38 +1168,6 @@ psymtab_to_fullname (struct partial_symtab *ps)
|
|||||||
return ps->fullname;
|
return ps->fullname;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For all symbols, s, in BLOCK that are in DOMAIN and match NAME
|
|
||||||
according to the function MATCH, call CALLBACK(BLOCK, s, DATA).
|
|
||||||
BLOCK is assumed to come from OBJFILE. Returns false iff CALLBACK
|
|
||||||
ever returns false, and otherwise returns true. */
|
|
||||||
|
|
||||||
static bool
|
|
||||||
map_block (const char *name, domain_enum domain, struct objfile *objfile,
|
|
||||||
const struct block *block,
|
|
||||||
gdb::function_view<symbol_found_callback_ftype> callback,
|
|
||||||
symbol_name_match_type match)
|
|
||||||
{
|
|
||||||
struct block_iterator iter;
|
|
||||||
struct symbol *sym;
|
|
||||||
|
|
||||||
lookup_name_info lookup_name (name, match);
|
|
||||||
|
|
||||||
for (sym = block_iter_match_first (block, lookup_name, &iter);
|
|
||||||
sym != NULL;
|
|
||||||
sym = block_iter_match_next (lookup_name, &iter))
|
|
||||||
{
|
|
||||||
if (symbol_matches_domain (SYMBOL_LANGUAGE (sym),
|
|
||||||
SYMBOL_DOMAIN (sym), domain))
|
|
||||||
{
|
|
||||||
struct block_symbol block_sym = {sym, block};
|
|
||||||
if (!callback (&block_sym))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Psymtab version of map_matching_symbols. See its definition in
|
/* Psymtab version of map_matching_symbols. See its definition in
|
||||||
the definition of quick_symbol_functions in symfile.h. */
|
the definition of quick_symbol_functions in symfile.h. */
|
||||||
|
|
||||||
@ -1214,6 +1182,8 @@ psym_map_matching_symbols
|
|||||||
{
|
{
|
||||||
const int block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
|
const int block_kind = global ? GLOBAL_BLOCK : STATIC_BLOCK;
|
||||||
|
|
||||||
|
lookup_name_info lookup_name (name, match);
|
||||||
|
|
||||||
for (partial_symtab *ps : require_partial_symbols (objfile, 1))
|
for (partial_symtab *ps : require_partial_symbols (objfile, 1))
|
||||||
{
|
{
|
||||||
QUIT;
|
QUIT;
|
||||||
@ -1227,10 +1197,8 @@ psym_map_matching_symbols
|
|||||||
if (cust == NULL)
|
if (cust == NULL)
|
||||||
continue;
|
continue;
|
||||||
block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), block_kind);
|
block = BLOCKVECTOR_BLOCK (COMPUNIT_BLOCKVECTOR (cust), block_kind);
|
||||||
if (!map_block (name, domain, objfile, block, callback, match))
|
if (!iterate_over_symbols_terminated (block, lookup_name,
|
||||||
return;
|
domain, callback))
|
||||||
struct block_symbol block_sym = {nullptr, block};
|
|
||||||
if (!callback (&block_sym))
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
15
gdb/symtab.c
15
gdb/symtab.c
@ -2847,6 +2847,21 @@ iterate_over_symbols (const struct block *block,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* See symtab.h. */
|
||||||
|
|
||||||
|
bool
|
||||||
|
iterate_over_symbols_terminated
|
||||||
|
(const struct block *block,
|
||||||
|
const lookup_name_info &name,
|
||||||
|
const domain_enum domain,
|
||||||
|
gdb::function_view<symbol_found_callback_ftype> callback)
|
||||||
|
{
|
||||||
|
if (!iterate_over_symbols (block, name, domain, callback))
|
||||||
|
return false;
|
||||||
|
struct block_symbol block_sym = {nullptr, block};
|
||||||
|
return callback (&block_sym);
|
||||||
|
}
|
||||||
|
|
||||||
/* Find the compunit symtab associated with PC and SECTION.
|
/* Find the compunit symtab associated with PC and SECTION.
|
||||||
This will read in debug info as necessary. */
|
This will read in debug info as necessary. */
|
||||||
|
|
||||||
|
10
gdb/symtab.h
10
gdb/symtab.h
@ -2106,6 +2106,16 @@ bool iterate_over_symbols (const struct block *block,
|
|||||||
const domain_enum domain,
|
const domain_enum domain,
|
||||||
gdb::function_view<symbol_found_callback_ftype> callback);
|
gdb::function_view<symbol_found_callback_ftype> callback);
|
||||||
|
|
||||||
|
/* Like iterate_over_symbols, but if all calls to CALLBACK return
|
||||||
|
true, then calls CALLBACK one additional time with a block_symbol
|
||||||
|
that has a valid block but a NULL symbol. */
|
||||||
|
|
||||||
|
bool iterate_over_symbols_terminated
|
||||||
|
(const struct block *block,
|
||||||
|
const lookup_name_info &name,
|
||||||
|
const domain_enum domain,
|
||||||
|
gdb::function_view<symbol_found_callback_ftype> callback);
|
||||||
|
|
||||||
/* Storage type used by demangle_for_lookup. demangle_for_lookup
|
/* Storage type used by demangle_for_lookup. demangle_for_lookup
|
||||||
either returns a const char * pointer that points to either of the
|
either returns a const char * pointer that points to either of the
|
||||||
fields of this type, or a pointer to the input NAME. This is done
|
fields of this type, or a pointer to the input NAME. This is done
|
||||||
|
Reference in New Issue
Block a user