[llvm] [BOLT][DWARF] CHange isDWO (PR #82540)
Alexander Yermolovich via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 21 13:51:45 PST 2024
https://github.com/ayermolo updated https://github.com/llvm/llvm-project/pull/82540
>From abbdfb49cf93dc626b0b8f3e90bc2b642e219d65 Mon Sep 17 00:00:00 2001
From: Alexander Yermolovich <ayermolo at meta.com>
Date: Wed, 21 Feb 2024 13:44:34 -0800
Subject: [PATCH 1/2] [BOLT][DWARF] CHange isDWO
Changed isDWO to a function that checks Skeleton CU that is passed in. This is
for preparation for https://github.com/llvm/llvm-project/pull/81062.
---
bolt/include/bolt/Core/DIEBuilder.h | 8 ++++++--
bolt/lib/Core/DIEBuilder.cpp | 14 +++++++-------
bolt/lib/Rewrite/DWARFRewriter.cpp | 2 +-
3 files changed, 14 insertions(+), 10 deletions(-)
diff --git a/bolt/include/bolt/Core/DIEBuilder.h b/bolt/include/bolt/Core/DIEBuilder.h
index f13d42ff4ab42a..f0db924e2ccbb1 100644
--- a/bolt/include/bolt/Core/DIEBuilder.h
+++ b/bolt/include/bolt/Core/DIEBuilder.h
@@ -124,7 +124,7 @@ class DIEBuilder {
std::vector<std::unique_ptr<DIEAbbrev>> Abbreviations;
BinaryContext &BC;
DWARFContext *DwarfContext{nullptr};
- bool IsDWO{false};
+ DWARFUnit *SkeletonCU{nullptr};
uint64_t UnitSize{0};
llvm::DenseSet<uint64_t> AllProcessed;
@@ -264,8 +264,12 @@ class DIEBuilder {
/// current Section.
DIE *constructDIEFast(DWARFDie &DDie, DWARFUnit &U, uint32_t UnitId);
+ /// Returns true if this DIEBUilder is for DWO Unit.
+ bool isDWO() const { return SkeletonCU != nullptr; }
+
public:
- DIEBuilder(BinaryContext &BC, DWARFContext *DwarfContext, bool IsDWO = false);
+ DIEBuilder(BinaryContext &BC, DWARFContext *DwarfContext,
+ DWARFUnit *SkeletonCU = nullptr);
/// Returns enum to what we are currently processing.
ProcessingType getCurrentProcessingState() { return getState().Type; }
diff --git a/bolt/lib/Core/DIEBuilder.cpp b/bolt/lib/Core/DIEBuilder.cpp
index 3c72c745086b5a..00073765235472 100644
--- a/bolt/lib/Core/DIEBuilder.cpp
+++ b/bolt/lib/Core/DIEBuilder.cpp
@@ -179,8 +179,8 @@ void DIEBuilder::constructFromUnit(DWARFUnit &DU) {
}
DIEBuilder::DIEBuilder(BinaryContext &BC, DWARFContext *DwarfContext,
- bool IsDWO)
- : BC(BC), DwarfContext(DwarfContext), IsDWO(IsDWO) {}
+ DWARFUnit *SkeletonCU)
+ : BC(BC), DwarfContext(DwarfContext), SkeletonCU(SkeletonCU) {}
static unsigned int getCUNum(DWARFContext *DwarfContext, bool IsDWO) {
unsigned int CUNum = IsDWO ? DwarfContext->getNumDWOCompileUnits()
@@ -204,10 +204,10 @@ void DIEBuilder::buildTypeUnits(DebugStrOffsetsWriter *StrOffsetWriter,
true);
}
}
- const unsigned int CUNum = getCUNum(DwarfContext, IsDWO);
+ const unsigned int CUNum = getCUNum(DwarfContext, isDWO());
getState().CloneUnitCtxMap.resize(CUNum);
DWARFContext::unit_iterator_range CU4TURanges =
- IsDWO ? DwarfContext->dwo_types_section_units()
+ isDWO() ? DwarfContext->dwo_types_section_units()
: DwarfContext->types_section_units();
getState().Type = ProcessingType::DWARF4TUs;
@@ -218,7 +218,7 @@ void DIEBuilder::buildTypeUnits(DebugStrOffsetsWriter *StrOffsetWriter,
constructFromUnit(*DU.get());
DWARFContext::unit_iterator_range CURanges =
- IsDWO ? DwarfContext->dwo_info_section_units()
+ isDWO() ? DwarfContext->dwo_info_section_units()
: DwarfContext->info_section_units();
// This handles DWARF4 CUs and DWARF5 CU/TUs.
@@ -242,10 +242,10 @@ void DIEBuilder::buildCompileUnits(const bool Init) {
if (Init)
BuilderState.reset(new State());
- unsigned int CUNum = getCUNum(DwarfContext, IsDWO);
+ unsigned int CUNum = getCUNum(DwarfContext, isDWO());
getState().CloneUnitCtxMap.resize(CUNum);
DWARFContext::unit_iterator_range CURanges =
- IsDWO ? DwarfContext->dwo_info_section_units()
+ isDWO() ? DwarfContext->dwo_info_section_units()
: DwarfContext->info_section_units();
// This handles DWARF4 CUs and DWARF5 CU/TUs.
diff --git a/bolt/lib/Rewrite/DWARFRewriter.cpp b/bolt/lib/Rewrite/DWARFRewriter.cpp
index 27fa937c7508c3..e1d21accd78a6f 100644
--- a/bolt/lib/Rewrite/DWARFRewriter.cpp
+++ b/bolt/lib/Rewrite/DWARFRewriter.cpp
@@ -709,7 +709,7 @@ void DWARFRewriter::updateDebugInfo() {
: LegacyRangesSectionWriter.get();
// Skipping CUs that failed to load.
if (SplitCU) {
- DIEBuilder DWODIEBuilder(BC, &(*SplitCU)->getContext(), true);
+ DIEBuilder DWODIEBuilder(BC, &(*SplitCU)->getContext(), Unit);
DWODIEBuilder.buildDWOUnit(**SplitCU);
std::string DWOName = updateDWONameCompDir(
*Unit, *DIEBlder, *DIEBlder->getUnitDIEbyUnit(*Unit));
>From 9107d8c1aef0e91abc379607e49d1e563d37db79 Mon Sep 17 00:00:00 2001
From: Alexander Yermolovich <ayermolo at meta.com>
Date: Wed, 21 Feb 2024 13:50:51 -0800
Subject: [PATCH 2/2] format
---
bolt/lib/Core/DIEBuilder.cpp | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/bolt/lib/Core/DIEBuilder.cpp b/bolt/lib/Core/DIEBuilder.cpp
index 00073765235472..e6104b81bf6c9d 100644
--- a/bolt/lib/Core/DIEBuilder.cpp
+++ b/bolt/lib/Core/DIEBuilder.cpp
@@ -208,7 +208,7 @@ void DIEBuilder::buildTypeUnits(DebugStrOffsetsWriter *StrOffsetWriter,
getState().CloneUnitCtxMap.resize(CUNum);
DWARFContext::unit_iterator_range CU4TURanges =
isDWO() ? DwarfContext->dwo_types_section_units()
- : DwarfContext->types_section_units();
+ : DwarfContext->types_section_units();
getState().Type = ProcessingType::DWARF4TUs;
for (std::unique_ptr<DWARFUnit> &DU : CU4TURanges)
@@ -219,7 +219,7 @@ void DIEBuilder::buildTypeUnits(DebugStrOffsetsWriter *StrOffsetWriter,
DWARFContext::unit_iterator_range CURanges =
isDWO() ? DwarfContext->dwo_info_section_units()
- : DwarfContext->info_section_units();
+ : DwarfContext->info_section_units();
// This handles DWARF4 CUs and DWARF5 CU/TUs.
// Creating a vector so that for reference handling only DWARF5 CU/TUs are
@@ -246,7 +246,7 @@ void DIEBuilder::buildCompileUnits(const bool Init) {
getState().CloneUnitCtxMap.resize(CUNum);
DWARFContext::unit_iterator_range CURanges =
isDWO() ? DwarfContext->dwo_info_section_units()
- : DwarfContext->info_section_units();
+ : DwarfContext->info_section_units();
// This handles DWARF4 CUs and DWARF5 CU/TUs.
// Creating a vector so that for reference handling only DWARF5 CU/TUs are
More information about the llvm-commits
mailing list