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