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