diff options
author | Doug Evans <dje@google.com> | 2015-05-27 11:50:38 -0700 |
---|---|---|
committer | Doug Evans <dje@google.com> | 2015-05-27 11:50:38 -0700 |
commit | b2e2f908b863c27abb00108a03ebe2598baec55c (patch) | |
tree | 2d80ad0c354497e91d57aafadaf2d438cb0eb352 /gdb/block.h | |
parent | f62fce356bf1df27e01fc40a3a277fc924019ee7 (diff) | |
download | gdb-b2e2f908b863c27abb00108a03ebe2598baec55c.zip gdb-b2e2f908b863c27abb00108a03ebe2598baec55c.tar.gz gdb-b2e2f908b863c27abb00108a03ebe2598baec55c.tar.bz2 |
PR symtab/18258
gdb/ChangeLog:
* block.c (block_find_symbol): New function.
(block_find_non_opaque_type): Ditto.
(block_find_non_opaque_type_preferred): Ditto.
* block.h (block_symbol_matcher_ftype): New typedef.
(block_find_symbol): Declare.
(block_find_non_opaque_type): Ditto.
(block_find_non_opaque_type_preferred): Ditto.
* dwarf2read.c (dw2_lookup_symbol): Call block_find_symbol.
* psymtab.c (psym_lookup_symbol): Ditto.
* symtab.c (basic_lookup_transparent_type_1): New function.
(basic_lookup_transparent_type): Call it.
gdb/testsuite/ChangeLog:
* gdb.dwarf2/opaque-type-lookup-2.c: New file.
* gdb.dwarf2/opaque-type-lookup.c: New file.
* gdb.dwarf2/opaque-type-lookup.exp: New file.
Diffstat (limited to 'gdb/block.h')
-rw-r--r-- | gdb/block.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/gdb/block.h b/gdb/block.h index bdc5888..d8ad343 100644 --- a/gdb/block.h +++ b/gdb/block.h @@ -292,6 +292,40 @@ extern struct symbol *block_lookup_symbol_primary (const struct block *block, const char *name, const domain_enum domain); +/* The type of the MATCHER argument to block_find_symbol. */ + +typedef int (block_symbol_matcher_ftype) (struct symbol *, void *); + +/* Find symbol NAME in BLOCK and in DOMAIN that satisfies MATCHER. + DATA is passed unchanged to MATCHER. + BLOCK must be STATIC_BLOCK or GLOBAL_BLOCK. */ + +extern struct symbol *block_find_symbol (const struct block *block, + const char *name, + const domain_enum domain, + block_symbol_matcher_ftype *matcher, + void *data); + +/* A matcher function for block_find_symbol to find only symbols with + non-opaque types. */ + +extern int block_find_non_opaque_type (struct symbol *sym, void *data); + +/* A matcher function for block_find_symbol to prefer symbols with + non-opaque types. The way to use this function is as follows: + + struct symbol *with_opaque = NULL; + struct symbol *sym + = block_find_symbol (block, name, domain, + block_find_non_opaque_type_preferred, &with_opaque); + + At this point if SYM is non-NULL then a non-opaque type has been found. + Otherwise, if WITH_OPAQUE is non-NULL then an opaque type has been found. + Otherwise, the symbol was not found. */ + +extern int block_find_non_opaque_type_preferred (struct symbol *sym, + void *data); + /* Macro to loop through all symbols in BLOCK, in no particular order. ITER helps keep track of the iteration, and must be a struct block_iterator. SYM points to the current symbol. */ |