diff options
Diffstat (limited to 'gdb/dwarf2/cooked-index.c')
-rw-r--r-- | gdb/dwarf2/cooked-index.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/gdb/dwarf2/cooked-index.c b/gdb/dwarf2/cooked-index.c index a4a400e..c221b89 100644 --- a/gdb/dwarf2/cooked-index.c +++ b/gdb/dwarf2/cooked-index.c @@ -51,6 +51,7 @@ to_string (cooked_index_flag flags) MAP_ENUM_FLAG (IS_ENUM_CLASS), MAP_ENUM_FLAG (IS_LINKAGE), MAP_ENUM_FLAG (IS_TYPE_DECLARATION), + MAP_ENUM_FLAG (IS_PARENT_DEFERRED), }; return flags.to_string (mapping); @@ -248,7 +249,7 @@ cooked_index_entry::write_scope (struct obstack *storage, cooked_index_entry * cooked_index_shard::add (sect_offset die_offset, enum dwarf_tag tag, cooked_index_flag flags, const char *name, - const cooked_index_entry *parent_entry, + cooked_index_entry_ref parent_entry, dwarf2_per_cu_data *per_cu) { cooked_index_entry *result = create (die_offset, tag, flags, name, @@ -259,7 +260,8 @@ cooked_index_shard::add (sect_offset die_offset, enum dwarf_tag tag, implicit "main" discovery. */ if ((flags & IS_MAIN) != 0) m_main = result; - else if (parent_entry == nullptr + else if ((flags & IS_PARENT_DEFERRED) == 0 + && parent_entry.resolved == nullptr && m_main == nullptr && language_may_use_plain_main (per_cu->lang ()) && strcmp (name, "main") == 0) @@ -638,7 +640,10 @@ cooked_index::dump (gdbarch *arch) gdb_printf (" flags: %s\n", to_string (entry->flags).c_str ()); gdb_printf (" DIE offset: %s\n", sect_offset_str (entry->die_offset)); - if (entry->get_parent () != nullptr) + if ((entry->flags & IS_PARENT_DEFERRED) != 0) + gdb_printf (" parent: deferred (%" PRIx64 ")\n", + entry->get_deferred_parent ()); + else if (entry->get_parent () != nullptr) gdb_printf (" parent: ((cooked_index_entry *) %p) [%s]\n", entry->get_parent (), entry->get_parent ()->name); else |