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