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