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 LLDB_PLUGIN_DECLARE(ABIAArch64) 28 LLDB_PLUGIN_DECLARE(ABIARM) 29 LLDB_PLUGIN_DECLARE(ABIARC) 30 LLDB_PLUGIN_DECLARE(ABIHexagon) 31 LLDB_PLUGIN_DECLARE(ABIMips) 32 LLDB_PLUGIN_DECLARE(ABIPowerPC) 33 LLDB_PLUGIN_DECLARE(ABISystemZ) 34 LLDB_PLUGIN_DECLARE(ABIX86) 35 LLDB_PLUGIN_DECLARE(ObjectFileBreakpad) 36 LLDB_PLUGIN_DECLARE(ObjectFileELF) 37 LLDB_PLUGIN_DECLARE(ObjectFileJIT) 38 LLDB_PLUGIN_DECLARE(ObjectFileMachO) 39 LLDB_PLUGIN_DECLARE(ObjectFilePECOFF) 40 LLDB_PLUGIN_DECLARE(ObjectFileWasm) 41 LLDB_PLUGIN_DECLARE(ObjectContainerBSDArchive) 42 LLDB_PLUGIN_DECLARE(ObjectContainerMachOArchive) 43 LLDB_PLUGIN_DECLARE(ScriptInterpreterNone) 44 #if LLDB_ENABLE_PYTHON 45 LLDB_PLUGIN_DECLARE(OperatingSystemPython) 46 LLDB_PLUGIN_DECLARE(ScriptInterpreterPython) 47 #endif 48 #if LLDB_ENABLE_LUA 49 LLDB_PLUGIN_DECLARE(ScriptInterpreterLua) 50 #endif 51 LLDB_PLUGIN_DECLARE(PlatformFreeBSD) 52 LLDB_PLUGIN_DECLARE(PlatformLinux) 53 LLDB_PLUGIN_DECLARE(PlatformNetBSD) 54 LLDB_PLUGIN_DECLARE(PlatformOpenBSD) 55 LLDB_PLUGIN_DECLARE(PlatformWindows) 56 LLDB_PLUGIN_DECLARE(PlatformAndroid) 57 LLDB_PLUGIN_DECLARE(PlatformMacOSX) 58 LLDB_PLUGIN_DECLARE(TypeSystemClang) 59 LLDB_PLUGIN_DECLARE(ArchitectureArm) 60 LLDB_PLUGIN_DECLARE(ArchitectureMips) 61 LLDB_PLUGIN_DECLARE(ArchitecturePPC64) 62 LLDB_PLUGIN_DECLARE(DisassemblerLLVMC) 63 LLDB_PLUGIN_DECLARE(JITLoaderGDB) 64 LLDB_PLUGIN_DECLARE(ProcessElfCore) 65 LLDB_PLUGIN_DECLARE(ProcessMachCore) 66 LLDB_PLUGIN_DECLARE(ProcessMinidump) 67 LLDB_PLUGIN_DECLARE(MemoryHistoryASan) 68 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeASan) 69 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeTSan) 70 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeUBSan) 71 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeMainThreadChecker) 72 LLDB_PLUGIN_DECLARE(SymbolVendorELF) 73 LLDB_PLUGIN_DECLARE(SymbolFileBreakpad) 74 LLDB_PLUGIN_DECLARE(SymbolFileDWARF) 75 LLDB_PLUGIN_DECLARE(SymbolFilePDB) 76 LLDB_PLUGIN_DECLARE(SymbolFileSymtab) 77 LLDB_PLUGIN_DECLARE(SymbolVendorWasm) 78 LLDB_PLUGIN_DECLARE(UnwindAssemblyInstEmulation) 79 LLDB_PLUGIN_DECLARE(UnwindAssemblyX86) 80 LLDB_PLUGIN_DECLARE(InstructionARM) 81 LLDB_PLUGIN_DECLARE(InstructionARM64) 82 LLDB_PLUGIN_DECLARE(InstructionMIPS) 83 LLDB_PLUGIN_DECLARE(InstructionMIPS64) 84 LLDB_PLUGIN_DECLARE(InstructionPPC64) 85 LLDB_PLUGIN_DECLARE(CXXItaniumABI) 86 LLDB_PLUGIN_DECLARE(AppleObjCRuntime) 87 LLDB_PLUGIN_DECLARE(SystemRuntimeMacOSX) 88 LLDB_PLUGIN_DECLARE(RenderScriptRuntime) 89 LLDB_PLUGIN_DECLARE(CPlusPlusLanguage) 90 LLDB_PLUGIN_DECLARE(ObjCLanguage) 91 LLDB_PLUGIN_DECLARE(ObjCPlusPlusLanguage) 92 #if defined(_WIN32) 93 LLDB_PLUGIN_DECLARE(ProcessWindowsCommon) 94 #endif 95 #if defined(__FreeBSD__) 96 LLDB_PLUGIN_DECLARE(ProcessFreeBSD) 97 #endif 98 #if defined(__APPLE__) 99 LLDB_PLUGIN_DECLARE(SymbolVendorMacOSX) 100 LLDB_PLUGIN_DECLARE(ProcessMacOSXKernel) 101 LLDB_PLUGIN_DECLARE(DynamicLoaderDarwinKernel) 102 #endif 103 LLDB_PLUGIN_DECLARE(StructuredDataDarwinLog) 104 LLDB_PLUGIN_DECLARE(PlatformGDB) 105 LLDB_PLUGIN_DECLARE(ProcessGDBRemote) 106 LLDB_PLUGIN_DECLARE(DynamicLoaderHexagonDYLD) 107 LLDB_PLUGIN_DECLARE(DynamicLoaderMacOSXDYLD) 108 LLDB_PLUGIN_DECLARE(DynamicLoaderPosixDYLD) 109 LLDB_PLUGIN_DECLARE(DynamicLoaderStatic) 110 LLDB_PLUGIN_DECLARE(DynamicLoaderWasmDYLD) 111 LLDB_PLUGIN_DECLARE(DynamicLoaderWindowsDYLD) 112 113 using namespace lldb_private; 114 115 SystemInitializerFull::SystemInitializerFull() {} 116 117 SystemInitializerFull::~SystemInitializerFull() {} 118 119 #define LLDB_PROCESS_AArch64(op) op(ABIAArch64); 120 #define LLDB_PROCESS_ARM(op) op(ABIARM); 121 #define LLDB_PROCESS_ARC(op) op(ABIARC); 122 #define LLDB_PROCESS_Hexagon(op) op(ABIHexagon); 123 #define LLDB_PROCESS_Mips(op) op(ABIMips); 124 #define LLDB_PROCESS_PowerPC(op) op(ABIPowerPC); 125 #define LLDB_PROCESS_SystemZ(op) op(ABISystemZ); 126 #define LLDB_PROCESS_X86(op) op(ABIX86); 127 128 #define LLDB_PROCESS_AMDGPU(op) 129 #define LLDB_PROCESS_AVR(op) 130 #define LLDB_PROCESS_BPF(op) 131 #define LLDB_PROCESS_Lanai(op) 132 #define LLDB_PROCESS_MSP430(op) 133 #define LLDB_PROCESS_NVPTX(op) 134 #define LLDB_PROCESS_RISCV(op) 135 #define LLDB_PROCESS_Sparc(op) 136 #define LLDB_PROCESS_WebAssembly(op) 137 #define LLDB_PROCESS_XCore(op) 138 139 llvm::Error SystemInitializerFull::Initialize() { 140 if (auto e = SystemInitializerCommon::Initialize()) 141 return e; 142 143 LLDB_PLUGIN_INITIALIZE(ObjectFileBreakpad); 144 LLDB_PLUGIN_INITIALIZE(ObjectFileELF); 145 LLDB_PLUGIN_INITIALIZE(ObjectFileJIT); 146 LLDB_PLUGIN_INITIALIZE(ObjectFileMachO); 147 LLDB_PLUGIN_INITIALIZE(ObjectFilePECOFF); 148 LLDB_PLUGIN_INITIALIZE(ObjectFileWasm); 149 150 LLDB_PLUGIN_INITIALIZE(ObjectContainerBSDArchive); 151 LLDB_PLUGIN_INITIALIZE(ObjectContainerMachOArchive); 152 153 LLDB_PLUGIN_INITIALIZE(ScriptInterpreterNone); 154 155 #if LLDB_ENABLE_PYTHON 156 LLDB_PLUGIN_INITIALIZE(OperatingSystemPython); 157 #endif 158 159 #if LLDB_ENABLE_PYTHON 160 LLDB_PLUGIN_INITIALIZE(ScriptInterpreterPython); 161 #endif 162 163 #if LLDB_ENABLE_LUA 164 LLDB_PLUGIN_INITIALIZE(ScriptInterpreterLua); 165 #endif 166 LLDB_PLUGIN_INITIALIZE(PlatformFreeBSD); 167 LLDB_PLUGIN_INITIALIZE(PlatformLinux); 168 LLDB_PLUGIN_INITIALIZE(PlatformNetBSD); 169 LLDB_PLUGIN_INITIALIZE(PlatformOpenBSD); 170 LLDB_PLUGIN_INITIALIZE(PlatformWindows); 171 LLDB_PLUGIN_INITIALIZE(PlatformAndroid); 172 LLDB_PLUGIN_INITIALIZE(PlatformMacOSX); 173 174 // Initialize LLVM and Clang 175 llvm::InitializeAllTargets(); 176 llvm::InitializeAllAsmPrinters(); 177 llvm::InitializeAllTargetMCs(); 178 llvm::InitializeAllDisassemblers(); 179 180 LLDB_PLUGIN_INITIALIZE(TypeSystemClang); 181 182 #define LLVM_TARGET(t) LLDB_PROCESS_##t(LLDB_PLUGIN_INITIALIZE) 183 #include "llvm/Config/Targets.def" 184 185 LLDB_PLUGIN_INITIALIZE(ArchitectureArm); 186 LLDB_PLUGIN_INITIALIZE(ArchitectureMips); 187 LLDB_PLUGIN_INITIALIZE(ArchitecturePPC64); 188 189 LLDB_PLUGIN_INITIALIZE(DisassemblerLLVMC); 190 191 LLDB_PLUGIN_INITIALIZE(JITLoaderGDB); 192 LLDB_PLUGIN_INITIALIZE(ProcessElfCore); 193 LLDB_PLUGIN_INITIALIZE(ProcessMachCore); 194 LLDB_PLUGIN_INITIALIZE(ProcessMinidump); 195 LLDB_PLUGIN_INITIALIZE(MemoryHistoryASan); 196 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeASan); 197 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeTSan); 198 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeUBSan); 199 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeMainThreadChecker); 200 201 LLDB_PLUGIN_INITIALIZE(SymbolVendorELF); 202 LLDB_PLUGIN_INITIALIZE(SymbolFileBreakpad); 203 LLDB_PLUGIN_INITIALIZE(SymbolFileDWARF); 204 LLDB_PLUGIN_INITIALIZE(SymbolFilePDB); 205 LLDB_PLUGIN_INITIALIZE(SymbolFileSymtab); 206 LLDB_PLUGIN_INITIALIZE(SymbolVendorWasm); 207 LLDB_PLUGIN_INITIALIZE(UnwindAssemblyInstEmulation); 208 LLDB_PLUGIN_INITIALIZE(UnwindAssemblyX86); 209 210 LLDB_PLUGIN_INITIALIZE(InstructionARM); 211 LLDB_PLUGIN_INITIALIZE(InstructionARM64); 212 LLDB_PLUGIN_INITIALIZE(InstructionMIPS); 213 LLDB_PLUGIN_INITIALIZE(InstructionMIPS64); 214 LLDB_PLUGIN_INITIALIZE(InstructionPPC64); 215 216 LLDB_PLUGIN_INITIALIZE(CXXItaniumABI); 217 LLDB_PLUGIN_INITIALIZE(AppleObjCRuntime); 218 LLDB_PLUGIN_INITIALIZE(SystemRuntimeMacOSX); 219 LLDB_PLUGIN_INITIALIZE(RenderScriptRuntime); 220 221 LLDB_PLUGIN_INITIALIZE(CPlusPlusLanguage); 222 LLDB_PLUGIN_INITIALIZE(ObjCLanguage); 223 LLDB_PLUGIN_INITIALIZE(ObjCPlusPlusLanguage); 224 225 #if defined(_WIN32) 226 LLDB_PLUGIN_INITIALIZE(ProcessWindowsCommon); 227 #endif 228 #if defined(__FreeBSD__) 229 LLDB_PLUGIN_INITIALIZE(ProcessFreeBSD); 230 #endif 231 #if defined(__APPLE__) 232 LLDB_PLUGIN_INITIALIZE(SymbolVendorMacOSX); 233 LLDB_PLUGIN_INITIALIZE(ProcessMacOSXKernel); 234 LLDB_PLUGIN_INITIALIZE(DynamicLoaderDarwinKernel); 235 #endif 236 237 // This plugin is valid on any host that talks to a Darwin remote. It 238 // shouldn't be limited to __APPLE__. 239 LLDB_PLUGIN_INITIALIZE(StructuredDataDarwinLog); 240 241 // Platform agnostic plugins 242 LLDB_PLUGIN_INITIALIZE(PlatformGDB); 243 244 LLDB_PLUGIN_INITIALIZE(ProcessGDBRemote); 245 LLDB_PLUGIN_INITIALIZE(DynamicLoaderHexagonDYLD); 246 LLDB_PLUGIN_INITIALIZE(DynamicLoaderMacOSXDYLD); 247 LLDB_PLUGIN_INITIALIZE(DynamicLoaderPosixDYLD); 248 LLDB_PLUGIN_INITIALIZE(DynamicLoaderWasmDYLD); // Before DynamicLoaderStatic. 249 LLDB_PLUGIN_INITIALIZE(DynamicLoaderStatic); 250 LLDB_PLUGIN_INITIALIZE(DynamicLoaderWindowsDYLD); 251 252 // Scan for any system or user LLDB plug-ins 253 PluginManager::Initialize(); 254 255 // The process settings need to know about installed plug-ins, so the 256 // Settings must be initialized 257 // AFTER PluginManager::Initialize is called. 258 259 Debugger::SettingsInitialize(); 260 261 return llvm::Error::success(); 262 } 263 264 void SystemInitializerFull::Terminate() { 265 static Timer::Category func_cat(LLVM_PRETTY_FUNCTION); 266 Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION); 267 268 Debugger::SettingsTerminate(); 269 270 // Terminate and unload and loaded system or user LLDB plug-ins 271 PluginManager::Terminate(); 272 273 LLDB_PLUGIN_TERMINATE(TypeSystemClang); 274 275 LLDB_PLUGIN_TERMINATE(ArchitectureArm); 276 LLDB_PLUGIN_TERMINATE(ArchitectureMips); 277 LLDB_PLUGIN_TERMINATE(ArchitecturePPC64); 278 279 #define LLVM_TARGET(t) LLDB_PROCESS_##t(LLDB_PLUGIN_TERMINATE) 280 #include "llvm/Config/Targets.def" 281 282 LLDB_PLUGIN_TERMINATE(DisassemblerLLVMC); 283 284 LLDB_PLUGIN_TERMINATE(JITLoaderGDB); 285 LLDB_PLUGIN_TERMINATE(ProcessElfCore); 286 LLDB_PLUGIN_TERMINATE(ProcessMachCore); 287 LLDB_PLUGIN_TERMINATE(ProcessMinidump); 288 LLDB_PLUGIN_TERMINATE(MemoryHistoryASan); 289 290 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeASan); 291 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeTSan); 292 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeUBSan); 293 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeMainThreadChecker); 294 295 LLDB_PLUGIN_TERMINATE(SymbolVendorWasm); 296 LLDB_PLUGIN_TERMINATE(SymbolVendorELF); 297 LLDB_PLUGIN_TERMINATE(SymbolFileBreakpad); 298 LLDB_PLUGIN_TERMINATE(SymbolFileDWARF); 299 LLDB_PLUGIN_TERMINATE(SymbolFilePDB); 300 LLDB_PLUGIN_TERMINATE(SymbolFileSymtab); 301 LLDB_PLUGIN_TERMINATE(UnwindAssemblyX86); 302 LLDB_PLUGIN_TERMINATE(UnwindAssemblyInstEmulation); 303 304 LLDB_PLUGIN_TERMINATE(InstructionARM); 305 LLDB_PLUGIN_TERMINATE(InstructionARM64); 306 LLDB_PLUGIN_TERMINATE(InstructionMIPS); 307 LLDB_PLUGIN_TERMINATE(InstructionMIPS64); 308 LLDB_PLUGIN_TERMINATE(InstructionPPC64); 309 310 LLDB_PLUGIN_TERMINATE(CXXItaniumABI); 311 LLDB_PLUGIN_TERMINATE(AppleObjCRuntime); 312 LLDB_PLUGIN_TERMINATE(SystemRuntimeMacOSX); 313 LLDB_PLUGIN_TERMINATE(RenderScriptRuntime); 314 315 LLDB_PLUGIN_TERMINATE(CPlusPlusLanguage); 316 LLDB_PLUGIN_TERMINATE(ObjCLanguage); 317 LLDB_PLUGIN_TERMINATE(ObjCPlusPlusLanguage); 318 319 #if defined(__APPLE__) 320 LLDB_PLUGIN_TERMINATE(DynamicLoaderDarwinKernel); 321 LLDB_PLUGIN_TERMINATE(ProcessMacOSXKernel); 322 LLDB_PLUGIN_TERMINATE(SymbolVendorMacOSX); 323 #endif 324 325 #if defined(__FreeBSD__) 326 LLDB_PLUGIN_TERMINATE(ProcessFreeBSD); 327 #endif 328 Debugger::SettingsTerminate(); 329 330 LLDB_PLUGIN_TERMINATE(PlatformGDB); 331 LLDB_PLUGIN_TERMINATE(ProcessGDBRemote); 332 LLDB_PLUGIN_TERMINATE(StructuredDataDarwinLog); 333 334 LLDB_PLUGIN_TERMINATE(DynamicLoaderHexagonDYLD); 335 LLDB_PLUGIN_TERMINATE(DynamicLoaderMacOSXDYLD); 336 LLDB_PLUGIN_TERMINATE(DynamicLoaderPosixDYLD); 337 LLDB_PLUGIN_TERMINATE(DynamicLoaderWasmDYLD); 338 LLDB_PLUGIN_TERMINATE(DynamicLoaderStatic); 339 LLDB_PLUGIN_TERMINATE(DynamicLoaderWindowsDYLD); 340 341 LLDB_PLUGIN_TERMINATE(PlatformFreeBSD); 342 LLDB_PLUGIN_TERMINATE(PlatformLinux); 343 LLDB_PLUGIN_TERMINATE(PlatformNetBSD); 344 LLDB_PLUGIN_TERMINATE(PlatformOpenBSD); 345 LLDB_PLUGIN_TERMINATE(PlatformWindows); 346 LLDB_PLUGIN_TERMINATE(PlatformAndroid); 347 LLDB_PLUGIN_TERMINATE(PlatformMacOSX); 348 349 LLDB_PLUGIN_TERMINATE(ObjectFileBreakpad); 350 LLDB_PLUGIN_TERMINATE(ObjectFileELF); 351 LLDB_PLUGIN_TERMINATE(ObjectFileJIT); 352 LLDB_PLUGIN_TERMINATE(ObjectFileMachO); 353 LLDB_PLUGIN_TERMINATE(ObjectFilePECOFF); 354 LLDB_PLUGIN_TERMINATE(ObjectFileWasm); 355 356 LLDB_PLUGIN_TERMINATE(ObjectContainerBSDArchive); 357 LLDB_PLUGIN_TERMINATE(ObjectContainerMachOArchive); 358 359 #if LLDB_ENABLE_PYTHON 360 LLDB_PLUGIN_TERMINATE(OperatingSystemPython); 361 #endif 362 363 #if LLDB_ENABLE_PYTHON 364 LLDB_PLUGIN_TERMINATE(ScriptInterpreterPython); 365 #endif 366 367 #if LLDB_ENABLE_LUA 368 LLDB_PLUGIN_TERMINATE(ScriptInterpreterLua); 369 #endif 370 371 LLDB_PLUGIN_TERMINATE(ScriptInterpreterNone); 372 373 // Now shutdown the common parts, in reverse order. 374 SystemInitializerCommon::Terminate(); 375 } 376