aboutsummaryrefslogtreecommitdiff
path: root/gdb/block.h
diff options
context:
space:
mode:
authorDoug Evans <dje@google.com>2015-05-27 11:50:38 -0700
committerDoug Evans <dje@google.com>2015-05-27 11:50:38 -0700
commitb2e2f908b863c27abb00108a03ebe2598baec55c (patch)
tree2d80ad0c354497e91d57aafadaf2d438cb0eb352 /gdb/block.h
parentf62fce356bf1df27e01fc40a3a277fc924019ee7 (diff)
downloadgdb-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.h34
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. */