[Lldb-commits] [lldb] [LLDB][NFC] Remove Debugger dependency in SystemLifetimeManager (PR #134383)
Dmitry Vasilyev via lldb-commits
lldb-commits at lists.llvm.org
Fri Apr 4 09:12:13 PDT 2025
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 <dvassiliev at accesssoftek.com>
Date: Fri, 4 Apr 2025 17:49:07 +0400
Subject: [PATCH 1/2] [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 6364666aac92f5b945ee6dd904b75a07f3dcc199 Mon Sep 17 00:00:00 2001
From: Dmitry Vasilyev <dvassiliev at accesssoftek.com>
Date: Fri, 4 Apr 2025 20:12:00 +0400
Subject: [PATCH 2/2] 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 +-
.../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 +--
13 files changed, 30 insertions(+), 59 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/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..fdd2230edfa00 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
@@ -50,11 +51,15 @@ llvm::Error SystemInitializerTest::Initialize() {
// The process settings need to know about installed plug-ins, so the
// 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))
More information about the lldb-commits
mailing list