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