[llvm] [BOLT][DWARF] Fix parent chain in debug_names entries with forward declaration. (PR #93865)
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 3 17:08:45 PDT 2024
================
@@ -461,32 +461,42 @@ getUnitForOffset(DIEBuilder &Builder, DWARFContext &DWCtx,
return nullptr;
}
-uint32_t DIEBuilder::finalizeDIEs(
- DWARFUnit &CU, DIE &Die,
- std::vector<std::optional<BOLTDWARF5AccelTableData *>> &Parents,
- uint32_t &CurOffset) {
+uint32_t
+DIEBuilder::finalizeDIEs(DWARFUnit &CU, DIE &Die,
+ std::optional<BOLTDWARF5AccelTableData *> Parent,
+ uint32_t NumberParentsInChain, uint32_t &CurOffset) {
getState().DWARFDieAddressesParsed.erase(Die.getOffset());
uint32_t CurSize = 0;
Die.setOffset(CurOffset);
std::optional<BOLTDWARF5AccelTableData *> NameEntry =
DebugNamesTable.addAccelTableEntry(
CU, Die, SkeletonCU ? SkeletonCU->getDWOId() : std::nullopt,
- Parents.back());
+ NumberParentsInChain, Parent);
// It is possible that an indexed debugging information entry has a parent
// that is not indexed (for example, if its parent does not have a name
// attribute). In such a case, a parent attribute may point to a nameless
// index entry (that is, one that cannot be reached from any entry in the name
// table), or it may point to the nearest ancestor that does have an index
// entry.
+ // Although as discussed in https://github.com/llvm/llvm-project/pull/91808
+ // skipping entry is not very useful. So this follows clang where children of
+ // forward declaration won't have DW_IDX_parent.
+
+ // If Parent is nullopt and NumberParentsInChain is not zero, then forward
+ // declaration was encountered in this DF traversal. Propogating nullopt for
----------------
dcci wrote:
propogating -> propagating.
https://github.com/llvm/llvm-project/pull/93865
More information about the llvm-commits
mailing list