clayborg wrote: Ok, I found the issue. `.debug_names` tables with `DW_IDX_parent` entries, might contain tons of entries for forward declared classes because in my example `std::ios_base` is the parent declaration context for `seekdir`, `openmode`, and `iostate` so `.debug_names` entries for these types will refer to another `.debug_names` for `std::ios_base` as the parent, buit this is messing up the table itself as now it contains entries that are not all full definitions. The `.debug_names` spec states that only entries with definitions should be in the .debug_names table...
That being said, an easy fix is this: ```bool DebugNamesDWARFIndex::ProcessEntry( const DebugNames::Entry &entry, llvm::function_ref<bool(DWARFDIE die)> callback) { std::optional<DIERef> ref = ToDIERef(entry); if (!ref) return true; SymbolFileDWARF &dwarf = *llvm::cast<SymbolFileDWARF>( m_module.GetSymbolFile()->GetBackingSymbolFile()); DWARFDIE die = dwarf.GetDIE(*ref); if (!die) return true; // Watch out for forward declarations that appear in the .debug_names tables // only due to being there for a DW_IDX_parent. if (die.GetAttributeValueAsUnsigned(DW_AT_declaration, 0)) /// <<< newly added for fix return true;/// <<< newly added for fix return callback(die); } ``` https://github.com/llvm/llvm-project/pull/90663 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits