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