From: George Rimar Date: Wed, 14 Aug 2019 08:56:55 +0000 (+0000) Subject: Revert r368812 "[llvm/Object] - Convert SectionRef::getName() to return Expected<>" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=899e01b67dc7e25c77e11248ea5189de58ea63b4;p=llvm Revert r368812 "[llvm/Object] - Convert SectionRef::getName() to return Expected<>" It broke clang BB: http://lab.llvm.org:8011/builders/clang-x86_64-debian-fast/builds/16455 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@368813 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Object/ELFObjectFile.h b/include/llvm/Object/ELFObjectFile.h index 8dac02c56dc..c4527b3435f 100644 --- a/include/llvm/Object/ELFObjectFile.h +++ b/include/llvm/Object/ELFObjectFile.h @@ -461,15 +461,13 @@ Expected ELFObjectFile::getSymbolName(DataRefImpl Sym) const { if (!SymStrTabOrErr) return SymStrTabOrErr.takeError(); Expected Name = ESym->getName(*SymStrTabOrErr); - if (Name && !Name->empty()) - return Name; // If the symbol name is empty use the section name. - if (ESym->getType() == ELF::STT_SECTION) { - if (Expected SecOrErr = getSymbolSection(Sym)) { - consumeError(Name.takeError()); - return (*SecOrErr)->getName(); - } + if ((!Name || Name->empty()) && ESym->getType() == ELF::STT_SECTION) { + StringRef SecName; + Expected Sec = getSymbolSection(Sym); + if (Sec && !(*Sec)->getName(SecName)) + return SecName; } return Name; } diff --git a/include/llvm/Object/ObjectFile.h b/include/llvm/Object/ObjectFile.h index a4b4f27c28d..483a3486bd7 100644 --- a/include/llvm/Object/ObjectFile.h +++ b/include/llvm/Object/ObjectFile.h @@ -94,7 +94,7 @@ public: void moveNext(); - Expected getName() const; + std::error_code getName(StringRef &Result) const; uint64_t getAddress() const; uint64_t getIndex() const; uint64_t getSize() const; @@ -434,8 +434,12 @@ inline void SectionRef::moveNext() { return OwningObject->moveSectionNext(SectionPimpl); } -inline Expected SectionRef::getName() const { - return OwningObject->getSectionName(SectionPimpl); +inline std::error_code SectionRef::getName(StringRef &Result) const { + Expected NameOrErr = OwningObject->getSectionName(SectionPimpl); + if (!NameOrErr) + return errorToErrorCode(NameOrErr.takeError()); + Result = *NameOrErr; + return std::error_code(); } inline uint64_t SectionRef::getAddress() const { diff --git a/lib/DebugInfo/DWARF/DWARFContext.cpp b/lib/DebugInfo/DWARF/DWARFContext.cpp index 2379ba66aa3..4b66a305a3d 100644 --- a/lib/DebugInfo/DWARF/DWARFContext.cpp +++ b/lib/DebugInfo/DWARF/DWARFContext.cpp @@ -1506,11 +1506,7 @@ public: StringMap SectionAmountMap; for (const SectionRef &Section : Obj.sections()) { StringRef Name; - if (auto NameOrErr = Section.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Section.getName(Name); ++SectionAmountMap[Name]; SectionNames.push_back({ Name, true }); @@ -1575,15 +1571,12 @@ public: continue; StringRef RelSecName; - if (auto NameOrErr = RelocatedSection->getName()) - RelSecName = *NameOrErr; - else - consumeError(NameOrErr.takeError()); + StringRef RelSecData; + RelocatedSection->getName(RelSecName); // If the section we're relocating was relocated already by the JIT, // then we used the relocated version above, so we do not need to process // relocations for it now. - StringRef RelSecData; if (L && L->getLoadedSectionContents(*RelocatedSection, RelSecData)) continue; diff --git a/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp b/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp index b4d49d9ff95..bc4070b1d81 100644 --- a/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp +++ b/lib/DebugInfo/Symbolize/SymbolizableObjectFile.cpp @@ -54,11 +54,10 @@ SymbolizableObjectFile::create(const object::ObjectFile *Obj, // PowerPC64 ELF. if (Obj->getArch() == Triple::ppc64) { for (section_iterator Section : Obj->sections()) { - Expected NameOrErr = Section->getName(); - if (!NameOrErr) - return errorToErrorCode(NameOrErr.takeError()); - - if (*NameOrErr == ".opd") { + StringRef Name; + if (auto EC = Section->getName(Name)) + return EC; + if (Name == ".opd") { Expected E = Section->getContents(); if (!E) return errorToErrorCode(E.takeError()); diff --git a/lib/DebugInfo/Symbolize/Symbolize.cpp b/lib/DebugInfo/Symbolize/Symbolize.cpp index a5559373b05..271d0cc6f44 100644 --- a/lib/DebugInfo/Symbolize/Symbolize.cpp +++ b/lib/DebugInfo/Symbolize/Symbolize.cpp @@ -259,11 +259,7 @@ bool getGNUDebuglinkContents(const ObjectFile *Obj, std::string &DebugName, return false; for (const SectionRef &Section : Obj->sections()) { StringRef Name; - if (Expected NameOrErr = Section.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Section.getName(Name); Name = Name.substr(Name.find_first_not_of("._")); if (Name == "gnu_debuglink") { Expected ContentsOrErr = Section.getContents(); diff --git a/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp b/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp index 92c7e49039a..1501c7ad0bc 100644 --- a/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp +++ b/lib/ExecutionEngine/JITLink/MachOAtomGraphBuilder.cpp @@ -96,10 +96,9 @@ Error MachOAtomGraphBuilder::parseSections() { assert((SecRef.getAlignment() <= std::numeric_limits::max()) && "Section alignment does not fit in 32 bits"); - Expected NameOrErr = SecRef.getName(); - if (!NameOrErr) - return NameOrErr.takeError(); - StringRef Name = *NameOrErr; + StringRef Name; + if (auto EC = SecRef.getName(Name)) + return errorCodeToError(EC); unsigned SectionIndex = SecRef.getIndex() + 1; diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp index 4b328624ccd..f73d1c61edf 100644 --- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp +++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp @@ -535,10 +535,9 @@ Error RuntimeDyldImpl::computeTotalAllocSize(const ObjectFile &Obj, bool IsCode = Section.isText(); bool IsReadOnly = isReadOnlyData(Section); - Expected NameOrErr = Section.getName(); - if (!NameOrErr) - return NameOrErr.takeError(); - StringRef Name = *NameOrErr; + StringRef Name; + if (auto EC = Section.getName(Name)) + return errorCodeToError(EC); uint64_t StubBufSize = computeSectionStubBufSize(Obj, Section); @@ -778,10 +777,9 @@ RuntimeDyldImpl::emitSection(const ObjectFile &Obj, // anyway, so we should guarantee that the alignment is always at least 1. Alignment = std::max(1u, Alignment); - Expected NameOrErr = Section.getName(); - if (!NameOrErr) - return NameOrErr.takeError(); - StringRef Name = *NameOrErr; + StringRef Name; + if (auto EC = Section.getName(Name)) + return errorCodeToError(EC); StubBufSize = computeSectionStubBufSize(Obj, Section); diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp index e3ace265f9c..60041a45e2b 100644 --- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp +++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp @@ -160,13 +160,9 @@ createRTDyldELFObject(MemoryBufferRef Buffer, const ObjectFile &SourceObject, // Iterate over all sections in the object. auto SI = SourceObject.section_begin(); for (const auto &Sec : Obj->sections()) { - Expected NameOrErr = Sec.getName(); - if (!NameOrErr) { - consumeError(NameOrErr.takeError()); - continue; - } - - if (*NameOrErr != "") { + StringRef SectionName; + Sec.getName(SectionName); + if (SectionName != "") { DataRefImpl ShdrRef = Sec.getRawDataRefImpl(); Elf_Shdr *shdr = const_cast( reinterpret_cast(ShdrRef.p)); @@ -571,11 +567,10 @@ Error RuntimeDyldELF::findPPC64TOCSection(const ELFObjectFileBase &Obj, // The TOC consists of sections .got, .toc, .tocbss, .plt in that // order. The TOC starts where the first of these sections starts. - for (auto &Section : Obj.sections()) { - Expected NameOrErr = Section.getName(); - if (!NameOrErr) - return NameOrErr.takeError(); - StringRef SectionName = *NameOrErr; + for (auto &Section: Obj.sections()) { + StringRef SectionName; + if (auto EC = Section.getName(SectionName)) + return errorCodeToError(EC); if (SectionName == ".got" || SectionName == ".toc" @@ -610,10 +605,9 @@ Error RuntimeDyldELF::findOPDEntrySection(const ELFObjectFileBase &Obj, if (RelSecI == Obj.section_end()) continue; - Expected NameOrErr = RelSecI->getName(); - if (!NameOrErr) - return NameOrErr.takeError(); - StringRef RelSectionName = *NameOrErr; + StringRef RelSectionName; + if (auto EC = RelSecI->getName(RelSectionName)) + return errorCodeToError(EC); if (RelSectionName != ".opd") continue; @@ -1885,14 +1879,8 @@ Error RuntimeDyldELF::finalizeLoad(const ObjectFile &Obj, ObjSectionToIDMap::iterator i, e; for (i = SectionMap.begin(), e = SectionMap.end(); i != e; ++i) { const SectionRef &Section = i->first; - StringRef Name; - Expected NameOrErr = Section.getName(); - if (NameOrErr) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Section.getName(Name); if (Name == ".eh_frame") { UnregisteredEHFrameSections.push_back(i->second); break; diff --git a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp index fbdfb8d5c3a..202c3ca1c50 100644 --- a/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp +++ b/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp @@ -233,10 +233,7 @@ RuntimeDyldMachOCRTPBase::finalizeLoad(const ObjectFile &Obj, for (const auto &Section : Obj.sections()) { StringRef Name; - if (Expected NameOrErr = Section.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); + Section.getName(Name); // Force emission of the __text, __eh_frame, and __gcc_except_tab sections // if they're present. Otherwise call down to the impl to handle other diff --git a/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFX86_64.h b/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFX86_64.h index dc4af08583d..d2d74534cf9 100644 --- a/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFX86_64.h +++ b/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFX86_64.h @@ -284,14 +284,14 @@ public: // Look for and record the EH frame section IDs. for (const auto &SectionPair : SectionMap) { const object::SectionRef &Section = SectionPair.first; - Expected NameOrErr = Section.getName(); - if (!NameOrErr) - return NameOrErr.takeError(); + StringRef Name; + if (auto EC = Section.getName(Name)) + return errorCodeToError(EC); // Note unwind info is stored in .pdata but often points to .xdata // with an IMAGE_REL_AMD64_ADDR32NB relocation. Using a memory manager // that keeps sections ordered in relation to __ImageBase is necessary. - if ((*NameOrErr) == ".pdata") + if (Name == ".pdata") UnregisteredEHFrameSections.push_back(SectionPair.second); } return Error::success(); diff --git a/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOARM.h b/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOARM.h index a76958a9e2c..3bec8b979f7 100644 --- a/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOARM.h +++ b/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOARM.h @@ -289,10 +289,7 @@ public: Error finalizeSection(const ObjectFile &Obj, unsigned SectionID, const SectionRef &Section) { StringRef Name; - if (Expected NameOrErr = Section.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); + Section.getName(Name); if (Name == "__nl_symbol_ptr") return populateIndirectSymbolPointersSection(cast(Obj), diff --git a/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOI386.h b/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOI386.h index 523deb29b72..f0de27ba14b 100644 --- a/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOI386.h +++ b/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOI386.h @@ -128,10 +128,7 @@ public: Error finalizeSection(const ObjectFile &Obj, unsigned SectionID, const SectionRef &Section) { StringRef Name; - if (Expected NameOrErr = Section.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); + Section.getName(Name); if (Name == "__jump_table") return populateJumpTable(cast(Obj), Section, SectionID); diff --git a/lib/Object/COFFObjectFile.cpp b/lib/Object/COFFObjectFile.cpp index afd68694deb..854664e679d 100644 --- a/lib/Object/COFFObjectFile.cpp +++ b/lib/Object/COFFObjectFile.cpp @@ -994,12 +994,11 @@ std::error_code COFFObjectFile::getSection(int32_t Index, std::error_code COFFObjectFile::getSection(StringRef SectionName, const coff_section *&Result) const { Result = nullptr; + StringRef SecName; for (const SectionRef &Section : sections()) { - auto NameOrErr = Section.getName(); - if (!NameOrErr) - return errorToErrorCode(NameOrErr.takeError()); - - if (*NameOrErr == SectionName) { + if (std::error_code E = Section.getName(SecName)) + return E; + if (SecName == SectionName) { Result = getCOFFSection(Section); return std::error_code(); } diff --git a/lib/Object/Decompressor.cpp b/lib/Object/Decompressor.cpp index 11efd857d1a..53b8e846e5f 100644 --- a/lib/Object/Decompressor.cpp +++ b/lib/Object/Decompressor.cpp @@ -77,15 +77,10 @@ bool Decompressor::isGnuStyle(StringRef Name) { } bool Decompressor::isCompressed(const object::SectionRef &Section) { - if (Section.isCompressed()) - return true; - - Expected SecNameOrErr = Section.getName(); - if (SecNameOrErr) - return isGnuStyle(*SecNameOrErr); - - consumeError(SecNameOrErr.takeError()); - return false; + StringRef Name; + if (Section.getName(Name)) + return false; + return Section.isCompressed() || isGnuStyle(Name); } bool Decompressor::isCompressedELFSection(uint64_t Flags, StringRef Name) { diff --git a/lib/Object/ELFObjectFile.cpp b/lib/Object/ELFObjectFile.cpp index f3b0347088a..9945018d957 100644 --- a/lib/Object/ELFObjectFile.cpp +++ b/lib/Object/ELFObjectFile.cpp @@ -392,13 +392,9 @@ ELFObjectFileBase::getPltAddresses() const { return {}; Optional Plt = None, RelaPlt = None, GotPlt = None; for (const SectionRef &Section : sections()) { - Expected NameOrErr = Section.getName(); - if (!NameOrErr) { - consumeError(NameOrErr.takeError()); + StringRef Name; + if (Section.getName(Name)) continue; - } - StringRef Name = *NameOrErr; - if (Name == ".plt") Plt = Section; else if (Name == ".rela.plt" || Name == ".rel.plt") diff --git a/lib/Object/MachOObjectFile.cpp b/lib/Object/MachOObjectFile.cpp index 179166ddbd3..3bfbfe06944 100644 --- a/lib/Object/MachOObjectFile.cpp +++ b/lib/Object/MachOObjectFile.cpp @@ -1986,12 +1986,13 @@ Expected MachOObjectFile::getSection(unsigned SectionIndex) const { } Expected MachOObjectFile::getSection(StringRef SectionName) const { + StringRef SecName; for (const SectionRef &Section : sections()) { - auto NameOrErr = Section.getName(); - if (!NameOrErr) - return NameOrErr.takeError(); - if (*NameOrErr == SectionName) + if (std::error_code E = Section.getName(SecName)) + return errorCodeToError(E); + if (SecName == SectionName) { return Section; + } } return errorCodeToError(object_error::parse_failed); } @@ -3994,11 +3995,7 @@ BindRebaseSegInfo::BindRebaseSegInfo(const object::MachOObjectFile *Obj) { uint64_t CurSegAddress; for (const SectionRef &Section : Obj->sections()) { SectionInfo Info; - Expected NameOrErr = Section.getName(); - if (!NameOrErr) - consumeError(NameOrErr.takeError()); - else - Info.SectionName = *NameOrErr; + Section.getName(Info.SectionName); Info.Address = Section.getAddress(); Info.Size = Section.getSize(); Info.SegmentName = diff --git a/lib/Object/Object.cpp b/lib/Object/Object.cpp index b518e2d02c9..d84798cc6dd 100644 --- a/lib/Object/Object.cpp +++ b/lib/Object/Object.cpp @@ -251,10 +251,10 @@ void LLVMMoveToNextSymbol(LLVMSymbolIteratorRef SI) { // SectionRef accessors const char *LLVMGetSectionName(LLVMSectionIteratorRef SI) { - auto NameOrErr = (*unwrap(SI))->getName(); - if (!NameOrErr) - report_fatal_error(NameOrErr.takeError()); - return NameOrErr->data(); + StringRef ret; + if (std::error_code ec = (*unwrap(SI))->getName(ret)) + report_fatal_error(ec.message()); + return ret.data(); } uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI) { diff --git a/lib/ProfileData/Coverage/CoverageMappingReader.cpp b/lib/ProfileData/Coverage/CoverageMappingReader.cpp index e70bc318b84..e193e10f91d 100644 --- a/lib/ProfileData/Coverage/CoverageMappingReader.cpp +++ b/lib/ProfileData/Coverage/CoverageMappingReader.cpp @@ -666,11 +666,11 @@ static Expected lookupSection(ObjectFile &OF, StringRef Name) { }; Name = stripSuffix(Name); + StringRef FoundName; for (const auto &Section : OF.sections()) { - Expected NameOrErr = Section.getName(); - if (!NameOrErr) - return NameOrErr.takeError(); - if (stripSuffix(*NameOrErr) == Name) + if (auto EC = Section.getName(FoundName)) + return errorCodeToError(EC); + if (stripSuffix(FoundName) == Name) return Section; } return make_error(coveragemap_error::no_data_found); diff --git a/lib/XRay/InstrumentationMap.cpp b/lib/XRay/InstrumentationMap.cpp index 7453613c703..7de953d46b7 100644 --- a/lib/XRay/InstrumentationMap.cpp +++ b/lib/XRay/InstrumentationMap.cpp @@ -67,11 +67,10 @@ loadObj(StringRef Filename, object::OwningBinary &ObjFile, StringRef Contents = ""; const auto &Sections = ObjFile.getBinary()->sections(); auto I = llvm::find_if(Sections, [&](object::SectionRef Section) { - Expected NameOrErr = Section.getName(); - if (NameOrErr) - return *NameOrErr == "xray_instr_map"; - consumeError(NameOrErr.takeError()); - return false; + StringRef Name = ""; + if (Section.getName(Name)) + return false; + return Name == "xray_instr_map"; }); if (I == Sections.end()) diff --git a/test/Object/invalid.test b/test/Object/invalid.test index 16fae95df95..cddc0b9c342 100644 --- a/test/Object/invalid.test +++ b/test/Object/invalid.test @@ -2,9 +2,9 @@ ## .shstrtab has an invalid type. # RUN: yaml2obj %s --docnum=1 -o %t1 -# RUN: not llvm-objdump -s %t1 2>&1 | FileCheck %s -DFILE=%t1 --check-prefix=INVALID-SHTYPE +# RUN: not llvm-objdump -s %t1 2>&1 | FileCheck %s --check-prefix=INVALIDERR -# INVALID-SHTYPE: error: '[[FILE]]': invalid sh_type for string table section [index 1]: expected SHT_STRTAB, but got SHT_PROGBITS +# INVALIDERR: error: reading file: Invalid data was encountered while parsing the file --- !ELF FileHeader: @@ -20,9 +20,7 @@ Sections: ## .shstrtab has an invalid zero-size. # RUN: yaml2obj %s --docnum=2 -o %t2 -# RUN: not llvm-objdump -s %t2 2>&1 | FileCheck %s -DFILE=%t2 --check-prefix=STRTAB-EMPTY - -# STRTAB-EMPTY: error: '[[FILE]]': SHT_STRTAB string table section [index 1] is empty +# RUN: not llvm-objdump -s %t2 2>&1 | FileCheck %s --check-prefix=INVALIDERR --- !ELF FileHeader: @@ -39,9 +37,7 @@ Sections: ## size that goes past the end of the file. # RUN: not llvm-objdump -s %p/Inputs/invalid-strtab-size.elf 2>&1 \ -# RUN: | FileCheck %s -DFILE=%p/Inputs/invalid-strtab-size.elf --check-prefix=INVALID-STRTAB-SIZE - -# INVALID-STRTAB-SIZE: error: '[[FILE]]': section [index 1] has a sh_offset (0x70) + sh_size (0x16777215) that cannot be represented +# RUN: | FileCheck %s --check-prefix=INVALIDERR ## Check that llvm-dwarfdump reports an error during relocation resolution ## when instead of expected SHT_RELA section it locates a section of a different type. @@ -76,9 +72,7 @@ Sections: ## and .shstrtab is not null-terminated. # RUN: yaml2obj %s --docnum=4 -o %t4 -# RUN: not llvm-objdump -s %t4 2>&1 | FileCheck -DFILE=%t4 --check-prefix=SHSTRTAB-NON-TERM %s - -# SHSTRTAB-NON-TERM: error: '[[FILE]]': SHT_STRTAB string table section [index 1] is non-null terminated +# RUN: not llvm-objdump -s %t4 2>&1 | FileCheck --check-prefix=INVALIDERR %s --- !ELF FileHeader: diff --git a/tools/dsymutil/DwarfLinker.cpp b/tools/dsymutil/DwarfLinker.cpp index f8fee696717..e97e0e6489b 100644 --- a/tools/dsymutil/DwarfLinker.cpp +++ b/tools/dsymutil/DwarfLinker.cpp @@ -538,11 +538,7 @@ bool DwarfLinker::RelocationManager::findValidRelocsInDebugInfo( // Find the debug_info section. for (const object::SectionRef &Section : Obj.sections()) { StringRef SectionName; - if (Expected NameOrErr = Section.getName()) - SectionName = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Section.getName(SectionName); SectionName = SectionName.substr(SectionName.find_first_not_of("._")); if (SectionName != "debug_info") continue; diff --git a/tools/dsymutil/DwarfStreamer.cpp b/tools/dsymutil/DwarfStreamer.cpp index 8fc29851786..9461f4de819 100644 --- a/tools/dsymutil/DwarfStreamer.cpp +++ b/tools/dsymutil/DwarfStreamer.cpp @@ -31,11 +31,7 @@ static Optional getSectionByName(const object::ObjectFile &Obj, StringRef SecName) { for (const object::SectionRef &Section : Obj.sections()) { StringRef SectionName; - if (Expected NameOrErr = Section.getName()) - SectionName = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Section.getName(SectionName); SectionName = SectionName.substr(SectionName.find_first_not_of("._")); if (SectionName != SecName) continue; diff --git a/tools/llvm-cfi-verify/lib/FileAnalysis.cpp b/tools/llvm-cfi-verify/lib/FileAnalysis.cpp index ce67ab4eb8d..4bf308f87c2 100644 --- a/tools/llvm-cfi-verify/lib/FileAnalysis.cpp +++ b/tools/llvm-cfi-verify/lib/FileAnalysis.cpp @@ -449,10 +449,9 @@ Error FileAnalysis::parseCodeSections() { // Avoid checking the PLT since it produces spurious failures on AArch64 // when ignoring DWARF data. - Expected NameOrErr = Section.getName(); - if (NameOrErr && *NameOrErr == ".plt") + StringRef SectionName; + if (!Section.getName(SectionName) && SectionName == ".plt") continue; - consumeError(NameOrErr.takeError()); Expected Contents = Section.getContents(); if (!Contents) diff --git a/tools/llvm-cov/TestingSupport.cpp b/tools/llvm-cov/TestingSupport.cpp index 39bdade1274..3ee318c9c64 100644 --- a/tools/llvm-cov/TestingSupport.cpp +++ b/tools/llvm-cov/TestingSupport.cpp @@ -50,13 +50,8 @@ int convertForTestingMain(int argc, const char *argv[]) { auto ObjFormat = OF->getTripleObjectFormat(); for (const auto &Section : OF->sections()) { StringRef Name; - if (Expected NameOrErr = Section.getName()) { - Name = *NameOrErr; - } else { - consumeError(NameOrErr.takeError()); + if (Section.getName(Name)) return 1; - } - if (Name == llvm::getInstrProfSectionName(IPSK_name, ObjFormat, /*AddSegmentInfo=*/false)) { ProfileNames = Section; diff --git a/tools/llvm-dwp/llvm-dwp.cpp b/tools/llvm-dwp/llvm-dwp.cpp index 0c629f506f4..05042ec97b8 100644 --- a/tools/llvm-dwp/llvm-dwp.cpp +++ b/tools/llvm-dwp/llvm-dwp.cpp @@ -406,10 +406,9 @@ static Error handleSection( if (Section.isVirtual()) return Error::success(); - Expected NameOrErr = Section.getName(); - if (!NameOrErr) - return NameOrErr.takeError(); - StringRef Name = *NameOrErr; + StringRef Name; + if (std::error_code Err = Section.getName(Name)) + return errorCodeToError(Err); Expected ContentsOrErr = Section.getContents(); if (!ContentsOrErr) diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index 465f7de6857..aa62e6f0209 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -913,12 +913,10 @@ static char getSymbolNMTypeChar(ELFObjectFileBase &Obj, if (Flags & ELF::SHF_ALLOC) return Flags & ELF::SHF_WRITE ? 'd' : 'r'; - auto NameOrErr = SecI->getName(); - if (!NameOrErr) { - consumeError(NameOrErr.takeError()); + StringRef SecName; + if (SecI->getName(SecName)) return '?'; - } - if ((*NameOrErr).startswith(".debug")) + if (SecName.startswith(".debug")) return 'N'; if (!(Flags & ELF::SHF_WRITE)) return 'n'; @@ -1092,13 +1090,8 @@ static char getNMSectionTagAndName(SymbolicFile &Obj, basic_symbol_iterator I, consumeError(SecIOrErr.takeError()); return '?'; } - - Expected NameOrErr = (*SecIOrErr)->getName(); - if (!NameOrErr) { - consumeError(SecIOrErr.takeError()); - return '?'; - } - SecName = *NameOrErr; + elf_section_iterator secT = *SecIOrErr; + secT->getName(SecName); } } @@ -1354,12 +1347,7 @@ dumpSymbolNamesFromObject(SymbolicFile &Obj, bool printName, StringRef SectionName = StringRef(); for (const SectionRef &Section : MachO->sections()) { S.NSect++; - - if (Expected NameOrErr = Section.getName()) - SectionName = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Section.getName(SectionName); SegmentName = MachO->getSectionFinalSegmentName( Section.getRawDataRefImpl()); if (S.Address >= Section.getAddress() && @@ -1679,11 +1667,7 @@ dumpSymbolNamesFromObject(SymbolicFile &Obj, bool printName, StringRef SegmentName = StringRef(); StringRef SectionName = StringRef(); for (const SectionRef &Section : MachO->sections()) { - if (Expected NameOrErr = Section.getName()) - SectionName = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Section.getName(SectionName); SegmentName = MachO->getSectionFinalSegmentName( Section.getRawDataRefImpl()); F.NSect++; diff --git a/tools/llvm-objdump/COFFDump.cpp b/tools/llvm-objdump/COFFDump.cpp index 3fb9285bf27..1ba0a68902c 100644 --- a/tools/llvm-objdump/COFFDump.cpp +++ b/tools/llvm-objdump/COFFDump.cpp @@ -442,7 +442,8 @@ static bool getPDataSection(const COFFObjectFile *Obj, std::vector &Rels, const RuntimeFunction *&RFStart, int &NumRFs) { for (const SectionRef &Section : Obj->sections()) { - StringRef Name = unwrapOrError(Section.getName(), Obj->getFileName()); + StringRef Name; + error(Section.getName(Name)); if (Name != ".pdata") continue; diff --git a/tools/llvm-objdump/MachODump.cpp b/tools/llvm-objdump/MachODump.cpp index c4fa6b5c2a2..a3f3a9df4c1 100644 --- a/tools/llvm-objdump/MachODump.cpp +++ b/tools/llvm-objdump/MachODump.cpp @@ -371,8 +371,11 @@ static void getSectionsAndSymbols(MachOObjectFile *MachOObj, Symbols.push_back(Symbol); } - for (const SectionRef &Section : MachOObj->sections()) + for (const SectionRef &Section : MachOObj->sections()) { + StringRef SectName; + Section.getName(SectName); Sections.push_back(Section); + } bool BaseSegmentAddressSet = false; for (const auto &Command : MachOObj->load_commands()) { @@ -446,11 +449,13 @@ static void printRelocationTargetName(const MachOObjectFile *O, // If we couldn't find a symbol that this relocation refers to, try // to find a section beginning instead. for (const SectionRef &Section : ToolSectionFilter(*O)) { + StringRef Name; uint64_t Addr = Section.getAddress(); if (Addr != Val) continue; - StringRef NameOrErr = unwrapOrError(Section.getName(), O->getFileName()); - Fmt << NameOrErr; + if (std::error_code EC = Section.getName(Name)) + report_error(errorCodeToError(EC), O->getFileName()); + Fmt << Name; return; } @@ -483,14 +488,10 @@ static void printRelocationTargetName(const MachOObjectFile *O, --I; advance(SI, 1); } - if (SI == O->section_end()) { + if (SI == O->section_end()) Fmt << Val << " (?,?)"; - } else { - if (Expected NameOrErr = SI->getName()) - S = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - } + else + SI->getName(S); } Fmt << S; @@ -1530,12 +1531,7 @@ static void DumpLiteralPointerSection(MachOObjectFile *O, uint64_t SectSize = Sect->getSize(); StringRef SectName; - Expected SectNameOrErr = Sect->getName(); - if (SectNameOrErr) - SectName = *SectNameOrErr; - else - consumeError(SectNameOrErr.takeError()); - + Sect->getName(SectName); DataRefImpl Ref = Sect->getRawDataRefImpl(); StringRef SegmentName = O->getSectionFinalSegmentName(Ref); outs() << SegmentName << ":" << SectName << ":"; @@ -1747,12 +1743,7 @@ static void DumpSectionContents(StringRef Filename, MachOObjectFile *O, } for (const SectionRef &Section : O->sections()) { StringRef SectName; - Expected SecNameOrErr = Section.getName(); - if (SecNameOrErr) - SectName = *SecNameOrErr; - else - consumeError(SecNameOrErr.takeError()); - + Section.getName(SectName); DataRefImpl Ref = Section.getRawDataRefImpl(); StringRef SegName = O->getSectionFinalSegmentName(Ref); if ((DumpSegName.empty() || SegName == DumpSegName) && @@ -1848,12 +1839,7 @@ static void DumpInfoPlistSectionContents(StringRef Filename, MachOObjectFile *O) { for (const SectionRef &Section : O->sections()) { StringRef SectName; - Expected SecNameOrErr = Section.getName(); - if (SecNameOrErr) - SectName = *SecNameOrErr; - else - consumeError(SecNameOrErr.takeError()); - + Section.getName(SectName); DataRefImpl Ref = Section.getRawDataRefImpl(); StringRef SegName = O->getSectionFinalSegmentName(Ref); if (SegName == "__TEXT" && SectName == "__info_plist") { @@ -1950,11 +1936,7 @@ static void ProcessMachO(StringRef Name, MachOObjectFile *MachOOF, if (DisassembleAll) { for (const SectionRef &Section : MachOOF->sections()) { StringRef SectName; - if (Expected NameOrErr = Section.getName()) - SectName = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Section.getName(SectName); if (SectName.equals("__text")) { DataRefImpl Ref = Section.getRawDataRefImpl(); StringRef SegName = MachOOF->getSectionFinalSegmentName(Ref); @@ -3265,13 +3247,7 @@ static const char *get_pointer_64(uint64_t Address, uint32_t &offset, continue; if (objc_only) { StringRef SectName; - Expected SecNameOrErr = - ((*(info->Sections))[SectIdx]).getName(); - if (SecNameOrErr) - SectName = *SecNameOrErr; - else - consumeError(SecNameOrErr.takeError()); - + ((*(info->Sections))[SectIdx]).getName(SectName); DataRefImpl Ref = ((*(info->Sections))[SectIdx]).getRawDataRefImpl(); StringRef SegName = info->O->getSectionFinalSegmentName(Ref); if (SegName != "__OBJC" && SectName != "__cstring") @@ -4063,12 +4039,7 @@ static const SectionRef get_section(MachOObjectFile *O, const char *segname, const char *sectname) { for (const SectionRef &Section : O->sections()) { StringRef SectName; - Expected SecNameOrErr = Section.getName(); - if (SecNameOrErr) - SectName = *SecNameOrErr; - else - consumeError(SecNameOrErr.takeError()); - + Section.getName(SectName); DataRefImpl Ref = Section.getRawDataRefImpl(); StringRef SegName = O->getSectionFinalSegmentName(Ref); if (SegName == segname && SectName == sectname) @@ -4085,12 +4056,7 @@ walk_pointer_list_64(const char *listname, const SectionRef S, return; StringRef SectName; - Expected SecNameOrErr = S.getName(); - if (SecNameOrErr) - SectName = *SecNameOrErr; - else - consumeError(SecNameOrErr.takeError()); - + S.getName(SectName); DataRefImpl Ref = S.getRawDataRefImpl(); StringRef SegName = O->getSectionFinalSegmentName(Ref); outs() << "Contents of (" << SegName << "," << SectName << ") section\n"; @@ -4139,7 +4105,8 @@ walk_pointer_list_32(const char *listname, const SectionRef S, if (S == SectionRef()) return; - StringRef SectName = unwrapOrError(S.getName(), O->getFileName()); + StringRef SectName; + S.getName(SectName); DataRefImpl Ref = S.getRawDataRefImpl(); StringRef SegName = O->getSectionFinalSegmentName(Ref); outs() << "Contents of (" << SegName << "," << SectName << ") section\n"; @@ -5813,12 +5780,7 @@ static void print_message_refs64(SectionRef S, struct DisassembleInfo *info) { return; StringRef SectName; - Expected SecNameOrErr = S.getName(); - if (SecNameOrErr) - SectName = *SecNameOrErr; - else - consumeError(SecNameOrErr.takeError()); - + S.getName(SectName); DataRefImpl Ref = S.getRawDataRefImpl(); StringRef SegName = info->O->getSectionFinalSegmentName(Ref); outs() << "Contents of (" << SegName << "," << SectName << ") section\n"; @@ -5881,12 +5843,7 @@ static void print_message_refs32(SectionRef S, struct DisassembleInfo *info) { return; StringRef SectName; - Expected SecNameOrErr = S.getName(); - if (SecNameOrErr) - SectName = *SecNameOrErr; - else - consumeError(SecNameOrErr.takeError()); - + S.getName(SectName); DataRefImpl Ref = S.getRawDataRefImpl(); StringRef SegName = info->O->getSectionFinalSegmentName(Ref); outs() << "Contents of (" << SegName << "," << SectName << ") section\n"; @@ -5932,12 +5889,7 @@ static void print_image_info64(SectionRef S, struct DisassembleInfo *info) { return; StringRef SectName; - Expected SecNameOrErr = S.getName(); - if (SecNameOrErr) - SectName = *SecNameOrErr; - else - consumeError(SecNameOrErr.takeError()); - + S.getName(SectName); DataRefImpl Ref = S.getRawDataRefImpl(); StringRef SegName = info->O->getSectionFinalSegmentName(Ref); outs() << "Contents of (" << SegName << "," << SectName << ") section\n"; @@ -5994,12 +5946,7 @@ static void print_image_info32(SectionRef S, struct DisassembleInfo *info) { return; StringRef SectName; - Expected SecNameOrErr = S.getName(); - if (SecNameOrErr) - SectName = *SecNameOrErr; - else - consumeError(SecNameOrErr.takeError()); - + S.getName(SectName); DataRefImpl Ref = S.getRawDataRefImpl(); StringRef SegName = info->O->getSectionFinalSegmentName(Ref); outs() << "Contents of (" << SegName << "," << SectName << ") section\n"; @@ -6049,12 +5996,7 @@ static void print_image_info(SectionRef S, struct DisassembleInfo *info) { const char *r; StringRef SectName; - Expected SecNameOrErr = S.getName(); - if (SecNameOrErr) - SectName = *SecNameOrErr; - else - consumeError(SecNameOrErr.takeError()); - + S.getName(SectName); DataRefImpl Ref = S.getRawDataRefImpl(); StringRef SegName = info->O->getSectionFinalSegmentName(Ref); outs() << "Contents of (" << SegName << "," << SectName << ") section\n"; @@ -6089,8 +6031,11 @@ static void printObjc2_64bit_MetaData(MachOObjectFile *O, bool verbose) { CreateSymbolAddressMap(O, &AddrMap); std::vector Sections; - for (const SectionRef &Section : O->sections()) + for (const SectionRef &Section : O->sections()) { + StringRef SectName; + Section.getName(SectName); Sections.push_back(Section); + } struct DisassembleInfo info(O, &AddrMap, &Sections, verbose); @@ -6171,8 +6116,11 @@ static void printObjc2_32bit_MetaData(MachOObjectFile *O, bool verbose) { CreateSymbolAddressMap(O, &AddrMap); std::vector Sections; - for (const SectionRef &Section : O->sections()) + for (const SectionRef &Section : O->sections()) { + StringRef SectName; + Section.getName(SectName); Sections.push_back(Section); + } struct DisassembleInfo info(O, &AddrMap, &Sections, verbose); @@ -6266,8 +6214,11 @@ static bool printObjc1_32bit_MetaData(MachOObjectFile *O, bool verbose) { CreateSymbolAddressMap(O, &AddrMap); std::vector Sections; - for (const SectionRef &Section : O->sections()) + for (const SectionRef &Section : O->sections()) { + StringRef SectName; + Section.getName(SectName); Sections.push_back(Section); + } struct DisassembleInfo info(O, &AddrMap, &Sections, verbose); @@ -6424,8 +6375,11 @@ static void DumpProtocolSection(MachOObjectFile *O, const char *sect, CreateSymbolAddressMap(O, &AddrMap); std::vector Sections; - for (const SectionRef &Section : O->sections()) + for (const SectionRef &Section : O->sections()) { + StringRef SectName; + Section.getName(SectName); Sections.push_back(Section); + } struct DisassembleInfo info(O, &AddrMap, &Sections, true); @@ -7390,12 +7344,8 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF, outs() << "(" << DisSegName << "," << DisSectName << ") section\n"; for (unsigned SectIdx = 0; SectIdx != Sections.size(); SectIdx++) { - Expected SecNameOrErr = Sections[SectIdx].getName(); - if (!SecNameOrErr) { - consumeError(SecNameOrErr.takeError()); - continue; - } - if (*SecNameOrErr != DisSectName) + StringRef SectName; + if (Sections[SectIdx].getName(SectName) || SectName != DisSectName) continue; DataRefImpl DR = Sections[SectIdx].getRawDataRefImpl(); @@ -7792,12 +7742,8 @@ static void findUnwindRelocNameAddend(const MachOObjectFile *Obj, auto Sym = Symbols.upper_bound(Addr); if (Sym == Symbols.begin()) { // The first symbol in the object is after this reference, the best we can - // do is section-relative notation. - if (Expected NameOrErr = RelocSection.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + // do is section-relative notation. + RelocSection.getName(Name); Addend = Addr - SectionAddr; return; } @@ -7816,11 +7762,7 @@ static void findUnwindRelocNameAddend(const MachOObjectFile *Obj, // There is a symbol before this reference, but it's in a different // section. Probably not helpful to mention it, so use the section name. - if (Expected NameOrErr = RelocSection.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + RelocSection.getName(Name); Addend = Addr - SectionAddr; } @@ -8185,11 +8127,7 @@ void printMachOUnwindInfo(const MachOObjectFile *Obj) { for (const SectionRef &Section : Obj->sections()) { StringRef SectName; - if (Expected NameOrErr = Section.getName()) - SectName = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Section.getName(SectName); if (SectName == "__compact_unwind") printMachOCompactUnwindSection(Obj, Symbols, Section); else if (SectName == "__unwind_info") diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp index 7a04e1195ed..93833858282 100644 --- a/tools/llvm-objdump/llvm-objdump.cpp +++ b/tools/llvm-objdump/llvm-objdump.cpp @@ -344,14 +344,10 @@ typedef std::vector> SectionSymbolsTy; static bool shouldKeep(object::SectionRef S) { if (FilterSections.empty()) return true; - - Expected SecNameOrErr = S.getName(); - if (!SecNameOrErr) { - consumeError(SecNameOrErr.takeError()); + StringRef SecName; + std::error_code error = S.getName(SecName); + if (error) return false; - } - StringRef SecName = *SecNameOrErr; - // StringSet does not allow empty key so avoid adding sections with // no name (such as the section with index 0) here. if (!SecName.empty()) @@ -924,12 +920,10 @@ static void addPltEntries(const ObjectFile *Obj, StringSaver &Saver) { Optional Plt = None; for (const SectionRef &Section : Obj->sections()) { - Expected SecNameOrErr = Section.getName(); - if (!SecNameOrErr) { - consumeError(SecNameOrErr.takeError()); + StringRef Name; + if (Section.getName(Name)) continue; - } - if (*SecNameOrErr == ".plt") + if (Name == ".plt") Plt = Section; } if (!Plt) @@ -1212,8 +1206,9 @@ static void disassembleObject(const Target *TheTarget, const ObjectFile *Obj, DataRefImpl DR = Section.getRawDataRefImpl(); SegmentName = MachO->getSectionFinalSegmentName(DR); } + StringRef SectionName; + error(Section.getName(SectionName)); - StringRef SectionName = unwrapOrError(Section.getName(), Obj->getFileName()); // If the section has no symbol at the start, just insert a dummy one. if (Symbols.empty() || std::get<0>(Symbols[0]) != 0) { Symbols.insert( @@ -1586,7 +1581,8 @@ void printRelocations(const ObjectFile *Obj) { } for (std::pair> &P : SecToRelSec) { - StringRef SecName = unwrapOrError(P.first.getName(), Obj->getFileName()); + StringRef SecName; + error(P.first.getName(SecName)); outs() << "RELOCATION RECORDS FOR [" << SecName << "]:\n"; for (SectionRef Section : P.second) { @@ -1658,7 +1654,8 @@ void printSectionHeaders(const ObjectFile *Obj) { "Idx Name Size VMA Type\n"; for (const SectionRef &Section : ToolSectionFilter(*Obj)) { - StringRef Name = unwrapOrError(Section.getName(), Obj->getFileName()); + StringRef Name; + error(Section.getName(Name)); uint64_t VMA = Section.getAddress(); if (shouldAdjustVA(Section)) VMA += AdjustVMA; @@ -1685,7 +1682,8 @@ void printSectionHeaders(const ObjectFile *Obj) { void printSectionContents(const ObjectFile *Obj) { for (const SectionRef &Section : ToolSectionFilter(*Obj)) { - StringRef Name = unwrapOrError(Section.getName(), Obj->getFileName()); + StringRef Name; + error(Section.getName(Name)); uint64_t BaseAddr = Section.getAddress(); uint64_t Size = Section.getSize(); if (!Size) @@ -1749,16 +1747,11 @@ void printSymbolTable(const ObjectFile *O, StringRef ArchiveName, section_iterator Section = unwrapOrError(Symbol.getSection(), ArchiveName, FileName, ArchitectureName); StringRef Name; - if (Type == SymbolRef::ST_Debug && Section != O->section_end()) { - if (Expected NameOrErr = Section->getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - - } else { + if (Type == SymbolRef::ST_Debug && Section != O->section_end()) + Section->getName(Name); + else Name = unwrapOrError(Symbol.getName(), ArchiveName, FileName, ArchitectureName); - } bool Global = Flags & SymbolRef::SF_Global; bool Weak = Flags & SymbolRef::SF_Weak; @@ -1804,8 +1797,8 @@ void printSymbolTable(const ObjectFile *O, StringRef ArchiveName, StringRef SegmentName = MachO->getSectionFinalSegmentName(DR); outs() << SegmentName << ","; } - StringRef SectionName = - unwrapOrError(Section->getName(), O->getFileName()); + StringRef SectionName; + error(Section->getName(SectionName)); outs() << SectionName; } @@ -1878,11 +1871,7 @@ void printRawClangAST(const ObjectFile *Obj) { Optional ClangASTSection; for (auto Sec : ToolSectionFilter(*Obj)) { StringRef Name; - if (Expected NameOrErr = Sec.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Sec.getName(Name); if (Name == ClangASTSectionName) { ClangASTSection = Sec; break; @@ -1914,11 +1903,7 @@ static void printFaultMaps(const ObjectFile *Obj) { for (auto Sec : ToolSectionFilter(*Obj)) { StringRef Name; - if (Expected NameOrErr = Sec.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Sec.getName(Name); if (Name == FaultMapSectionName) { FaultMapSection = Sec; break; diff --git a/tools/llvm-pdbutil/DumpOutputStyle.cpp b/tools/llvm-pdbutil/DumpOutputStyle.cpp index 288e76cc173..962d4cf88a8 100644 --- a/tools/llvm-pdbutil/DumpOutputStyle.cpp +++ b/tools/llvm-pdbutil/DumpOutputStyle.cpp @@ -1369,10 +1369,9 @@ Error DumpOutputStyle::dumpTypesFromObjectFile() { LazyRandomTypeCollection Types(100); for (const auto &S : getObj().sections()) { - Expected NameOrErr = S.getName(); - if (!NameOrErr) - return NameOrErr.takeError(); - StringRef SectionName = *NameOrErr; + StringRef SectionName; + if (auto EC = S.getName(SectionName)) + return errorCodeToError(EC); // .debug$T is a standard CodeView type section, while .debug$P is the same // format but used for MSVC precompiled header object files. diff --git a/tools/llvm-pdbutil/InputFile.cpp b/tools/llvm-pdbutil/InputFile.cpp index 8380054b631..bd23bfdbe31 100644 --- a/tools/llvm-pdbutil/InputFile.cpp +++ b/tools/llvm-pdbutil/InputFile.cpp @@ -66,13 +66,12 @@ getModuleDebugStream(PDBFile &File, StringRef &ModuleName, uint32_t Index) { static inline bool isCodeViewDebugSubsection(object::SectionRef Section, StringRef Name, BinaryStreamReader &Reader) { - if (Expected NameOrErr = Section.getName()) { - if (*NameOrErr != Name) - return false; - } else { - consumeError(NameOrErr.takeError()); + StringRef SectionName; + if (Section.getName(SectionName)) + return false; + + if (SectionName != Name) return false; - } Expected ContentsOrErr = Section.getContents(); if (!ContentsOrErr) { diff --git a/tools/llvm-readobj/COFFDumper.cpp b/tools/llvm-readobj/COFFDumper.cpp index c7ccbe9ee4b..d9c45cbdc52 100644 --- a/tools/llvm-readobj/COFFDumper.cpp +++ b/tools/llvm-readobj/COFFDumper.cpp @@ -891,14 +891,16 @@ void COFFDumper::printBaseOfDataField(const pe32plus_header *) {} void COFFDumper::printCodeViewDebugInfo() { // Print types first to build CVUDTNames, then print symbols. for (const SectionRef &S : Obj->sections()) { - StringRef SectionName = unwrapOrError(Obj->getFileName(), S.getName()); + StringRef SectionName; + error(S.getName(SectionName)); // .debug$T is a standard CodeView type section, while .debug$P is the same // format but used for MSVC precompiled header object files. if (SectionName == ".debug$T" || SectionName == ".debug$P") printCodeViewTypeSection(SectionName, S); } for (const SectionRef &S : Obj->sections()) { - StringRef SectionName = unwrapOrError(Obj->getFileName(), S.getName()); + StringRef SectionName; + error(S.getName(SectionName)); if (SectionName == ".debug$S") printCodeViewSymbolSection(SectionName, S); } @@ -1240,7 +1242,8 @@ void COFFDumper::mergeCodeViewTypes(MergingTypeTableBuilder &CVIDs, GlobalTypeTableBuilder &GlobalCVTypes, bool GHash) { for (const SectionRef &S : Obj->sections()) { - StringRef SectionName = unwrapOrError(Obj->getFileName(), S.getName()); + StringRef SectionName; + error(S.getName(SectionName)); if (SectionName == ".debug$T") { StringRef Data = unwrapOrError(Obj->getFileName(), S.getContents()); uint32_t Magic; @@ -1308,7 +1311,8 @@ void COFFDumper::printSectionHeaders() { ++SectionNumber; const coff_section *Section = Obj->getCOFFSection(Sec); - StringRef Name = unwrapOrError(Obj->getFileName(), Sec.getName()); + StringRef Name; + error(Sec.getName(Name)); DictScope D(W, "Section"); W.printNumber("Number", SectionNumber); @@ -1355,7 +1359,8 @@ void COFFDumper::printRelocations() { int SectionNumber = 0; for (const SectionRef &Section : Obj->sections()) { ++SectionNumber; - StringRef Name = unwrapOrError(Obj->getFileName(), Section.getName()); + StringRef Name; + error(Section.getName(Name)); bool PrintedGroup = false; for (const RelocationRef &Reloc : Section.relocations()) { @@ -1684,7 +1689,9 @@ void COFFDumper::printCOFFExports() { void COFFDumper::printCOFFDirectives() { for (const SectionRef &Section : Obj->sections()) { - StringRef Name = unwrapOrError(Obj->getFileName(), Section.getName()); + StringRef Name; + + error(Section.getName(Name)); if (Name != ".drectve") continue; @@ -1723,7 +1730,8 @@ void COFFDumper::printCOFFBaseReloc() { void COFFDumper::printCOFFResources() { ListScope ResourcesD(W, "Resources"); for (const SectionRef &S : Obj->sections()) { - StringRef Name = unwrapOrError(Obj->getFileName(), S.getName()); + StringRef Name; + error(S.getName(Name)); if (!Name.startswith(".rsrc")) continue; @@ -1847,11 +1855,7 @@ void COFFDumper::printStackMap() const { object::SectionRef StackMapSection; for (auto Sec : Obj->sections()) { StringRef Name; - if (Expected NameOrErr = Sec.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Sec.getName(Name); if (Name == ".llvm_stackmaps") { StackMapSection = Sec; break; @@ -1878,11 +1882,7 @@ void COFFDumper::printAddrsig() { object::SectionRef AddrsigSection; for (auto Sec : Obj->sections()) { StringRef Name; - if (Expected NameOrErr = Sec.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Sec.getName(Name); if (Name == ".llvm_addrsig") { AddrsigSection = Sec; break; diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 08e511a00c4..67ee182539d 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -4669,11 +4669,7 @@ void DumpStyle::printNonRelocatableStackSizes( StringRef FileStr = Obj->getFileName(); for (const SectionRef &Sec : Obj->sections()) { StringRef SectionName; - if (Expected NameOrErr = Sec.getName()) - SectionName = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Sec.getName(SectionName); const Elf_Shdr *ElfSec = Obj->getSection(Sec.getRawDataRefImpl()); if (!SectionName.startswith(".stack_sizes")) continue; @@ -4721,11 +4717,7 @@ void DumpStyle::printRelocatableStackSizes( for (const SectionRef &Sec : Obj->sections()) { StringRef SectionName; - if (Expected NameOrErr = Sec.getName()) - SectionName = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Sec.getName(SectionName); // A stack size section that we haven't encountered yet is mapped to the // null section until we find its corresponding relocation section. if (SectionName.startswith(".stack_sizes")) @@ -4762,11 +4754,7 @@ void DumpStyle::printRelocatableStackSizes( // Warn about stack size sections without a relocation section. StringRef StackSizeSectionName; - if (Expected NameOrErr = StackSizesSec.getName()) - StackSizeSectionName = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + StackSizesSec.getName(StackSizeSectionName); if (RelocSec == NullSection) { reportWarning(" '" + FileStr + "': section " + StackSizeSectionName + " does not have a corresponding " @@ -4794,12 +4782,7 @@ void DumpStyle::printRelocatableStackSizes( for (const RelocationRef &Reloc : RelocSec.relocations()) { if (!IsSupportedFn(Reloc.getType())) { StringRef RelocSectionName; - Expected NameOrErr = RelocSec.getName(); - if (NameOrErr) - RelocSectionName = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + RelocSec.getName(RelocSectionName); StringRef RelocName = EF->getRelocationTypeName(Reloc.getType()); reportError( createStringError(object_error::parse_failed, diff --git a/tools/llvm-readobj/MachODumper.cpp b/tools/llvm-readobj/MachODumper.cpp index d1c88c2a90e..17883df49e5 100644 --- a/tools/llvm-readobj/MachODumper.cpp +++ b/tools/llvm-readobj/MachODumper.cpp @@ -440,7 +440,10 @@ void MachODumper::printSectionHeaders(const MachOObjectFile *Obj) { MachOSection MOSection; getSection(Obj, Section.getRawDataRefImpl(), MOSection); DataRefImpl DR = Section.getRawDataRefImpl(); - StringRef Name = unwrapOrError(Obj->getFileName(), Section.getName()); + + StringRef Name; + error(Section.getName(Name)); + ArrayRef RawName = Obj->getSectionRawName(DR); StringRef SegmentName = Obj->getSectionFinalSegmentName(DR); ArrayRef RawSegmentName = Obj->getSectionRawFinalSegmentName(DR); @@ -491,7 +494,9 @@ void MachODumper::printRelocations() { std::error_code EC; for (const SectionRef &Section : Obj->sections()) { - StringRef Name = unwrapOrError(Obj->getFileName(), Section.getName()); + StringRef Name; + error(Section.getName(Name)); + bool PrintedGroup = false; for (const RelocationRef &Reloc : Section.relocations()) { if (!PrintedGroup) { @@ -536,8 +541,9 @@ void MachODumper::printRelocation(const MachOObjectFile *Obj, } } else if (!IsScattered) { section_iterator SecI = Obj->getRelocationSection(DR); - if (SecI != Obj->section_end()) - TargetName = unwrapOrError(Obj->getFileName(), SecI->getName()); + if (SecI != Obj->section_end()) { + error(SecI->getName(TargetName)); + } } if (TargetName.empty()) TargetName = "-"; @@ -608,7 +614,7 @@ void MachODumper::printSymbol(const SymbolRef &Symbol) { error(errorToErrorCode(SecIOrErr.takeError())); section_iterator SecI = *SecIOrErr; if (SecI != Obj->section_end()) - SectionName = unwrapOrError(Obj->getFileName(), SecI->getName()); + error(SecI->getName(SectionName)); DictScope D(W, "Symbol"); W.printNumber("Name", SymbolName, MOSymbol.StringIndex); @@ -638,11 +644,7 @@ void MachODumper::printStackMap() const { object::SectionRef StackMapSection; for (auto Sec : Obj->sections()) { StringRef Name; - if (Expected NameOrErr = Sec.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + Sec.getName(Name); if (Name == "__llvm_stackmaps") { StackMapSection = Sec; break; diff --git a/tools/llvm-readobj/ObjDumper.cpp b/tools/llvm-readobj/ObjDumper.cpp index a055e6e239d..c16b7ec081a 100644 --- a/tools/llvm-readobj/ObjDumper.cpp +++ b/tools/llvm-readobj/ObjDumper.cpp @@ -49,7 +49,8 @@ getSectionRefsByNameOrIndex(const object::ObjectFile *Obj, SecIndex = Obj->isELF() ? 0 : 1; for (object::SectionRef SecRef : Obj->sections()) { - StringRef SecName = unwrapOrError(Obj->getFileName(), SecRef.getName()); + StringRef SecName; + error(SecRef.getName(SecName)); auto NameIt = SecNames.find(SecName); if (NameIt != SecNames.end()) NameIt->second = true; @@ -76,9 +77,8 @@ void ObjDumper::printSectionsAsString(const object::ObjectFile *Obj, bool First = true; for (object::SectionRef Section : getSectionRefsByNameOrIndex(Obj, Sections)) { - StringRef SectionName = - unwrapOrError(Obj->getFileName(), Section.getName()); - + StringRef SectionName; + error(Section.getName(SectionName)); if (!First) W.startLine() << '\n'; First = false; @@ -111,9 +111,8 @@ void ObjDumper::printSectionsAsHex(const object::ObjectFile *Obj, bool First = true; for (object::SectionRef Section : getSectionRefsByNameOrIndex(Obj, Sections)) { - StringRef SectionName = - unwrapOrError(Obj->getFileName(), Section.getName()); - + StringRef SectionName; + error(Section.getName(SectionName)); if (!First) W.startLine() << '\n'; First = false; diff --git a/tools/llvm-readobj/WasmDumper.cpp b/tools/llvm-readobj/WasmDumper.cpp index 1516e539118..2ffc74b3398 100644 --- a/tools/llvm-readobj/WasmDumper.cpp +++ b/tools/llvm-readobj/WasmDumper.cpp @@ -133,8 +133,8 @@ void WasmDumper::printRelocations() { int SectionNumber = 0; for (const SectionRef &Section : Obj->sections()) { bool PrintedGroup = false; - StringRef Name = unwrapOrError(Obj->getFileName(), Section.getName()); - + StringRef Name; + error(Section.getName(Name)); ++SectionNumber; for (const RelocationRef &Reloc : Section.relocations()) { diff --git a/tools/llvm-readobj/Win64EHDumper.cpp b/tools/llvm-readobj/Win64EHDumper.cpp index fa268ce9d43..9311a061f6a 100644 --- a/tools/llvm-readobj/Win64EHDumper.cpp +++ b/tools/llvm-readobj/Win64EHDumper.cpp @@ -306,10 +306,7 @@ void Dumper::printRuntimeFunction(const Context &Ctx, void Dumper::printData(const Context &Ctx) { for (const auto &Section : Ctx.COFF.sections()) { StringRef Name; - if (Expected NameOrErr = Section.getName()) - Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); + Section.getName(Name); if (Name != ".pdata" && !Name.startswith(".pdata$")) continue; diff --git a/tools/llvm-rtdyld/llvm-rtdyld.cpp b/tools/llvm-rtdyld/llvm-rtdyld.cpp index 818670a2088..a7cc1deb8cf 100644 --- a/tools/llvm-rtdyld/llvm-rtdyld.cpp +++ b/tools/llvm-rtdyld/llvm-rtdyld.cpp @@ -441,6 +441,8 @@ static int printLineInfoForInput(bool LoadObjects, bool UseDebugObj) { continue; } object::section_iterator Sec = *SecOrErr; + StringRef SecName; + Sec->getName(SecName); Address.SectionIndex = Sec->getIndex(); uint64_t SectionLoadAddress = LoadedObjInfo->getSectionLoadAddress(*Sec); diff --git a/tools/llvm-size/llvm-size.cpp b/tools/llvm-size/llvm-size.cpp index 87df1264fbc..89b89f06275 100644 --- a/tools/llvm-size/llvm-size.cpp +++ b/tools/llvm-size/llvm-size.cpp @@ -106,6 +106,17 @@ static bool HadError = false; static std::string ToolName; +/// If ec is not success, print the error and return true. +static bool error(std::error_code ec) { + if (!ec) + return false; + + HadError = true; + errs() << ToolName << ": error reading file: " << ec.message() << ".\n"; + errs().flush(); + return true; +} + static bool error(Twine Message) { HadError = true; errs() << ToolName << ": " << Message << ".\n"; @@ -386,14 +397,11 @@ static void printObjectSectionSizes(ObjectFile *Obj) { uint64_t size = Section.getSize(); total += size; - Expected name_or_err = Section.getName(); - if (!name_or_err) { - error(name_or_err.takeError(), Obj->getFileName()); + StringRef name; + if (error(Section.getName(name))) return; - } - uint64_t addr = Section.getAddress(); - max_name_len = std::max(max_name_len, name_or_err->size()); + max_name_len = std::max(max_name_len, name.size()); max_size_len = std::max(max_size_len, getNumLengthAsString(size)); max_addr_len = std::max(max_addr_len, getNumLengthAsString(addr)); } @@ -423,16 +431,14 @@ static void printObjectSectionSizes(ObjectFile *Obj) { for (const SectionRef &Section : Obj->sections()) { if (!considerForSize(Obj, Section)) continue; - - Expected name_or_err = Section.getName(); - if (!name_or_err) { - error(name_or_err.takeError(), Obj->getFileName()); + StringRef name; + if (error(Section.getName(name))) return; - } - uint64_t size = Section.getSize(); uint64_t addr = Section.getAddress(); - outs() << format(fmt.str().c_str(), name_or_err->str().c_str(), size, addr); + std::string namestr = name; + + outs() << format(fmt.str().c_str(), namestr.c_str(), size, addr); } if (ELFCommons) { diff --git a/tools/obj2yaml/coff2yaml.cpp b/tools/obj2yaml/coff2yaml.cpp index e2b18807cda..a05840f80bb 100644 --- a/tools/obj2yaml/coff2yaml.cpp +++ b/tools/obj2yaml/coff2yaml.cpp @@ -112,14 +112,10 @@ initializeFileAndStringTable(const llvm::object::COFFObjectFile &Obj, if (SC.hasStrings() && SC.hasChecksums()) break; - Expected SectionNameOrErr = S.getName(); - if (!SectionNameOrErr) { - consumeError(SectionNameOrErr.takeError()); - continue; - } - + StringRef SectionName; + S.getName(SectionName); ArrayRef sectionData; - if ((*SectionNameOrErr) != ".debug$S") + if (SectionName != ".debug$S") continue; const object::coff_section *COFFSection = Obj.getCOFFSection(S); @@ -159,12 +155,7 @@ void COFFDumper::dumpSections(unsigned NumSections) { for (const auto &ObjSection : Obj.sections()) { const object::coff_section *COFFSection = Obj.getCOFFSection(ObjSection); COFFYAML::Section NewYAMLSection; - - if (Expected NameOrErr = ObjSection.getName()) - NewYAMLSection.Name = *NameOrErr; - else - consumeError(NameOrErr.takeError()); - + ObjSection.getName(NewYAMLSection.Name); NewYAMLSection.Header.Characteristics = COFFSection->Characteristics; NewYAMLSection.Header.VirtualAddress = COFFSection->VirtualAddress; NewYAMLSection.Header.VirtualSize = COFFSection->VirtualSize;