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