Author: Jonas Devlieghere Date: 2026-02-19T18:48:31-08:00 New Revision: 54d54992718552114751020b2c43d5622bccb49b
URL: https://github.com/llvm/llvm-project/commit/54d54992718552114751020b2c43d5622bccb49b DIFF: https://github.com/llvm/llvm-project/commit/54d54992718552114751020b2c43d5622bccb49b.diff LOG: [lldb] Use C linkage for plugin initialization & termination (#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`. Added: Modified: lldb/include/lldb/Core/PluginManager.h lldb/source/Plugins/Highlighter/Clang/ClangHighlighter.cpp lldb/source/Plugins/Highlighter/Default/DefaultHighlighter.cpp lldb/source/Plugins/Highlighter/TreeSitter/Rust/RustTreeSitterHighlighter.cpp lldb/source/Plugins/Highlighter/TreeSitter/Swift/SwiftTreeSitterHighlighter.cpp lldb/source/Plugins/Process/scripted/ScriptedProcess.cpp lldb/source/Plugins/SyntheticFrameProvider/ScriptedFrameProvider/ScriptedFrameProvider.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Core/PluginManager.h b/lldb/include/lldb/Core/PluginManager.h index 08a8857d06914..26680bf95fae6 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) \ - namespace lldb_private { \ - void lldb_initialize_##PluginName() { ClassName::Initialize(); } \ + extern "C" { \ + bool lldb_initialize_##PluginName() { \ + ClassName::Initialize(); \ + return true; \ + } \ void lldb_terminate_##PluginName() { ClassName::Terminate(); } \ } @@ -39,8 +44,8 @@ // FIXME: Generate me with CMake #define LLDB_PLUGIN_DECLARE(PluginName) \ - namespace lldb_private { \ - extern void lldb_initialize_##PluginName(); \ + extern "C" { \ + extern bool lldb_initialize_##PluginName(); \ extern void lldb_terminate_##PluginName(); \ } @@ -492,8 +497,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
