diff options
author | Tom Tromey <tromey@redhat.com> | 2012-05-10 19:54:45 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2012-05-10 19:54:45 +0000 |
commit | 9439a077bef75279f4881cabc3adbe61cf057504 (patch) | |
tree | 2a9b010d84d2ff97ee5464a11678180147d4630b /gdb/psympriv.h | |
parent | 8157b174fd3b230a9d2cca6dae07562b38bad9fe (diff) | |
download | gdb-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.h | 44 |
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. */ |