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