diff options
author | Fangrui Song <maskray@google.com> | 2019-05-16 11:33:48 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-05-16 11:33:48 +0000 |
commit | a076ec54bee20c423cf710ea2818d01df84e28b0 (patch) | |
tree | 9349552e719590d0d902eb3e688645141e47d9e3 /llvm/lib/Object | |
parent | 671fc5f3f44986f7d20c3fcf2126cfad39b1adaf (diff) | |
download | bcm5719-llvm-a076ec54bee20c423cf710ea2818d01df84e28b0.tar.gz bcm5719-llvm-a076ec54bee20c423cf710ea2818d01df84e28b0.zip |
[Object] Change object::SectionRef::getContents() to return Expected<StringRef>
Expected<ArrayRef<uint8_t>> may be better but use Expected<StringRef> for now.
Follow-up of D61781.
llvm-svn: 360876
Diffstat (limited to 'llvm/lib/Object')
-rw-r--r-- | llvm/lib/Object/ELFObjectFile.cpp | 11 | ||||
-rw-r--r-- | llvm/lib/Object/IRObjectFile.cpp | 10 | ||||
-rw-r--r-- | llvm/lib/Object/Object.cpp | 8 |
3 files changed, 15 insertions, 14 deletions
diff --git a/llvm/lib/Object/ELFObjectFile.cpp b/llvm/lib/Object/ELFObjectFile.cpp index cc1eeefec26..c0ac7a357f8 100644 --- a/llvm/lib/Object/ELFObjectFile.cpp +++ b/llvm/lib/Object/ELFObjectFile.cpp @@ -377,12 +377,13 @@ ELFObjectFileBase::getPltAddresses() const { } if (!Plt || !RelaPlt || !GotPlt) return {}; - StringRef PltContents; - if (Plt->getContents(PltContents)) + Expected<StringRef> PltContents = Plt->getContents(); + if (!PltContents) { + consumeError(PltContents.takeError()); return {}; - ArrayRef<uint8_t> PltBytes((const uint8_t *)PltContents.data(), - Plt->getSize()); - auto PltEntries = MIA->findPltEntries(Plt->getAddress(), PltBytes, + } + auto PltEntries = MIA->findPltEntries(Plt->getAddress(), + arrayRefFromStringRef(*PltContents), GotPlt->getAddress(), Triple); // Build a map from GOT entry virtual address to PLT entry virtual address. DenseMap<uint64_t, uint64_t> GotToPlt; diff --git a/llvm/lib/Object/IRObjectFile.cpp b/llvm/lib/Object/IRObjectFile.cpp index debe7899bfe..636f1521262 100644 --- a/llvm/lib/Object/IRObjectFile.cpp +++ b/llvm/lib/Object/IRObjectFile.cpp @@ -74,12 +74,12 @@ Expected<MemoryBufferRef> IRObjectFile::findBitcodeInObject(const ObjectFile &Obj) { for (const SectionRef &Sec : Obj.sections()) { if (Sec.isBitcode()) { - StringRef SecContents; - if (std::error_code EC = Sec.getContents(SecContents)) - return errorCodeToError(EC); - if (SecContents.size() <= 1) + Expected<StringRef> Contents = Sec.getContents(); + if (!Contents) + return Contents.takeError(); + if (Contents->size() <= 1) return errorCodeToError(object_error::bitcode_section_not_found); - return MemoryBufferRef(SecContents, Obj.getFileName()); + return MemoryBufferRef(*Contents, Obj.getFileName()); } } diff --git a/llvm/lib/Object/Object.cpp b/llvm/lib/Object/Object.cpp index 77e27ec3e8f..e2511b7aed0 100644 --- a/llvm/lib/Object/Object.cpp +++ b/llvm/lib/Object/Object.cpp @@ -247,10 +247,10 @@ uint64_t LLVMGetSectionSize(LLVMSectionIteratorRef SI) { } const char *LLVMGetSectionContents(LLVMSectionIteratorRef SI) { - StringRef ret; - if (std::error_code ec = (*unwrap(SI))->getContents(ret)) - report_fatal_error(ec.message()); - return ret.data(); + if (Expected<StringRef> E = (*unwrap(SI))->getContents()) + return E->data(); + else + report_fatal_error(E.takeError()); } uint64_t LLVMGetSectionAddress(LLVMSectionIteratorRef SI) { |