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(PlatformRemoteiOS); 50 LLDB_PLUGIN_DECLARE(PlatformMacOSX); 51 LLDB_PLUGIN_DECLARE(TypeSystemClang); 52 LLDB_PLUGIN_DECLARE(ArchitectureArm); 53 LLDB_PLUGIN_DECLARE(ArchitectureMips); 54 LLDB_PLUGIN_DECLARE(ArchitecturePPC64); 55 LLDB_PLUGIN_DECLARE(DisassemblerLLVMC); 56 LLDB_PLUGIN_DECLARE(JITLoaderGDB); 57 LLDB_PLUGIN_DECLARE(ProcessElfCore); 58 LLDB_PLUGIN_DECLARE(ProcessMachCore); 59 LLDB_PLUGIN_DECLARE(ProcessMinidump); 60 LLDB_PLUGIN_DECLARE(MemoryHistoryASan); 61 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeASan); 62 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeTSan); 63 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeUBSan); 64 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeMainThreadChecker); 65 LLDB_PLUGIN_DECLARE(SymbolVendorELF); 66 LLDB_PLUGIN_DECLARE(SymbolFileBreakpad); 67 LLDB_PLUGIN_DECLARE(SymbolFileDWARF); 68 LLDB_PLUGIN_DECLARE(SymbolFilePDB); 69 LLDB_PLUGIN_DECLARE(SymbolFileSymtab); 70 LLDB_PLUGIN_DECLARE(SymbolVendorWasm); 71 LLDB_PLUGIN_DECLARE(UnwindAssemblyInstEmulation); 72 LLDB_PLUGIN_DECLARE(UnwindAssembly_x86); 73 LLDB_PLUGIN_DECLARE(EmulateInstructionARM); 74 LLDB_PLUGIN_DECLARE(EmulateInstructionARM64); 75 LLDB_PLUGIN_DECLARE(EmulateInstructionMIPS); 76 LLDB_PLUGIN_DECLARE(EmulateInstructionMIPS64); 77 LLDB_PLUGIN_DECLARE(EmulateInstructionPPC64); 78 LLDB_PLUGIN_DECLARE(SymbolFileDWARFDebugMap); 79 LLDB_PLUGIN_DECLARE(ItaniumABILanguageRuntime); 80 LLDB_PLUGIN_DECLARE(AppleObjCRuntime); 81 LLDB_PLUGIN_DECLARE(SystemRuntimeMacOSX); 82 LLDB_PLUGIN_DECLARE(RenderScriptRuntime); 83 LLDB_PLUGIN_DECLARE(CPlusPlusLanguage); 84 LLDB_PLUGIN_DECLARE(ObjCLanguage); 85 LLDB_PLUGIN_DECLARE(ObjCPlusPlusLanguage); 86 #if defined(_WIN32) 87 LLDB_PLUGIN_DECLARE(ProcessWindows); 88 #endif 89 #if defined(__FreeBSD__) 90 LLDB_PLUGIN_DECLARE(ProcessFreeBSD); 91 #endif 92 #if defined(__APPLE__) 93 LLDB_PLUGIN_DECLARE(SymbolVendorMacOSX); 94 LLDB_PLUGIN_DECLARE(ProcessKDP); 95 LLDB_PLUGIN_DECLARE(DynamicLoaderDarwinKernel); 96 #endif 97 LLDB_PLUGIN_DECLARE(StructuredDataDarwinLog); 98 LLDB_PLUGIN_DECLARE(PlatformRemoteGDBServer); 99 LLDB_PLUGIN_DECLARE(ProcessGDBRemote); 100 LLDB_PLUGIN_DECLARE(DynamicLoaderMacOSXDYLD); 101 LLDB_PLUGIN_DECLARE(DynamicLoaderMacOS); 102 LLDB_PLUGIN_DECLARE(DynamicLoaderPOSIXDYLD); 103 LLDB_PLUGIN_DECLARE(DynamicLoaderStatic); 104 LLDB_PLUGIN_DECLARE(DynamicLoaderWindowsDYLD); 105 106 using namespace lldb_private; 107 108 SystemInitializerTest::SystemInitializerTest() {} 109 110 SystemInitializerTest::~SystemInitializerTest() {} 111 112 #define LLDB_PROCESS_AArch64(op) \ 113 op(ABIMacOSX_arm64); \ 114 op(ABISysV_arm64); 115 #define LLDB_PROCESS_ARM(op) \ 116 op(ABIMacOSX_arm); \ 117 op(ABISysV_arm); 118 #define LLDB_PROCESS_Hexagon(op) op(ABISysV_hexagon); 119 #define LLDB_PROCESS_Mips(op) \ 120 op(ABISysV_mips); \ 121 op(ABISysV_mips64); 122 #define LLDB_PROCESS_PowerPC(op) \ 123 op(ABISysV_ppc); \ 124 op(ABISysV_ppc64); 125 #define LLDB_PROCESS_SystemZ(op) op(ABISysV_s390x); 126 #define LLDB_PROCESS_X86(op) \ 127 op(ABIMacOSX_i386); \ 128 op(ABISysV_i386); \ 129 op(ABISysV_x86_64); \ 130 op(ABIWindows_x86_64); 131 132 #define LLDB_PROCESS_AMDGPU(op) 133 #define LLDB_PROCESS_ARC(op) 134 #define LLDB_PROCESS_AVR(op) 135 #define LLDB_PROCESS_BPF(op) 136 #define LLDB_PROCESS_Lanai(op) 137 #define LLDB_PROCESS_MSP430(op) 138 #define LLDB_PROCESS_NVPTX(op) 139 #define LLDB_PROCESS_RISCV(op) 140 #define LLDB_PROCESS_Sparc(op) 141 #define LLDB_PROCESS_WebAssembly(op) 142 #define LLDB_PROCESS_XCore(op) 143 144 llvm::Error SystemInitializerTest::Initialize() { 145 if (auto e = SystemInitializerCommon::Initialize()) 146 return e; 147 148 LLDB_PLUGIN_INITIALIZE(ObjectFileBreakpad); 149 LLDB_PLUGIN_INITIALIZE(ObjectFileELF); 150 LLDB_PLUGIN_INITIALIZE(ObjectFileMachO); 151 LLDB_PLUGIN_INITIALIZE(ObjectFilePECOFF); 152 LLDB_PLUGIN_INITIALIZE(ObjectFileWasm); 153 154 LLDB_PLUGIN_INITIALIZE(ObjectContainerBSDArchive); 155 LLDB_PLUGIN_INITIALIZE(ObjectContainerUniversalMachO); 156 157 LLDB_PLUGIN_INITIALIZE(ScriptInterpreterNone); 158 159 LLDB_PLUGIN_INITIALIZE(PlatformFreeBSD); 160 LLDB_PLUGIN_INITIALIZE(PlatformLinux); 161 LLDB_PLUGIN_INITIALIZE(PlatformNetBSD); 162 LLDB_PLUGIN_INITIALIZE(PlatformOpenBSD); 163 LLDB_PLUGIN_INITIALIZE(PlatformWindows); 164 LLDB_PLUGIN_INITIALIZE(PlatformAndroid); 165 LLDB_PLUGIN_INITIALIZE(PlatformRemoteiOS); 166 LLDB_PLUGIN_INITIALIZE(PlatformMacOSX); 167 168 // Initialize LLVM and Clang 169 llvm::InitializeAllTargets(); 170 llvm::InitializeAllAsmPrinters(); 171 llvm::InitializeAllTargetMCs(); 172 llvm::InitializeAllDisassemblers(); 173 174 LLDB_PLUGIN_INITIALIZE(TypeSystemClang); 175 176 #define LLVM_TARGET(t) LLDB_PROCESS_##t(LLDB_PLUGIN_INITIALIZE) 177 #include "llvm/Config/Targets.def" 178 179 LLDB_PLUGIN_INITIALIZE(ArchitectureArm); 180 LLDB_PLUGIN_INITIALIZE(ArchitectureMips); 181 LLDB_PLUGIN_INITIALIZE(ArchitecturePPC64); 182 183 LLDB_PLUGIN_INITIALIZE(DisassemblerLLVMC); 184 185 LLDB_PLUGIN_INITIALIZE(JITLoaderGDB); 186 LLDB_PLUGIN_INITIALIZE(ProcessElfCore); 187 LLDB_PLUGIN_INITIALIZE(ProcessMachCore); 188 LLDB_PLUGIN_INITIALIZE(ProcessMinidump); 189 LLDB_PLUGIN_INITIALIZE(MemoryHistoryASan); 190 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeASan); 191 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeTSan); 192 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeUBSan); 193 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeMainThreadChecker); 194 195 LLDB_PLUGIN_INITIALIZE(SymbolVendorELF); 196 LLDB_PLUGIN_INITIALIZE(SymbolFileBreakpad); 197 LLDB_PLUGIN_INITIALIZE(SymbolFileDWARF); 198 LLDB_PLUGIN_INITIALIZE(SymbolFilePDB); 199 LLDB_PLUGIN_INITIALIZE(SymbolFileSymtab); 200 LLDB_PLUGIN_INITIALIZE(SymbolVendorWasm); 201 LLDB_PLUGIN_INITIALIZE(UnwindAssemblyInstEmulation); 202 LLDB_PLUGIN_INITIALIZE(UnwindAssembly_x86); 203 204 LLDB_PLUGIN_INITIALIZE(EmulateInstructionARM); 205 LLDB_PLUGIN_INITIALIZE(EmulateInstructionARM64); 206 LLDB_PLUGIN_INITIALIZE(EmulateInstructionMIPS); 207 LLDB_PLUGIN_INITIALIZE(EmulateInstructionMIPS64); 208 LLDB_PLUGIN_INITIALIZE(EmulateInstructionPPC64); 209 210 LLDB_PLUGIN_INITIALIZE(SymbolFileDWARFDebugMap); 211 LLDB_PLUGIN_INITIALIZE(ItaniumABILanguageRuntime); 212 LLDB_PLUGIN_INITIALIZE(AppleObjCRuntime); 213 LLDB_PLUGIN_INITIALIZE(SystemRuntimeMacOSX); 214 LLDB_PLUGIN_INITIALIZE(RenderScriptRuntime); 215 216 LLDB_PLUGIN_INITIALIZE(CPlusPlusLanguage); 217 LLDB_PLUGIN_INITIALIZE(ObjCLanguage); 218 LLDB_PLUGIN_INITIALIZE(ObjCPlusPlusLanguage); 219 220 #if defined(_WIN32) 221 LLDB_PLUGIN_INITIALIZE(ProcessWindows); 222 #endif 223 #if defined(__FreeBSD__) 224 LLDB_PLUGIN_INITIALIZE(ProcessFreeBSD); 225 #endif 226 #if defined(__APPLE__) 227 LLDB_PLUGIN_INITIALIZE(SymbolVendorMacOSX); 228 LLDB_PLUGIN_INITIALIZE(ProcessKDP); 229 LLDB_PLUGIN_INITIALIZE(DynamicLoaderDarwinKernel); 230 #endif 231 232 // This plugin is valid on any host that talks to a Darwin remote. It 233 // shouldn't be limited to __APPLE__. 234 LLDB_PLUGIN_INITIALIZE(StructuredDataDarwinLog); 235 236 // Platform agnostic plugins 237 LLDB_PLUGIN_INITIALIZE(PlatformRemoteGDBServer); 238 239 LLDB_PLUGIN_INITIALIZE(ProcessGDBRemote); 240 LLDB_PLUGIN_INITIALIZE(DynamicLoaderMacOSXDYLD); 241 LLDB_PLUGIN_INITIALIZE(DynamicLoaderMacOS); 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 SystemInitializerTest::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(SymbolFileDWARFDebugMap); 305 LLDB_PLUGIN_TERMINATE(ItaniumABILanguageRuntime); 306 LLDB_PLUGIN_TERMINATE(AppleObjCRuntime); 307 LLDB_PLUGIN_TERMINATE(SystemRuntimeMacOSX); 308 LLDB_PLUGIN_TERMINATE(RenderScriptRuntime); 309 310 LLDB_PLUGIN_TERMINATE(CPlusPlusLanguage); 311 LLDB_PLUGIN_TERMINATE(ObjCLanguage); 312 LLDB_PLUGIN_TERMINATE(ObjCPlusPlusLanguage); 313 314 #if defined(__APPLE__) 315 LLDB_PLUGIN_TERMINATE(DynamicLoaderDarwinKernel); 316 LLDB_PLUGIN_TERMINATE(ProcessKDP); 317 LLDB_PLUGIN_TERMINATE(SymbolVendorMacOSX); 318 #endif 319 320 #if defined(__FreeBSD__) 321 LLDB_PLUGIN_TERMINATE(ProcessFreeBSD); 322 #endif 323 Debugger::SettingsTerminate(); 324 325 LLDB_PLUGIN_TERMINATE(PlatformRemoteGDBServer); 326 LLDB_PLUGIN_TERMINATE(ProcessGDBRemote); 327 LLDB_PLUGIN_TERMINATE(StructuredDataDarwinLog); 328 329 LLDB_PLUGIN_TERMINATE(DynamicLoaderMacOSXDYLD); 330 LLDB_PLUGIN_TERMINATE(DynamicLoaderMacOS); 331 LLDB_PLUGIN_TERMINATE(DynamicLoaderPOSIXDYLD); 332 LLDB_PLUGIN_TERMINATE(DynamicLoaderStatic); 333 LLDB_PLUGIN_TERMINATE(DynamicLoaderWindowsDYLD); 334 335 LLDB_PLUGIN_TERMINATE(PlatformFreeBSD); 336 LLDB_PLUGIN_TERMINATE(PlatformLinux); 337 LLDB_PLUGIN_TERMINATE(PlatformNetBSD); 338 LLDB_PLUGIN_TERMINATE(PlatformOpenBSD); 339 LLDB_PLUGIN_TERMINATE(PlatformWindows); 340 LLDB_PLUGIN_TERMINATE(PlatformAndroid); 341 LLDB_PLUGIN_TERMINATE(PlatformRemoteiOS); 342 LLDB_PLUGIN_TERMINATE(PlatformMacOSX); 343 344 LLDB_PLUGIN_TERMINATE(ObjectFileBreakpad); 345 LLDB_PLUGIN_TERMINATE(ObjectFileELF); 346 LLDB_PLUGIN_TERMINATE(ObjectFileMachO); 347 LLDB_PLUGIN_TERMINATE(ObjectFilePECOFF); 348 LLDB_PLUGIN_TERMINATE(ObjectFileWasm); 349 350 LLDB_PLUGIN_TERMINATE(ObjectContainerBSDArchive); 351 LLDB_PLUGIN_TERMINATE(ObjectContainerUniversalMachO); 352 353 LLDB_PLUGIN_TERMINATE(ScriptInterpreterNone); 354 355 // Now shutdown the common parts, in reverse order. 356 SystemInitializerCommon::Terminate(); 357 } 358