|  | //===-- 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(); | 
|  | } |