diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp')
| -rw-r--r-- | contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp | 92 |
1 files changed, 56 insertions, 36 deletions
diff --git a/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp index 0ab0d7d2e2b6..91949c9d7eeb 100644 --- a/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp +++ b/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp @@ -89,6 +89,7 @@ class GenericLLVMIRPlatform : public Platform { public: GenericLLVMIRPlatform(GenericLLVMIRPlatformSupport &S) : S(S) {} Error setupJITDylib(JITDylib &JD) override; + Error teardownJITDylib(JITDylib &JD) override; Error notifyAdding(ResourceTracker &RT, const MaterializationUnit &MU) override; Error notifyRemoving(ResourceTracker &RT) override { @@ -276,17 +277,22 @@ private: DenseMap<JITDylib *, SymbolLookupSet> LookupSymbols; std::vector<JITDylibSP> DFSLinkOrder; - getExecutionSession().runSessionLocked([&]() { - DFSLinkOrder = JD.getDFSLinkOrder(); - - for (auto &NextJD : DFSLinkOrder) { - auto IFItr = InitFunctions.find(NextJD.get()); - if (IFItr != InitFunctions.end()) { - LookupSymbols[NextJD.get()] = std::move(IFItr->second); - InitFunctions.erase(IFItr); - } - } - }); + if (auto Err = getExecutionSession().runSessionLocked([&]() -> Error { + if (auto DFSLinkOrderOrErr = JD.getDFSLinkOrder()) + DFSLinkOrder = std::move(*DFSLinkOrderOrErr); + else + return DFSLinkOrderOrErr.takeError(); + + for (auto &NextJD : DFSLinkOrder) { + auto IFItr = InitFunctions.find(NextJD.get()); + if (IFItr != InitFunctions.end()) { + LookupSymbols[NextJD.get()] = std::move(IFItr->second); + InitFunctions.erase(IFItr); + } + } + return Error::success(); + })) + return std::move(Err); LLVM_DEBUG({ dbgs() << "JITDylib init order is [ "; @@ -326,20 +332,25 @@ private: DenseMap<JITDylib *, SymbolLookupSet> LookupSymbols; std::vector<JITDylibSP> DFSLinkOrder; - ES.runSessionLocked([&]() { - DFSLinkOrder = JD.getDFSLinkOrder(); - - for (auto &NextJD : DFSLinkOrder) { - auto &JDLookupSymbols = LookupSymbols[NextJD.get()]; - auto DIFItr = DeInitFunctions.find(NextJD.get()); - if (DIFItr != DeInitFunctions.end()) { - LookupSymbols[NextJD.get()] = std::move(DIFItr->second); - DeInitFunctions.erase(DIFItr); - } - JDLookupSymbols.add(LLJITRunAtExits, - SymbolLookupFlags::WeaklyReferencedSymbol); - } - }); + if (auto Err = ES.runSessionLocked([&]() -> Error { + if (auto DFSLinkOrderOrErr = JD.getDFSLinkOrder()) + DFSLinkOrder = std::move(*DFSLinkOrderOrErr); + else + return DFSLinkOrderOrErr.takeError(); + + for (auto &NextJD : DFSLinkOrder) { + auto &JDLookupSymbols = LookupSymbols[NextJD.get()]; + auto DIFItr = DeInitFunctions.find(NextJD.get()); + if (DIFItr != DeInitFunctions.end()) { + LookupSymbols[NextJD.get()] = std::move(DIFItr->second); + DeInitFunctions.erase(DIFItr); + } + JDLookupSymbols.add(LLJITRunAtExits, + SymbolLookupFlags::WeaklyReferencedSymbol); + } + return Error::success(); + })) + return std::move(Err); LLVM_DEBUG({ dbgs() << "JITDylib deinit order is [ "; @@ -380,17 +391,22 @@ private: DenseMap<JITDylib *, SymbolLookupSet> RequiredInitSymbols; std::vector<JITDylibSP> DFSLinkOrder; - getExecutionSession().runSessionLocked([&]() { - DFSLinkOrder = JD.getDFSLinkOrder(); - - for (auto &NextJD : DFSLinkOrder) { - auto ISItr = InitSymbols.find(NextJD.get()); - if (ISItr != InitSymbols.end()) { - RequiredInitSymbols[NextJD.get()] = std::move(ISItr->second); - InitSymbols.erase(ISItr); - } - } - }); + if (auto Err = getExecutionSession().runSessionLocked([&]() -> Error { + if (auto DFSLinkOrderOrErr = JD.getDFSLinkOrder()) + DFSLinkOrder = std::move(*DFSLinkOrderOrErr); + else + return DFSLinkOrderOrErr.takeError(); + + for (auto &NextJD : DFSLinkOrder) { + auto ISItr = InitSymbols.find(NextJD.get()); + if (ISItr != InitSymbols.end()) { + RequiredInitSymbols[NextJD.get()] = std::move(ISItr->second); + InitSymbols.erase(ISItr); + } + } + return Error::success(); + })) + return Err; return Platform::lookupInitSymbols(getExecutionSession(), RequiredInitSymbols) @@ -460,6 +476,10 @@ Error GenericLLVMIRPlatform::setupJITDylib(JITDylib &JD) { return S.setupJITDylib(JD); } +Error GenericLLVMIRPlatform::teardownJITDylib(JITDylib &JD) { + return Error::success(); +} + Error GenericLLVMIRPlatform::notifyAdding(ResourceTracker &RT, const MaterializationUnit &MU) { return S.notifyAdding(RT, MU); |
