diff options
Diffstat (limited to 'llvm/tools/llvm-jitlink')
-rw-r--r-- | llvm/tools/llvm-jitlink/llvm-jitlink.cpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp index 383442f8a4c..5ecf66ae9e4 100644 --- a/llvm/tools/llvm-jitlink/llvm-jitlink.cpp +++ b/llvm/tools/llvm-jitlink/llvm-jitlink.cpp @@ -214,13 +214,27 @@ static void dumpSectionContents(raw_ostream &OS, AtomGraph &G) { } } -Session::Session(Triple TT) - : ObjLayer(ES, MemMgr, ObjectLinkingLayer::NotifyLoadedFunction(), - ObjectLinkingLayer::NotifyEmittedFunction(), - [this](const Triple &TT, PassConfiguration &PassConfig) { - modifyPassConfig(TT, PassConfig); - }), - TT(std::move(TT)) {} +Session::Session(Triple TT) : ObjLayer(ES, MemMgr), TT(std::move(TT)) { + + /// Local ObjectLinkingLayer::Plugin class to forward modifyPassConfig to the + /// Session. + class JITLinkSessionPlugin : public ObjectLinkingLayer::Plugin { + public: + JITLinkSessionPlugin(Session &S) : S(S) {} + void modifyPassConfig(MaterializationResponsibility &MR, const Triple &TT, + PassConfiguration &PassConfig) { + S.modifyPassConfig(TT, PassConfig); + } + + private: + Session &S; + }; + + if (!NoExec && !TT.isOSWindows()) + ObjLayer.addPlugin(llvm::make_unique<LocalEHFrameRegistrationPlugin>()); + + ObjLayer.addPlugin(llvm::make_unique<JITLinkSessionPlugin>(*this)); +} void Session::dumpSessionInfo(raw_ostream &OS) { OS << "Registered addresses:\n" << SymbolInfos << FileInfos; |