summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/include/llvm/Object/Binary.h23
-rw-r--r--llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp9
-rw-r--r--llvm/lib/ProfileData/CoverageMappingReader.cpp2
-rw-r--r--llvm/tools/llvm-cov/TestingSupport.cpp2
-rw-r--r--llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp6
-rw-r--r--llvm/tools/llvm-symbolizer/LLVMSymbolize.h9
6 files changed, 29 insertions, 22 deletions
diff --git a/llvm/include/llvm/Object/Binary.h b/llvm/include/llvm/Object/Binary.h
index e4cb6f49a09..4b2b7e6835c 100644
--- a/llvm/include/llvm/Object/Binary.h
+++ b/llvm/include/llvm/Object/Binary.h
@@ -139,9 +139,10 @@ public:
OwningBinary(OwningBinary<T>&& Other);
OwningBinary<T> &operator=(OwningBinary<T> &&Other);
- std::unique_ptr<T> &getBinary();
- const std::unique_ptr<T> &getBinary() const;
- std::unique_ptr<MemoryBuffer> &getBuffer();
+ std::pair<std::unique_ptr<T>, std::unique_ptr<MemoryBuffer>> takeBinary();
+
+ T* getBinary();
+ const T* getBinary() const;
};
template <typename T>
@@ -162,18 +163,18 @@ OwningBinary<T> &OwningBinary<T>::operator=(OwningBinary &&Other) {
return *this;
}
-template <typename T> std::unique_ptr<T> &OwningBinary<T>::getBinary() {
- return Bin;
+template <typename T>
+std::pair<std::unique_ptr<T>, std::unique_ptr<MemoryBuffer>>
+OwningBinary<T>::takeBinary() {
+ return std::make_pair(std::move(Bin), std::move(Buf));
}
-template <typename T>
-const std::unique_ptr<T> &OwningBinary<T>::getBinary() const {
- return Bin;
+template <typename T> T* OwningBinary<T>::getBinary() {
+ return Bin.get();
}
-template <typename T>
-std::unique_ptr<MemoryBuffer> &OwningBinary<T>::getBuffer() {
- return Buf;
+template <typename T> const T* OwningBinary<T>::getBinary() const {
+ return Bin.get();
}
ErrorOr<OwningBinary<Binary>> createBinary(StringRef Path);
diff --git a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp
index 8f1662f6ee7..da5f03799e3 100644
--- a/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp
+++ b/llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp
@@ -109,8 +109,11 @@ void MCJIT::addObjectFile(std::unique_ptr<object::ObjectFile> Obj) {
}
void MCJIT::addObjectFile(object::OwningBinary<object::ObjectFile> Obj) {
- addObjectFile(std::move(Obj.getBinary()));
- Buffers.push_back(std::move(Obj.getBuffer()));
+ std::unique_ptr<object::ObjectFile> ObjFile;
+ std::unique_ptr<MemoryBuffer> MemBuf;
+ std::tie(ObjFile, MemBuf) = Obj.takeBinary();
+ addObjectFile(std::move(ObjFile));
+ Buffers.push_back(std::move(MemBuf));
}
void MCJIT::addArchive(object::OwningBinary<object::Archive> A) {
@@ -290,7 +293,7 @@ uint64_t MCJIT::getSymbolAddress(const std::string &Name,
return Addr;
for (object::OwningBinary<object::Archive> &OB : Archives) {
- object::Archive *A = OB.getBinary().get();
+ object::Archive *A = OB.getBinary();
// Look for our symbols in each Archive
object::Archive::child_iterator ChildIt = A->findSym(Name);
if (ChildIt != A->child_end()) {
diff --git a/llvm/lib/ProfileData/CoverageMappingReader.cpp b/llvm/lib/ProfileData/CoverageMappingReader.cpp
index ce99f4d8a7b..6476d28ec35 100644
--- a/llvm/lib/ProfileData/CoverageMappingReader.cpp
+++ b/llvm/lib/ProfileData/CoverageMappingReader.cpp
@@ -485,7 +485,7 @@ ObjectFileCoverageMappingReader::ObjectFileCoverageMappingReader(
}
std::error_code ObjectFileCoverageMappingReader::readHeader() {
- ObjectFile *OF = Object.getBinary().get();
+ const ObjectFile *OF = Object.getBinary();
if (!OF)
return getError();
auto BytesInAddress = OF->getBytesInAddress();
diff --git a/llvm/tools/llvm-cov/TestingSupport.cpp b/llvm/tools/llvm-cov/TestingSupport.cpp
index aa07a79e78d..537f133c647 100644
--- a/llvm/tools/llvm-cov/TestingSupport.cpp
+++ b/llvm/tools/llvm-cov/TestingSupport.cpp
@@ -41,7 +41,7 @@ int convertForTestingMain(int argc, const char *argv[]) {
errs() << "error: " << Err.message() << "\n";
return 1;
}
- ObjectFile *OF = ObjErr.get().getBinary().get();
+ ObjectFile *OF = ObjErr.get().getBinary();
auto BytesInAddress = OF->getBytesInAddress();
if (BytesInAddress != 8) {
errs() << "error: 64 bit binary expected\n";
diff --git a/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp b/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp
index 31bbedf8f03..760d83bf38a 100644
--- a/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp
+++ b/llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp
@@ -326,7 +326,7 @@ ObjectFile *LLVMSymbolizer::lookUpDsymFile(const std::string &ExePath,
if (EC != errc::no_such_file_or_directory && !error(EC)) {
OwningBinary<Binary> B = std::move(BinaryOrErr.get());
ObjectFile *DbgObj =
- getObjectFileFromBinary(B.getBinary().get(), ArchName);
+ getObjectFileFromBinary(B.getBinary(), ArchName);
const MachOObjectFile *MachDbgObj =
dyn_cast<const MachOObjectFile>(DbgObj);
if (!MachDbgObj) continue;
@@ -350,7 +350,7 @@ LLVMSymbolizer::getOrCreateObjects(const std::string &Path,
ErrorOr<OwningBinary<Binary>> BinaryOrErr = createBinary(Path);
if (!error(BinaryOrErr.getError())) {
OwningBinary<Binary> &B = BinaryOrErr.get();
- Obj = getObjectFileFromBinary(B.getBinary().get(), ArchName);
+ Obj = getObjectFileFromBinary(B.getBinary(), ArchName);
if (!Obj) {
ObjectPair Res = std::make_pair(nullptr, nullptr);
ObjectPairForPathArch[std::make_pair(Path, ArchName)] = Res;
@@ -369,7 +369,7 @@ LLVMSymbolizer::getOrCreateObjects(const std::string &Path,
BinaryOrErr = createBinary(DebugBinaryPath);
if (!error(BinaryOrErr.getError())) {
OwningBinary<Binary> B = std::move(BinaryOrErr.get());
- DbgObj = getObjectFileFromBinary(B.getBinary().get(), ArchName);
+ DbgObj = getObjectFileFromBinary(B.getBinary(), ArchName);
addOwningBinary(std::move(B));
}
}
diff --git a/llvm/tools/llvm-symbolizer/LLVMSymbolize.h b/llvm/tools/llvm-symbolizer/LLVMSymbolize.h
index 52f1fc99171..db3f56237b4 100644
--- a/llvm/tools/llvm-symbolizer/LLVMSymbolize.h
+++ b/llvm/tools/llvm-symbolizer/LLVMSymbolize.h
@@ -81,9 +81,12 @@ private:
// Owns all the parsed binaries and object files.
SmallVector<std::unique_ptr<Binary>, 4> ParsedBinariesAndObjects;
SmallVector<std::unique_ptr<MemoryBuffer>, 4> MemoryBuffers;
- void addOwningBinary(OwningBinary<Binary> Bin) {
- ParsedBinariesAndObjects.push_back(std::move(Bin.getBinary()));
- MemoryBuffers.push_back(std::move(Bin.getBuffer()));
+ void addOwningBinary(OwningBinary<Binary> OwningBin) {
+ std::unique_ptr<Binary> Bin;
+ std::unique_ptr<MemoryBuffer> MemBuf;
+ std::tie(Bin, MemBuf) = OwningBin.takeBinary();
+ ParsedBinariesAndObjects.push_back(std::move(Bin));
+ MemoryBuffers.push_back(std::move(MemBuf));
}
// Owns module info objects.
OpenPOWER on IntegriCloud