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