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