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