diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/psympriv.h | 8 | ||||
-rw-r--r-- | gdb/psymtab.c | 35 |
3 files changed, 45 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ea490d9..0b3ec55 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2012-07-10 Doug Evans <dje@google.com> + * psympriv.h (struct partial_symtab): New member "anonymous". + * psymtab.c (partial_map_symtabs_matching_filename): Ignore + anonymous psymtabs. + (read_psymtabs_with_filename): Ditto. + (map_symbol_filenames_psymtab, psymtab_to_fullname): Ditto. + (expand_symtabs_matching_via_partial): Ditto. + (dump_psymtab): Update. * dictionary.c (dict_add_pending): New function. * dictionary.h (dict_add_pending): Declare. diff --git a/gdb/psympriv.h b/gdb/psympriv.h index 370ce86..16b9b83 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -82,7 +82,9 @@ struct partial_symtab struct partial_symtab *next; - /* Name of the source file which this partial_symtab defines. */ + /* Name of the source file which this partial_symtab defines, + or if the psymtab is anonymous then a descriptive name for + debugging purposes, or "". It must not be NULL. */ const char *filename; @@ -182,6 +184,10 @@ struct partial_symtab unsigned char psymtabs_addrmap_supported; + /* True if the name of this partial symtab is not a source file name. */ + + unsigned char anonymous; + /* A flag that is temporarily used when searching psymtabs. */ ENUM_BITFIELD (psymtab_search_status) searched_flag : 2; diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 5366d94..6e84094 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -174,6 +174,10 @@ partial_map_symtabs_matching_filename (struct objfile *objfile, if (pst->user != NULL) continue; + /* Anonymous psymtabs don't have a file name. */ + if (pst->anonymous) + continue; + if (FILENAME_CMP (name, pst->filename) == 0 || (!is_abs && compare_filenames_for_search (pst->filename, name, name_len))) @@ -973,8 +977,16 @@ dump_psymtab (struct objfile *objfile, struct partial_symtab *psymtab, struct gdbarch *gdbarch = get_objfile_arch (objfile); int i; - fprintf_filtered (outfile, "\nPartial symtab for source file %s ", - psymtab->filename); + if (psymtab->anonymous) + { + fprintf_filtered (outfile, "\nAnonymous partial symtab (%s) ", + psymtab->filename); + } + else + { + fprintf_filtered (outfile, "\nPartial symtab for source file %s ", + psymtab->filename); + } fprintf_filtered (outfile, "(object "); gdb_print_host_address (psymtab, outfile); fprintf_filtered (outfile, ")\n\n"); @@ -1124,6 +1136,10 @@ read_psymtabs_with_filename (struct objfile *objfile, const char *filename) ALL_OBJFILE_PSYMTABS_REQUIRED (objfile, p) { + /* Anonymous psymtabs don't have a name of a source file. */ + if (p->anonymous) + continue; + if (filename_cmp (filename, p->filename) == 0) psymtab_to_symtab (p); } @@ -1143,6 +1159,10 @@ map_symbol_filenames_psymtab (struct objfile *objfile, if (ps->readin) continue; + /* Anonymous psymtabs don't have a file name. */ + if (ps->anonymous) + continue; + QUIT; if (need_fullname) fullname = psymtab_to_fullname (ps); @@ -1167,6 +1187,8 @@ psymtab_to_fullname (struct partial_symtab *ps) if (!ps) return NULL; + if (ps->anonymous) + return NULL; /* Use cached copy if we have it. We rely on forget_cached_source_info being called appropriately @@ -1377,8 +1399,13 @@ expand_symtabs_matching_via_partial if (ps->user != NULL) continue; - if (file_matcher && ! (*file_matcher) (ps->filename, data)) - continue; + if (file_matcher) + { + if (ps->anonymous) + continue; + if (! (*file_matcher) (ps->filename, data)) + continue; + } if (recursively_search_psymtabs (ps, objfile, kind, name_matcher, data)) psymtab_to_symtab (ps); |