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