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