https://github.com/JDevlieghere created 
https://github.com/llvm/llvm-project/pull/182406

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.

For example, with this patch, 
`__ZN12lldb_private39lldb_initialize_ScriptInterpreterPythonEv` becomes 
`_lldb_initialize_ScriptInterpreterPython`.

>From ef9a1763a43f672a8afa64f316abb6763712d426 Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <[email protected]>
Date: Thu, 19 Feb 2026 16:09:15 -0800
Subject: [PATCH] [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

_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to