SystemInitializerFull.cpp revision 360784
190075Sobrien//===-- SystemInitializerFull.cpp -------------------------------*- C++ -*-===//
290075Sobrien//
390075Sobrien// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
490075Sobrien// See https://llvm.org/LICENSE.txt for license information.
590075Sobrien// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
690075Sobrien//
790075Sobrien//===----------------------------------------------------------------------===//
890075Sobrien
990075Sobrien#include "SystemInitializerFull.h"
1090075Sobrien#include "lldb/API/SBCommandInterpreter.h"
1190075Sobrien#include "lldb/Host/Config.h"
1290075Sobrien
1390075Sobrien#if LLDB_ENABLE_PYTHON
1490075Sobrien#include "Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.h"
1590075Sobrien#endif
1690075Sobrien
1790075Sobrien#if LLDB_ENABLE_LUA
1890075Sobrien#include "Plugins/ScriptInterpreter/Lua/ScriptInterpreterLua.h"
1990075Sobrien#endif
2090075Sobrien
2190075Sobrien#include "lldb/Core/Debugger.h"
2290075Sobrien#include "lldb/Host/Host.h"
2390075Sobrien#include "lldb/Initialization/SystemInitializerCommon.h"
2490075Sobrien#include "lldb/Interpreter/CommandInterpreter.h"
2590075Sobrien#include "lldb/Symbol/ClangASTContext.h"
2690075Sobrien#include "lldb/Utility/Timer.h"
2790075Sobrien
2890075Sobrien#ifdef LLDB_ENABLE_ALL
2990075Sobrien#include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"
3090075Sobrien#include "Plugins/ABI/MacOSX-arm64/ABIMacOSX_arm64.h"
3190075Sobrien#include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
3290075Sobrien#include "Plugins/ABI/SysV-arc/ABISysV_arc.h"
3390075Sobrien#endif // LLDB_ENABLE_ALL
3490075Sobrien#include "Plugins/ABI/SysV-arm/ABISysV_arm.h"
3590075Sobrien#include "Plugins/ABI/SysV-arm64/ABISysV_arm64.h"
3690075Sobrien#ifdef LLDB_ENABLE_ALL
3790075Sobrien#include "Plugins/ABI/SysV-hexagon/ABISysV_hexagon.h"
3890075Sobrien#endif // LLDB_ENABLE_ALL
3990075Sobrien#include "Plugins/ABI/SysV-i386/ABISysV_i386.h"
4090075Sobrien#include "Plugins/ABI/SysV-mips/ABISysV_mips.h"
4190075Sobrien#include "Plugins/ABI/SysV-mips64/ABISysV_mips64.h"
4290075Sobrien#include "Plugins/ABI/SysV-ppc/ABISysV_ppc.h"
4390075Sobrien#include "Plugins/ABI/SysV-ppc64/ABISysV_ppc64.h"
4490075Sobrien#ifdef LLDB_ENABLE_ALL
4590075Sobrien#include "Plugins/ABI/SysV-s390x/ABISysV_s390x.h"
4696263Sobrien#endif // LLDB_ENABLE_ALL
4790075Sobrien#include "Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h"
4890075Sobrien#ifdef LLDB_ENABLE_ALL
4990075Sobrien#include "Plugins/ABI/Windows-x86_64/ABIWindows_x86_64.h"
5090075Sobrien#endif // LLDB_ENABLE_ALL
5190075Sobrien#include "Plugins/Architecture/Arm/ArchitectureArm.h"
5290075Sobrien#include "Plugins/Architecture/Mips/ArchitectureMips.h"
5390075Sobrien#include "Plugins/Architecture/PPC64/ArchitecturePPC64.h"
5490075Sobrien#include "Plugins/Disassembler/llvm/DisassemblerLLVMC.h"
5590075Sobrien#ifdef LLDB_ENABLE_ALL
5690075Sobrien#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.h"
5790075Sobrien#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h"
5890075Sobrien#endif // LLDB_ENABLE_ALL
5990075Sobrien#include "Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h"
6090075Sobrien#include "Plugins/DynamicLoader/Static/DynamicLoaderStatic.h"
6190075Sobrien#ifdef LLDB_ENABLE_ALL
6290075Sobrien#include "Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.h"
6390075Sobrien#endif // LLDB_ENABLE_ALL
6490075Sobrien#include "Plugins/Instruction/ARM/EmulateInstructionARM.h"
6590075Sobrien#include "Plugins/Instruction/ARM64/EmulateInstructionARM64.h"
6690075Sobrien#include "Plugins/Instruction/MIPS/EmulateInstructionMIPS.h"
6790075Sobrien#include "Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h"
6890075Sobrien#include "Plugins/Instruction/PPC64/EmulateInstructionPPC64.h"
6990075Sobrien#include "Plugins/InstrumentationRuntime/ASan/ASanRuntime.h"
7090075Sobrien#include "Plugins/InstrumentationRuntime/MainThreadChecker/MainThreadCheckerRuntime.h"
7190075Sobrien#ifdef LLDB_ENABLE_ALL
7290075Sobrien#include "Plugins/InstrumentationRuntime/TSan/TSanRuntime.h"
7390075Sobrien#endif // LLDB_ENABLE_ALL
7490075Sobrien#include "Plugins/InstrumentationRuntime/UBSan/UBSanRuntime.h"
7590075Sobrien#include "Plugins/JITLoader/GDB/JITLoaderGDB.h"
7690075Sobrien#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
7790075Sobrien#ifdef LLDB_ENABLE_ALL
7890075Sobrien#include "Plugins/Language/ObjC/ObjCLanguage.h"
7990075Sobrien#include "Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h"
8090075Sobrien#endif // LLDB_ENABLE_ALL
8190075Sobrien#include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h"
8290075Sobrien#ifdef LLDB_ENABLE_ALL
8390075Sobrien#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h"
8490075Sobrien#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h"
8590075Sobrien#include "Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h"
8690075Sobrien#endif // LLDB_ENABLE_ALL
8790075Sobrien#include "Plugins/MemoryHistory/asan/MemoryHistoryASan.h"
8890075Sobrien#include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h"
8990075Sobrien#ifdef LLDB_ENABLE_ALL
9090075Sobrien#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h"
9190075Sobrien#endif // LLDB_ENABLE_ALL
9290075Sobrien#include "Plugins/ObjectFile/Breakpad/ObjectFileBreakpad.h"
9390075Sobrien#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
9490075Sobrien#ifdef LLDB_ENABLE_ALL
9590075Sobrien#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
9690075Sobrien#include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"
9790075Sobrien#include "Plugins/OperatingSystem/Python/OperatingSystemPython.h"
9890075Sobrien#include "Plugins/Platform/Android/PlatformAndroid.h"
9990075Sobrien#endif // LLDB_ENABLE_ALL
10090075Sobrien#include "Plugins/Platform/FreeBSD/PlatformFreeBSD.h"
10190075Sobrien#ifdef LLDB_ENABLE_ALL
10290075Sobrien#include "Plugins/Platform/Linux/PlatformLinux.h"
10390075Sobrien#include "Plugins/Platform/MacOSX/PlatformMacOSX.h"
10490075Sobrien#include "Plugins/Platform/MacOSX/PlatformRemoteiOS.h"
10590075Sobrien#include "Plugins/Platform/NetBSD/PlatformNetBSD.h"
10690075Sobrien#include "Plugins/Platform/OpenBSD/PlatformOpenBSD.h"
10790075Sobrien#include "Plugins/Platform/Windows/PlatformWindows.h"
10890075Sobrien#endif // LLDB_ENABLE_ALL
10990075Sobrien#include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
11090075Sobrien#include "Plugins/Process/elf-core/ProcessElfCore.h"
11190075Sobrien#include "Plugins/Process/gdb-remote/ProcessGDBRemote.h"
11290075Sobrien#ifdef LLDB_ENABLE_ALL
11390075Sobrien#include "Plugins/Process/mach-core/ProcessMachCore.h"
11490075Sobrien#include "Plugins/Process/minidump/ProcessMinidump.h"
11590075Sobrien#endif // LLDB_ENABLE_ALL
11690075Sobrien#include "Plugins/ScriptInterpreter/None/ScriptInterpreterNone.h"
11790075Sobrien#include "Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h"
11890075Sobrien#include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h"
11990075Sobrien#include "Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h"
12090075Sobrien#ifdef LLDB_ENABLE_ALL
12190075Sobrien#include "Plugins/SymbolFile/PDB/SymbolFilePDB.h"
12290075Sobrien#endif // LLDB_ENABLE_ALL
12390075Sobrien#include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h"
12490075Sobrien#include "Plugins/SymbolVendor/ELF/SymbolVendorELF.h"
12590075Sobrien#ifdef LLDB_ENABLE_ALL
12690075Sobrien#include "Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h"
12790075Sobrien#endif // LLDB_ENABLE_ALL
12890075Sobrien#include "Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.h"
12990075Sobrien#include "Plugins/UnwindAssembly/x86/UnwindAssembly-x86.h"
13090075Sobrien
13190075Sobrien#if defined(__APPLE__)
13290075Sobrien#include "Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h"
13390075Sobrien#include "Plugins/Platform/MacOSX/PlatformAppleTVSimulator.h"
13490075Sobrien#include "Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.h"
13590075Sobrien#include "Plugins/Platform/MacOSX/PlatformDarwinKernel.h"
13690075Sobrien#include "Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h"
13790075Sobrien#include "Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h"
13890075Sobrien#include "Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h"
13990075Sobrien#include "Plugins/Platform/MacOSX/PlatformiOSSimulator.h"
14090075Sobrien#include "Plugins/Process/MacOSX-Kernel/ProcessKDP.h"
14190075Sobrien#include "Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.h"
14290075Sobrien#endif
14390075Sobrien#ifdef LLDB_ENABLE_ALL
14490075Sobrien#include "Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h"
14590075Sobrien#endif // LLDB_ENABLE_ALL
14690075Sobrien
14790075Sobrien#if defined(__FreeBSD__)
14890075Sobrien#include "Plugins/Process/FreeBSD/ProcessFreeBSD.h"
14990075Sobrien#endif
15090075Sobrien
15190075Sobrien#if defined(_WIN32)
15290075Sobrien#include "Plugins/Process/Windows/Common/ProcessWindows.h"
15390075Sobrien#include "lldb/Host/windows/windows.h"
15490075Sobrien#endif
15590075Sobrien
15690075Sobrien#include "llvm/Support/TargetSelect.h"
15790075Sobrien
15890075Sobrien#pragma clang diagnostic push
15990075Sobrien#pragma clang diagnostic ignored "-Wglobal-constructors"
16090075Sobrien#include "llvm/ExecutionEngine/MCJIT.h"
16190075Sobrien#pragma clang diagnostic pop
16290075Sobrien
16390075Sobrien#include <string>
16490075Sobrien
16590075Sobrienusing namespace lldb_private;
16690075Sobrien
16790075SobrienSystemInitializerFull::SystemInitializerFull() {}
16890075Sobrien
16990075SobrienSystemInitializerFull::~SystemInitializerFull() {}
17090075Sobrien
17190075Sobrien#ifdef LLDB_ENABLE_ALL
17290075Sobrien#define LLDB_PROCESS_AArch64(op)                                               \
17390075Sobrien  ABIMacOSX_arm64::op();                                                       \
17490075Sobrien  ABISysV_arm64::op();
17590075Sobrien#else // LLDB_ENABLE_ALL
17690075Sobrien#define LLDB_PROCESS_AArch64(op)                                               \
17790075Sobrien  ABISysV_arm64::op();
17890075Sobrien#endif // LLDB_ENABLE_ALL
17990075Sobrien#ifdef LLDB_ENABLE_ALL
18090075Sobrien#define LLDB_PROCESS_ARM(op)                                                   \
18190075Sobrien  ABIMacOSX_arm::op();                                                         \
18290075Sobrien  ABISysV_arm::op();
18390075Sobrien#else // LLDB_ENABLE_ALL
18490075Sobrien#define LLDB_PROCESS_ARM(op)                                                   \
18590075Sobrien  ABISysV_arm::op();
18690075Sobrien#endif // LLDB_ENABLE_ALL
18790075Sobrien#define LLDB_PROCESS_ARC(op)                                                   \
18890075Sobrien  ABISysV_arc::op();
18990075Sobrien#define LLDB_PROCESS_Hexagon(op) ABISysV_hexagon::op();
19090075Sobrien#define LLDB_PROCESS_Mips(op)                                                  \
19190075Sobrien  ABISysV_mips::op();                                                          \
19290075Sobrien  ABISysV_mips64::op();
19390075Sobrien#define LLDB_PROCESS_PowerPC(op)                                               \
19490075Sobrien  ABISysV_ppc::op();                                                          \
19590075Sobrien  ABISysV_ppc64::op();
19690075Sobrien#define LLDB_PROCESS_SystemZ(op) ABISysV_s390x::op();
19790075Sobrien#ifdef LLDB_ENABLE_ALL
19890075Sobrien#define LLDB_PROCESS_X86(op)                                                   \
19990075Sobrien  ABIMacOSX_i386::op();                                                        \
20090075Sobrien  ABISysV_i386::op();                                                          \
20190075Sobrien  ABISysV_x86_64::op();                                                        \
20290075Sobrien  ABIWindows_x86_64::op();
20390075Sobrien#else // LLDB_ENABLE_ALL
20490075Sobrien#define LLDB_PROCESS_X86(op)                                                   \
20590075Sobrien  ABISysV_i386::op();                                                          \
20690075Sobrien  ABISysV_x86_64::op();
20790075Sobrien#endif // LLDB_ENABLE_ALL
20890075Sobrien
20990075Sobrien#define LLDB_PROCESS_AMDGPU(op)
21090075Sobrien#define LLDB_PROCESS_AVR(op)
21190075Sobrien#define LLDB_PROCESS_BPF(op)
21290075Sobrien#define LLDB_PROCESS_Lanai(op)
21390075Sobrien#define LLDB_PROCESS_MSP430(op)
21490075Sobrien#define LLDB_PROCESS_NVPTX(op)
21590075Sobrien#define LLDB_PROCESS_RISCV(op)
21690075Sobrien#define LLDB_PROCESS_Sparc(op)
21790075Sobrien#define LLDB_PROCESS_WebAssembly(op)
21890075Sobrien#define LLDB_PROCESS_XCore(op)
21990075Sobrien
22090075Sobrienllvm::Error SystemInitializerFull::Initialize() {
22190075Sobrien  if (auto e = SystemInitializerCommon::Initialize())
22290075Sobrien    return e;
22390075Sobrien
22490075Sobrien  breakpad::ObjectFileBreakpad::Initialize();
22590075Sobrien  ObjectFileELF::Initialize();
22690075Sobrien#ifdef LLDB_ENABLE_ALL
22790075Sobrien  ObjectFileMachO::Initialize();
22890075Sobrien  ObjectFilePECOFF::Initialize();
22990075Sobrien#endif // LLDB_ENABLE_ALL
23090075Sobrien
23190075Sobrien  ObjectContainerBSDArchive::Initialize();
23290075Sobrien#ifdef LLDB_ENABLE_ALL
23390075Sobrien  ObjectContainerUniversalMachO::Initialize();
23490075Sobrien#endif // LLDB_ENABLE_ALL
23590075Sobrien
23690075Sobrien  ScriptInterpreterNone::Initialize();
23790075Sobrien
23890075Sobrien#if LLDB_ENABLE_PYTHON
23990075Sobrien  OperatingSystemPython::Initialize();
24090075Sobrien#endif
24190075Sobrien
24290075Sobrien#if LLDB_ENABLE_PYTHON
24390075Sobrien  ScriptInterpreterPython::Initialize();
24490075Sobrien#endif
24590075Sobrien
24690075Sobrien#if LLDB_ENABLE_LUA
24790075Sobrien  ScriptInterpreterLua::Initialize();
24890075Sobrien#endif
24990075Sobrien
25090075Sobrien  platform_freebsd::PlatformFreeBSD::Initialize();
25190075Sobrien#ifdef LLDB_ENABLE_ALL
25290075Sobrien  platform_linux::PlatformLinux::Initialize();
25390075Sobrien  platform_netbsd::PlatformNetBSD::Initialize();
25490075Sobrien  platform_openbsd::PlatformOpenBSD::Initialize();
25590075Sobrien  PlatformWindows::Initialize();
25690075Sobrien  platform_android::PlatformAndroid::Initialize();
25790075Sobrien  PlatformRemoteiOS::Initialize();
25890075Sobrien  PlatformMacOSX::Initialize();
25990075Sobrien#endif // LLDB_ENABLE_ALL
26090075Sobrien#if defined(__APPLE__)
26190075Sobrien  PlatformiOSSimulator::Initialize();
26290075Sobrien  PlatformDarwinKernel::Initialize();
26390075Sobrien#endif
26490075Sobrien
26590075Sobrien  // Initialize LLVM and Clang
26690075Sobrien  llvm::InitializeAllTargets();
26790075Sobrien  llvm::InitializeAllAsmPrinters();
26890075Sobrien  llvm::InitializeAllTargetMCs();
26990075Sobrien  llvm::InitializeAllDisassemblers();
27090075Sobrien
27190075Sobrien  ClangASTContext::Initialize();
27290075Sobrien
27390075Sobrien#define LLVM_TARGET(t) LLDB_PROCESS_ ## t(Initialize)
27490075Sobrien#include "llvm/Config/Targets.def"
27590075Sobrien
27690075Sobrien  ArchitectureArm::Initialize();
27790075Sobrien  ArchitectureMips::Initialize();
27890075Sobrien  ArchitecturePPC64::Initialize();
27990075Sobrien
28090075Sobrien  DisassemblerLLVMC::Initialize();
28196263Sobrien
28296263Sobrien  JITLoaderGDB::Initialize();
28396263Sobrien  ProcessElfCore::Initialize();
28496263Sobrien#ifdef LLDB_ENABLE_ALL
28596263Sobrien  ProcessMachCore::Initialize();
28696263Sobrien  minidump::ProcessMinidump::Initialize();
28796263Sobrien#endif // LLDB_ENABLE_ALL
28896263Sobrien  MemoryHistoryASan::Initialize();
28996263Sobrien  AddressSanitizerRuntime::Initialize();
29096263Sobrien#ifdef LLDB_ENABLE_ALL
29196263Sobrien  ThreadSanitizerRuntime::Initialize();
29296263Sobrien#endif // LLDB_ENABLE_ALL
29396263Sobrien  UndefinedBehaviorSanitizerRuntime::Initialize();
29496263Sobrien  MainThreadCheckerRuntime::Initialize();
29596263Sobrien
29696263Sobrien  SymbolVendorELF::Initialize();
29796263Sobrien  breakpad::SymbolFileBreakpad::Initialize();
29896263Sobrien  SymbolFileDWARF::Initialize();
29996263Sobrien#ifdef LLDB_ENABLE_ALL
30096263Sobrien  SymbolFilePDB::Initialize();
30196263Sobrien#endif // LLDB_ENABLE_ALL
30296263Sobrien  SymbolFileSymtab::Initialize();
30396263Sobrien  UnwindAssemblyInstEmulation::Initialize();
30496263Sobrien  UnwindAssembly_x86::Initialize();
30596263Sobrien
30696263Sobrien  EmulateInstructionARM::Initialize();
30796263Sobrien  EmulateInstructionARM64::Initialize();
30896263Sobrien  EmulateInstructionMIPS::Initialize();
30996263Sobrien  EmulateInstructionMIPS64::Initialize();
31096263Sobrien  EmulateInstructionPPC64::Initialize();
31196263Sobrien
31296263Sobrien  SymbolFileDWARFDebugMap::Initialize();
31396263Sobrien  ItaniumABILanguageRuntime::Initialize();
31496263Sobrien#ifdef LLDB_ENABLE_ALL
31596263Sobrien  AppleObjCRuntimeV2::Initialize();
31696263Sobrien  AppleObjCRuntimeV1::Initialize();
31796263Sobrien  SystemRuntimeMacOSX::Initialize();
31890075Sobrien  RenderScriptRuntime::Initialize();
31990075Sobrien#endif // LLDB_ENABLE_ALL
32090075Sobrien
32190075Sobrien  CPlusPlusLanguage::Initialize();
32290075Sobrien#ifdef LLDB_ENABLE_ALL
32390075Sobrien  ObjCLanguage::Initialize();
32490075Sobrien  ObjCPlusPlusLanguage::Initialize();
32590075Sobrien#endif // LLDB_ENABLE_ALL
32690075Sobrien
32790075Sobrien#if defined(_WIN32)
32890075Sobrien  ProcessWindows::Initialize();
32990075Sobrien#endif
33090075Sobrien#if defined(__FreeBSD__)
33190075Sobrien  ProcessFreeBSD::Initialize();
33290075Sobrien#endif
33390075Sobrien#if defined(__APPLE__)
33490075Sobrien  SymbolVendorMacOSX::Initialize();
33590075Sobrien  ProcessKDP::Initialize();
33690075Sobrien  PlatformAppleTVSimulator::Initialize();
33790075Sobrien  PlatformAppleWatchSimulator::Initialize();
33890075Sobrien  PlatformRemoteAppleTV::Initialize();
33990075Sobrien  PlatformRemoteAppleWatch::Initialize();
34090075Sobrien  PlatformRemoteAppleBridge::Initialize();
34190075Sobrien  DynamicLoaderDarwinKernel::Initialize();
34290075Sobrien#endif
34390075Sobrien
34490075Sobrien  // This plugin is valid on any host that talks to a Darwin remote. It
34590075Sobrien  // shouldn't be limited to __APPLE__.
34690075Sobrien#ifdef LLDB_ENABLE_ALL
34790075Sobrien  StructuredDataDarwinLog::Initialize();
34890075Sobrien#endif // LLDB_ENABLE_ALL
34990075Sobrien
35090075Sobrien  // Platform agnostic plugins
35190075Sobrien  platform_gdb_server::PlatformRemoteGDBServer::Initialize();
35290075Sobrien
35390075Sobrien  process_gdb_remote::ProcessGDBRemote::Initialize();
35490075Sobrien#ifdef LLDB_ENABLE_ALL
35590075Sobrien  DynamicLoaderMacOSXDYLD::Initialize();
35690075Sobrien  DynamicLoaderMacOS::Initialize();
35790075Sobrien#endif // LLDB_ENABLE_ALL
35890075Sobrien  DynamicLoaderPOSIXDYLD::Initialize();
35990075Sobrien  DynamicLoaderStatic::Initialize();
36090075Sobrien#ifdef LLDB_ENABLE_ALL
36190075Sobrien  DynamicLoaderWindowsDYLD::Initialize();
36290075Sobrien#endif // LLDB_ENABLE_ALL
36390075Sobrien
36490075Sobrien  // Scan for any system or user LLDB plug-ins
36590075Sobrien  PluginManager::Initialize();
36690075Sobrien
36790075Sobrien  // The process settings need to know about installed plug-ins, so the
36890075Sobrien  // Settings must be initialized
36990075Sobrien  // AFTER PluginManager::Initialize is called.
37090075Sobrien
37190075Sobrien  Debugger::SettingsInitialize();
37290075Sobrien
37390075Sobrien  return llvm::Error::success();
37490075Sobrien}
37590075Sobrien
37690075Sobrienvoid SystemInitializerFull::Terminate() {
37790075Sobrien  static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
37890075Sobrien  Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION);
37990075Sobrien
38090075Sobrien  Debugger::SettingsTerminate();
38190075Sobrien
38290075Sobrien  // Terminate and unload and loaded system or user LLDB plug-ins
38390075Sobrien  PluginManager::Terminate();
38490075Sobrien
38590075Sobrien  ClangASTContext::Terminate();
38690075Sobrien
38790075Sobrien  ArchitectureArm::Terminate();
38890075Sobrien  ArchitectureMips::Terminate();
38990075Sobrien  ArchitecturePPC64::Terminate();
39090075Sobrien
39190075Sobrien#define LLVM_TARGET(t) LLDB_PROCESS_ ## t(Terminate)
39290075Sobrien#include "llvm/Config/Targets.def"
39390075Sobrien
39490075Sobrien  DisassemblerLLVMC::Terminate();
39590075Sobrien
39690075Sobrien  JITLoaderGDB::Terminate();
39790075Sobrien  ProcessElfCore::Terminate();
39890075Sobrien#ifdef LLDB_ENABLE_ALL
39990075Sobrien  ProcessMachCore::Terminate();
40090075Sobrien  minidump::ProcessMinidump::Terminate();
40190075Sobrien#endif // LLDB_ENABLE_ALL
40290075Sobrien  MemoryHistoryASan::Terminate();
40390075Sobrien  AddressSanitizerRuntime::Terminate();
40490075Sobrien#ifdef LLDB_ENABLE_ALL
40590075Sobrien  ThreadSanitizerRuntime::Terminate();
40690075Sobrien#endif // LLDB_ENABLE_ALL
40790075Sobrien  UndefinedBehaviorSanitizerRuntime::Terminate();
40890075Sobrien  MainThreadCheckerRuntime::Terminate();
40990075Sobrien  SymbolVendorELF::Terminate();
41090075Sobrien  breakpad::SymbolFileBreakpad::Terminate();
41190075Sobrien  SymbolFileDWARF::Terminate();
41290075Sobrien#ifdef LLDB_ENABLE_ALL
41390075Sobrien  SymbolFilePDB::Terminate();
41490075Sobrien#endif // LLDB_ENABLE_ALL
41590075Sobrien  SymbolFileSymtab::Terminate();
41690075Sobrien  UnwindAssembly_x86::Terminate();
41790075Sobrien  UnwindAssemblyInstEmulation::Terminate();
41890075Sobrien
41990075Sobrien  EmulateInstructionARM::Terminate();
42090075Sobrien  EmulateInstructionARM64::Terminate();
42190075Sobrien  EmulateInstructionMIPS::Terminate();
42290075Sobrien  EmulateInstructionMIPS64::Terminate();
42390075Sobrien  EmulateInstructionPPC64::Terminate();
42490075Sobrien
42590075Sobrien  SymbolFileDWARFDebugMap::Terminate();
42690075Sobrien  ItaniumABILanguageRuntime::Terminate();
42790075Sobrien#ifdef LLDB_ENABLE_ALL
42890075Sobrien  AppleObjCRuntimeV2::Terminate();
42990075Sobrien  AppleObjCRuntimeV1::Terminate();
43090075Sobrien  SystemRuntimeMacOSX::Terminate();
43190075Sobrien  RenderScriptRuntime::Terminate();
43290075Sobrien#endif // LLDB_ENABLE_ALL
43390075Sobrien
43490075Sobrien  CPlusPlusLanguage::Terminate();
43590075Sobrien#ifdef LLDB_ENABLE_ALL
43690075Sobrien  ObjCLanguage::Terminate();
43790075Sobrien  ObjCPlusPlusLanguage::Terminate();
43890075Sobrien#endif // LLDB_ENABLE_ALL
43990075Sobrien
44090075Sobrien#if defined(__APPLE__)
44190075Sobrien  DynamicLoaderDarwinKernel::Terminate();
44290075Sobrien  ProcessKDP::Terminate();
44390075Sobrien  SymbolVendorMacOSX::Terminate();
44490075Sobrien  PlatformAppleTVSimulator::Terminate();
44590075Sobrien  PlatformAppleWatchSimulator::Terminate();
44690075Sobrien  PlatformRemoteAppleTV::Terminate();
44790075Sobrien  PlatformRemoteAppleWatch::Terminate();
44890075Sobrien  PlatformRemoteAppleBridge::Terminate();
44990075Sobrien#endif
45090075Sobrien
45190075Sobrien#if defined(__FreeBSD__)
45290075Sobrien  ProcessFreeBSD::Terminate();
45390075Sobrien#endif
45490075Sobrien  Debugger::SettingsTerminate();
45590075Sobrien
45690075Sobrien  platform_gdb_server::PlatformRemoteGDBServer::Terminate();
45790075Sobrien  process_gdb_remote::ProcessGDBRemote::Terminate();
45890075Sobrien#ifdef LLDB_ENABLE_ALL
45990075Sobrien  StructuredDataDarwinLog::Terminate();
46090075Sobrien
46190075Sobrien  DynamicLoaderMacOSXDYLD::Terminate();
46290075Sobrien  DynamicLoaderMacOS::Terminate();
46390075Sobrien#endif // LLDB_ENABLE_ALL
46490075Sobrien  DynamicLoaderPOSIXDYLD::Terminate();
46590075Sobrien  DynamicLoaderStatic::Terminate();
46690075Sobrien#ifdef LLDB_ENABLE_ALL
46790075Sobrien  DynamicLoaderWindowsDYLD::Terminate();
46890075Sobrien#endif // LLDB_ENABLE_ALL
46990075Sobrien
47090075Sobrien#if LLDB_ENABLE_PYTHON
47190075Sobrien  OperatingSystemPython::Terminate();
47290075Sobrien#endif
47390075Sobrien
47490075Sobrien  platform_freebsd::PlatformFreeBSD::Terminate();
47590075Sobrien#ifdef LLDB_ENABLE_ALL
47690075Sobrien  platform_linux::PlatformLinux::Terminate();
47790075Sobrien  platform_netbsd::PlatformNetBSD::Terminate();
47890075Sobrien  platform_openbsd::PlatformOpenBSD::Terminate();
47990075Sobrien  PlatformWindows::Terminate();
48090075Sobrien  platform_android::PlatformAndroid::Terminate();
48190075Sobrien  PlatformMacOSX::Terminate();
48290075Sobrien  PlatformRemoteiOS::Terminate();
48390075Sobrien#endif // LLDB_ENABLE_ALL
48490075Sobrien#if defined(__APPLE__)
48590075Sobrien  PlatformiOSSimulator::Terminate();
48690075Sobrien  PlatformDarwinKernel::Terminate();
48790075Sobrien#endif
48890075Sobrien
48990075Sobrien  breakpad::ObjectFileBreakpad::Terminate();
49090075Sobrien  ObjectFileELF::Terminate();
49190075Sobrien#ifdef LLDB_ENABLE_ALL
49290075Sobrien  ObjectFileMachO::Terminate();
49390075Sobrien  ObjectFilePECOFF::Terminate();
49490075Sobrien#endif // LLDB_ENABLE_ALL
49590075Sobrien
49690075Sobrien  ObjectContainerBSDArchive::Terminate();
49790075Sobrien#ifdef LLDB_ENABLE_ALL
49890075Sobrien  ObjectContainerUniversalMachO::Terminate();
49990075Sobrien#endif // LLDB_ENABLE_ALL
50090075Sobrien
50190075Sobrien  // Now shutdown the common parts, in reverse order.
50290075Sobrien  SystemInitializerCommon::Terminate();
50390075Sobrien}
50490075Sobrien