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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits