diff options
Diffstat (limited to 'llvm/lib/ExecutionEngine')
9 files changed, 101 insertions, 36 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp index f9c2b3f333e..50c8568e08f 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp @@ -174,8 +174,8 @@ RuntimeDyldImpl::loadObjectImpl(const object::ObjectFile &Obj) { object::SymbolRef::Type SymType = *SymTypeOrErr; // Get symbol name. - ErrorOr<StringRef> NameOrErr = I->getName(); - Check(NameOrErr.getError()); + Expected<StringRef> NameOrErr = I->getName(); + Check(NameOrErr.takeError()); StringRef Name = *NameOrErr; // Compute JIT symbol flags. @@ -496,8 +496,8 @@ void RuntimeDyldImpl::emitCommonSymbols(const ObjectFile &Obj, DEBUG(dbgs() << "Processing common symbols...\n"); for (const auto &Sym : CommonSymbols) { - ErrorOr<StringRef> NameOrErr = Sym.getName(); - Check(NameOrErr.getError()); + Expected<StringRef> NameOrErr = Sym.getName(); + Check(NameOrErr.takeError()); StringRef Name = *NameOrErr; // Skip common symbols already elsewhere. @@ -533,8 +533,14 @@ void RuntimeDyldImpl::emitCommonSymbols(const ObjectFile &Obj, for (auto &Sym : SymbolsToAllocate) { uint32_t Align = Sym.getAlignment(); uint64_t Size = Sym.getCommonSize(); - ErrorOr<StringRef> NameOrErr = Sym.getName(); - Check(NameOrErr.getError()); + Expected<StringRef> NameOrErr = Sym.getName(); + if (!NameOrErr) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(NameOrErr.takeError(), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } StringRef Name = *NameOrErr; if (Align) { // This symbol has an alignment requirement. diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp index 1668867cd4d..5dc1731bca8 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp @@ -1175,9 +1175,14 @@ relocation_iterator RuntimeDyldELF::processRelocationRef( // Obtain the symbol name which is referenced in the relocation StringRef TargetName; if (Symbol != Obj.symbol_end()) { - ErrorOr<StringRef> TargetNameOrErr = Symbol->getName(); - if (std::error_code EC = TargetNameOrErr.getError()) - report_fatal_error(EC.message()); + Expected<StringRef> TargetNameOrErr = Symbol->getName(); + if (!TargetNameOrErr) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(TargetNameOrErr.takeError(), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } TargetName = *TargetNameOrErr; } DEBUG(dbgs() << "\t\tRelType: " << RelType << " Addend: " << Addend diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h index 599cd7635da..18560c8edb0 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldImpl.h @@ -43,6 +43,15 @@ inline std::error_code Check(std::error_code Err) { } return Err; } +inline void Check(llvm::Error Err) { + if (Err) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(std::move(Err), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } +} class Twine; diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp index 96d6fcbcf4c..68c85d6b4d7 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldMachO.cpp @@ -99,9 +99,14 @@ RelocationValueRef RuntimeDyldMachO::getRelocationValueRef( bool IsExternal = Obj.getPlainRelocationExternal(RelInfo); if (IsExternal) { symbol_iterator Symbol = RI->getSymbol(); - ErrorOr<StringRef> TargetNameOrErr = Symbol->getName(); - if (std::error_code EC = TargetNameOrErr.getError()) - report_fatal_error(EC.message()); + Expected<StringRef> TargetNameOrErr = Symbol->getName(); + if (!TargetNameOrErr) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(TargetNameOrErr.takeError(), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } StringRef TargetName = *TargetNameOrErr; RTDyldSymbolTable::const_iterator SI = GlobalSymbolTable.find(TargetName.data()); @@ -191,9 +196,14 @@ void RuntimeDyldMachO::populateIndirectSymbolPointersSection( unsigned SymbolIndex = Obj.getIndirectSymbolTableEntry(DySymTabCmd, FirstIndirectSymbol + i); symbol_iterator SI = Obj.getSymbolByIndex(SymbolIndex); - ErrorOr<StringRef> IndirectSymbolNameOrErr = SI->getName(); - if (std::error_code EC = IndirectSymbolNameOrErr.getError()) - report_fatal_error(EC.message()); + Expected<StringRef> IndirectSymbolNameOrErr = SI->getName(); + if (!IndirectSymbolNameOrErr) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(IndirectSymbolNameOrErr.takeError(), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } StringRef IndirectSymbolName = *IndirectSymbolNameOrErr; DEBUG(dbgs() << " " << IndirectSymbolName << ": index " << SymbolIndex << ", PT offset: " << PTEntryOffset << "\n"); diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h index fbfbb328523..9573d3f2ed4 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFI386.h @@ -43,9 +43,14 @@ public: if (Symbol == Obj.symbol_end()) report_fatal_error("Unknown symbol in relocation"); - ErrorOr<StringRef> TargetNameOrErr = Symbol->getName(); - if (auto EC = TargetNameOrErr.getError()) - report_fatal_error(EC.message()); + Expected<StringRef> TargetNameOrErr = Symbol->getName(); + if (!TargetNameOrErr) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(TargetNameOrErr.takeError(), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } StringRef TargetName = *TargetNameOrErr; auto Section = *Symbol->getSection(); diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFX86_64.h b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFX86_64.h index 25f538d8f3d..1fd851545d6 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFX86_64.h +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldCOFFX86_64.h @@ -151,9 +151,14 @@ public: break; } - ErrorOr<StringRef> TargetNameOrErr = Symbol->getName(); - if (std::error_code EC = TargetNameOrErr.getError()) - report_fatal_error(EC.message()); + Expected<StringRef> TargetNameOrErr = Symbol->getName(); + if (!TargetNameOrErr) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(TargetNameOrErr.takeError(), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } StringRef TargetName = *TargetNameOrErr; DEBUG(dbgs() << "\t\tIn Section " << SectionID << " Offset " << Offset diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h index ea2a7a2953b..fba157b9424 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOAArch64.h @@ -424,9 +424,14 @@ private: uint8_t *LocalAddress = Sections[SectionID].getAddressWithOffset(Offset); unsigned NumBytes = 1 << Size; - ErrorOr<StringRef> SubtrahendNameOrErr = RelI->getSymbol()->getName(); - if (auto EC = SubtrahendNameOrErr.getError()) - report_fatal_error(EC.message()); + Expected<StringRef> SubtrahendNameOrErr = RelI->getSymbol()->getName(); + if (!SubtrahendNameOrErr) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(SubtrahendNameOrErr.takeError(), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } auto SubtrahendI = GlobalSymbolTable.find(*SubtrahendNameOrErr); unsigned SectionBID = SubtrahendI->second.getSectionID(); uint64_t SectionBOffset = SubtrahendI->second.getOffset(); @@ -434,9 +439,14 @@ private: SignExtend64(readBytesUnaligned(LocalAddress, NumBytes), NumBytes * 8); ++RelI; - ErrorOr<StringRef> MinuendNameOrErr = RelI->getSymbol()->getName(); - if (auto EC = MinuendNameOrErr.getError()) - report_fatal_error(EC.message()); + Expected<StringRef> MinuendNameOrErr = RelI->getSymbol()->getName(); + if (!MinuendNameOrErr) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(MinuendNameOrErr.takeError(), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } auto MinuendI = GlobalSymbolTable.find(*MinuendNameOrErr); unsigned SectionAID = MinuendI->second.getSectionID(); uint64_t SectionAOffset = MinuendI->second.getOffset(); diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOI386.h b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOI386.h index 85059d70a3e..843aa364c4f 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOI386.h +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOI386.h @@ -204,9 +204,14 @@ private: unsigned SymbolIndex = Obj.getIndirectSymbolTableEntry(DySymTabCmd, FirstIndirectSymbol + i); symbol_iterator SI = Obj.getSymbolByIndex(SymbolIndex); - ErrorOr<StringRef> IndirectSymbolName = SI->getName(); - if (std::error_code EC = IndirectSymbolName.getError()) - report_fatal_error(EC.message()); + Expected<StringRef> IndirectSymbolName = SI->getName(); + if (!IndirectSymbolName) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(IndirectSymbolName.takeError(), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } uint8_t *JTEntryAddr = JTSectionAddr + JTEntryOffset; createStubFunction(JTEntryAddr); RelocationEntry RE(JTSectionID, JTEntryOffset + 1, diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOX86_64.h b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOX86_64.h index 2242295bc1e..8f566b7eff5 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOX86_64.h +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/Targets/RuntimeDyldMachOX86_64.h @@ -157,9 +157,14 @@ private: uint8_t *LocalAddress = Sections[SectionID].getAddressWithOffset(Offset); unsigned NumBytes = 1 << Size; - ErrorOr<StringRef> SubtrahendNameOrErr = RelI->getSymbol()->getName(); - if (auto EC = SubtrahendNameOrErr.getError()) - report_fatal_error(EC.message()); + Expected<StringRef> SubtrahendNameOrErr = RelI->getSymbol()->getName(); + if (!SubtrahendNameOrErr) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(SubtrahendNameOrErr.takeError(), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } auto SubtrahendI = GlobalSymbolTable.find(*SubtrahendNameOrErr); unsigned SectionBID = SubtrahendI->second.getSectionID(); uint64_t SectionBOffset = SubtrahendI->second.getOffset(); @@ -167,9 +172,14 @@ private: SignExtend64(readBytesUnaligned(LocalAddress, NumBytes), NumBytes * 8); ++RelI; - ErrorOr<StringRef> MinuendNameOrErr = RelI->getSymbol()->getName(); - if (auto EC = MinuendNameOrErr.getError()) - report_fatal_error(EC.message()); + Expected<StringRef> MinuendNameOrErr = RelI->getSymbol()->getName(); + if (!MinuendNameOrErr) { + std::string Buf; + raw_string_ostream OS(Buf); + logAllUnhandledErrors(MinuendNameOrErr.takeError(), OS, ""); + OS.flush(); + report_fatal_error(Buf); + } auto MinuendI = GlobalSymbolTable.find(*MinuendNameOrErr); unsigned SectionAID = MinuendI->second.getSectionID(); uint64_t SectionAOffset = MinuendI->second.getOffset(); |

