diff options
Diffstat (limited to 'tools/dsymutil/BinaryHolder.cpp')
-rw-r--r-- | tools/dsymutil/BinaryHolder.cpp | 39 |
1 files changed, 17 insertions, 22 deletions
diff --git a/tools/dsymutil/BinaryHolder.cpp b/tools/dsymutil/BinaryHolder.cpp index 4c2c1d195c3ca..e45f7fefe0844 100644 --- a/tools/dsymutil/BinaryHolder.cpp +++ b/tools/dsymutil/BinaryHolder.cpp @@ -19,15 +19,6 @@ namespace llvm { namespace dsymutil { -Triple BinaryHolder::getTriple(const object::MachOObjectFile &Obj) { - // If a ThumbTriple is returned, use it instead of the standard - // one. This is because the thumb triple always allows to create a - // target, whereas the non-thumb one might not. - Triple ThumbTriple; - Triple T = Obj.getArch(nullptr, &ThumbTriple); - return ThumbTriple.getArch() ? ThumbTriple : T; -} - static std::vector<MemoryBufferRef> getMachOFatMemoryBuffers(StringRef Filename, MemoryBuffer &Mem, object::MachOUniversalBinary &Fat) { @@ -82,13 +73,15 @@ BinaryHolder::GetMemoryBuffersForFile(StringRef Filename, auto ErrOrFat = object::MachOUniversalBinary::create( CurrentMemoryBuffer->getMemBufferRef()); - if (ErrOrFat.getError()) { + if (!ErrOrFat) { + consumeError(ErrOrFat.takeError()); // Not a fat binary must be a standard one. Return a one element vector. return std::vector<MemoryBufferRef>{CurrentMemoryBuffer->getMemBufferRef()}; } CurrentFatBinary = std::move(*ErrOrFat); - return getMachOFatMemoryBuffers(Filename, *CurrentMemoryBuffer, + CurrentFatBinaryName = Filename; + return getMachOFatMemoryBuffers(CurrentFatBinaryName, *CurrentMemoryBuffer, *CurrentFatBinary); } @@ -109,10 +102,8 @@ BinaryHolder::GetArchiveMemberBuffers(StringRef Filename, Buffers.reserve(CurrentArchives.size()); for (const auto &CurrentArchive : CurrentArchives) { - for (auto ChildOrErr : CurrentArchive->children()) { - if (std::error_code Err = ChildOrErr.getError()) - return Err; - const auto &Child = *ChildOrErr; + Error Err; + for (auto Child : CurrentArchive->children(Err)) { if (auto NameOrErr = Child.getName()) { if (*NameOrErr == Filename) { if (Timestamp != sys::TimeValue::PosixZeroTime() && @@ -130,6 +121,8 @@ BinaryHolder::GetArchiveMemberBuffers(StringRef Filename, } } } + if (Err) + return errorToErrorCode(std::move(Err)); } if (Buffers.empty()) @@ -153,19 +146,21 @@ BinaryHolder::MapArchiveAndGetMemberBuffers(StringRef Filename, std::vector<MemoryBufferRef> ArchiveBuffers; auto ErrOrFat = object::MachOUniversalBinary::create( CurrentMemoryBuffer->getMemBufferRef()); - if (ErrOrFat.getError()) { + if (!ErrOrFat) { + consumeError(ErrOrFat.takeError()); // Not a fat binary must be a standard one. ArchiveBuffers.push_back(CurrentMemoryBuffer->getMemBufferRef()); } else { CurrentFatBinary = std::move(*ErrOrFat); + CurrentFatBinaryName = ArchiveFilename; ArchiveBuffers = getMachOFatMemoryBuffers( - ArchiveFilename, *CurrentMemoryBuffer, *CurrentFatBinary); + CurrentFatBinaryName, *CurrentMemoryBuffer, *CurrentFatBinary); } for (auto MemRef : ArchiveBuffers) { auto ErrOrArchive = object::Archive::create(MemRef); - if (auto Err = ErrOrArchive.getError()) - return Err; + if (!ErrOrArchive) + return errorToErrorCode(ErrOrArchive.takeError()); CurrentArchives.push_back(std::move(*ErrOrArchive)); } return GetArchiveMemberBuffers(Filename, Timestamp); @@ -175,7 +170,7 @@ ErrorOr<const object::ObjectFile &> BinaryHolder::getObjfileForArch(const Triple &T) { for (const auto &Obj : CurrentObjectFiles) { if (const auto *MachO = dyn_cast<object::MachOObjectFile>(Obj.get())) { - if (getTriple(*MachO).str() == T.str()) + if (MachO->getArchTriple().str() == T.str()) return *MachO; } else if (Obj->getArch() == T.getArch()) return *Obj; @@ -196,8 +191,8 @@ BinaryHolder::GetObjectFiles(StringRef Filename, sys::TimeValue Timestamp) { CurrentObjectFiles.clear(); for (auto MemBuf : *ErrOrMemBufferRefs) { auto ErrOrObjectFile = object::ObjectFile::createObjectFile(MemBuf); - if (auto Err = ErrOrObjectFile.getError()) - return Err; + if (!ErrOrObjectFile) + return errorToErrorCode(ErrOrObjectFile.takeError()); Objects.push_back(ErrOrObjectFile->get()); CurrentObjectFiles.push_back(std::move(*ErrOrObjectFile)); |