1 //===-- SystemInitializerFull.cpp -----------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "SystemInitializerFull.h" 10 #include "lldb/API/SBCommandInterpreter.h" 11 #include "lldb/Core/Debugger.h" 12 #include "lldb/Core/PluginManager.h" 13 #include "lldb/Host/Config.h" 14 #include "lldb/Host/Host.h" 15 #include "lldb/Initialization/SystemInitializerCommon.h" 16 #include "lldb/Interpreter/CommandInterpreter.h" 17 #include "lldb/Utility/Timer.h" 18 #include "llvm/Support/TargetSelect.h" 19 20 #pragma clang diagnostic push 21 #pragma clang diagnostic ignored "-Wglobal-constructors" 22 #include "llvm/ExecutionEngine/MCJIT.h" 23 #pragma clang diagnostic pop 24 25 #include <string> 26 27 #define LLDB_PLUGIN(p) LLDB_PLUGIN_DECLARE(p) 28 #include "Plugins/Plugins.def" 29 30 using namespace lldb_private; 31 32 SystemInitializerFull::SystemInitializerFull() = default; 33 34 SystemInitializerFull::~SystemInitializerFull() = default; 35 36 #define LLDB_PROCESS_AArch64(op) op(ABIAArch64); 37 #define LLDB_PROCESS_ARM(op) op(ABIARM); 38 #define LLDB_PROCESS_ARC(op) op(ABIARC); 39 #define LLDB_PROCESS_Hexagon(op) op(ABIHexagon); 40 #define LLDB_PROCESS_Mips(op) op(ABIMips); 41 #define LLDB_PROCESS_PowerPC(op) op(ABIPowerPC); 42 #define LLDB_PROCESS_SystemZ(op) op(ABISystemZ); 43 #define LLDB_PROCESS_X86(op) op(ABIX86); 44 45 #define LLDB_PROCESS_AMDGPU(op) 46 #define LLDB_PROCESS_AVR(op) 47 #define LLDB_PROCESS_BPF(op) 48 #define LLDB_PROCESS_Lanai(op) 49 #define LLDB_PROCESS_MSP430(op) 50 #define LLDB_PROCESS_NVPTX(op) 51 #define LLDB_PROCESS_RISCV(op) 52 #define LLDB_PROCESS_Sparc(op) 53 #define LLDB_PROCESS_WebAssembly(op) 54 #define LLDB_PROCESS_XCore(op) 55 56 llvm::Error SystemInitializerFull::Initialize() { 57 if (auto e = SystemInitializerCommon::Initialize()) 58 return e; 59 60 LLDB_PLUGIN_INITIALIZE(ObjectFileBreakpad); 61 LLDB_PLUGIN_INITIALIZE(ObjectFileELF); 62 LLDB_PLUGIN_INITIALIZE(ObjectFileJIT); 63 LLDB_PLUGIN_INITIALIZE(ObjectFileMachO); 64 LLDB_PLUGIN_INITIALIZE(ObjectFilePECOFF); 65 LLDB_PLUGIN_INITIALIZE(ObjectFileWasm); 66 67 LLDB_PLUGIN_INITIALIZE(ObjectContainerBSDArchive); 68 LLDB_PLUGIN_INITIALIZE(ObjectContainerMachOArchive); 69 70 LLDB_PLUGIN_INITIALIZE(ScriptInterpreterNone); 71 72 #if LLDB_ENABLE_PYTHON 73 LLDB_PLUGIN_INITIALIZE(OperatingSystemPython); 74 #endif 75 76 #if LLDB_ENABLE_PYTHON 77 LLDB_PLUGIN_INITIALIZE(ScriptInterpreterPython); 78 #endif 79 80 #if LLDB_ENABLE_LUA 81 LLDB_PLUGIN_INITIALIZE(ScriptInterpreterLua); 82 #endif 83 LLDB_PLUGIN_INITIALIZE(PlatformFreeBSD); 84 LLDB_PLUGIN_INITIALIZE(PlatformLinux); 85 LLDB_PLUGIN_INITIALIZE(PlatformNetBSD); 86 LLDB_PLUGIN_INITIALIZE(PlatformOpenBSD); 87 LLDB_PLUGIN_INITIALIZE(PlatformWindows); 88 LLDB_PLUGIN_INITIALIZE(PlatformAndroid); 89 LLDB_PLUGIN_INITIALIZE(PlatformMacOSX); 90 91 // Initialize LLVM and Clang 92 llvm::InitializeAllTargets(); 93 llvm::InitializeAllAsmPrinters(); 94 llvm::InitializeAllTargetMCs(); 95 llvm::InitializeAllDisassemblers(); 96 97 LLDB_PLUGIN_INITIALIZE(TypeSystemClang); 98 99 #define LLVM_TARGET(t) LLDB_PROCESS_##t(LLDB_PLUGIN_INITIALIZE) 100 #include "llvm/Config/Targets.def" 101 102 LLDB_PLUGIN_INITIALIZE(ArchitectureArm); 103 LLDB_PLUGIN_INITIALIZE(ArchitectureMips); 104 LLDB_PLUGIN_INITIALIZE(ArchitecturePPC64); 105 106 LLDB_PLUGIN_INITIALIZE(DisassemblerLLVMC); 107 108 LLDB_PLUGIN_INITIALIZE(JITLoaderGDB); 109 LLDB_PLUGIN_INITIALIZE(ProcessElfCore); 110 LLDB_PLUGIN_INITIALIZE(ProcessMachCore); 111 LLDB_PLUGIN_INITIALIZE(ProcessMinidump); 112 LLDB_PLUGIN_INITIALIZE(MemoryHistoryASan); 113 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeASan); 114 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeTSan); 115 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeUBSan); 116 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeMainThreadChecker); 117 118 LLDB_PLUGIN_INITIALIZE(SymbolVendorELF); 119 LLDB_PLUGIN_INITIALIZE(SymbolFileBreakpad); 120 LLDB_PLUGIN_INITIALIZE(SymbolFileDWARF); 121 LLDB_PLUGIN_INITIALIZE(SymbolFilePDB); 122 LLDB_PLUGIN_INITIALIZE(SymbolFileSymtab); 123 LLDB_PLUGIN_INITIALIZE(SymbolVendorWasm); 124 LLDB_PLUGIN_INITIALIZE(UnwindAssemblyInstEmulation); 125 LLDB_PLUGIN_INITIALIZE(UnwindAssemblyX86); 126 127 LLDB_PLUGIN_INITIALIZE(InstructionARM); 128 LLDB_PLUGIN_INITIALIZE(InstructionARM64); 129 LLDB_PLUGIN_INITIALIZE(InstructionMIPS); 130 LLDB_PLUGIN_INITIALIZE(InstructionMIPS64); 131 LLDB_PLUGIN_INITIALIZE(InstructionPPC64); 132 133 LLDB_PLUGIN_INITIALIZE(CXXItaniumABI); 134 LLDB_PLUGIN_INITIALIZE(AppleObjCRuntime); 135 LLDB_PLUGIN_INITIALIZE(SystemRuntimeMacOSX); 136 LLDB_PLUGIN_INITIALIZE(RenderScriptRuntime); 137 138 LLDB_PLUGIN_INITIALIZE(CPlusPlusLanguage); 139 LLDB_PLUGIN_INITIALIZE(ObjCLanguage); 140 LLDB_PLUGIN_INITIALIZE(ObjCPlusPlusLanguage); 141 142 #if defined(_WIN32) 143 LLDB_PLUGIN_INITIALIZE(ProcessWindowsCommon); 144 #endif 145 #if defined(__FreeBSD__) 146 LLDB_PLUGIN_INITIALIZE(ProcessFreeBSD); 147 #endif 148 #if defined(__APPLE__) 149 LLDB_PLUGIN_INITIALIZE(SymbolVendorMacOSX); 150 LLDB_PLUGIN_INITIALIZE(ProcessMacOSXKernel); 151 #endif 152 153 // This plugin is valid on any host that talks to a Darwin remote. It 154 // shouldn't be limited to __APPLE__. 155 LLDB_PLUGIN_INITIALIZE(StructuredDataDarwinLog); 156 157 // Platform agnostic plugins 158 LLDB_PLUGIN_INITIALIZE(PlatformGDB); 159 LLDB_PLUGIN_INITIALIZE(ProcessGDBRemote); 160 161 LLDB_PLUGIN_INITIALIZE(DynamicLoaderDarwinKernel); 162 LLDB_PLUGIN_INITIALIZE(DynamicLoaderHexagonDYLD); 163 LLDB_PLUGIN_INITIALIZE(DynamicLoaderMacOSXDYLD); 164 LLDB_PLUGIN_INITIALIZE(DynamicLoaderPosixDYLD); 165 LLDB_PLUGIN_INITIALIZE(DynamicLoaderStatic); 166 LLDB_PLUGIN_INITIALIZE(DynamicLoaderWasmDYLD); 167 LLDB_PLUGIN_INITIALIZE(DynamicLoaderWindowsDYLD); 168 169 // Scan for any system or user LLDB plug-ins 170 PluginManager::Initialize(); 171 172 // The process settings need to know about installed plug-ins, so the 173 // Settings must be initialized 174 // AFTER PluginManager::Initialize is called. 175 176 Debugger::SettingsInitialize(); 177 178 return llvm::Error::success(); 179 } 180 181 void SystemInitializerFull::Terminate() { 182 static Timer::Category func_cat(LLVM_PRETTY_FUNCTION); 183 Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION); 184 185 Debugger::SettingsTerminate(); 186 187 // Terminate and unload and loaded system or user LLDB plug-ins 188 PluginManager::Terminate(); 189 190 LLDB_PLUGIN_TERMINATE(TypeSystemClang); 191 192 LLDB_PLUGIN_TERMINATE(ArchitectureArm); 193 LLDB_PLUGIN_TERMINATE(ArchitectureMips); 194 LLDB_PLUGIN_TERMINATE(ArchitecturePPC64); 195 196 #define LLVM_TARGET(t) LLDB_PROCESS_##t(LLDB_PLUGIN_TERMINATE) 197 #include "llvm/Config/Targets.def" 198 199 LLDB_PLUGIN_TERMINATE(DisassemblerLLVMC); 200 201 LLDB_PLUGIN_TERMINATE(JITLoaderGDB); 202 LLDB_PLUGIN_TERMINATE(ProcessElfCore); 203 LLDB_PLUGIN_TERMINATE(ProcessMachCore); 204 LLDB_PLUGIN_TERMINATE(ProcessMinidump); 205 LLDB_PLUGIN_TERMINATE(MemoryHistoryASan); 206 207 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeASan); 208 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeTSan); 209 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeUBSan); 210 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeMainThreadChecker); 211 212 LLDB_PLUGIN_TERMINATE(SymbolVendorWasm); 213 LLDB_PLUGIN_TERMINATE(SymbolVendorELF); 214 LLDB_PLUGIN_TERMINATE(SymbolFileBreakpad); 215 LLDB_PLUGIN_TERMINATE(SymbolFileDWARF); 216 LLDB_PLUGIN_TERMINATE(SymbolFilePDB); 217 LLDB_PLUGIN_TERMINATE(SymbolFileSymtab); 218 LLDB_PLUGIN_TERMINATE(UnwindAssemblyX86); 219 LLDB_PLUGIN_TERMINATE(UnwindAssemblyInstEmulation); 220 221 LLDB_PLUGIN_TERMINATE(InstructionARM); 222 LLDB_PLUGIN_TERMINATE(InstructionARM64); 223 LLDB_PLUGIN_TERMINATE(InstructionMIPS); 224 LLDB_PLUGIN_TERMINATE(InstructionMIPS64); 225 LLDB_PLUGIN_TERMINATE(InstructionPPC64); 226 227 LLDB_PLUGIN_TERMINATE(CXXItaniumABI); 228 LLDB_PLUGIN_TERMINATE(AppleObjCRuntime); 229 LLDB_PLUGIN_TERMINATE(SystemRuntimeMacOSX); 230 LLDB_PLUGIN_TERMINATE(RenderScriptRuntime); 231 232 LLDB_PLUGIN_TERMINATE(CPlusPlusLanguage); 233 LLDB_PLUGIN_TERMINATE(ObjCLanguage); 234 LLDB_PLUGIN_TERMINATE(ObjCPlusPlusLanguage); 235 236 #if defined(__APPLE__) 237 LLDB_PLUGIN_TERMINATE(ProcessMacOSXKernel); 238 LLDB_PLUGIN_TERMINATE(SymbolVendorMacOSX); 239 #endif 240 241 #if defined(__FreeBSD__) 242 LLDB_PLUGIN_TERMINATE(ProcessFreeBSD); 243 #endif 244 Debugger::SettingsTerminate(); 245 246 LLDB_PLUGIN_TERMINATE(PlatformGDB); 247 LLDB_PLUGIN_TERMINATE(ProcessGDBRemote); 248 LLDB_PLUGIN_TERMINATE(StructuredDataDarwinLog); 249 250 LLDB_PLUGIN_TERMINATE(DynamicLoaderDarwinKernel); 251 LLDB_PLUGIN_TERMINATE(DynamicLoaderHexagonDYLD); 252 LLDB_PLUGIN_TERMINATE(DynamicLoaderMacOSXDYLD); 253 LLDB_PLUGIN_TERMINATE(DynamicLoaderPosixDYLD); 254 LLDB_PLUGIN_TERMINATE(DynamicLoaderStatic); 255 LLDB_PLUGIN_TERMINATE(DynamicLoaderWasmDYLD); 256 LLDB_PLUGIN_TERMINATE(DynamicLoaderWindowsDYLD); 257 258 LLDB_PLUGIN_TERMINATE(PlatformFreeBSD); 259 LLDB_PLUGIN_TERMINATE(PlatformLinux); 260 LLDB_PLUGIN_TERMINATE(PlatformNetBSD); 261 LLDB_PLUGIN_TERMINATE(PlatformOpenBSD); 262 LLDB_PLUGIN_TERMINATE(PlatformWindows); 263 LLDB_PLUGIN_TERMINATE(PlatformAndroid); 264 LLDB_PLUGIN_TERMINATE(PlatformMacOSX); 265 266 LLDB_PLUGIN_TERMINATE(ObjectFileBreakpad); 267 LLDB_PLUGIN_TERMINATE(ObjectFileELF); 268 LLDB_PLUGIN_TERMINATE(ObjectFileJIT); 269 LLDB_PLUGIN_TERMINATE(ObjectFileMachO); 270 LLDB_PLUGIN_TERMINATE(ObjectFilePECOFF); 271 LLDB_PLUGIN_TERMINATE(ObjectFileWasm); 272 273 LLDB_PLUGIN_TERMINATE(ObjectContainerBSDArchive); 274 LLDB_PLUGIN_TERMINATE(ObjectContainerMachOArchive); 275 276 #if LLDB_ENABLE_PYTHON 277 LLDB_PLUGIN_TERMINATE(OperatingSystemPython); 278 #endif 279 280 #if LLDB_ENABLE_PYTHON 281 LLDB_PLUGIN_TERMINATE(ScriptInterpreterPython); 282 #endif 283 284 #if LLDB_ENABLE_LUA 285 LLDB_PLUGIN_TERMINATE(ScriptInterpreterLua); 286 #endif 287 288 LLDB_PLUGIN_TERMINATE(ScriptInterpreterNone); 289 290 // Now shutdown the common parts, in reverse order. 291 SystemInitializerCommon::Terminate(); 292 } 293