aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/lldb/source/Initialization
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/lldb/source/Initialization')
-rw-r--r--contrib/llvm-project/lldb/source/Initialization/SystemInitializer.cpp15
-rw-r--r--contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp104
-rw-r--r--contrib/llvm-project/lldb/source/Initialization/SystemLifetimeManager.cpp55
3 files changed, 174 insertions, 0 deletions
diff --git a/contrib/llvm-project/lldb/source/Initialization/SystemInitializer.cpp b/contrib/llvm-project/lldb/source/Initialization/SystemInitializer.cpp
new file mode 100644
index 000000000000..823a905ebc4b
--- /dev/null
+++ b/contrib/llvm-project/lldb/source/Initialization/SystemInitializer.cpp
@@ -0,0 +1,15 @@
+//===-- SystemInitializer.cpp ---------------------------------------------===//
+//
+// 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 "lldb/Initialization/SystemInitializer.h"
+
+using namespace lldb_private;
+
+SystemInitializer::SystemInitializer() = default;
+
+SystemInitializer::~SystemInitializer() = default;
diff --git a/contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp b/contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp
new file mode 100644
index 000000000000..1a172a95aa14
--- /dev/null
+++ b/contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp
@@ -0,0 +1,104 @@
+//===-- SystemInitializerCommon.cpp ---------------------------------------===//
+//
+// 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 "lldb/Initialization/SystemInitializerCommon.h"
+
+#include "Plugins/Process/gdb-remote/ProcessGDBRemoteLog.h"
+#include "lldb/Host/FileSystem.h"
+#include "lldb/Host/Host.h"
+#include "lldb/Host/Socket.h"
+#include "lldb/Target/Statistics.h"
+#include "lldb/Utility/Diagnostics.h"
+#include "lldb/Utility/LLDBLog.h"
+#include "lldb/Utility/Timer.h"
+#include "lldb/Version/Version.h"
+
+#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || \
+ defined(__OpenBSD__)
+#include "Plugins/Process/POSIX/ProcessPOSIXLog.h"
+#endif
+
+#if defined(_WIN32)
+#include "Plugins/Process/Windows/Common/ProcessWindowsLog.h"
+#include "lldb/Host/windows/windows.h"
+#include <crtdbg.h>
+#endif
+
+#include "llvm/Support/TargetSelect.h"
+
+#include <string>
+
+using namespace lldb_private;
+
+SystemInitializerCommon::SystemInitializerCommon(
+ HostInfo::SharedLibraryDirectoryHelper *helper)
+ : m_shlib_dir_helper(helper) {}
+
+SystemInitializerCommon::~SystemInitializerCommon() = default;
+
+llvm::Error SystemInitializerCommon::Initialize() {
+#if defined(_WIN32)
+ const char *disable_crash_dialog_var = getenv("LLDB_DISABLE_CRASH_DIALOG");
+ if (disable_crash_dialog_var &&
+ llvm::StringRef(disable_crash_dialog_var).equals_insensitive("true")) {
+ // This will prevent Windows from displaying a dialog box requiring user
+ // interaction when
+ // LLDB crashes. This is mostly useful when automating LLDB, for example
+ // via the test
+ // suite, so that a crash in LLDB does not prevent completion of the test
+ // suite.
+ ::SetErrorMode(GetErrorMode() | SEM_FAILCRITICALERRORS |
+ SEM_NOGPFAULTERRORBOX);
+
+ _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
+ _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
+ _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
+ }
+#endif
+
+ InitializeLldbChannel();
+
+ Diagnostics::Initialize();
+ FileSystem::Initialize();
+ HostInfo::Initialize(m_shlib_dir_helper);
+
+ llvm::Error error = Socket::Initialize();
+ if (error)
+ return error;
+
+ LLDB_SCOPED_TIMER();
+
+ process_gdb_remote::ProcessGDBRemoteLog::Initialize();
+
+#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) || \
+ defined(__OpenBSD__)
+ ProcessPOSIXLog::Initialize();
+#endif
+#if defined(_WIN32)
+ ProcessWindowsLog::Initialize();
+#endif
+
+ return llvm::Error::success();
+}
+
+void SystemInitializerCommon::Terminate() {
+ LLDB_SCOPED_TIMER();
+
+#if defined(_WIN32)
+ ProcessWindowsLog::Terminate();
+#endif
+
+ Socket::Terminate();
+ HostInfo::Terminate();
+ Log::DisableAllLogChannels();
+ FileSystem::Terminate();
+ Diagnostics::Terminate();
+}
diff --git a/contrib/llvm-project/lldb/source/Initialization/SystemLifetimeManager.cpp b/contrib/llvm-project/lldb/source/Initialization/SystemLifetimeManager.cpp
new file mode 100644
index 000000000000..f9de41a67535
--- /dev/null
+++ b/contrib/llvm-project/lldb/source/Initialization/SystemLifetimeManager.cpp
@@ -0,0 +1,55 @@
+//===-- SystemLifetimeManager.cpp -----------------------------------------===//
+//
+// 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 "lldb/Initialization/SystemLifetimeManager.h"
+
+#include "lldb/Core/Debugger.h"
+#include "lldb/Initialization/SystemInitializer.h"
+
+#include <utility>
+
+using namespace lldb_private;
+
+SystemLifetimeManager::SystemLifetimeManager() : m_mutex() {}
+
+SystemLifetimeManager::~SystemLifetimeManager() {
+ assert(!m_initialized &&
+ "SystemLifetimeManager destroyed without calling Terminate!");
+}
+
+llvm::Error SystemLifetimeManager::Initialize(
+ std::unique_ptr<SystemInitializer> initializer,
+ LoadPluginCallbackType plugin_callback) {
+ std::lock_guard<std::recursive_mutex> guard(m_mutex);
+ if (!m_initialized) {
+ assert(!m_initializer && "Attempting to call "
+ "SystemLifetimeManager::Initialize() when it is "
+ "already initialized");
+ m_initialized = true;
+ m_initializer = std::move(initializer);
+
+ if (auto e = m_initializer->Initialize())
+ return e;
+
+ Debugger::Initialize(plugin_callback);
+ }
+
+ return llvm::Error::success();
+}
+
+void SystemLifetimeManager::Terminate() {
+ std::lock_guard<std::recursive_mutex> guard(m_mutex);
+
+ if (m_initialized) {
+ Debugger::Terminate();
+ m_initializer->Terminate();
+
+ m_initializer.reset();
+ m_initialized = false;
+ }
+}