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