summaryrefslogtreecommitdiff
path: root/tools/dsymutil/BinaryHolder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/dsymutil/BinaryHolder.cpp')
-rw-r--r--tools/dsymutil/BinaryHolder.cpp39
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));