https://github.com/slydiman updated https://github.com/llvm/llvm-project/pull/134383
>From 590d5b47b9f98a8e5f19945334b2a1c34248f9d8 Mon Sep 17 00:00:00 2001 From: Dmitry Vasilyev <dvassil...@accesssoftek.com> Date: Fri, 4 Apr 2025 17:49:07 +0400 Subject: [PATCH 1/3] [LLDB][NFC] Remove Debugger dependency in SystemLifetimeManager It reduces the memory usage in lldb-server. Later I will try to remove the rest Debugger dependencies to reduce lldb-server size. --- .../Initialization/SystemLifetimeManager.h | 5 ++- .../Initialization/SystemLifetimeManagerDbg.h | 36 +++++++++++++++++++ lldb/source/API/SBDebugger.cpp | 4 +-- .../Initialization/SystemLifetimeManager.cpp | 5 ++- lldb/tools/lldb-test/lldb-test.cpp | 4 +-- 5 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 lldb/include/lldb/Initialization/SystemLifetimeManagerDbg.h diff --git a/lldb/include/lldb/Initialization/SystemLifetimeManager.h b/lldb/include/lldb/Initialization/SystemLifetimeManager.h index 06328e60133fe..55138b33be712 100644 --- a/lldb/include/lldb/Initialization/SystemLifetimeManager.h +++ b/lldb/include/lldb/Initialization/SystemLifetimeManager.h @@ -21,7 +21,7 @@ namespace lldb_private { class SystemLifetimeManager { public: SystemLifetimeManager(); - ~SystemLifetimeManager(); + virtual ~SystemLifetimeManager(); llvm::Error Initialize(std::unique_ptr<SystemInitializer> initializer, LoadPluginCallbackType plugin_callback); @@ -32,6 +32,9 @@ class SystemLifetimeManager { std::unique_ptr<SystemInitializer> m_initializer; bool m_initialized = false; + virtual void InitializeDebugger(LoadPluginCallbackType plugin_callback) {}; + virtual void TerminateDebugger() {}; + // Noncopyable. SystemLifetimeManager(const SystemLifetimeManager &other) = delete; SystemLifetimeManager &operator=(const SystemLifetimeManager &other) = delete; diff --git a/lldb/include/lldb/Initialization/SystemLifetimeManagerDbg.h b/lldb/include/lldb/Initialization/SystemLifetimeManagerDbg.h new file mode 100644 index 0000000000000..5e728398f71bd --- /dev/null +++ b/lldb/include/lldb/Initialization/SystemLifetimeManagerDbg.h @@ -0,0 +1,36 @@ +//===-- SystemLifetimeManagerDbg.h ------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLDB_INITIALIZATION_SYSTEMLIFETIMEMANAGERDBG_H +#define LLDB_INITIALIZATION_SYSTEMLIFETIMEMANAGERDBG_H + +#include "SystemLifetimeManager.h" +#include "lldb/Core/Debugger.h" + +namespace lldb_private { + +class SystemLifetimeManagerDbg : public SystemLifetimeManager { +public: + SystemLifetimeManagerDbg() : SystemLifetimeManager() {}; + +private: + virtual void + InitializeDebugger(LoadPluginCallbackType plugin_callback) override { + Debugger::Initialize(plugin_callback); + }; + + virtual void TerminateDebugger() override { Debugger::Terminate(); }; + + // Noncopyable. + SystemLifetimeManagerDbg(const SystemLifetimeManagerDbg &other) = delete; + SystemLifetimeManagerDbg & + operator=(const SystemLifetimeManagerDbg &other) = delete; +}; +} // namespace lldb_private + +#endif diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp index e646b09e05852..55ccfd415ca47 100644 --- a/lldb/source/API/SBDebugger.cpp +++ b/lldb/source/API/SBDebugger.cpp @@ -44,7 +44,7 @@ #include "lldb/Host/Config.h" #include "lldb/Host/StreamFile.h" #include "lldb/Host/XML.h" -#include "lldb/Initialization/SystemLifetimeManager.h" +#include "lldb/Initialization/SystemLifetimeManagerDbg.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Interpreter/OptionArgParser.h" #include "lldb/Interpreter/OptionGroupPlatform.h" @@ -66,7 +66,7 @@ using namespace lldb; using namespace lldb_private; -static llvm::ManagedStatic<SystemLifetimeManager> g_debugger_lifetime; +static llvm::ManagedStatic<SystemLifetimeManagerDbg> g_debugger_lifetime; SBError SBInputReader::Initialize( lldb::SBDebugger &sb_debugger, diff --git a/lldb/source/Initialization/SystemLifetimeManager.cpp b/lldb/source/Initialization/SystemLifetimeManager.cpp index f9de41a675356..b07fe71affec7 100644 --- a/lldb/source/Initialization/SystemLifetimeManager.cpp +++ b/lldb/source/Initialization/SystemLifetimeManager.cpp @@ -8,7 +8,6 @@ #include "lldb/Initialization/SystemLifetimeManager.h" -#include "lldb/Core/Debugger.h" #include "lldb/Initialization/SystemInitializer.h" #include <utility> @@ -36,7 +35,7 @@ llvm::Error SystemLifetimeManager::Initialize( if (auto e = m_initializer->Initialize()) return e; - Debugger::Initialize(plugin_callback); + InitializeDebugger(plugin_callback); } return llvm::Error::success(); @@ -46,7 +45,7 @@ void SystemLifetimeManager::Terminate() { std::lock_guard<std::recursive_mutex> guard(m_mutex); if (m_initialized) { - Debugger::Terminate(); + TerminateDebugger(); m_initializer->Terminate(); m_initializer.reset(); diff --git a/lldb/tools/lldb-test/lldb-test.cpp b/lldb/tools/lldb-test/lldb-test.cpp index 1960240dc4151..81ac0b8898d6e 100644 --- a/lldb/tools/lldb-test/lldb-test.cpp +++ b/lldb/tools/lldb-test/lldb-test.cpp @@ -17,7 +17,7 @@ #include "lldb/Core/Module.h" #include "lldb/Core/Section.h" #include "lldb/Expression/IRMemoryMap.h" -#include "lldb/Initialization/SystemLifetimeManager.h" +#include "lldb/Initialization/SystemLifetimeManagerDbg.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Interpreter/CommandReturnObject.h" #include "lldb/Symbol/CompileUnit.h" @@ -1245,7 +1245,7 @@ int main(int argc, const char *argv[]) { cl::ParseCommandLineOptions(argc, argv, "LLDB Testing Utility\n"); - SystemLifetimeManager DebuggerLifetime; + SystemLifetimeManagerDbg DebuggerLifetime; if (auto e = DebuggerLifetime.Initialize( std::make_unique<SystemInitializerTest>(), nullptr)) { WithColor::error() << "initialization failed: " << toString(std::move(e)) >From 0d4e76c260d6c99fcd2fd35fad9259a3af7f7d48 Mon Sep 17 00:00:00 2001 From: Dmitry Vasilyev <dvassil...@accesssoftek.com> Date: Fri, 4 Apr 2025 20:12:00 +0400 Subject: [PATCH 2/3] Customized using SystemInitializer. --- .../lldb/Initialization/SystemInitializer.h | 3 +- .../Initialization/SystemInitializerCommon.h | 2 +- .../Initialization/SystemLifetimeManager.h | 5 +-- .../Initialization/SystemLifetimeManagerDbg.h | 36 ------------------- lldb/source/API/SBDebugger.cpp | 4 +-- lldb/source/API/SystemInitializerFull.cpp | 9 +++-- lldb/source/API/SystemInitializerFull.h | 2 +- .../SystemInitializerCommon.cpp | 3 +- .../Initialization/SystemLifetimeManager.cpp | 5 +-- .../lldb-server/SystemInitializerLLGS.cpp | 5 +-- .../tools/lldb-server/SystemInitializerLLGS.h | 3 +- .../tools/lldb-test/SystemInitializerTest.cpp | 9 +++-- lldb/tools/lldb-test/SystemInitializerTest.h | 2 +- lldb/tools/lldb-test/lldb-test.cpp | 4 +-- 14 files changed, 32 insertions(+), 60 deletions(-) delete mode 100644 lldb/include/lldb/Initialization/SystemLifetimeManagerDbg.h diff --git a/lldb/include/lldb/Initialization/SystemInitializer.h b/lldb/include/lldb/Initialization/SystemInitializer.h index 4426bfb224e37..a504042e547c6 100644 --- a/lldb/include/lldb/Initialization/SystemInitializer.h +++ b/lldb/include/lldb/Initialization/SystemInitializer.h @@ -9,6 +9,7 @@ #ifndef LLDB_INITIALIZATION_SYSTEMINITIALIZER_H #define LLDB_INITIALIZATION_SYSTEMINITIALIZER_H +#include "lldb/lldb-private-types.h" #include "llvm/Support/Error.h" #include <string> @@ -20,7 +21,7 @@ class SystemInitializer { SystemInitializer(); virtual ~SystemInitializer(); - virtual llvm::Error Initialize() = 0; + virtual llvm::Error Initialize(LoadPluginCallbackType plugin_callback) = 0; virtual void Terminate() = 0; }; } diff --git a/lldb/include/lldb/Initialization/SystemInitializerCommon.h b/lldb/include/lldb/Initialization/SystemInitializerCommon.h index d918b1125a570..83ea8a3958d08 100644 --- a/lldb/include/lldb/Initialization/SystemInitializerCommon.h +++ b/lldb/include/lldb/Initialization/SystemInitializerCommon.h @@ -26,7 +26,7 @@ class SystemInitializerCommon : public SystemInitializer { SystemInitializerCommon(HostInfo::SharedLibraryDirectoryHelper *helper); ~SystemInitializerCommon() override; - llvm::Error Initialize() override; + llvm::Error Initialize(LoadPluginCallbackType plugin_callback) override; void Terminate() override; private: diff --git a/lldb/include/lldb/Initialization/SystemLifetimeManager.h b/lldb/include/lldb/Initialization/SystemLifetimeManager.h index 55138b33be712..06328e60133fe 100644 --- a/lldb/include/lldb/Initialization/SystemLifetimeManager.h +++ b/lldb/include/lldb/Initialization/SystemLifetimeManager.h @@ -21,7 +21,7 @@ namespace lldb_private { class SystemLifetimeManager { public: SystemLifetimeManager(); - virtual ~SystemLifetimeManager(); + ~SystemLifetimeManager(); llvm::Error Initialize(std::unique_ptr<SystemInitializer> initializer, LoadPluginCallbackType plugin_callback); @@ -32,9 +32,6 @@ class SystemLifetimeManager { std::unique_ptr<SystemInitializer> m_initializer; bool m_initialized = false; - virtual void InitializeDebugger(LoadPluginCallbackType plugin_callback) {}; - virtual void TerminateDebugger() {}; - // Noncopyable. SystemLifetimeManager(const SystemLifetimeManager &other) = delete; SystemLifetimeManager &operator=(const SystemLifetimeManager &other) = delete; diff --git a/lldb/include/lldb/Initialization/SystemLifetimeManagerDbg.h b/lldb/include/lldb/Initialization/SystemLifetimeManagerDbg.h deleted file mode 100644 index 5e728398f71bd..0000000000000 --- a/lldb/include/lldb/Initialization/SystemLifetimeManagerDbg.h +++ /dev/null @@ -1,36 +0,0 @@ -//===-- SystemLifetimeManagerDbg.h ------------------------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#ifndef LLDB_INITIALIZATION_SYSTEMLIFETIMEMANAGERDBG_H -#define LLDB_INITIALIZATION_SYSTEMLIFETIMEMANAGERDBG_H - -#include "SystemLifetimeManager.h" -#include "lldb/Core/Debugger.h" - -namespace lldb_private { - -class SystemLifetimeManagerDbg : public SystemLifetimeManager { -public: - SystemLifetimeManagerDbg() : SystemLifetimeManager() {}; - -private: - virtual void - InitializeDebugger(LoadPluginCallbackType plugin_callback) override { - Debugger::Initialize(plugin_callback); - }; - - virtual void TerminateDebugger() override { Debugger::Terminate(); }; - - // Noncopyable. - SystemLifetimeManagerDbg(const SystemLifetimeManagerDbg &other) = delete; - SystemLifetimeManagerDbg & - operator=(const SystemLifetimeManagerDbg &other) = delete; -}; -} // namespace lldb_private - -#endif diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp index 55ccfd415ca47..e646b09e05852 100644 --- a/lldb/source/API/SBDebugger.cpp +++ b/lldb/source/API/SBDebugger.cpp @@ -44,7 +44,7 @@ #include "lldb/Host/Config.h" #include "lldb/Host/StreamFile.h" #include "lldb/Host/XML.h" -#include "lldb/Initialization/SystemLifetimeManagerDbg.h" +#include "lldb/Initialization/SystemLifetimeManager.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Interpreter/OptionArgParser.h" #include "lldb/Interpreter/OptionGroupPlatform.h" @@ -66,7 +66,7 @@ using namespace lldb; using namespace lldb_private; -static llvm::ManagedStatic<SystemLifetimeManagerDbg> g_debugger_lifetime; +static llvm::ManagedStatic<SystemLifetimeManager> g_debugger_lifetime; SBError SBInputReader::Initialize( lldb::SBDebugger &sb_debugger, diff --git a/lldb/source/API/SystemInitializerFull.cpp b/lldb/source/API/SystemInitializerFull.cpp index 9cc3779d1895f..ef45261e0140d 100644 --- a/lldb/source/API/SystemInitializerFull.cpp +++ b/lldb/source/API/SystemInitializerFull.cpp @@ -49,8 +49,9 @@ SystemInitializerFull::SystemInitializerFull() : SystemInitializerCommon(g_shlib_dir_helper) {} SystemInitializerFull::~SystemInitializerFull() = default; -llvm::Error SystemInitializerFull::Initialize() { - llvm::Error error = SystemInitializerCommon::Initialize(); +llvm::Error +SystemInitializerFull::Initialize(LoadPluginCallbackType plugin_callback) { + llvm::Error error = SystemInitializerCommon::Initialize(plugin_callback); if (error) return error; @@ -86,10 +87,14 @@ llvm::Error SystemInitializerFull::Initialize() { LLDB_LOG(GetLog(SystemLog::System), "{0}", GetVersion()); + Debugger::Initialize(plugin_callback); + return llvm::Error::success(); } void SystemInitializerFull::Terminate() { + Debugger::Terminate(); + Debugger::SettingsTerminate(); // Terminate plug-ins in core LLDB. diff --git a/lldb/source/API/SystemInitializerFull.h b/lldb/source/API/SystemInitializerFull.h index 7cab6cb97533d..06c2e5ba86181 100644 --- a/lldb/source/API/SystemInitializerFull.h +++ b/lldb/source/API/SystemInitializerFull.h @@ -23,7 +23,7 @@ class SystemInitializerFull : public SystemInitializerCommon { SystemInitializerFull(); ~SystemInitializerFull() override; - llvm::Error Initialize() override; + llvm::Error Initialize(LoadPluginCallbackType plugin_callback) override; void Terminate() override; }; diff --git a/lldb/source/Initialization/SystemInitializerCommon.cpp b/lldb/source/Initialization/SystemInitializerCommon.cpp index 1a172a95aa147..6341ca257dd6e 100644 --- a/lldb/source/Initialization/SystemInitializerCommon.cpp +++ b/lldb/source/Initialization/SystemInitializerCommon.cpp @@ -41,7 +41,8 @@ SystemInitializerCommon::SystemInitializerCommon( SystemInitializerCommon::~SystemInitializerCommon() = default; -llvm::Error SystemInitializerCommon::Initialize() { +llvm::Error +SystemInitializerCommon::Initialize(LoadPluginCallbackType plugin_callback) { #if defined(_WIN32) const char *disable_crash_dialog_var = getenv("LLDB_DISABLE_CRASH_DIALOG"); if (disable_crash_dialog_var && diff --git a/lldb/source/Initialization/SystemLifetimeManager.cpp b/lldb/source/Initialization/SystemLifetimeManager.cpp index b07fe71affec7..0df01b3c20a59 100644 --- a/lldb/source/Initialization/SystemLifetimeManager.cpp +++ b/lldb/source/Initialization/SystemLifetimeManager.cpp @@ -32,10 +32,8 @@ llvm::Error SystemLifetimeManager::Initialize( m_initialized = true; m_initializer = std::move(initializer); - if (auto e = m_initializer->Initialize()) + if (auto e = m_initializer->Initialize(plugin_callback)) return e; - - InitializeDebugger(plugin_callback); } return llvm::Error::success(); @@ -45,7 +43,6 @@ void SystemLifetimeManager::Terminate() { std::lock_guard<std::recursive_mutex> guard(m_mutex); if (m_initialized) { - TerminateDebugger(); m_initializer->Terminate(); m_initializer.reset(); diff --git a/lldb/tools/lldb-server/SystemInitializerLLGS.cpp b/lldb/tools/lldb-server/SystemInitializerLLGS.cpp index 5b280d6cf5280..0e46c4b4073ef 100644 --- a/lldb/tools/lldb-server/SystemInitializerLLGS.cpp +++ b/lldb/tools/lldb-server/SystemInitializerLLGS.cpp @@ -56,8 +56,9 @@ using HostObjectFile = ObjectFileELF; using namespace lldb_private; -llvm::Error SystemInitializerLLGS::Initialize() { - if (auto e = SystemInitializerCommon::Initialize()) +llvm::Error +SystemInitializerLLGS::Initialize(LoadPluginCallbackType plugin_callback) { + if (auto e = SystemInitializerCommon::Initialize(plugin_callback)) return e; HostObjectFile::Initialize(); diff --git a/lldb/tools/lldb-server/SystemInitializerLLGS.h b/lldb/tools/lldb-server/SystemInitializerLLGS.h index 4469a8ba5f60a..e529e7f32cc80 100644 --- a/lldb/tools/lldb-server/SystemInitializerLLGS.h +++ b/lldb/tools/lldb-server/SystemInitializerLLGS.h @@ -16,7 +16,8 @@ class SystemInitializerLLGS : public lldb_private::SystemInitializerCommon { public: SystemInitializerLLGS() : SystemInitializerCommon(nullptr) {} - llvm::Error Initialize() override; + llvm::Error + Initialize(lldb_private::LoadPluginCallbackType plugin_callback) override; void Terminate() override; }; diff --git a/lldb/tools/lldb-test/SystemInitializerTest.cpp b/lldb/tools/lldb-test/SystemInitializerTest.cpp index 2b6e0f26bb491..b655bd49d8526 100644 --- a/lldb/tools/lldb-test/SystemInitializerTest.cpp +++ b/lldb/tools/lldb-test/SystemInitializerTest.cpp @@ -26,8 +26,9 @@ SystemInitializerTest::SystemInitializerTest() : SystemInitializerCommon(nullptr) {} SystemInitializerTest::~SystemInitializerTest() = default; -llvm::Error SystemInitializerTest::Initialize() { - if (auto e = SystemInitializerCommon::Initialize()) +llvm::Error +SystemInitializerTest::Initialize(LoadPluginCallbackType plugin_callback) { + if (auto e = SystemInitializerCommon::Initialize(plugin_callback)) return e; // Initialize LLVM and Clang @@ -51,10 +52,14 @@ llvm::Error SystemInitializerTest::Initialize() { // Settings must be initialized AFTER PluginManager::Initialize is called. Debugger::SettingsInitialize(); + Debugger::Initialize(plugin_callback); + return llvm::Error::success(); } void SystemInitializerTest::Terminate() { + Debugger::Terminate(); + Debugger::SettingsTerminate(); // Terminate and unload and loaded system or user LLDB plug-ins diff --git a/lldb/tools/lldb-test/SystemInitializerTest.h b/lldb/tools/lldb-test/SystemInitializerTest.h index a9f2111e688fb..a4313c0f158d2 100644 --- a/lldb/tools/lldb-test/SystemInitializerTest.h +++ b/lldb/tools/lldb-test/SystemInitializerTest.h @@ -23,7 +23,7 @@ class SystemInitializerTest : public SystemInitializerCommon { SystemInitializerTest(); ~SystemInitializerTest() override; - llvm::Error Initialize() override; + llvm::Error Initialize(LoadPluginCallbackType plugin_callback) override; void Terminate() override; }; diff --git a/lldb/tools/lldb-test/lldb-test.cpp b/lldb/tools/lldb-test/lldb-test.cpp index 81ac0b8898d6e..1960240dc4151 100644 --- a/lldb/tools/lldb-test/lldb-test.cpp +++ b/lldb/tools/lldb-test/lldb-test.cpp @@ -17,7 +17,7 @@ #include "lldb/Core/Module.h" #include "lldb/Core/Section.h" #include "lldb/Expression/IRMemoryMap.h" -#include "lldb/Initialization/SystemLifetimeManagerDbg.h" +#include "lldb/Initialization/SystemLifetimeManager.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Interpreter/CommandReturnObject.h" #include "lldb/Symbol/CompileUnit.h" @@ -1245,7 +1245,7 @@ int main(int argc, const char *argv[]) { cl::ParseCommandLineOptions(argc, argv, "LLDB Testing Utility\n"); - SystemLifetimeManagerDbg DebuggerLifetime; + SystemLifetimeManager DebuggerLifetime; if (auto e = DebuggerLifetime.Initialize( std::make_unique<SystemInitializerTest>(), nullptr)) { WithColor::error() << "initialization failed: " << toString(std::move(e)) >From dd9f8d6d742cdfd4ca1faf6e41ec5eb7344957a7 Mon Sep 17 00:00:00 2001 From: Dmitry Vasilyev <dvassil...@accesssoftek.com> Date: Mon, 7 Apr 2025 18:14:32 +0400 Subject: [PATCH 3/3] Moved LoadPlugin lambda to SystemInitializerFull. --- lldb/include/lldb/API/SBDebugger.h | 2 + .../lldb/Initialization/SystemInitializer.h | 3 +- .../Initialization/SystemInitializerCommon.h | 2 +- .../Initialization/SystemLifetimeManager.h | 3 +- lldb/source/API/SBDebugger.cpp | 41 +--------------- lldb/source/API/SystemInitializerFull.cpp | 47 +++++++++++++++++-- lldb/source/API/SystemInitializerFull.h | 2 +- .../SystemInitializerCommon.cpp | 3 +- .../Initialization/SystemLifetimeManager.cpp | 5 +- .../lldb-server/SystemInitializerLLGS.cpp | 5 +- .../tools/lldb-server/SystemInitializerLLGS.h | 3 +- lldb/tools/lldb-server/lldb-server.cpp | 2 +- .../tools/lldb-test/SystemInitializerTest.cpp | 7 ++- lldb/tools/lldb-test/SystemInitializerTest.h | 2 +- lldb/tools/lldb-test/lldb-test.cpp | 2 +- 15 files changed, 62 insertions(+), 67 deletions(-) diff --git a/lldb/include/lldb/API/SBDebugger.h b/lldb/include/lldb/API/SBDebugger.h index e0819f1684f8b..3ece2a2e3a9f2 100644 --- a/lldb/include/lldb/API/SBDebugger.h +++ b/lldb/include/lldb/API/SBDebugger.h @@ -16,6 +16,7 @@ namespace lldb_private { class CommandPluginInterfaceImplementation; +class SystemInitializerFull; namespace python { class SWIGBridge; } @@ -508,6 +509,7 @@ class LLDB_API SBDebugger { protected: friend class lldb_private::CommandPluginInterfaceImplementation; friend class lldb_private::python::SWIGBridge; + friend class lldb_private::SystemInitializerFull; SBDebugger(const lldb::DebuggerSP &debugger_sp); diff --git a/lldb/include/lldb/Initialization/SystemInitializer.h b/lldb/include/lldb/Initialization/SystemInitializer.h index a504042e547c6..4426bfb224e37 100644 --- a/lldb/include/lldb/Initialization/SystemInitializer.h +++ b/lldb/include/lldb/Initialization/SystemInitializer.h @@ -9,7 +9,6 @@ #ifndef LLDB_INITIALIZATION_SYSTEMINITIALIZER_H #define LLDB_INITIALIZATION_SYSTEMINITIALIZER_H -#include "lldb/lldb-private-types.h" #include "llvm/Support/Error.h" #include <string> @@ -21,7 +20,7 @@ class SystemInitializer { SystemInitializer(); virtual ~SystemInitializer(); - virtual llvm::Error Initialize(LoadPluginCallbackType plugin_callback) = 0; + virtual llvm::Error Initialize() = 0; virtual void Terminate() = 0; }; } diff --git a/lldb/include/lldb/Initialization/SystemInitializerCommon.h b/lldb/include/lldb/Initialization/SystemInitializerCommon.h index 83ea8a3958d08..d918b1125a570 100644 --- a/lldb/include/lldb/Initialization/SystemInitializerCommon.h +++ b/lldb/include/lldb/Initialization/SystemInitializerCommon.h @@ -26,7 +26,7 @@ class SystemInitializerCommon : public SystemInitializer { SystemInitializerCommon(HostInfo::SharedLibraryDirectoryHelper *helper); ~SystemInitializerCommon() override; - llvm::Error Initialize(LoadPluginCallbackType plugin_callback) override; + llvm::Error Initialize() override; void Terminate() override; private: diff --git a/lldb/include/lldb/Initialization/SystemLifetimeManager.h b/lldb/include/lldb/Initialization/SystemLifetimeManager.h index 06328e60133fe..1b891010f5d8d 100644 --- a/lldb/include/lldb/Initialization/SystemLifetimeManager.h +++ b/lldb/include/lldb/Initialization/SystemLifetimeManager.h @@ -23,8 +23,7 @@ class SystemLifetimeManager { SystemLifetimeManager(); ~SystemLifetimeManager(); - llvm::Error Initialize(std::unique_ptr<SystemInitializer> initializer, - LoadPluginCallbackType plugin_callback); + llvm::Error Initialize(std::unique_ptr<SystemInitializer> initializer); void Terminate(); private: diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp index e646b09e05852..2cfcdc78c8111 100644 --- a/lldb/source/API/SBDebugger.cpp +++ b/lldb/source/API/SBDebugger.cpp @@ -179,48 +179,9 @@ void SBDebugger::Initialize() { lldb::SBError SBDebugger::InitializeWithErrorHandling() { LLDB_INSTRUMENT(); - auto LoadPlugin = [](const lldb::DebuggerSP &debugger_sp, - const FileSpec &spec, - Status &error) -> llvm::sys::DynamicLibrary { - llvm::sys::DynamicLibrary dynlib = - llvm::sys::DynamicLibrary::getPermanentLibrary(spec.GetPath().c_str()); - if (dynlib.isValid()) { - typedef bool (*LLDBCommandPluginInit)(lldb::SBDebugger debugger); - - lldb::SBDebugger debugger_sb(debugger_sp); - // This calls the bool lldb::PluginInitialize(lldb::SBDebugger debugger) - // function. - // TODO: mangle this differently for your system - on OSX, the first - // underscore needs to be removed and the second one stays - LLDBCommandPluginInit init_func = - (LLDBCommandPluginInit)(uintptr_t)dynlib.getAddressOfSymbol( - "_ZN4lldb16PluginInitializeENS_10SBDebuggerE"); - if (init_func) { - if (init_func(debugger_sb)) - return dynlib; - else - error = Status::FromErrorString( - "plug-in refused to load " - "(lldb::PluginInitialize(lldb::SBDebugger) " - "returned false)"); - } else { - error = Status::FromErrorString( - "plug-in is missing the required initialization: " - "lldb::PluginInitialize(lldb::SBDebugger)"); - } - } else { - if (FileSystem::Instance().Exists(spec)) - error = Status::FromErrorString( - "this file does not represent a loadable dylib"); - else - error = Status::FromErrorString("no such file"); - } - return llvm::sys::DynamicLibrary(); - }; - SBError error; if (auto e = g_debugger_lifetime->Initialize( - std::make_unique<SystemInitializerFull>(), LoadPlugin)) { + std::make_unique<SystemInitializerFull>())) { error.SetError(Status::FromError(std::move(e))); } return error; diff --git a/lldb/source/API/SystemInitializerFull.cpp b/lldb/source/API/SystemInitializerFull.cpp index ef45261e0140d..4cf7dd149e023 100644 --- a/lldb/source/API/SystemInitializerFull.cpp +++ b/lldb/source/API/SystemInitializerFull.cpp @@ -8,6 +8,7 @@ #include "SystemInitializerFull.h" #include "lldb/API/SBCommandInterpreter.h" +#include "lldb/API/SBDebugger.h" #include "lldb/Core/Debugger.h" #include "lldb/Core/PluginManager.h" #include "lldb/Core/Progress.h" @@ -49,9 +50,8 @@ SystemInitializerFull::SystemInitializerFull() : SystemInitializerCommon(g_shlib_dir_helper) {} SystemInitializerFull::~SystemInitializerFull() = default; -llvm::Error -SystemInitializerFull::Initialize(LoadPluginCallbackType plugin_callback) { - llvm::Error error = SystemInitializerCommon::Initialize(plugin_callback); +llvm::Error SystemInitializerFull::Initialize() { + llvm::Error error = SystemInitializerCommon::Initialize(); if (error) return error; @@ -87,7 +87,46 @@ SystemInitializerFull::Initialize(LoadPluginCallbackType plugin_callback) { LLDB_LOG(GetLog(SystemLog::System), "{0}", GetVersion()); - Debugger::Initialize(plugin_callback); + auto LoadPlugin = [](const lldb::DebuggerSP &debugger_sp, + const FileSpec &spec, + Status &error) -> llvm::sys::DynamicLibrary { + llvm::sys::DynamicLibrary dynlib = + llvm::sys::DynamicLibrary::getPermanentLibrary(spec.GetPath().c_str()); + if (dynlib.isValid()) { + typedef bool (*LLDBCommandPluginInit)(lldb::SBDebugger debugger); + + lldb::SBDebugger debugger_sb(debugger_sp); + // This calls the bool lldb::PluginInitialize(lldb::SBDebugger debugger) + // function. + // TODO: mangle this differently for your system - on OSX, the first + // underscore needs to be removed and the second one stays + LLDBCommandPluginInit init_func = + (LLDBCommandPluginInit)(uintptr_t)dynlib.getAddressOfSymbol( + "_ZN4lldb16PluginInitializeENS_10SBDebuggerE"); + if (init_func) { + if (init_func(debugger_sb)) + return dynlib; + else + error = Status::FromErrorString( + "plug-in refused to load " + "(lldb::PluginInitialize(lldb::SBDebugger) " + "returned false)"); + } else { + error = Status::FromErrorString( + "plug-in is missing the required initialization: " + "lldb::PluginInitialize(lldb::SBDebugger)"); + } + } else { + if (FileSystem::Instance().Exists(spec)) + error = Status::FromErrorString( + "this file does not represent a loadable dylib"); + else + error = Status::FromErrorString("no such file"); + } + return llvm::sys::DynamicLibrary(); + }; + + Debugger::Initialize(LoadPlugin); return llvm::Error::success(); } diff --git a/lldb/source/API/SystemInitializerFull.h b/lldb/source/API/SystemInitializerFull.h index 06c2e5ba86181..7cab6cb97533d 100644 --- a/lldb/source/API/SystemInitializerFull.h +++ b/lldb/source/API/SystemInitializerFull.h @@ -23,7 +23,7 @@ class SystemInitializerFull : public SystemInitializerCommon { SystemInitializerFull(); ~SystemInitializerFull() override; - llvm::Error Initialize(LoadPluginCallbackType plugin_callback) override; + llvm::Error Initialize() override; void Terminate() override; }; diff --git a/lldb/source/Initialization/SystemInitializerCommon.cpp b/lldb/source/Initialization/SystemInitializerCommon.cpp index 6341ca257dd6e..1a172a95aa147 100644 --- a/lldb/source/Initialization/SystemInitializerCommon.cpp +++ b/lldb/source/Initialization/SystemInitializerCommon.cpp @@ -41,8 +41,7 @@ SystemInitializerCommon::SystemInitializerCommon( SystemInitializerCommon::~SystemInitializerCommon() = default; -llvm::Error -SystemInitializerCommon::Initialize(LoadPluginCallbackType plugin_callback) { +llvm::Error SystemInitializerCommon::Initialize() { #if defined(_WIN32) const char *disable_crash_dialog_var = getenv("LLDB_DISABLE_CRASH_DIALOG"); if (disable_crash_dialog_var && diff --git a/lldb/source/Initialization/SystemLifetimeManager.cpp b/lldb/source/Initialization/SystemLifetimeManager.cpp index 0df01b3c20a59..43ceecce0cdb5 100644 --- a/lldb/source/Initialization/SystemLifetimeManager.cpp +++ b/lldb/source/Initialization/SystemLifetimeManager.cpp @@ -22,8 +22,7 @@ SystemLifetimeManager::~SystemLifetimeManager() { } llvm::Error SystemLifetimeManager::Initialize( - std::unique_ptr<SystemInitializer> initializer, - LoadPluginCallbackType plugin_callback) { + std::unique_ptr<SystemInitializer> initializer) { std::lock_guard<std::recursive_mutex> guard(m_mutex); if (!m_initialized) { assert(!m_initializer && "Attempting to call " @@ -32,7 +31,7 @@ llvm::Error SystemLifetimeManager::Initialize( m_initialized = true; m_initializer = std::move(initializer); - if (auto e = m_initializer->Initialize(plugin_callback)) + if (auto e = m_initializer->Initialize()) return e; } diff --git a/lldb/tools/lldb-server/SystemInitializerLLGS.cpp b/lldb/tools/lldb-server/SystemInitializerLLGS.cpp index 0e46c4b4073ef..5b280d6cf5280 100644 --- a/lldb/tools/lldb-server/SystemInitializerLLGS.cpp +++ b/lldb/tools/lldb-server/SystemInitializerLLGS.cpp @@ -56,9 +56,8 @@ using HostObjectFile = ObjectFileELF; using namespace lldb_private; -llvm::Error -SystemInitializerLLGS::Initialize(LoadPluginCallbackType plugin_callback) { - if (auto e = SystemInitializerCommon::Initialize(plugin_callback)) +llvm::Error SystemInitializerLLGS::Initialize() { + if (auto e = SystemInitializerCommon::Initialize()) return e; HostObjectFile::Initialize(); diff --git a/lldb/tools/lldb-server/SystemInitializerLLGS.h b/lldb/tools/lldb-server/SystemInitializerLLGS.h index e529e7f32cc80..4469a8ba5f60a 100644 --- a/lldb/tools/lldb-server/SystemInitializerLLGS.h +++ b/lldb/tools/lldb-server/SystemInitializerLLGS.h @@ -16,8 +16,7 @@ class SystemInitializerLLGS : public lldb_private::SystemInitializerCommon { public: SystemInitializerLLGS() : SystemInitializerCommon(nullptr) {} - llvm::Error - Initialize(lldb_private::LoadPluginCallbackType plugin_callback) override; + llvm::Error Initialize() override; void Terminate() override; }; diff --git a/lldb/tools/lldb-server/lldb-server.cpp b/lldb/tools/lldb-server/lldb-server.cpp index e2e6bfcd8645c..744f8ceb854fb 100644 --- a/lldb/tools/lldb-server/lldb-server.cpp +++ b/lldb/tools/lldb-server/lldb-server.cpp @@ -41,7 +41,7 @@ int main_platform(int argc, char *argv[]); namespace llgs { static void initialize() { if (auto e = g_debugger_lifetime->Initialize( - std::make_unique<SystemInitializerLLGS>(), nullptr)) + std::make_unique<SystemInitializerLLGS>())) llvm::consumeError(std::move(e)); } diff --git a/lldb/tools/lldb-test/SystemInitializerTest.cpp b/lldb/tools/lldb-test/SystemInitializerTest.cpp index b655bd49d8526..3478e5d8df994 100644 --- a/lldb/tools/lldb-test/SystemInitializerTest.cpp +++ b/lldb/tools/lldb-test/SystemInitializerTest.cpp @@ -26,9 +26,8 @@ SystemInitializerTest::SystemInitializerTest() : SystemInitializerCommon(nullptr) {} SystemInitializerTest::~SystemInitializerTest() = default; -llvm::Error -SystemInitializerTest::Initialize(LoadPluginCallbackType plugin_callback) { - if (auto e = SystemInitializerCommon::Initialize(plugin_callback)) +llvm::Error SystemInitializerTest::Initialize() { + if (auto e = SystemInitializerCommon::Initialize()) return e; // Initialize LLVM and Clang @@ -52,7 +51,7 @@ SystemInitializerTest::Initialize(LoadPluginCallbackType plugin_callback) { // Settings must be initialized AFTER PluginManager::Initialize is called. Debugger::SettingsInitialize(); - Debugger::Initialize(plugin_callback); + Debugger::Initialize(nullptr); return llvm::Error::success(); } diff --git a/lldb/tools/lldb-test/SystemInitializerTest.h b/lldb/tools/lldb-test/SystemInitializerTest.h index a4313c0f158d2..a9f2111e688fb 100644 --- a/lldb/tools/lldb-test/SystemInitializerTest.h +++ b/lldb/tools/lldb-test/SystemInitializerTest.h @@ -23,7 +23,7 @@ class SystemInitializerTest : public SystemInitializerCommon { SystemInitializerTest(); ~SystemInitializerTest() override; - llvm::Error Initialize(LoadPluginCallbackType plugin_callback) override; + llvm::Error Initialize() override; void Terminate() override; }; diff --git a/lldb/tools/lldb-test/lldb-test.cpp b/lldb/tools/lldb-test/lldb-test.cpp index 1960240dc4151..6743ce543dc66 100644 --- a/lldb/tools/lldb-test/lldb-test.cpp +++ b/lldb/tools/lldb-test/lldb-test.cpp @@ -1247,7 +1247,7 @@ int main(int argc, const char *argv[]) { SystemLifetimeManager DebuggerLifetime; if (auto e = DebuggerLifetime.Initialize( - std::make_unique<SystemInitializerTest>(), nullptr)) { + std::make_unique<SystemInitializerTest>())) { WithColor::error() << "initialization failed: " << toString(std::move(e)) << '\n'; return 1; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits