Index: lldb/include/lldb/Core/Module.h =================================================================== --- lldb/include/lldb/Core/Module.h +++ lldb/include/lldb/Core/Module.h @@ -155,8 +155,23 @@ Module(const ModuleSpec &module_spec); - static lldb::ModuleSP - CreateJITModule(const lldb::ObjectFileJITDelegateSP &delegate_sp); + template + static lldb::ModuleSP CreateModuleFromObjectFile(Args &&args) { + // Must create a module and place it into a shared pointer before we can + // create an object file since it has a std::weak_ptr back to the module, + // so we need to control the creation carefully in this static function + auto module_sp = std::make_shared(); + module_sp->m_objfile_sp = + std::make_shared(module_sp, args...); + + // Once we get the object file, update our module with the object file's + // architecture since it might differ in vendor/os if some parts were + // unknown. + if (!module_sp->m_objfile_sp->GetArchitecture(module_sp->m_arch)) + return nullptr; + + return module_sp; + } //------------------------------------------------------------------ /// Destructor. Index: lldb/source/Core/CMakeLists.txt =================================================================== --- lldb/source/Core/CMakeLists.txt +++ lldb/source/Core/CMakeLists.txt @@ -69,7 +69,6 @@ lldbPluginProcessUtility lldbPluginCPlusPlusLanguage lldbPluginObjCLanguage - lldbPluginObjectFileJIT ${LLDB_CURSES_LIBS} LINK_COMPONENTS Index: lldb/source/Core/Module.cpp =================================================================== --- lldb/source/Core/Module.cpp +++ lldb/source/Core/Module.cpp @@ -53,7 +53,6 @@ #include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h" #include "Plugins/Language/ObjC/ObjCLanguage.h" -#include "Plugins/ObjectFile/JIT/ObjectFileJIT.h" #include "llvm/ADT/STLExtras.h" // for make_unique #include "llvm/Support/Compiler.h" // for LLVM_PRETT... @@ -1652,26 +1651,6 @@ return 0; } -ModuleSP -Module::CreateJITModule(const lldb::ObjectFileJITDelegateSP &delegate_sp) { - if (delegate_sp) { - // Must create a module and place it into a shared pointer before we can - // create an object file since it has a std::weak_ptr back to the module, - // so we need to control the creation carefully in this static function - ModuleSP module_sp(new Module()); - module_sp->m_objfile_sp = - std::make_shared(module_sp, delegate_sp); - if (module_sp->m_objfile_sp) { - // Once we get the object file, update our module with the object file's - // architecture since it might differ in vendor/os if some parts were - // unknown. - module_sp->m_objfile_sp->GetArchitecture(module_sp->m_arch); - } - return module_sp; - } - return ModuleSP(); -} - bool Module::GetIsDynamicLinkEditor() { ObjectFile *obj_file = GetObjectFile(); Index: lldb/source/Expression/CMakeLists.txt =================================================================== --- lldb/source/Expression/CMakeLists.txt +++ lldb/source/Expression/CMakeLists.txt @@ -30,6 +30,7 @@ lldbTarget lldbUtility lldbPluginExpressionParserClang + lldbPluginObjectFileJIT LINK_COMPONENTS Core Index: lldb/source/Expression/IRExecutionUnit.cpp =================================================================== --- lldb/source/Expression/IRExecutionUnit.cpp +++ lldb/source/Expression/IRExecutionUnit.cpp @@ -33,6 +33,7 @@ #include "lldb/Utility/Log.h" #include "lldb/../../source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.h" +#include "lldb/../../source/Plugins/ObjectFile/JIT/ObjectFileJIT.h" using namespace lldb_private; @@ -1225,15 +1226,18 @@ lldb::ModuleSP IRExecutionUnit::GetJITModule() { ExecutionContext exe_ctx(GetBestExecutionContextScope()); Target *target = exe_ctx.GetTargetPtr(); - if (target) { - lldb::ModuleSP jit_module_sp = lldb_private::Module::CreateJITModule( - std::static_pointer_cast( - shared_from_this())); - if (jit_module_sp) { - bool changed = false; - jit_module_sp->SetLoadAddress(*target, 0, true, changed); - } - return jit_module_sp; - } - return lldb::ModuleSP(); + if (!target) + return nullptr; + + auto Delegate = std::static_pointer_cast( + shared_from_this()); + + lldb::ModuleSP jit_module_sp = + lldb_private::Module::CreateModuleFromObjectFile(Delegate); + if (!jit_module_sp) + return nullptr; + + bool changed = false; + jit_module_sp->SetLoadAddress(*target, 0, true, changed); + return jit_module_sp; }