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