@@ -680,8 +680,7 @@ void DWARFRewriter::updateDebugInfo() {
680
680
DWPState State;
681
681
if (opts::WriteDWP)
682
682
initDWPState (State);
683
- auto processSplitCU = [&](DWARFUnit *Unit, DIEBuilder *DIEBlder,
684
- std::optional<uint64_t > &RangesBase) {
683
+ auto processSplitCU = [&](DWARFUnit *Unit, DIEBuilder *DIEBlder) {
685
684
std::optional<DWARFUnit *> SplitCU;
686
685
std::optional<uint64_t > DWOId = Unit->getDWOId ();
687
686
if (DWOId)
@@ -710,15 +709,11 @@ void DWARFRewriter::updateDebugInfo() {
710
709
DebugLoclistWriter DebugLocDWoWriter (*Unit, Unit->getVersion (), true ,
711
710
AddressWriter);
712
711
DebugRangesSectionWriter *TempRangesSectionWriter;
713
- if (Unit->getVersion () >= 5 ) {
712
+ if (Unit->getVersion () >= 5 )
714
713
TempRangesSectionWriter = RangeListsWritersByCU[*DWOId].get ();
715
- } else {
714
+ else
716
715
TempRangesSectionWriter = LegacyRangesWritersByCU[*DWOId].get ();
717
- RangesBase = Unit->getVersion () >= 5
718
- ? RangeListsSectionWriter.get ()->getSectionOffset ()
719
- : LegacyRangesSectionWriter.get ()->getSectionOffset ();
720
- }
721
-
716
+
722
717
updateUnitDebugInfo (*(*SplitCU), DWODIEBuilder, DebugLocDWoWriter,
723
718
*TempRangesSectionWriter, AddressWriter);
724
719
DebugLocDWoWriter.finalize (DWODIEBuilder,
@@ -731,20 +726,26 @@ void DWARFRewriter::updateDebugInfo() {
731
726
GDBIndexSection);
732
727
};
733
728
auto processMainBinaryCU = [&](DWARFUnit *Unit, DIEBuilder *DIEBlder,
734
- DebugLocWriter *DebugLocWriter,
735
- std::optional<uint64_t > &RangesBase) {
729
+ DebugLocWriter *DebugLocWriter) {
736
730
DebugAddrWriter &AddressWriter =
737
731
*AddressWritersByCU[Unit->getOffset ()].get ();
738
732
DebugRangesSectionWriter &RangesSectionWriter =
739
733
Unit->getVersion () >= 5 ? *RangeListsSectionWriter.get ()
740
734
: *LegacyRangesSectionWriter.get ();
735
+ std::optional<uint64_t > RangesBase;
736
+ std::optional<DWARFUnit *> SplitCU;
737
+ std::optional<uint64_t > DWOId = Unit->getDWOId ();
738
+ if (DWOId)
739
+ SplitCU = BC.getDWOCU (*DWOId);
741
740
if (Unit->getVersion () >= 5 ) {
742
741
RangesBase = RangesSectionWriter.getSectionOffset () +
743
742
getDWARF5RngListLocListHeaderSize ();
744
743
RangesSectionWriter.initSection (*Unit);
745
744
StrOffstsWriter->finalizeSection (*Unit, *DIEBlder);
745
+ } else if (SplitCU) {
746
+ RangesBase = LegacyRangesSectionWriter.get ()->getSectionOffset ();
746
747
}
747
-
748
+
748
749
updateUnitDebugInfo (*Unit, *DIEBlder, *DebugLocWriter, RangesSectionWriter,
749
750
AddressWriter, RangesBase);
750
751
DebugLocWriter->finalize (*DIEBlder, *DIEBlder->getUnitDIEbyUnit (*Unit));
@@ -775,22 +776,15 @@ void DWARFRewriter::updateDebugInfo() {
775
776
llvm::SmallVector<DWARFUnit *> CompileUnits (
776
777
std::begin (DIEBlder.getProcessedCUs ()),
777
778
std::end (DIEBlder.getProcessedCUs ()));
778
- llvm::DenseMap<uint64_t , uint64_t > RangesBaseByCU;
779
779
llvm::DenseMap<uint64_t , uint64_t > LocListWritersIndexByCU;
780
780
for (DWARFUnit *CU : CompileUnits) {
781
781
createRangeLocListAddressWriters (*CU, LocListWritersIndexByCU);
782
- std::optional<uint64_t > RangesBase;
783
- processSplitCU (CU, &DIEBlder, RangesBase);
784
- if (RangesBase)
785
- RangesBaseByCU[CU->getOffset ()] = *RangesBase;
782
+ processSplitCU (CU, &DIEBlder);
786
783
}
787
784
for (DWARFUnit *CU : CompileUnits) {
788
- std::optional<uint64_t > RangesBase;
789
- if (RangesBaseByCU.count (CU->getOffset ()))
790
- RangesBase = RangesBaseByCU[CU->getOffset ()];
791
785
DebugLocWriter *DebugLocWriter =
792
786
LocListWritersByCU[LocListWritersIndexByCU[CU->getOffset ()]].get ();
793
- processMainBinaryCU (CU, &DIEBlder, DebugLocWriter, RangesBase );
787
+ processMainBinaryCU (CU, &DIEBlder, DebugLocWriter);
794
788
}
795
789
finalizeCompileUnits (DIEBlder, *Streamer, OffsetMap,
796
790
DIEBlder.getProcessedCUs (), *FinalAddrWriter);
0 commit comments