1 //===-- SystemInitializerFull.cpp -----------------------------------------===//
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 "SystemInitializerFull.h"
10 #include "lldb/API/SBCommandInterpreter.h"
11 #include "lldb/Core/Debugger.h"
12 #include "lldb/Core/PluginManager.h"
13 #include "lldb/Host/Config.h"
14 #include "lldb/Host/Host.h"
15 #include "lldb/Initialization/SystemInitializerCommon.h"
16 #include "lldb/Interpreter/CommandInterpreter.h"
17 #include "lldb/Utility/Timer.h"
18 #include "llvm/Support/TargetSelect.h"
19 
20 #pragma clang diagnostic push
21 #pragma clang diagnostic ignored "-Wglobal-constructors"
22 #include "llvm/ExecutionEngine/MCJIT.h"
23 #pragma clang diagnostic pop
24 
25 #include <string>
26 
27 LLDB_PLUGIN_DECLARE(ABIMacOSX_arm64);
28 LLDB_PLUGIN_DECLARE(ABISysV_arm64);
29 LLDB_PLUGIN_DECLARE(ABIMacOSX_arm);
30 LLDB_PLUGIN_DECLARE(ABISysV_arm);
31 LLDB_PLUGIN_DECLARE(ABISysV_arc);
32 LLDB_PLUGIN_DECLARE(ABISysV_hexagon);
33 LLDB_PLUGIN_DECLARE(ABISysV_mips);
34 LLDB_PLUGIN_DECLARE(ABISysV_mips64);
35 LLDB_PLUGIN_DECLARE(ABISysV_ppc);
36 LLDB_PLUGIN_DECLARE(ABISysV_ppc64);
37 LLDB_PLUGIN_DECLARE(ABISysV_s390x);
38 LLDB_PLUGIN_DECLARE(ABIMacOSX_i386);
39 LLDB_PLUGIN_DECLARE(ABISysV_i386);
40 LLDB_PLUGIN_DECLARE(ABISysV_x86_64);
41 LLDB_PLUGIN_DECLARE(ABIWindows_x86_64);
42 LLDB_PLUGIN_DECLARE(ObjectFileBreakpad);
43 LLDB_PLUGIN_DECLARE(ObjectFileELF);
44 LLDB_PLUGIN_DECLARE(ObjectFileMachO);
45 LLDB_PLUGIN_DECLARE(ObjectFilePECOFF);
46 LLDB_PLUGIN_DECLARE(ObjectFileWasm);
47 LLDB_PLUGIN_DECLARE(ObjectContainerBSDArchive);
48 LLDB_PLUGIN_DECLARE(ObjectContainerUniversalMachO);
49 LLDB_PLUGIN_DECLARE(ScriptInterpreterNone);
50 #if LLDB_ENABLE_PYTHON
51 LLDB_PLUGIN_DECLARE(OperatingSystemPython);
52 LLDB_PLUGIN_DECLARE(ScriptInterpreterPython);
53 #endif
54 #if LLDB_ENABLE_LUA
55 LLDB_PLUGIN_DECLARE(ScriptInterpreterLua);
56 #endif
57 LLDB_PLUGIN_DECLARE(PlatformFreeBSD);
58 LLDB_PLUGIN_DECLARE(PlatformLinux);
59 LLDB_PLUGIN_DECLARE(PlatformNetBSD);
60 LLDB_PLUGIN_DECLARE(PlatformOpenBSD);
61 LLDB_PLUGIN_DECLARE(PlatformWindows);
62 LLDB_PLUGIN_DECLARE(PlatformAndroid);
63 LLDB_PLUGIN_DECLARE(PlatformRemoteiOS);
64 LLDB_PLUGIN_DECLARE(PlatformMacOSX);
65 LLDB_PLUGIN_DECLARE(TypeSystemClang);
66 LLDB_PLUGIN_DECLARE(ArchitectureArm);
67 LLDB_PLUGIN_DECLARE(ArchitectureMips);
68 LLDB_PLUGIN_DECLARE(ArchitecturePPC64);
69 LLDB_PLUGIN_DECLARE(DisassemblerLLVMC);
70 LLDB_PLUGIN_DECLARE(JITLoaderGDB);
71 LLDB_PLUGIN_DECLARE(ProcessElfCore);
72 LLDB_PLUGIN_DECLARE(ProcessMachCore);
73 LLDB_PLUGIN_DECLARE(ProcessMinidump);
74 LLDB_PLUGIN_DECLARE(MemoryHistoryASan);
75 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeASan);
76 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeTSan);
77 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeUBSan);
78 LLDB_PLUGIN_DECLARE(InstrumentationRuntimeMainThreadChecker);
79 LLDB_PLUGIN_DECLARE(SymbolVendorELF);
80 LLDB_PLUGIN_DECLARE(SymbolFileBreakpad);
81 LLDB_PLUGIN_DECLARE(SymbolFileDWARF);
82 LLDB_PLUGIN_DECLARE(SymbolFilePDB);
83 LLDB_PLUGIN_DECLARE(SymbolFileSymtab);
84 LLDB_PLUGIN_DECLARE(SymbolVendorWasm);
85 LLDB_PLUGIN_DECLARE(UnwindAssemblyInstEmulation);
86 LLDB_PLUGIN_DECLARE(UnwindAssembly_x86);
87 LLDB_PLUGIN_DECLARE(EmulateInstructionARM);
88 LLDB_PLUGIN_DECLARE(EmulateInstructionARM64);
89 LLDB_PLUGIN_DECLARE(EmulateInstructionMIPS);
90 LLDB_PLUGIN_DECLARE(EmulateInstructionMIPS64);
91 LLDB_PLUGIN_DECLARE(EmulateInstructionPPC64);
92 LLDB_PLUGIN_DECLARE(SymbolFileDWARFDebugMap);
93 LLDB_PLUGIN_DECLARE(ItaniumABILanguageRuntime);
94 LLDB_PLUGIN_DECLARE(AppleObjCRuntime);
95 LLDB_PLUGIN_DECLARE(SystemRuntimeMacOSX);
96 LLDB_PLUGIN_DECLARE(RenderScriptRuntime);
97 LLDB_PLUGIN_DECLARE(CPlusPlusLanguage);
98 LLDB_PLUGIN_DECLARE(ObjCLanguage);
99 LLDB_PLUGIN_DECLARE(ObjCPlusPlusLanguage);
100 #if defined(_WIN32)
101 LLDB_PLUGIN_DECLARE(ProcessWindows);
102 #endif
103 #if defined(__FreeBSD__)
104 LLDB_PLUGIN_DECLARE(ProcessFreeBSD);
105 #endif
106 #if defined(__APPLE__)
107 LLDB_PLUGIN_DECLARE(SymbolVendorMacOSX);
108 LLDB_PLUGIN_DECLARE(ProcessKDP);
109 LLDB_PLUGIN_DECLARE(DynamicLoaderDarwinKernel);
110 #endif
111 LLDB_PLUGIN_DECLARE(StructuredDataDarwinLog);
112 LLDB_PLUGIN_DECLARE(PlatformRemoteGDBServer);
113 LLDB_PLUGIN_DECLARE(ProcessGDBRemote);
114 LLDB_PLUGIN_DECLARE(DynamicLoaderMacOSXDYLD);
115 LLDB_PLUGIN_DECLARE(DynamicLoaderMacOS);
116 LLDB_PLUGIN_DECLARE(DynamicLoaderPOSIXDYLD);
117 LLDB_PLUGIN_DECLARE(DynamicLoaderStatic);
118 LLDB_PLUGIN_DECLARE(DynamicLoaderWindowsDYLD);
119 
120 using namespace lldb_private;
121 
122 SystemInitializerFull::SystemInitializerFull() {}
123 
124 SystemInitializerFull::~SystemInitializerFull() {}
125 
126 #define LLDB_PROCESS_AArch64(op)                                               \
127   op(ABIMacOSX_arm64);                                                         \
128   op(ABISysV_arm64);
129 #define LLDB_PROCESS_ARM(op)                                                   \
130   op(ABIMacOSX_arm);                                                           \
131   op(ABISysV_arm);
132 #define LLDB_PROCESS_ARC(op) op(ABISysV_arc);
133 #define LLDB_PROCESS_Hexagon(op) op(ABISysV_hexagon);
134 #define LLDB_PROCESS_Mips(op)                                                  \
135   op(ABISysV_mips);                                                            \
136   op(ABISysV_mips64);
137 #define LLDB_PROCESS_PowerPC(op)                                               \
138   op(ABISysV_ppc);                                                             \
139   op(ABISysV_ppc64);
140 #define LLDB_PROCESS_SystemZ(op) op(ABISysV_s390x);
141 #define LLDB_PROCESS_X86(op)                                                   \
142   op(ABIMacOSX_i386);                                                          \
143   op(ABISysV_i386);                                                            \
144   op(ABISysV_x86_64);                                                          \
145   op(ABIWindows_x86_64);
146 
147 #define LLDB_PROCESS_AMDGPU(op)
148 #define LLDB_PROCESS_AVR(op)
149 #define LLDB_PROCESS_BPF(op)
150 #define LLDB_PROCESS_Lanai(op)
151 #define LLDB_PROCESS_MSP430(op)
152 #define LLDB_PROCESS_NVPTX(op)
153 #define LLDB_PROCESS_RISCV(op)
154 #define LLDB_PROCESS_Sparc(op)
155 #define LLDB_PROCESS_WebAssembly(op)
156 #define LLDB_PROCESS_XCore(op)
157 
158 llvm::Error SystemInitializerFull::Initialize() {
159   if (auto e = SystemInitializerCommon::Initialize())
160     return e;
161 
162   LLDB_PLUGIN_INITIALIZE(ObjectFileBreakpad);
163   LLDB_PLUGIN_INITIALIZE(ObjectFileELF);
164   LLDB_PLUGIN_INITIALIZE(ObjectFileMachO);
165   LLDB_PLUGIN_INITIALIZE(ObjectFilePECOFF);
166   LLDB_PLUGIN_INITIALIZE(ObjectFileWasm);
167 
168   LLDB_PLUGIN_INITIALIZE(ObjectContainerBSDArchive);
169   LLDB_PLUGIN_INITIALIZE(ObjectContainerUniversalMachO);
170 
171   LLDB_PLUGIN_INITIALIZE(ScriptInterpreterNone);
172 
173 #if LLDB_ENABLE_PYTHON
174   LLDB_PLUGIN_INITIALIZE(OperatingSystemPython);
175 #endif
176 
177 #if LLDB_ENABLE_PYTHON
178   LLDB_PLUGIN_INITIALIZE(ScriptInterpreterPython);
179 #endif
180 
181 #if LLDB_ENABLE_LUA
182   LLDB_PLUGIN_INITIALIZE(ScriptInterpreterLua);
183 #endif
184   LLDB_PLUGIN_INITIALIZE(PlatformFreeBSD);
185   LLDB_PLUGIN_INITIALIZE(PlatformLinux);
186   LLDB_PLUGIN_INITIALIZE(PlatformNetBSD);
187   LLDB_PLUGIN_INITIALIZE(PlatformOpenBSD);
188   LLDB_PLUGIN_INITIALIZE(PlatformWindows);
189   LLDB_PLUGIN_INITIALIZE(PlatformAndroid);
190   LLDB_PLUGIN_INITIALIZE(PlatformRemoteiOS);
191   LLDB_PLUGIN_INITIALIZE(PlatformMacOSX);
192 
193   // Initialize LLVM and Clang
194   llvm::InitializeAllTargets();
195   llvm::InitializeAllAsmPrinters();
196   llvm::InitializeAllTargetMCs();
197   llvm::InitializeAllDisassemblers();
198 
199   LLDB_PLUGIN_INITIALIZE(TypeSystemClang);
200 
201 #define LLVM_TARGET(t) LLDB_PROCESS_##t(LLDB_PLUGIN_INITIALIZE)
202 #include "llvm/Config/Targets.def"
203 
204   LLDB_PLUGIN_INITIALIZE(ArchitectureArm);
205   LLDB_PLUGIN_INITIALIZE(ArchitectureMips);
206   LLDB_PLUGIN_INITIALIZE(ArchitecturePPC64);
207 
208   LLDB_PLUGIN_INITIALIZE(DisassemblerLLVMC);
209 
210   LLDB_PLUGIN_INITIALIZE(JITLoaderGDB);
211   LLDB_PLUGIN_INITIALIZE(ProcessElfCore);
212   LLDB_PLUGIN_INITIALIZE(ProcessMachCore);
213   LLDB_PLUGIN_INITIALIZE(ProcessMinidump);
214   LLDB_PLUGIN_INITIALIZE(MemoryHistoryASan);
215   LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeASan);
216   LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeTSan);
217   LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeUBSan);
218   LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeMainThreadChecker);
219 
220   LLDB_PLUGIN_INITIALIZE(SymbolVendorELF);
221   LLDB_PLUGIN_INITIALIZE(SymbolFileBreakpad);
222   LLDB_PLUGIN_INITIALIZE(SymbolFileDWARF);
223   LLDB_PLUGIN_INITIALIZE(SymbolFilePDB);
224   LLDB_PLUGIN_INITIALIZE(SymbolFileSymtab);
225   LLDB_PLUGIN_INITIALIZE(SymbolVendorWasm);
226   LLDB_PLUGIN_INITIALIZE(UnwindAssemblyInstEmulation);
227   LLDB_PLUGIN_INITIALIZE(UnwindAssembly_x86);
228 
229   LLDB_PLUGIN_INITIALIZE(EmulateInstructionARM);
230   LLDB_PLUGIN_INITIALIZE(EmulateInstructionARM64);
231   LLDB_PLUGIN_INITIALIZE(EmulateInstructionMIPS);
232   LLDB_PLUGIN_INITIALIZE(EmulateInstructionMIPS64);
233   LLDB_PLUGIN_INITIALIZE(EmulateInstructionPPC64);
234 
235   LLDB_PLUGIN_INITIALIZE(SymbolFileDWARFDebugMap);
236   LLDB_PLUGIN_INITIALIZE(ItaniumABILanguageRuntime);
237   LLDB_PLUGIN_INITIALIZE(AppleObjCRuntime);
238   LLDB_PLUGIN_INITIALIZE(SystemRuntimeMacOSX);
239   LLDB_PLUGIN_INITIALIZE(RenderScriptRuntime);
240 
241   LLDB_PLUGIN_INITIALIZE(CPlusPlusLanguage);
242   LLDB_PLUGIN_INITIALIZE(ObjCLanguage);
243   LLDB_PLUGIN_INITIALIZE(ObjCPlusPlusLanguage);
244 
245 #if defined(_WIN32)
246   LLDB_PLUGIN_INITIALIZE(ProcessWindows);
247 #endif
248 #if defined(__FreeBSD__)
249   LLDB_PLUGIN_INITIALIZE(ProcessFreeBSD);
250 #endif
251 #if defined(__APPLE__)
252   LLDB_PLUGIN_INITIALIZE(SymbolVendorMacOSX);
253   LLDB_PLUGIN_INITIALIZE(ProcessKDP);
254   LLDB_PLUGIN_INITIALIZE(DynamicLoaderDarwinKernel);
255 #endif
256 
257   // This plugin is valid on any host that talks to a Darwin remote. It
258   // shouldn't be limited to __APPLE__.
259   LLDB_PLUGIN_INITIALIZE(StructuredDataDarwinLog);
260 
261   // Platform agnostic plugins
262   LLDB_PLUGIN_INITIALIZE(PlatformRemoteGDBServer);
263 
264   LLDB_PLUGIN_INITIALIZE(ProcessGDBRemote);
265   LLDB_PLUGIN_INITIALIZE(DynamicLoaderMacOSXDYLD);
266   LLDB_PLUGIN_INITIALIZE(DynamicLoaderMacOS);
267   LLDB_PLUGIN_INITIALIZE(DynamicLoaderPOSIXDYLD);
268   LLDB_PLUGIN_INITIALIZE(DynamicLoaderStatic);
269   LLDB_PLUGIN_INITIALIZE(DynamicLoaderWindowsDYLD);
270 
271   // Scan for any system or user LLDB plug-ins
272   PluginManager::Initialize();
273 
274   // The process settings need to know about installed plug-ins, so the
275   // Settings must be initialized
276   // AFTER PluginManager::Initialize is called.
277 
278   Debugger::SettingsInitialize();
279 
280   return llvm::Error::success();
281 }
282 
283 void SystemInitializerFull::Terminate() {
284   static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
285   Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION);
286 
287   Debugger::SettingsTerminate();
288 
289   // Terminate and unload and loaded system or user LLDB plug-ins
290   PluginManager::Terminate();
291 
292   LLDB_PLUGIN_TERMINATE(TypeSystemClang);
293 
294   LLDB_PLUGIN_TERMINATE(ArchitectureArm);
295   LLDB_PLUGIN_TERMINATE(ArchitectureMips);
296   LLDB_PLUGIN_TERMINATE(ArchitecturePPC64);
297 
298 #define LLVM_TARGET(t) LLDB_PROCESS_##t(LLDB_PLUGIN_TERMINATE)
299 #include "llvm/Config/Targets.def"
300 
301   LLDB_PLUGIN_TERMINATE(DisassemblerLLVMC);
302 
303   LLDB_PLUGIN_TERMINATE(JITLoaderGDB);
304   LLDB_PLUGIN_TERMINATE(ProcessElfCore);
305   LLDB_PLUGIN_TERMINATE(ProcessMachCore);
306   LLDB_PLUGIN_TERMINATE(ProcessMinidump);
307   LLDB_PLUGIN_TERMINATE(MemoryHistoryASan);
308 
309   LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeASan);
310   LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeTSan);
311   LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeUBSan);
312   LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeMainThreadChecker);
313 
314   LLDB_PLUGIN_TERMINATE(SymbolVendorWasm);
315   LLDB_PLUGIN_TERMINATE(SymbolVendorELF);
316   LLDB_PLUGIN_TERMINATE(SymbolFileBreakpad);
317   LLDB_PLUGIN_TERMINATE(SymbolFileDWARF);
318   LLDB_PLUGIN_TERMINATE(SymbolFilePDB);
319   LLDB_PLUGIN_TERMINATE(SymbolFileSymtab);
320   LLDB_PLUGIN_TERMINATE(UnwindAssembly_x86);
321   LLDB_PLUGIN_TERMINATE(UnwindAssemblyInstEmulation);
322 
323   LLDB_PLUGIN_TERMINATE(EmulateInstructionARM);
324   LLDB_PLUGIN_TERMINATE(EmulateInstructionARM64);
325   LLDB_PLUGIN_TERMINATE(EmulateInstructionMIPS);
326   LLDB_PLUGIN_TERMINATE(EmulateInstructionMIPS64);
327   LLDB_PLUGIN_TERMINATE(EmulateInstructionPPC64);
328 
329   LLDB_PLUGIN_TERMINATE(SymbolFileDWARFDebugMap);
330   LLDB_PLUGIN_TERMINATE(ItaniumABILanguageRuntime);
331   LLDB_PLUGIN_TERMINATE(AppleObjCRuntime);
332   LLDB_PLUGIN_TERMINATE(SystemRuntimeMacOSX);
333   LLDB_PLUGIN_TERMINATE(RenderScriptRuntime);
334 
335   LLDB_PLUGIN_TERMINATE(CPlusPlusLanguage);
336   LLDB_PLUGIN_TERMINATE(ObjCLanguage);
337   LLDB_PLUGIN_TERMINATE(ObjCPlusPlusLanguage);
338 
339 #if defined(__APPLE__)
340   LLDB_PLUGIN_TERMINATE(DynamicLoaderDarwinKernel);
341   LLDB_PLUGIN_TERMINATE(ProcessKDP);
342   LLDB_PLUGIN_TERMINATE(SymbolVendorMacOSX);
343 #endif
344 
345 #if defined(__FreeBSD__)
346   LLDB_PLUGIN_TERMINATE(ProcessFreeBSD);
347 #endif
348   Debugger::SettingsTerminate();
349 
350   LLDB_PLUGIN_TERMINATE(PlatformRemoteGDBServer);
351   LLDB_PLUGIN_TERMINATE(ProcessGDBRemote);
352   LLDB_PLUGIN_TERMINATE(StructuredDataDarwinLog);
353 
354   LLDB_PLUGIN_TERMINATE(DynamicLoaderMacOSXDYLD);
355   LLDB_PLUGIN_TERMINATE(DynamicLoaderMacOS);
356   LLDB_PLUGIN_TERMINATE(DynamicLoaderPOSIXDYLD);
357   LLDB_PLUGIN_TERMINATE(DynamicLoaderStatic);
358   LLDB_PLUGIN_TERMINATE(DynamicLoaderWindowsDYLD);
359 
360   LLDB_PLUGIN_TERMINATE(PlatformFreeBSD);
361   LLDB_PLUGIN_TERMINATE(PlatformLinux);
362   LLDB_PLUGIN_TERMINATE(PlatformNetBSD);
363   LLDB_PLUGIN_TERMINATE(PlatformOpenBSD);
364   LLDB_PLUGIN_TERMINATE(PlatformWindows);
365   LLDB_PLUGIN_TERMINATE(PlatformAndroid);
366   LLDB_PLUGIN_TERMINATE(PlatformRemoteiOS);
367   LLDB_PLUGIN_TERMINATE(PlatformMacOSX);
368 
369   LLDB_PLUGIN_TERMINATE(ObjectFileBreakpad);
370   LLDB_PLUGIN_TERMINATE(ObjectFileELF);
371   LLDB_PLUGIN_TERMINATE(ObjectFileMachO);
372   LLDB_PLUGIN_TERMINATE(ObjectFilePECOFF);
373   LLDB_PLUGIN_TERMINATE(ObjectFileWasm);
374 
375   LLDB_PLUGIN_TERMINATE(ObjectContainerBSDArchive);
376   LLDB_PLUGIN_TERMINATE(ObjectContainerUniversalMachO);
377 
378 #if LLDB_ENABLE_PYTHON
379   LLDB_PLUGIN_TERMINATE(OperatingSystemPython);
380 #endif
381 
382 #if LLDB_ENABLE_PYTHON
383   LLDB_PLUGIN_TERMINATE(ScriptInterpreterPython);
384 #endif
385 
386 #if LLDB_ENABLE_LUA
387   LLDB_PLUGIN_TERMINATE(ScriptInterpreterLua);
388 #endif
389 
390   LLDB_PLUGIN_TERMINATE(ScriptInterpreterNone);
391 
392   // Now shutdown the common parts, in reverse order.
393   SystemInitializerCommon::Terminate();
394 }
395