[Lldb-commits] [lldb] [lldb] Use C linkage for plugin initialization & termination (PR #182406)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Thu Feb 19 16:54:50 PST 2026
https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/182406
>From ef9a1763a43f672a8afa64f316abb6763712d426 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Thu, 19 Feb 2026 16:09:15 -0800
Subject: [PATCH 1/2] [lldb] Use C linkage for plugin initialization &
termination
Use C linkage for plugin initialization & termination. I'm working on
adding support for using the existing plugin infrastructure but with
dynamic libraries. Using C linkage makes it easier to dlsym the
initialize and terminate methods.
---
lldb/include/lldb/Core/PluginManager.h | 7 +++----
.../Plugins/Highlighter/Clang/ClangHighlighter.cpp | 4 ++--
.../Highlighter/Default/DefaultHighlighter.cpp | 4 ++--
.../TreeSitter/Rust/RustTreeSitterHighlighter.cpp | 4 ++--
.../TreeSitter/Swift/SwiftTreeSitterHighlighter.cpp | 4 ++--
.../Plugins/Process/scripted/ScriptedProcess.cpp | 4 ++--
.../ScriptedFrameProvider/ScriptedFrameProvider.cpp | 12 ++----------
7 files changed, 15 insertions(+), 24 deletions(-)
diff --git a/lldb/include/lldb/Core/PluginManager.h b/lldb/include/lldb/Core/PluginManager.h
index 4d116f52460ff..2d9ddd03e6807 100644
--- a/lldb/include/lldb/Core/PluginManager.h
+++ b/lldb/include/lldb/Core/PluginManager.h
@@ -29,7 +29,7 @@
#include <vector>
#define LLDB_PLUGIN_DEFINE_ADV(ClassName, PluginName) \
- namespace lldb_private { \
+ extern "C" { \
void lldb_initialize_##PluginName() { ClassName::Initialize(); } \
void lldb_terminate_##PluginName() { ClassName::Terminate(); } \
}
@@ -39,7 +39,7 @@
// FIXME: Generate me with CMake
#define LLDB_PLUGIN_DECLARE(PluginName) \
- namespace lldb_private { \
+ extern "C" { \
extern void lldb_initialize_##PluginName(); \
extern void lldb_terminate_##PluginName(); \
}
@@ -487,8 +487,7 @@ class PluginManager {
llvm::StringRef schema,
DebuggerInitializeCallback debugger_init_callback);
- static bool
- UnregisterPlugin(TraceCreateInstanceFromBundle create_callback);
+ static bool UnregisterPlugin(TraceCreateInstanceFromBundle create_callback);
static TraceCreateInstanceFromBundle
GetTraceCreateCallback(llvm::StringRef plugin_name);
diff --git a/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp b/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp
index 7480d9d78866b..3889a0483d85a 100644
--- a/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp
+++ b/lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp
@@ -21,10 +21,10 @@
#include "llvm/Support/MemoryBuffer.h"
#include <optional>
-LLDB_PLUGIN_DEFINE_ADV(ClangHighlighter, HighlighterClang)
-
using namespace lldb_private;
+LLDB_PLUGIN_DEFINE_ADV(ClangHighlighter, HighlighterClang)
+
bool ClangHighlighter::isKeyword(llvm::StringRef token) const {
return keywords.contains(token);
}
diff --git a/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp b/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp
index baef8f6938e94..e0942be573879 100644
--- a/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp
+++ b/lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp
@@ -8,10 +8,10 @@
#include "DefaultHighlighter.h"
-LLDB_PLUGIN_DEFINE_ADV(DefaultHighlighter, HighlighterDefault)
-
using namespace lldb_private;
+LLDB_PLUGIN_DEFINE_ADV(DefaultHighlighter, HighlighterDefault)
+
void DefaultHighlighter::Highlight(const HighlightStyle &options,
llvm::StringRef line,
std::optional<size_t> cursor_pos,
diff --git a/lldb/source/Plugins/Highlighter/TreeSitter/Rust/RustTreeSitterHighlighter.cpp b/lldb/source/Plugins/Highlighter/TreeSitter/Rust/RustTreeSitterHighlighter.cpp
index 02e7601a926d2..7468be4f7deeb 100644
--- a/lldb/source/Plugins/Highlighter/TreeSitter/Rust/RustTreeSitterHighlighter.cpp
+++ b/lldb/source/Plugins/Highlighter/TreeSitter/Rust/RustTreeSitterHighlighter.cpp
@@ -10,13 +10,13 @@
#include "HighlightQuery.h"
#include "lldb/Target/Language.h"
-LLDB_PLUGIN_DEFINE_ADV(RustTreeSitterHighlighter, HighlighterTreeSitterRust)
+using namespace lldb_private;
extern "C" {
const TSLanguage *tree_sitter_rust();
}
-using namespace lldb_private;
+LLDB_PLUGIN_DEFINE_ADV(RustTreeSitterHighlighter, HighlighterTreeSitterRust)
const TSLanguage *RustTreeSitterHighlighter::GetLanguage() const {
return tree_sitter_rust();
diff --git a/lldb/source/Plugins/Highlighter/TreeSitter/Swift/SwiftTreeSitterHighlighter.cpp b/lldb/source/Plugins/Highlighter/TreeSitter/Swift/SwiftTreeSitterHighlighter.cpp
index 8fd7fffff2da5..5c239574cab19 100644
--- a/lldb/source/Plugins/Highlighter/TreeSitter/Swift/SwiftTreeSitterHighlighter.cpp
+++ b/lldb/source/Plugins/Highlighter/TreeSitter/Swift/SwiftTreeSitterHighlighter.cpp
@@ -10,14 +10,14 @@
#include "HighlightQuery.h"
#include "lldb/Target/Language.h"
+using namespace lldb_private;
+
LLDB_PLUGIN_DEFINE_ADV(SwiftTreeSitterHighlighter, HighlighterTreeSitterSwift)
extern "C" {
const TSLanguage *tree_sitter_swift();
}
-using namespace lldb_private;
-
const TSLanguage *SwiftTreeSitterHighlighter::GetLanguage() const {
return tree_sitter_swift();
}
diff --git a/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp b/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp
index b359aad199161..f9b3f012a3c43 100644
--- a/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp
+++ b/lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp
@@ -29,11 +29,11 @@
#include <mutex>
-LLDB_PLUGIN_DEFINE(ScriptedProcess)
-
using namespace lldb;
using namespace lldb_private;
+LLDB_PLUGIN_DEFINE(ScriptedProcess)
+
llvm::StringRef ScriptedProcess::GetPluginDescriptionStatic() {
return "Scripted Process plug-in.";
}
diff --git a/lldb/source/Plugins/SyntheticFrameProvider/ScriptedFrameProvider/ScriptedFrameProvider.cpp b/lldb/source/Plugins/SyntheticFrameProvider/ScriptedFrameProvider/ScriptedFrameProvider.cpp
index 4aad8f2cb628f..5c49aaea4e5cc 100644
--- a/lldb/source/Plugins/SyntheticFrameProvider/ScriptedFrameProvider/ScriptedFrameProvider.cpp
+++ b/lldb/source/Plugins/SyntheticFrameProvider/ScriptedFrameProvider/ScriptedFrameProvider.cpp
@@ -24,6 +24,8 @@
using namespace lldb;
using namespace lldb_private;
+LLDB_PLUGIN_DEFINE(ScriptedFrameProvider)
+
void ScriptedFrameProvider::Initialize() {
PluginManager::RegisterPlugin(GetPluginNameStatic(),
"Provides synthetic frames via scripting",
@@ -216,13 +218,3 @@ ScriptedFrameProvider::GetFrameAtIndex(uint32_t idx) {
return synth_frame_sp;
}
-
-namespace lldb_private {
-void lldb_initialize_ScriptedFrameProvider() {
- ScriptedFrameProvider::Initialize();
-}
-
-void lldb_terminate_ScriptedFrameProvider() {
- ScriptedFrameProvider::Terminate();
-}
-} // namespace lldb_private
>From 677e620ec2aeef27f2641cbdfc2aac0ddbdc8922 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Thu, 19 Feb 2026 16:54:34 -0800
Subject: [PATCH 2/2] Match the PluginInitCallback and PluginTermCallback
signature
---
lldb/include/lldb/Core/PluginManager.h | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/lldb/include/lldb/Core/PluginManager.h b/lldb/include/lldb/Core/PluginManager.h
index 2d9ddd03e6807..4718b4bf9dd80 100644
--- a/lldb/include/lldb/Core/PluginManager.h
+++ b/lldb/include/lldb/Core/PluginManager.h
@@ -28,9 +28,14 @@
#include <functional>
#include <vector>
+// Match the PluginInitCallback and PluginTermCallback signature. The generated
+// initializer always succeeds.
#define LLDB_PLUGIN_DEFINE_ADV(ClassName, PluginName) \
extern "C" { \
- void lldb_initialize_##PluginName() { ClassName::Initialize(); } \
+ bool lldb_initialize_##PluginName() { \
+ ClassName::Initialize(); \
+ return true; \
+ } \
void lldb_terminate_##PluginName() { ClassName::Terminate(); } \
}
@@ -40,7 +45,7 @@
// FIXME: Generate me with CMake
#define LLDB_PLUGIN_DECLARE(PluginName) \
extern "C" { \
- extern void lldb_initialize_##PluginName(); \
+ extern bool lldb_initialize_##PluginName(); \
extern void lldb_terminate_##PluginName(); \
}
More information about the lldb-commits
mailing list