aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp')
-rw-r--r--contrib/llvm-project/lldb/source/Initialization/SystemInitializerCommon.cpp104
1 files changed, 104 insertions, 0 deletions
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();
+}