blob: b629e53e9dfe185240fbb58b69f66244f7865113 [file] [log] [blame]
Raphael Isemann80814282020-01-24 08:23:27 +01001//===-- SystemInitializerFull.cpp -----------------------------------------===//
Zachary Turnere6e2bb32015-03-31 21:03:22 +00002//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Zachary Turnere6e2bb32015-03-31 21:03:22 +00006//
7//===----------------------------------------------------------------------===//
8
Alex Langfordd17cd902018-05-25 20:28:16 +00009#include "SystemInitializerFull.h"
Zachary Turner2c1f46d2015-07-30 20:28:07 +000010#include "lldb/API/SBCommandInterpreter.h"
Zachary Turnere6e2bb32015-03-31 21:03:22 +000011#include "lldb/Core/Debugger.h"
Jonas Devliegherefbb4d1e2020-02-07 14:58:18 -080012#include "lldb/Core/PluginManager.h"
13#include "lldb/Host/Config.h"
Zachary Turnere6e2bb32015-03-31 21:03:22 +000014#include "lldb/Host/Host.h"
15#include "lldb/Initialization/SystemInitializerCommon.h"
Zachary Turner2c1f46d2015-07-30 20:28:07 +000016#include "lldb/Interpreter/CommandInterpreter.h"
Pavel Labath38d06322017-06-29 14:32:17 +000017#include "lldb/Utility/Timer.h"
Zachary Turnere6e2bb32015-03-31 21:03:22 +000018#include "llvm/Support/TargetSelect.h"
19
Saleem Abdulrasool5a365582019-05-03 23:19:27 +000020#pragma clang diagnostic push
21#pragma clang diagnostic ignored "-Wglobal-constructors"
22#include "llvm/ExecutionEngine/MCJIT.h"
23#pragma clang diagnostic pop
24
Zachary Turnere6e2bb32015-03-31 21:03:22 +000025#include <string>
26
Jonas Devlieghere50c9cd92020-02-17 19:02:25 -080027LLDB_PLUGIN_DECLARE(ABIAArch64)
28LLDB_PLUGIN_DECLARE(ABIARM)
29LLDB_PLUGIN_DECLARE(ABISysV_arc)
30LLDB_PLUGIN_DECLARE(ABISysV_hexagon)
31LLDB_PLUGIN_DECLARE(ABIMips)
32LLDB_PLUGIN_DECLARE(ABIPowerPC)
33LLDB_PLUGIN_DECLARE(ABISysV_s390x)
34LLDB_PLUGIN_DECLARE(ABIX86)
35LLDB_PLUGIN_DECLARE(ObjectFileBreakpad)
36LLDB_PLUGIN_DECLARE(ObjectFileELF)
37LLDB_PLUGIN_DECLARE(ObjectFileMachO)
38LLDB_PLUGIN_DECLARE(ObjectFilePECOFF)
39LLDB_PLUGIN_DECLARE(ObjectFileWasm)
40LLDB_PLUGIN_DECLARE(ObjectContainerBSDArchive)
41LLDB_PLUGIN_DECLARE(ObjectContainerUniversalMachO)
42LLDB_PLUGIN_DECLARE(ScriptInterpreterNone)
43#if LLDB_ENABLE_PYTHON
44LLDB_PLUGIN_DECLARE(OperatingSystemPython)
45LLDB_PLUGIN_DECLARE(ScriptInterpreterPython)
46#endif
47#if LLDB_ENABLE_LUA
48LLDB_PLUGIN_DECLARE(ScriptInterpreterLua)
49#endif
50LLDB_PLUGIN_DECLARE(PlatformFreeBSD)
51LLDB_PLUGIN_DECLARE(PlatformLinux)
52LLDB_PLUGIN_DECLARE(PlatformNetBSD)
53LLDB_PLUGIN_DECLARE(PlatformOpenBSD)
54LLDB_PLUGIN_DECLARE(PlatformWindows)
55LLDB_PLUGIN_DECLARE(PlatformAndroid)
56LLDB_PLUGIN_DECLARE(PlatformMacOSX)
57LLDB_PLUGIN_DECLARE(TypeSystemClang)
58LLDB_PLUGIN_DECLARE(ArchitectureArm)
59LLDB_PLUGIN_DECLARE(ArchitectureMips)
60LLDB_PLUGIN_DECLARE(ArchitecturePPC64)
61LLDB_PLUGIN_DECLARE(DisassemblerLLVMC)
62LLDB_PLUGIN_DECLARE(JITLoaderGDB)
63LLDB_PLUGIN_DECLARE(ProcessElfCore)
64LLDB_PLUGIN_DECLARE(ProcessMachCore)
65LLDB_PLUGIN_DECLARE(ProcessMinidump)
66LLDB_PLUGIN_DECLARE(MemoryHistoryASan)
67LLDB_PLUGIN_DECLARE(InstrumentationRuntimeASan)
68LLDB_PLUGIN_DECLARE(InstrumentationRuntimeTSan)
69LLDB_PLUGIN_DECLARE(InstrumentationRuntimeUBSan)
70LLDB_PLUGIN_DECLARE(InstrumentationRuntimeMainThreadChecker)
71LLDB_PLUGIN_DECLARE(SymbolVendorELF)
72LLDB_PLUGIN_DECLARE(SymbolFileBreakpad)
73LLDB_PLUGIN_DECLARE(SymbolFileDWARF)
74LLDB_PLUGIN_DECLARE(SymbolFilePDB)
75LLDB_PLUGIN_DECLARE(SymbolFileSymtab)
76LLDB_PLUGIN_DECLARE(SymbolVendorWasm)
77LLDB_PLUGIN_DECLARE(UnwindAssemblyInstEmulation)
78LLDB_PLUGIN_DECLARE(UnwindAssembly_x86)
79LLDB_PLUGIN_DECLARE(EmulateInstructionARM)
80LLDB_PLUGIN_DECLARE(EmulateInstructionARM64)
81LLDB_PLUGIN_DECLARE(EmulateInstructionMIPS)
82LLDB_PLUGIN_DECLARE(EmulateInstructionMIPS64)
83LLDB_PLUGIN_DECLARE(EmulateInstructionPPC64)
84LLDB_PLUGIN_DECLARE(ItaniumABILanguageRuntime)
85LLDB_PLUGIN_DECLARE(AppleObjCRuntime)
86LLDB_PLUGIN_DECLARE(SystemRuntimeMacOSX)
87LLDB_PLUGIN_DECLARE(RenderScriptRuntime)
88LLDB_PLUGIN_DECLARE(CPlusPlusLanguage)
89LLDB_PLUGIN_DECLARE(ObjCLanguage)
90LLDB_PLUGIN_DECLARE(ObjCPlusPlusLanguage)
91#if defined(_WIN32)
92LLDB_PLUGIN_DECLARE(ProcessWindows)
93#endif
94#if defined(__FreeBSD__)
95LLDB_PLUGIN_DECLARE(ProcessFreeBSD)
96#endif
97#if defined(__APPLE__)
98LLDB_PLUGIN_DECLARE(SymbolVendorMacOSX)
99LLDB_PLUGIN_DECLARE(ProcessKDP)
100LLDB_PLUGIN_DECLARE(DynamicLoaderDarwinKernel)
101#endif
102LLDB_PLUGIN_DECLARE(StructuredDataDarwinLog)
103LLDB_PLUGIN_DECLARE(PlatformRemoteGDBServer)
104LLDB_PLUGIN_DECLARE(ProcessGDBRemote)
105LLDB_PLUGIN_DECLARE(DynamicLoaderMacOSXDYLD)
106LLDB_PLUGIN_DECLARE(DynamicLoaderPOSIXDYLD)
107LLDB_PLUGIN_DECLARE(DynamicLoaderStatic)
108LLDB_PLUGIN_DECLARE(DynamicLoaderWasmDYLD)
109LLDB_PLUGIN_DECLARE(DynamicLoaderWindowsDYLD)
Jonas Devlieghere3e70a912020-02-07 17:58:30 -0800110
Zachary Turnere6e2bb32015-03-31 21:03:22 +0000111using namespace lldb_private;
112
Kate Stoneb9c1b512016-09-06 20:57:50 +0000113SystemInitializerFull::SystemInitializerFull() {}
Zachary Turnere6e2bb32015-03-31 21:03:22 +0000114
Kate Stoneb9c1b512016-09-06 20:57:50 +0000115SystemInitializerFull::~SystemInitializerFull() {}
Zachary Turnere6e2bb32015-03-31 21:03:22 +0000116
Jonas Devlieghere50c9cd92020-02-17 19:02:25 -0800117#define LLDB_PROCESS_AArch64(op) op(ABIAArch64);
118#define LLDB_PROCESS_ARM(op) op(ABIARM);
119#define LLDB_PROCESS_ARC(op) op(ABISysV_arc);
120#define LLDB_PROCESS_Hexagon(op) op(ABISysV_hexagon);
121#define LLDB_PROCESS_Mips(op) op(ABIMips);
122#define LLDB_PROCESS_PowerPC(op) op(ABIPowerPC);
123#define LLDB_PROCESS_SystemZ(op) op(ABISysV_s390x);
124#define LLDB_PROCESS_X86(op) op(ABIX86);
125
126#define LLDB_PROCESS_AMDGPU(op)
127#define LLDB_PROCESS_AVR(op)
128#define LLDB_PROCESS_BPF(op)
129#define LLDB_PROCESS_Lanai(op)
130#define LLDB_PROCESS_MSP430(op)
131#define LLDB_PROCESS_NVPTX(op)
132#define LLDB_PROCESS_RISCV(op)
133#define LLDB_PROCESS_Sparc(op)
134#define LLDB_PROCESS_WebAssembly(op)
135#define LLDB_PROCESS_XCore(op)
136
Jonas Devlieghere936c6242019-02-21 22:26:16 +0000137llvm::Error SystemInitializerFull::Initialize() {
138 if (auto e = SystemInitializerCommon::Initialize())
Jonas Devlieghere15eacd72018-12-03 17:28:29 +0000139 return e;
Pavel Labathfa3fa5b2018-05-24 12:44:18 +0000140
Jonas Devlieghere50c9cd92020-02-17 19:02:25 -0800141 LLDB_PLUGIN_INITIALIZE(ObjectFileBreakpad);
142 LLDB_PLUGIN_INITIALIZE(ObjectFileELF);
143 LLDB_PLUGIN_INITIALIZE(ObjectFileMachO);
144 LLDB_PLUGIN_INITIALIZE(ObjectFilePECOFF);
145 LLDB_PLUGIN_INITIALIZE(ObjectFileWasm);
146
147 LLDB_PLUGIN_INITIALIZE(ObjectContainerBSDArchive);
148 LLDB_PLUGIN_INITIALIZE(ObjectContainerUniversalMachO);
149
150 LLDB_PLUGIN_INITIALIZE(ScriptInterpreterNone);
151
152#if LLDB_ENABLE_PYTHON
153 LLDB_PLUGIN_INITIALIZE(OperatingSystemPython);
154#endif
155
156#if LLDB_ENABLE_PYTHON
157 LLDB_PLUGIN_INITIALIZE(ScriptInterpreterPython);
158#endif
159
160#if LLDB_ENABLE_LUA
161 LLDB_PLUGIN_INITIALIZE(ScriptInterpreterLua);
162#endif
163 LLDB_PLUGIN_INITIALIZE(PlatformFreeBSD);
164 LLDB_PLUGIN_INITIALIZE(PlatformLinux);
165 LLDB_PLUGIN_INITIALIZE(PlatformNetBSD);
166 LLDB_PLUGIN_INITIALIZE(PlatformOpenBSD);
167 LLDB_PLUGIN_INITIALIZE(PlatformWindows);
168 LLDB_PLUGIN_INITIALIZE(PlatformAndroid);
169 LLDB_PLUGIN_INITIALIZE(PlatformMacOSX);
170
Kate Stoneb9c1b512016-09-06 20:57:50 +0000171 // Initialize LLVM and Clang
172 llvm::InitializeAllTargets();
173 llvm::InitializeAllAsmPrinters();
174 llvm::InitializeAllTargetMCs();
175 llvm::InitializeAllDisassemblers();
Zachary Turnere6e2bb32015-03-31 21:03:22 +0000176
Jonas Devlieghere50c9cd92020-02-17 19:02:25 -0800177 LLDB_PLUGIN_INITIALIZE(TypeSystemClang);
Greg Clayton56939cb2015-09-17 22:23:34 +0000178
Jonas Devlieghere50c9cd92020-02-17 19:02:25 -0800179#define LLVM_TARGET(t) LLDB_PROCESS_##t(LLDB_PLUGIN_INITIALIZE)
180#include "llvm/Config/Targets.def"
181
182 LLDB_PLUGIN_INITIALIZE(ArchitectureArm);
183 LLDB_PLUGIN_INITIALIZE(ArchitectureMips);
184 LLDB_PLUGIN_INITIALIZE(ArchitecturePPC64);
185
186 LLDB_PLUGIN_INITIALIZE(DisassemblerLLVMC);
187
188 LLDB_PLUGIN_INITIALIZE(JITLoaderGDB);
189 LLDB_PLUGIN_INITIALIZE(ProcessElfCore);
190 LLDB_PLUGIN_INITIALIZE(ProcessMachCore);
191 LLDB_PLUGIN_INITIALIZE(ProcessMinidump);
192 LLDB_PLUGIN_INITIALIZE(MemoryHistoryASan);
193 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeASan);
194 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeTSan);
195 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeUBSan);
196 LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeMainThreadChecker);
197
198 LLDB_PLUGIN_INITIALIZE(SymbolVendorELF);
199 LLDB_PLUGIN_INITIALIZE(SymbolFileBreakpad);
200 LLDB_PLUGIN_INITIALIZE(SymbolFileDWARF);
201 LLDB_PLUGIN_INITIALIZE(SymbolFilePDB);
202 LLDB_PLUGIN_INITIALIZE(SymbolFileSymtab);
203 LLDB_PLUGIN_INITIALIZE(SymbolVendorWasm);
204 LLDB_PLUGIN_INITIALIZE(UnwindAssemblyInstEmulation);
205 LLDB_PLUGIN_INITIALIZE(UnwindAssembly_x86);
206
207 LLDB_PLUGIN_INITIALIZE(EmulateInstructionARM);
208 LLDB_PLUGIN_INITIALIZE(EmulateInstructionARM64);
209 LLDB_PLUGIN_INITIALIZE(EmulateInstructionMIPS);
210 LLDB_PLUGIN_INITIALIZE(EmulateInstructionMIPS64);
211 LLDB_PLUGIN_INITIALIZE(EmulateInstructionPPC64);
212
213 LLDB_PLUGIN_INITIALIZE(ItaniumABILanguageRuntime);
214 LLDB_PLUGIN_INITIALIZE(AppleObjCRuntime);
215 LLDB_PLUGIN_INITIALIZE(SystemRuntimeMacOSX);
216 LLDB_PLUGIN_INITIALIZE(RenderScriptRuntime);
217
218 LLDB_PLUGIN_INITIALIZE(CPlusPlusLanguage);
219 LLDB_PLUGIN_INITIALIZE(ObjCLanguage);
220 LLDB_PLUGIN_INITIALIZE(ObjCPlusPlusLanguage);
221
222#if defined(_WIN32)
223 LLDB_PLUGIN_INITIALIZE(ProcessWindows);
224#endif
225#if defined(__FreeBSD__)
226 LLDB_PLUGIN_INITIALIZE(ProcessFreeBSD);
227#endif
228#if defined(__APPLE__)
229 LLDB_PLUGIN_INITIALIZE(SymbolVendorMacOSX);
230 LLDB_PLUGIN_INITIALIZE(ProcessKDP);
231 LLDB_PLUGIN_INITIALIZE(DynamicLoaderDarwinKernel);
232#endif
233
234 // This plugin is valid on any host that talks to a Darwin remote. It
235 // shouldn't be limited to __APPLE__.
236 LLDB_PLUGIN_INITIALIZE(StructuredDataDarwinLog);
237
238 // Platform agnostic plugins
239 LLDB_PLUGIN_INITIALIZE(PlatformRemoteGDBServer);
240
241 LLDB_PLUGIN_INITIALIZE(ProcessGDBRemote);
242 LLDB_PLUGIN_INITIALIZE(DynamicLoaderMacOSXDYLD);
243 LLDB_PLUGIN_INITIALIZE(DynamicLoaderPOSIXDYLD);
244 LLDB_PLUGIN_INITIALIZE(DynamicLoaderWasmDYLD); // Before DynamicLoaderStatic.
245 LLDB_PLUGIN_INITIALIZE(DynamicLoaderStatic);
246 LLDB_PLUGIN_INITIALIZE(DynamicLoaderWindowsDYLD);
247
248 // Scan for any system or user LLDB plug-ins
Kate Stoneb9c1b512016-09-06 20:57:50 +0000249 PluginManager::Initialize();
Zachary Turnere6e2bb32015-03-31 21:03:22 +0000250
Adrian Prantl05097242018-04-30 16:49:04 +0000251 // The process settings need to know about installed plug-ins, so the
Jonas Devlieghere50c9cd92020-02-17 19:02:25 -0800252 // Settings must be initialized
253 // AFTER PluginManager::Initialize is called.
254
Kate Stoneb9c1b512016-09-06 20:57:50 +0000255 Debugger::SettingsInitialize();
Jonas Devlieghere15eacd72018-12-03 17:28:29 +0000256
257 return llvm::Error::success();
Zachary Turnere6e2bb32015-03-31 21:03:22 +0000258}
259
Kate Stoneb9c1b512016-09-06 20:57:50 +0000260void SystemInitializerFull::Terminate() {
Pavel Labathf9d16472017-05-15 13:02:37 +0000261 static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
262 Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION);
Zachary Turnere6e2bb32015-03-31 21:03:22 +0000263
Kate Stoneb9c1b512016-09-06 20:57:50 +0000264 Debugger::SettingsTerminate();
Zachary Turnere6e2bb32015-03-31 21:03:22 +0000265
Jonas Devlieghere50c9cd92020-02-17 19:02:25 -0800266 // Terminate and unload and loaded system or user LLDB plug-ins
Kate Stoneb9c1b512016-09-06 20:57:50 +0000267 PluginManager::Terminate();
Greg Clayton56939cb2015-09-17 22:23:34 +0000268
Jonas Devlieghere50c9cd92020-02-17 19:02:25 -0800269 LLDB_PLUGIN_TERMINATE(TypeSystemClang);
270
271 LLDB_PLUGIN_TERMINATE(ArchitectureArm);
272 LLDB_PLUGIN_TERMINATE(ArchitectureMips);
273 LLDB_PLUGIN_TERMINATE(ArchitecturePPC64);
274
275#define LLVM_TARGET(t) LLDB_PROCESS_##t(LLDB_PLUGIN_TERMINATE)
276#include "llvm/Config/Targets.def"
277
278 LLDB_PLUGIN_TERMINATE(DisassemblerLLVMC);
279
280 LLDB_PLUGIN_TERMINATE(JITLoaderGDB);
281 LLDB_PLUGIN_TERMINATE(ProcessElfCore);
282 LLDB_PLUGIN_TERMINATE(ProcessMachCore);
283 LLDB_PLUGIN_TERMINATE(ProcessMinidump);
284 LLDB_PLUGIN_TERMINATE(MemoryHistoryASan);
285
286 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeASan);
287 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeTSan);
288 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeUBSan);
289 LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeMainThreadChecker);
290
291 LLDB_PLUGIN_TERMINATE(SymbolVendorWasm);
292 LLDB_PLUGIN_TERMINATE(SymbolVendorELF);
293 LLDB_PLUGIN_TERMINATE(SymbolFileBreakpad);
294 LLDB_PLUGIN_TERMINATE(SymbolFileDWARF);
295 LLDB_PLUGIN_TERMINATE(SymbolFilePDB);
296 LLDB_PLUGIN_TERMINATE(SymbolFileSymtab);
297 LLDB_PLUGIN_TERMINATE(UnwindAssembly_x86);
298 LLDB_PLUGIN_TERMINATE(UnwindAssemblyInstEmulation);
299
300 LLDB_PLUGIN_TERMINATE(EmulateInstructionARM);
301 LLDB_PLUGIN_TERMINATE(EmulateInstructionARM64);
302 LLDB_PLUGIN_TERMINATE(EmulateInstructionMIPS);
303 LLDB_PLUGIN_TERMINATE(EmulateInstructionMIPS64);
304 LLDB_PLUGIN_TERMINATE(EmulateInstructionPPC64);
305
306 LLDB_PLUGIN_TERMINATE(ItaniumABILanguageRuntime);
307 LLDB_PLUGIN_TERMINATE(AppleObjCRuntime);
308 LLDB_PLUGIN_TERMINATE(SystemRuntimeMacOSX);
309 LLDB_PLUGIN_TERMINATE(RenderScriptRuntime);
310
311 LLDB_PLUGIN_TERMINATE(CPlusPlusLanguage);
312 LLDB_PLUGIN_TERMINATE(ObjCLanguage);
313 LLDB_PLUGIN_TERMINATE(ObjCPlusPlusLanguage);
314
315#if defined(__APPLE__)
316 LLDB_PLUGIN_TERMINATE(DynamicLoaderDarwinKernel);
317 LLDB_PLUGIN_TERMINATE(ProcessKDP);
318 LLDB_PLUGIN_TERMINATE(SymbolVendorMacOSX);
319#endif
320
321#if defined(__FreeBSD__)
322 LLDB_PLUGIN_TERMINATE(ProcessFreeBSD);
323#endif
324 Debugger::SettingsTerminate();
325
326 LLDB_PLUGIN_TERMINATE(PlatformRemoteGDBServer);
327 LLDB_PLUGIN_TERMINATE(ProcessGDBRemote);
328 LLDB_PLUGIN_TERMINATE(StructuredDataDarwinLog);
329
330 LLDB_PLUGIN_TERMINATE(DynamicLoaderMacOSXDYLD);
331 LLDB_PLUGIN_TERMINATE(DynamicLoaderPOSIXDYLD);
332 LLDB_PLUGIN_TERMINATE(DynamicLoaderWasmDYLD);
333 LLDB_PLUGIN_TERMINATE(DynamicLoaderStatic);
334 LLDB_PLUGIN_TERMINATE(DynamicLoaderWindowsDYLD);
335
336 LLDB_PLUGIN_TERMINATE(PlatformFreeBSD);
337 LLDB_PLUGIN_TERMINATE(PlatformLinux);
338 LLDB_PLUGIN_TERMINATE(PlatformNetBSD);
339 LLDB_PLUGIN_TERMINATE(PlatformOpenBSD);
340 LLDB_PLUGIN_TERMINATE(PlatformWindows);
341 LLDB_PLUGIN_TERMINATE(PlatformAndroid);
342 LLDB_PLUGIN_TERMINATE(PlatformMacOSX);
343
344 LLDB_PLUGIN_TERMINATE(ObjectFileBreakpad);
345 LLDB_PLUGIN_TERMINATE(ObjectFileELF);
346 LLDB_PLUGIN_TERMINATE(ObjectFileMachO);
347 LLDB_PLUGIN_TERMINATE(ObjectFilePECOFF);
348 LLDB_PLUGIN_TERMINATE(ObjectFileWasm);
349
350 LLDB_PLUGIN_TERMINATE(ObjectContainerBSDArchive);
351 LLDB_PLUGIN_TERMINATE(ObjectContainerUniversalMachO);
352
353#if LLDB_ENABLE_PYTHON
354 LLDB_PLUGIN_TERMINATE(OperatingSystemPython);
355#endif
356
357#if LLDB_ENABLE_PYTHON
358 LLDB_PLUGIN_TERMINATE(ScriptInterpreterPython);
359#endif
360
361#if LLDB_ENABLE_LUA
362 LLDB_PLUGIN_TERMINATE(ScriptInterpreterLua);
363#endif
364
365 LLDB_PLUGIN_TERMINATE(ScriptInterpreterNone);
Jonas Devliegherefbb4d1e2020-02-07 14:58:18 -0800366
Kate Stoneb9c1b512016-09-06 20:57:50 +0000367 // Now shutdown the common parts, in reverse order.
368 SystemInitializerCommon::Terminate();
Zachary Turnere6e2bb32015-03-31 21:03:22 +0000369}