diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/Object/Binary.h | 23 | ||||
-rw-r--r-- | llvm/lib/ExecutionEngine/MCJIT/MCJIT.cpp | 9 | ||||
-rw-r--r-- | llvm/lib/ProfileData/CoverageMappingReader.cpp | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-cov/TestingSupport.cpp | 2 | ||||
-rw-r--r-- | llvm/tools/llvm-symbolizer/LLVMSymbolize.cpp | 6 | ||||
-rw-r--r-- | llvm/tools/llvm-symbolizer/LLVMSymbolize.h | 9 |
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. |