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