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