diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2021-02-16 20:13:02 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2021-02-16 20:13:02 +0000 |
| commit | b60736ec1405bb0a8dd40989f67ef4c93da068ab (patch) | |
| tree | 5c43fbb7c9fc45f0f87e0e6795a86267dbd12f9d /lldb/source/API/SystemInitializerFull.cpp | |
| parent | cfca06d7963fa0909f90483b42a6d7d194d01e08 (diff) | |
Diffstat (limited to 'lldb/source/API/SystemInitializerFull.cpp')
| -rw-r--r-- | lldb/source/API/SystemInitializerFull.cpp | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/lldb/source/API/SystemInitializerFull.cpp b/lldb/source/API/SystemInitializerFull.cpp index 7f95e7acf62a..0530f94580b3 100644 --- a/lldb/source/API/SystemInitializerFull.cpp +++ b/lldb/source/API/SystemInitializerFull.cpp @@ -14,6 +14,8 @@ #include "lldb/Host/Host.h" #include "lldb/Initialization/SystemInitializerCommon.h" #include "lldb/Interpreter/CommandInterpreter.h" +#include "lldb/Target/ProcessTrace.h" +#include "lldb/Utility/Reproducer.h" #include "lldb/Utility/Timer.h" #include "llvm/Support/TargetSelect.h" @@ -33,8 +35,16 @@ SystemInitializerFull::SystemInitializerFull() = default; SystemInitializerFull::~SystemInitializerFull() = default; llvm::Error SystemInitializerFull::Initialize() { - if (auto e = SystemInitializerCommon::Initialize()) - return e; + llvm::Error error = SystemInitializerCommon::Initialize(); + if (error) { + // During active replay, the ::Initialize call is replayed like any other + // SB API call and the return value is ignored. Since we can't intercept + // this, we terminate here before the uninitialized debugger inevitably + // crashes. + if (repro::Reproducer::Instance().IsReplaying()) + llvm::report_fatal_error(std::move(error)); + return error; + } // Initialize LLVM and Clang llvm::InitializeAllTargets(); @@ -45,6 +55,9 @@ llvm::Error SystemInitializerFull::Initialize() { #define LLDB_PLUGIN(p) LLDB_PLUGIN_INITIALIZE(p); #include "Plugins/Plugins.def" + // Initialize plug-ins in core LLDB + ProcessTrace::Initialize(); + // Scan for any system or user LLDB plug-ins PluginManager::Initialize(); @@ -56,11 +69,11 @@ llvm::Error SystemInitializerFull::Initialize() { } void SystemInitializerFull::Terminate() { - static Timer::Category func_cat(LLVM_PRETTY_FUNCTION); - Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION); - Debugger::SettingsTerminate(); + // Terminate plug-ins in core LLDB + ProcessTrace::Terminate(); + // Terminate and unload and loaded system or user LLDB plug-ins PluginManager::Terminate(); |
