180814287SRaphael Isemann //===-- SystemInitializerFull.cpp -----------------------------------------===// 2e6e2bb38SZachary Turner // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6e6e2bb38SZachary Turner // 7e6e2bb38SZachary Turner //===----------------------------------------------------------------------===// 8e6e2bb38SZachary Turner 9d17cd902SAlex Langford #include "SystemInitializerFull.h" 102c1f46dcSZachary Turner #include "lldb/API/SBCommandInterpreter.h" 11e6e2bb38SZachary Turner #include "lldb/Core/Debugger.h" 12fbb4d1e4SJonas Devlieghere #include "lldb/Core/PluginManager.h" 13fbb4d1e4SJonas Devlieghere #include "lldb/Host/Config.h" 14e6e2bb38SZachary Turner #include "lldb/Host/Host.h" 15e6e2bb38SZachary Turner #include "lldb/Initialization/SystemInitializerCommon.h" 162c1f46dcSZachary Turner #include "lldb/Interpreter/CommandInterpreter.h" 17*8a203bb2SWalter Erquinigo #include "lldb/Target/ProcessTrace.h" 1838d0632eSPavel Labath #include "lldb/Utility/Timer.h" 19e6e2bb38SZachary Turner #include "llvm/Support/TargetSelect.h" 20e6e2bb38SZachary Turner 215a36558cSSaleem Abdulrasool #pragma clang diagnostic push 225a36558cSSaleem Abdulrasool #pragma clang diagnostic ignored "-Wglobal-constructors" 235a36558cSSaleem Abdulrasool #include "llvm/ExecutionEngine/MCJIT.h" 245a36558cSSaleem Abdulrasool #pragma clang diagnostic pop 255a36558cSSaleem Abdulrasool 26e6e2bb38SZachary Turner #include <string> 27e6e2bb38SZachary Turner 282d146aa2SJonas Devlieghere #define LLDB_PLUGIN(p) LLDB_PLUGIN_DECLARE(p) 292d146aa2SJonas Devlieghere #include "Plugins/Plugins.def" 303e70a919SJonas Devlieghere 31e6e2bb38SZachary Turner using namespace lldb_private; 32e6e2bb38SZachary Turner 33866b7a65SJonas Devlieghere SystemInitializerFull::SystemInitializerFull() = default; 34866b7a65SJonas Devlieghere SystemInitializerFull::~SystemInitializerFull() = default; 35e6e2bb38SZachary Turner 36936c6242SJonas Devlieghere llvm::Error SystemInitializerFull::Initialize() { 37936c6242SJonas Devlieghere if (auto e = SystemInitializerCommon::Initialize()) 3815eacd74SJonas Devlieghere return e; 39fa3fa5b9SPavel Labath 40e6e2bb38SZachary Turner // Initialize LLVM and Clang 41e6e2bb38SZachary Turner llvm::InitializeAllTargets(); 42e6e2bb38SZachary Turner llvm::InitializeAllAsmPrinters(); 43e6e2bb38SZachary Turner llvm::InitializeAllTargetMCs(); 44e6e2bb38SZachary Turner llvm::InitializeAllDisassemblers(); 45e6e2bb38SZachary Turner 4680c3ea4eSJonas Devlieghere #define LLDB_PLUGIN(p) LLDB_PLUGIN_INITIALIZE(p); 4780c3ea4eSJonas Devlieghere #include "Plugins/Plugins.def" 4850c9cd95SJonas Devlieghere 49*8a203bb2SWalter Erquinigo // Initialize plug-ins in core LLDB 50*8a203bb2SWalter Erquinigo ProcessTrace::Initialize(); 51*8a203bb2SWalter Erquinigo 5250c9cd95SJonas Devlieghere // Scan for any system or user LLDB plug-ins 53e6e2bb38SZachary Turner PluginManager::Initialize(); 54e6e2bb38SZachary Turner 5505097246SAdrian Prantl // The process settings need to know about installed plug-ins, so the 5680c3ea4eSJonas Devlieghere // Settings must be initialized AFTER PluginManager::Initialize is called. 57e6e2bb38SZachary Turner Debugger::SettingsInitialize(); 5815eacd74SJonas Devlieghere 5915eacd74SJonas Devlieghere return llvm::Error::success(); 60e6e2bb38SZachary Turner } 61e6e2bb38SZachary Turner 62b9c1b51eSKate Stone void SystemInitializerFull::Terminate() { 63f9d16476SPavel Labath static Timer::Category func_cat(LLVM_PRETTY_FUNCTION); 64f9d16476SPavel Labath Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION); 65e6e2bb38SZachary Turner 66e6e2bb38SZachary Turner Debugger::SettingsTerminate(); 67e6e2bb38SZachary Turner 68*8a203bb2SWalter Erquinigo // Terminate plug-ins in core LLDB 69*8a203bb2SWalter Erquinigo ProcessTrace::Terminate(); 70*8a203bb2SWalter Erquinigo 7150c9cd95SJonas Devlieghere // Terminate and unload and loaded system or user LLDB plug-ins 72e6e2bb38SZachary Turner PluginManager::Terminate(); 7356939cb3SGreg Clayton 7480c3ea4eSJonas Devlieghere #define LLDB_PLUGIN(p) LLDB_PLUGIN_TERMINATE(p); 7580c3ea4eSJonas Devlieghere #include "Plugins/Plugins.def" 76fbb4d1e4SJonas Devlieghere 77e6e2bb38SZachary Turner // Now shutdown the common parts, in reverse order. 78e6e2bb38SZachary Turner SystemInitializerCommon::Terminate(); 79e6e2bb38SZachary Turner } 80