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