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