This PR changes the way we set the shlib directory helper. Instead of setting it while initializing the Host plugin, we register it when initializing the Python plugin. The motivation is that the current approach is incompatible with the dynamically linked script interpreters, as they will not have been loaded at the time the Host plugin is initialized. The downside of the new approach is that we set the helper after having initialized the Host plugin, which theoretically introduces a small window where someone could query the helper before it has been set. Fortunately the window is pretty small and limited to when we're initializing plugins, but it's less "pure" than what we had previously. That said, I think it balances out with removing the plugin include.
77 lines
2.3 KiB
C++
77 lines
2.3 KiB
C++
//===-- SystemInitializerTest.cpp -------------------------------*- 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
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "SystemInitializerTest.h"
|
|
#include "lldb/Core/Debugger.h"
|
|
#include "lldb/Core/PluginManager.h"
|
|
#include "lldb/Host/Host.h"
|
|
#include "lldb/Initialization/SystemInitializerCommon.h"
|
|
#include "lldb/Interpreter/CommandInterpreter.h"
|
|
#include "lldb/Utility/Timer.h"
|
|
#include "llvm/Support/TargetSelect.h"
|
|
|
|
#include <string>
|
|
|
|
#define LLDB_PLUGIN(p) LLDB_PLUGIN_DECLARE(p)
|
|
#include "Plugins/Plugins.def"
|
|
|
|
using namespace lldb_private;
|
|
|
|
SystemInitializerTest::SystemInitializerTest() : SystemInitializerCommon() {}
|
|
SystemInitializerTest::~SystemInitializerTest() = default;
|
|
|
|
llvm::Error SystemInitializerTest::Initialize() {
|
|
if (auto e = SystemInitializerCommon::Initialize())
|
|
return e;
|
|
|
|
// Initialize LLVM and Clang
|
|
llvm::InitializeAllTargets();
|
|
llvm::InitializeAllAsmPrinters();
|
|
llvm::InitializeAllTargetMCs();
|
|
llvm::InitializeAllDisassemblers();
|
|
|
|
#define LLDB_SCRIPT_PLUGIN(p)
|
|
#define LLDB_PLUGIN(p) LLDB_PLUGIN_INITIALIZE(p);
|
|
#include "Plugins/Plugins.def"
|
|
|
|
// We ignored all the script interpreter earlier, so initialize
|
|
// ScriptInterpreterNone explicitly.
|
|
LLDB_PLUGIN_INITIALIZE(ScriptInterpreterNone);
|
|
|
|
// Scan for any system or user LLDB plug-ins
|
|
PluginManager::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(nullptr);
|
|
|
|
return llvm::Error::success();
|
|
}
|
|
|
|
void SystemInitializerTest::Terminate() {
|
|
Debugger::Terminate();
|
|
|
|
Debugger::SettingsTerminate();
|
|
|
|
// Terminate and unload and loaded system or user LLDB plug-ins
|
|
PluginManager::Terminate();
|
|
|
|
#define LLDB_SCRIPT_PLUGIN(p)
|
|
#define LLDB_PLUGIN(p) LLDB_PLUGIN_TERMINATE(p);
|
|
#include "Plugins/Plugins.def"
|
|
|
|
// We ignored all the script interpreter earlier, so terminate
|
|
// ScriptInterpreterNone explicitly.
|
|
LLDB_PLUGIN_INITIALIZE(ScriptInterpreterNone);
|
|
|
|
// Now shutdown the common parts, in reverse order.
|
|
SystemInitializerCommon::Terminate();
|
|
}
|