From 632d568d2e0e97683ba869c62ecff67fbf76082e Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Mon, 23 May 2016 22:38:06 +0000 Subject: llvm-dwp: Reduce indentation git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@270507 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvm-dwp/llvm-dwp.cpp | 95 ++++++++++++++++++++++----------------------- 1 file changed, 47 insertions(+), 48 deletions(-) diff --git a/tools/llvm-dwp/llvm-dwp.cpp b/tools/llvm-dwp/llvm-dwp.cpp index c1304484faa..941083f5c3f 100644 --- a/tools/llvm-dwp/llvm-dwp.cpp +++ b/tools/llvm-dwp/llvm-dwp.cpp @@ -521,53 +521,10 @@ static Error write(MCStreamer &Out, ArrayRef Inputs) { if (InfoSection.empty()) continue; - if (!CurCUIndexSection.empty()) { - DWARFUnitIndex CUIndex(DW_SECT_INFO); - DataExtractor CUIndexData(CurCUIndexSection, Obj.isLittleEndian(), 0); - if (!CUIndex.parse(CUIndexData)) - return make_error("Failed to parse cu_index"); - - for (const DWARFUnitIndex::Entry &E : CUIndex.getRows()) { - auto *I = E.getOffsets(); - if (!I) - continue; - auto P = - IndexEntries.insert(std::make_pair(E.getSignature(), CurEntry)); - Expected EID = getCUIdentifiers( - getSubsection(AbbrevSection, E, DW_SECT_ABBREV), - getSubsection(InfoSection, E, DW_SECT_INFO), - getSubsection(CurStrOffsetSection, E, DW_SECT_STR_OFFSETS), - CurStrSection); - if (!EID) - return EID.takeError(); - const auto &ID = *EID; - if (!P.second) - return buildDuplicateError(*P.first, ID, Input); - auto &NewEntry = P.first->second; - NewEntry.Name = ID.Name; - NewEntry.DWOName = ID.DWOName; - NewEntry.DWPName = Input; - for (auto Kind : CUIndex.getColumnKinds()) { - auto &C = NewEntry.Contributions[Kind - DW_SECT_INFO]; - C.Offset += I->Offset; - C.Length = I->Length; - ++I; - } - } + writeStringsAndOffsets(Out, Strings, StrOffsetSection, CurStrSection, + CurStrOffsetSection); - if (!CurTypesSection.empty()) { - if (CurTypesSection.size() != 1) - return make_error( - "multiple type unit sections in .dwp file"); - DWARFUnitIndex TUIndex(DW_SECT_TYPES); - DataExtractor TUIndexData(CurTUIndexSection, Obj.isLittleEndian(), 0); - if (!TUIndex.parse(TUIndexData)) - return make_error("Failed to parse tu_index"); - addAllTypesFromDWP(Out, TypeIndexEntries, TUIndex, TypesSection, - CurTypesSection.front(), CurEntry, - ContributionOffsets[DW_SECT_TYPES - DW_SECT_INFO]); - } - } else { + if (CurCUIndexSection.empty()) { Expected EID = getCUIdentifiers( AbbrevSection, InfoSection, CurStrOffsetSection, CurStrSection); if (!EID) @@ -580,10 +537,52 @@ static Error write(MCStreamer &Out, ArrayRef Inputs) { P.first->second.DWOName = ID.DWOName; addAllTypes(Out, TypeIndexEntries, TypesSection, CurTypesSection, CurEntry, ContributionOffsets[DW_SECT_TYPES - DW_SECT_INFO]); + continue; } - writeStringsAndOffsets(Out, Strings, StrOffsetSection, CurStrSection, - CurStrOffsetSection); + DWARFUnitIndex CUIndex(DW_SECT_INFO); + DataExtractor CUIndexData(CurCUIndexSection, Obj.isLittleEndian(), 0); + if (!CUIndex.parse(CUIndexData)) + return make_error("Failed to parse cu_index"); + + for (const DWARFUnitIndex::Entry &E : CUIndex.getRows()) { + auto *I = E.getOffsets(); + if (!I) + continue; + auto P = IndexEntries.insert(std::make_pair(E.getSignature(), CurEntry)); + Expected EID = getCUIdentifiers( + getSubsection(AbbrevSection, E, DW_SECT_ABBREV), + getSubsection(InfoSection, E, DW_SECT_INFO), + getSubsection(CurStrOffsetSection, E, DW_SECT_STR_OFFSETS), + CurStrSection); + if (!EID) + return EID.takeError(); + const auto &ID = *EID; + if (!P.second) + return buildDuplicateError(*P.first, ID, Input); + auto &NewEntry = P.first->second; + NewEntry.Name = ID.Name; + NewEntry.DWOName = ID.DWOName; + NewEntry.DWPName = Input; + for (auto Kind : CUIndex.getColumnKinds()) { + auto &C = NewEntry.Contributions[Kind - DW_SECT_INFO]; + C.Offset += I->Offset; + C.Length = I->Length; + ++I; + } + } + + if (!CurTypesSection.empty()) { + if (CurTypesSection.size() != 1) + return make_error("multiple type unit sections in .dwp file"); + DWARFUnitIndex TUIndex(DW_SECT_TYPES); + DataExtractor TUIndexData(CurTUIndexSection, Obj.isLittleEndian(), 0); + if (!TUIndex.parse(TUIndexData)) + return make_error("Failed to parse tu_index"); + addAllTypesFromDWP(Out, TypeIndexEntries, TUIndex, TypesSection, + CurTypesSection.front(), CurEntry, + ContributionOffsets[DW_SECT_TYPES - DW_SECT_INFO]); + } } // Lie about there being no info contributions so the TU index only includes -- cgit v1.2.3