aboutsummaryrefslogtreecommitdiff
path: root/gdb/psympriv.h
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2012-05-10 19:54:45 +0000
committerTom Tromey <tromey@redhat.com>2012-05-10 19:54:45 +0000
commit9439a077bef75279f4881cabc3adbe61cf057504 (patch)
tree2a9b010d84d2ff97ee5464a11678180147d4630b /gdb/psympriv.h
parent8157b174fd3b230a9d2cca6dae07562b38bad9fe (diff)
downloadgdb-9439a077bef75279f4881cabc3adbe61cf057504.zip
gdb-9439a077bef75279f4881cabc3adbe61cf057504.tar.gz
gdb-9439a077bef75279f4881cabc3adbe61cf057504.tar.bz2
* psymtab.c (partial_map_expand_apply): Add assertion.
(partial_map_symtabs_matching_filename): Skip included psymtabs. (psymtab_to_symtab): Find unshared psymtab. (dump_psymtab): Print including psymtabs. (recursively_search_psymtabs): New function. (expand_symtabs_matching_via_partial): Use it. * psympriv.h (struct partial_symtab) <user, searched_flag>: New fields. (enum psymtab_search_status): New.
Diffstat (limited to 'gdb/psympriv.h')
-rw-r--r--gdb/psympriv.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index df7b874..370ce86 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -54,6 +54,17 @@ struct partial_symbol
#define PSYMBOL_DOMAIN(psymbol) (psymbol)->domain
#define PSYMBOL_CLASS(psymbol) (psymbol)->aclass
+/* A convenience enum to give names to some constants used when
+ searching psymtabs. This is internal to psymtab and should not be
+ used elsewhere. */
+
+enum psymtab_search_status
+ {
+ PST_NOT_SEARCHED,
+ PST_SEARCHED_AND_FOUND,
+ PST_SEARCHED_AND_NOT_FOUND
+ };
+
/* Each source file that has not been fully read in is represented by
a partial_symtab. This contains the information on where in the
executable the debugging symbols for a specific file are, and a
@@ -111,6 +122,35 @@ struct partial_symtab
int number_of_dependencies;
+ /* If NULL, this is an ordinary partial symbol table.
+
+ If non-NULL, this holds a single includer of this partial symbol
+ table, and this partial symbol table is a shared one.
+
+ A shared psymtab is one that is referenced by multiple other
+ psymtabs, and which conceptually has its contents directly
+ included in those.
+
+ Shared psymtabs have special semantics. When a search finds a
+ symbol in a shared table, we instead return one of the non-shared
+ tables that include this one.
+
+ A shared psymtabs can be referred to by other shared ones.
+
+ The psymtabs that refer to a shared psymtab will list the shared
+ psymtab in their 'dependencies' array.
+
+ In DWARF terms, a shared psymtab is a DW_TAG_partial_unit; but
+ of course using a name based on that would be too confusing, so
+ "shared" was chosen instead.
+
+ Only a single user is needed because, when expanding a shared
+ psymtab, we only need to expand its "canonical" non-shared user.
+ The choice of which one should be canonical is left to the
+ debuginfo reader; it can be arbitrary. */
+
+ struct partial_symtab *user;
+
/* Global symbol list. This list will be sorted after readin to
improve access. Binary search will be the usual method of
finding a symbol within it. globals_offset is an integer offset
@@ -142,6 +182,10 @@ struct partial_symtab
unsigned char psymtabs_addrmap_supported;
+ /* A flag that is temporarily used when searching psymtabs. */
+
+ ENUM_BITFIELD (psymtab_search_status) searched_flag : 2;
+
/* Pointer to symtab eventually allocated for this source file, 0 if
!readin or if we haven't looked for the symtab after it was readin. */