1e6e2bb38SZachary Turner //===-- SystemInitializerCommon.cpp -----------------------------*- C++ -*-===// 2e6e2bb38SZachary Turner // 3e6e2bb38SZachary Turner // The LLVM Compiler Infrastructure 4e6e2bb38SZachary Turner // 5e6e2bb38SZachary Turner // This file is distributed under the University of Illinois Open Source 6e6e2bb38SZachary Turner // License. See LICENSE.TXT for details. 7e6e2bb38SZachary Turner // 8e6e2bb38SZachary Turner //===----------------------------------------------------------------------===// 9e6e2bb38SZachary Turner 10e6e2bb38SZachary Turner #include "lldb/Initialization/SystemInitializerCommon.h" 11e6e2bb38SZachary Turner 12d8c338d4STamas Berghammer #include "Plugins/Instruction/ARM/EmulateInstructionARM.h" 13794a4d5aSBhushan D. Attarde #include "Plugins/Instruction/MIPS/EmulateInstructionMIPS.h" 14cdc22a88SMohit K. Bhakkad #include "Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h" 15e6e2bb38SZachary Turner #include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h" 16e6e2bb38SZachary Turner #include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h" 17e6e2bb38SZachary Turner #include "Plugins/Process/gdb-remote/ProcessGDBRemoteLog.h" 1846376966SJonas Devlieghere #include "lldb/Host/FileSystem.h" 19b9c1b51eSKate Stone #include "lldb/Host/Host.h" 20b9c1b51eSKate Stone #include "lldb/Host/HostInfo.h" 216f9e6901SZachary Turner #include "lldb/Utility/Log.h" 22*15eacd74SJonas Devlieghere #include "lldb/Utility/Reproducer.h" 2338d0632eSPavel Labath #include "lldb/Utility/Timer.h" 24e6e2bb38SZachary Turner 25a87101d6SKamil Rytarowski #if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) 26e6e2bb38SZachary Turner #include "Plugins/Process/POSIX/ProcessPOSIXLog.h" 27e6e2bb38SZachary Turner #endif 28e6e2bb38SZachary Turner 29e6e2bb38SZachary Turner #if defined(_MSC_VER) 3018a9135dSAdrian McCarthy #include "Plugins/Process/Windows/Common/ProcessWindowsLog.h" 3174e08ca0SZachary Turner #include "lldb/Host/windows/windows.h" 32e6e2bb38SZachary Turner #endif 33e6e2bb38SZachary Turner 34e6e2bb38SZachary Turner #include "llvm/Support/TargetSelect.h" 35e6e2bb38SZachary Turner 36e6e2bb38SZachary Turner #include <string> 37e6e2bb38SZachary Turner 38e6e2bb38SZachary Turner using namespace lldb_private; 39*15eacd74SJonas Devlieghere using namespace lldb_private::repro; 40e6e2bb38SZachary Turner 41b9c1b51eSKate Stone SystemInitializerCommon::SystemInitializerCommon() {} 42e6e2bb38SZachary Turner 43b9c1b51eSKate Stone SystemInitializerCommon::~SystemInitializerCommon() {} 44e6e2bb38SZachary Turner 45*15eacd74SJonas Devlieghere llvm::Error 46*15eacd74SJonas Devlieghere SystemInitializerCommon::Initialize(const InitializerOptions &options) { 47e6e2bb38SZachary Turner #if defined(_MSC_VER) 48e6e2bb38SZachary Turner const char *disable_crash_dialog_var = getenv("LLDB_DISABLE_CRASH_DIALOG"); 49b9c1b51eSKate Stone if (disable_crash_dialog_var && 50b9c1b51eSKate Stone llvm::StringRef(disable_crash_dialog_var).equals_lower("true")) { 51b9c1b51eSKate Stone // This will prevent Windows from displaying a dialog box requiring user 52b9c1b51eSKate Stone // interaction when 53b9c1b51eSKate Stone // LLDB crashes. This is mostly useful when automating LLDB, for example 54b9c1b51eSKate Stone // via the test 55b9c1b51eSKate Stone // suite, so that a crash in LLDB does not prevent completion of the test 56b9c1b51eSKate Stone // suite. 57b9c1b51eSKate Stone ::SetErrorMode(GetErrorMode() | SEM_FAILCRITICALERRORS | 58b9c1b51eSKate Stone SEM_NOGPFAULTERRORBOX); 59e6e2bb38SZachary Turner 60e6e2bb38SZachary Turner _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); 61e6e2bb38SZachary Turner _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); 62e6e2bb38SZachary Turner _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); 63e6e2bb38SZachary Turner _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); 64e6e2bb38SZachary Turner _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); 65e6e2bb38SZachary Turner _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR); 66e6e2bb38SZachary Turner } 67e6e2bb38SZachary Turner #endif 68e6e2bb38SZachary Turner 69*15eacd74SJonas Devlieghere ReproducerMode mode = ReproducerMode::Off; 70*15eacd74SJonas Devlieghere if (options.reproducer_capture) 71*15eacd74SJonas Devlieghere mode = ReproducerMode::Capture; 72*15eacd74SJonas Devlieghere if (options.reproducer_replay) 73*15eacd74SJonas Devlieghere mode = ReproducerMode::Replay; 74*15eacd74SJonas Devlieghere 75*15eacd74SJonas Devlieghere if (auto e = Reproducer::Initialize(mode, FileSpec(options.reproducer_path))) 76*15eacd74SJonas Devlieghere return e; 77*15eacd74SJonas Devlieghere 7846376966SJonas Devlieghere FileSystem::Initialize(); 79d813309eSPavel Labath Log::Initialize(); 80e6e2bb38SZachary Turner HostInfo::Initialize(); 81f9d16476SPavel Labath static Timer::Category func_cat(LLVM_PRETTY_FUNCTION); 82f9d16476SPavel Labath Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION); 83e6e2bb38SZachary Turner 84e6e2bb38SZachary Turner process_gdb_remote::ProcessGDBRemoteLog::Initialize(); 85e6e2bb38SZachary Turner 86e6e2bb38SZachary Turner // Initialize plug-ins 87e6e2bb38SZachary Turner ObjectContainerBSDArchive::Initialize(); 88e6e2bb38SZachary Turner 89d8c338d4STamas Berghammer EmulateInstructionARM::Initialize(); 90794a4d5aSBhushan D. Attarde EmulateInstructionMIPS::Initialize(); 91cdc22a88SMohit K. Bhakkad EmulateInstructionMIPS64::Initialize(); 92d8c338d4STamas Berghammer 93e6e2bb38SZachary Turner //---------------------------------------------------------------------- 94e6e2bb38SZachary Turner // Apple/Darwin hosted plugins 95e6e2bb38SZachary Turner //---------------------------------------------------------------------- 96e6e2bb38SZachary Turner ObjectContainerUniversalMachO::Initialize(); 97e6e2bb38SZachary Turner 98a87101d6SKamil Rytarowski #if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__) 99c29f7ff3SPavel Labath ProcessPOSIXLog::Initialize(); 100e6e2bb38SZachary Turner #endif 10142b33806SAdrian McCarthy #if defined(_MSC_VER) 10242b33806SAdrian McCarthy ProcessWindowsLog::Initialize(); 10342b33806SAdrian McCarthy #endif 104*15eacd74SJonas Devlieghere 105*15eacd74SJonas Devlieghere return llvm::Error::success(); 106e6e2bb38SZachary Turner } 107e6e2bb38SZachary Turner 108b9c1b51eSKate Stone void SystemInitializerCommon::Terminate() { 109f9d16476SPavel Labath static Timer::Category func_cat(LLVM_PRETTY_FUNCTION); 110f9d16476SPavel Labath Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION); 111e6e2bb38SZachary Turner ObjectContainerBSDArchive::Terminate(); 112e6e2bb38SZachary Turner 113d8c338d4STamas Berghammer EmulateInstructionARM::Terminate(); 114794a4d5aSBhushan D. Attarde EmulateInstructionMIPS::Terminate(); 115cdc22a88SMohit K. Bhakkad EmulateInstructionMIPS64::Terminate(); 116d8c338d4STamas Berghammer 117f1763537SPavel Labath ObjectContainerUniversalMachO::Terminate(); 118e6e2bb38SZachary Turner 11923a4df27SHafiz Abid Qadeer #if defined(_MSC_VER) 120610e5291SZachary Turner ProcessWindowsLog::Terminate(); 121610e5291SZachary Turner #endif 122610e5291SZachary Turner 12341331afaSZachary Turner HostInfo::Terminate(); 124775588c0SPavel Labath Log::DisableAllLogChannels(); 12546376966SJonas Devlieghere FileSystem::Terminate(); 126*15eacd74SJonas Devlieghere Reproducer::Terminate(); 127e6e2bb38SZachary Turner } 128