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