teemperor created this revision.
teemperor added reviewers: labath, JDevlieghere.
Herald added subscribers: lldb-commits, s.egerton, abidh, simoncook, 
fedor.sergeev, aheejin, krytarowski, mgorny, dschuff.
Herald added a project: LLDB.
teemperor edited the summary of this revision.

SystemInitializerFull and SystemInitializerTest currently have copy-pasted 
content that is constantly going out of sync as people
only update one of them when they add a new subsystem.

This adds a SystemInitializerAllPlugins that initialises all the plugin 
subsystems which is the shared code between these
two initialisers (The "full" initializer also initialises the interpreters and 
JIT on top of that). This gets rid of all the copy-pasted
code.

The "AllPlugins" is a bit of a misnomer at the moment as we still initialise 
the Debugger which isn't technically a plugin.

I had to restructure the CMake code in the Initializer subfolder into two 
subfolders as we would otherwise have to work around
LLVM's 'unknown source file' CMake check.


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D73018

Files:
  lldb/include/lldb/Initialization/SystemInitializerAllPlugins.h
  lldb/source/API/CMakeLists.txt
  lldb/source/API/SystemInitializerFull.cpp
  lldb/source/API/SystemInitializerFull.h
  lldb/source/Initialization/AllPlugins/CMakeLists.txt
  lldb/source/Initialization/AllPlugins/SystemInitializerAllPlugins.cpp
  lldb/source/Initialization/CMakeLists.txt
  lldb/source/Initialization/Common/CMakeLists.txt
  lldb/source/Initialization/Common/SystemInitializer.cpp
  lldb/source/Initialization/Common/SystemInitializerCommon.cpp
  lldb/source/Initialization/Common/SystemLifetimeManager.cpp
  lldb/source/Initialization/SystemInitializer.cpp
  lldb/source/Initialization/SystemInitializerCommon.cpp
  lldb/source/Initialization/SystemLifetimeManager.cpp
  lldb/tools/lldb-test/CMakeLists.txt
  lldb/tools/lldb-test/SystemInitializerTest.cpp
  lldb/tools/lldb-test/SystemInitializerTest.h

Index: lldb/tools/lldb-test/SystemInitializerTest.h
===================================================================
--- lldb/tools/lldb-test/SystemInitializerTest.h
+++ lldb/tools/lldb-test/SystemInitializerTest.h
@@ -9,7 +9,7 @@
 #ifndef LLDB_API_SYSTEM_INITIALIZER_TEST_H
 #define LLDB_API_SYSTEM_INITIALIZER_TEST_H
 
-#include "lldb/Initialization/SystemInitializerCommon.h"
+#include "lldb/Initialization/SystemInitializerAllPlugins.h"
 
 namespace lldb_private {
 /// Initializes lldb.
@@ -18,7 +18,7 @@
 /// services needed to use the full LLDB application.  This class is
 /// not intended to be used externally, but is instead used
 /// internally by SBDebugger to initialize the system.
-class SystemInitializerTest : public SystemInitializerCommon {
+class SystemInitializerTest : public SystemInitializerAllPlugins {
 public:
   SystemInitializerTest();
   ~SystemInitializerTest() override;
Index: lldb/tools/lldb-test/SystemInitializerTest.cpp
===================================================================
--- lldb/tools/lldb-test/SystemInitializerTest.cpp
+++ lldb/tools/lldb-test/SystemInitializerTest.cpp
@@ -1,4 +1,4 @@
-//===-- SystemInitializerTest.cpp -------------------------------*- C++ -*-===//
+//===-- SystemInitializerAllPlugins.cpp -----------------------------------===//
 //
 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 // See https://llvm.org/LICENSE.txt for license information.
@@ -10,271 +10,20 @@
 
 #include "lldb/Core/Debugger.h"
 #include "lldb/Host/Host.h"
-#include "lldb/Initialization/SystemInitializerCommon.h"
+#include "lldb/Initialization/SystemInitializerAllPlugins.h"
 #include "lldb/Interpreter/CommandInterpreter.h"
-#include "lldb/Symbol/ClangASTContext.h"
 #include "lldb/Utility/Timer.h"
 
-#include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"
-#include "Plugins/ABI/MacOSX-arm64/ABIMacOSX_arm64.h"
-#include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
-#include "Plugins/ABI/SysV-arc/ABISysV_arc.h"
-#include "Plugins/ABI/SysV-arm/ABISysV_arm.h"
-#include "Plugins/ABI/SysV-arm64/ABISysV_arm64.h"
-#include "Plugins/ABI/SysV-hexagon/ABISysV_hexagon.h"
-#include "Plugins/ABI/SysV-i386/ABISysV_i386.h"
-#include "Plugins/ABI/SysV-mips/ABISysV_mips.h"
-#include "Plugins/ABI/SysV-mips64/ABISysV_mips64.h"
-#include "Plugins/ABI/SysV-ppc/ABISysV_ppc.h"
-#include "Plugins/ABI/SysV-ppc64/ABISysV_ppc64.h"
-#include "Plugins/ABI/SysV-s390x/ABISysV_s390x.h"
-#include "Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h"
-#include "Plugins/ABI/Windows-x86_64/ABIWindows_x86_64.h"
-#include "Plugins/Architecture/Arm/ArchitectureArm.h"
-#include "Plugins/Architecture/Mips/ArchitectureMips.h"
-#include "Plugins/Architecture/PPC64/ArchitecturePPC64.h"
-#include "Plugins/Disassembler/llvm/DisassemblerLLVMC.h"
-#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.h"
-#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h"
-#include "Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h"
-#include "Plugins/DynamicLoader/Static/DynamicLoaderStatic.h"
-#include "Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.h"
-#include "Plugins/Instruction/ARM/EmulateInstructionARM.h"
-#include "Plugins/Instruction/ARM64/EmulateInstructionARM64.h"
-#include "Plugins/Instruction/MIPS/EmulateInstructionMIPS.h"
-#include "Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h"
-#include "Plugins/Instruction/PPC64/EmulateInstructionPPC64.h"
-#include "Plugins/InstrumentationRuntime/ASan/ASanRuntime.h"
-#include "Plugins/InstrumentationRuntime/MainThreadChecker/MainThreadCheckerRuntime.h"
-#include "Plugins/InstrumentationRuntime/TSan/TSanRuntime.h"
-#include "Plugins/InstrumentationRuntime/UBSan/UBSanRuntime.h"
-#include "Plugins/JITLoader/GDB/JITLoaderGDB.h"
-#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
-#include "Plugins/Language/ObjC/ObjCLanguage.h"
-#include "Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h"
-#include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h"
-#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h"
-#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h"
-#include "Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h"
-#include "Plugins/MemoryHistory/asan/MemoryHistoryASan.h"
-#include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h"
-#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h"
-#include "Plugins/ObjectFile/Breakpad/ObjectFileBreakpad.h"
-#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
-#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
-#include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"
-#include "Plugins/ObjectFile/wasm/ObjectFileWasm.h"
-#include "Plugins/Platform/Android/PlatformAndroid.h"
-#include "Plugins/Platform/FreeBSD/PlatformFreeBSD.h"
-#include "Plugins/Platform/Linux/PlatformLinux.h"
-#include "Plugins/Platform/MacOSX/PlatformMacOSX.h"
-#include "Plugins/Platform/MacOSX/PlatformRemoteiOS.h"
-#include "Plugins/Platform/NetBSD/PlatformNetBSD.h"
-#include "Plugins/Platform/OpenBSD/PlatformOpenBSD.h"
-#include "Plugins/Platform/Windows/PlatformWindows.h"
-#include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
-#include "Plugins/Process/elf-core/ProcessElfCore.h"
-#include "Plugins/Process/gdb-remote/ProcessGDBRemote.h"
-#include "Plugins/Process/mach-core/ProcessMachCore.h"
-#include "Plugins/Process/minidump/ProcessMinidump.h"
-#include "Plugins/ScriptInterpreter/None/ScriptInterpreterNone.h"
-#include "Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h"
-#include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h"
-#include "Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h"
-#include "Plugins/SymbolFile/PDB/SymbolFilePDB.h"
-#include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h"
-#include "Plugins/SymbolVendor/ELF/SymbolVendorELF.h"
-#include "Plugins/SymbolVendor/wasm/SymbolVendorWasm.h"
-#include "Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h"
-#include "Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.h"
-#include "Plugins/UnwindAssembly/x86/UnwindAssembly-x86.h"
-
-#if defined(__APPLE__)
-#include "Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h"
-#include "Plugins/Platform/MacOSX/PlatformAppleTVSimulator.h"
-#include "Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.h"
-#include "Plugins/Platform/MacOSX/PlatformDarwinKernel.h"
-#include "Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h"
-#include "Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h"
-#include "Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h"
-#include "Plugins/Platform/MacOSX/PlatformiOSSimulator.h"
-#include "Plugins/Process/MacOSX-Kernel/ProcessKDP.h"
-#include "Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.h"
-#endif
-#include "Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h"
-
-#if defined(__FreeBSD__)
-#include "Plugins/Process/FreeBSD/ProcessFreeBSD.h"
-#endif
-
-#if defined(_WIN32)
-#include "Plugins/Process/Windows/Common/ProcessWindows.h"
-#include "lldb/Host/windows/windows.h"
-#endif
-
-#include "llvm/Support/TargetSelect.h"
-
-#include <string>
-
 using namespace lldb_private;
 
 SystemInitializerTest::SystemInitializerTest() {}
 
 SystemInitializerTest::~SystemInitializerTest() {}
 
-#define LLDB_PROCESS_AArch64(op)                                               \
-  ABIMacOSX_arm64::op();                                                       \
-  ABISysV_arm64::op();
-#define LLDB_PROCESS_ARM(op)                                                   \
-  ABIMacOSX_arm::op();                                                         \
-  ABISysV_arm::op();
-#define LLDB_PROCESS_Hexagon(op) ABISysV_hexagon::op();
-#define LLDB_PROCESS_Mips(op)                                                  \
-  ABISysV_mips::op();                                                          \
-  ABISysV_mips64::op();
-#define LLDB_PROCESS_PowerPC(op)                                               \
-  ABISysV_ppc::op();                                                          \
-  ABISysV_ppc64::op();
-#define LLDB_PROCESS_SystemZ(op) ABISysV_s390x::op();
-#define LLDB_PROCESS_X86(op)                                                   \
-  ABIMacOSX_i386::op();                                                        \
-  ABISysV_i386::op();                                                          \
-  ABISysV_x86_64::op();                                                        \
-  ABIWindows_x86_64::op();
-
-#define LLDB_PROCESS_AMDGPU(op)
-#define LLDB_PROCESS_ARC(op)
-#define LLDB_PROCESS_AVR(op)
-#define LLDB_PROCESS_BPF(op)
-#define LLDB_PROCESS_Lanai(op)
-#define LLDB_PROCESS_MSP430(op)
-#define LLDB_PROCESS_NVPTX(op)
-#define LLDB_PROCESS_RISCV(op)
-#define LLDB_PROCESS_Sparc(op)
-#define LLDB_PROCESS_WebAssembly(op)
-#define LLDB_PROCESS_XCore(op)
-
 llvm::Error SystemInitializerTest::Initialize() {
-  if (auto e = SystemInitializerCommon::Initialize())
+  if (auto e = SystemInitializerAllPlugins::Initialize())
     return e;
 
-  breakpad::ObjectFileBreakpad::Initialize();
-  ObjectFileELF::Initialize();
-  ObjectFileMachO::Initialize();
-  ObjectFilePECOFF::Initialize();
-  wasm::ObjectFileWasm::Initialize();
-
-  ObjectContainerBSDArchive::Initialize();
-  ObjectContainerUniversalMachO::Initialize();
-
-  ScriptInterpreterNone::Initialize();
-
-  platform_freebsd::PlatformFreeBSD::Initialize();
-  platform_linux::PlatformLinux::Initialize();
-  platform_netbsd::PlatformNetBSD::Initialize();
-  platform_openbsd::PlatformOpenBSD::Initialize();
-  PlatformWindows::Initialize();
-  platform_android::PlatformAndroid::Initialize();
-  PlatformRemoteiOS::Initialize();
-  PlatformMacOSX::Initialize();
-#if defined(__APPLE__)
-  PlatformiOSSimulator::Initialize();
-  PlatformDarwinKernel::Initialize();
-#endif
-
-  // Initialize LLVM and Clang
-  llvm::InitializeAllTargets();
-  llvm::InitializeAllAsmPrinters();
-  llvm::InitializeAllTargetMCs();
-  llvm::InitializeAllDisassemblers();
-
-  ClangASTContext::Initialize();
-
-#define LLVM_TARGET(t) LLDB_PROCESS_ ## t(Initialize)
-#include "llvm/Config/Targets.def"
-
-  ArchitectureArm::Initialize();
-  ArchitectureMips::Initialize();
-  ArchitecturePPC64::Initialize();
-
-  DisassemblerLLVMC::Initialize();
-
-  JITLoaderGDB::Initialize();
-  ProcessElfCore::Initialize();
-  ProcessMachCore::Initialize();
-  minidump::ProcessMinidump::Initialize();
-  MemoryHistoryASan::Initialize();
-  AddressSanitizerRuntime::Initialize();
-  ThreadSanitizerRuntime::Initialize();
-  UndefinedBehaviorSanitizerRuntime::Initialize();
-  MainThreadCheckerRuntime::Initialize();
-
-  SymbolVendorELF::Initialize();
-  breakpad::SymbolFileBreakpad::Initialize();
-  SymbolFileDWARF::Initialize();
-  SymbolFilePDB::Initialize();
-  SymbolFileSymtab::Initialize();
-  wasm::SymbolVendorWasm::Initialize();
-  UnwindAssemblyInstEmulation::Initialize();
-  UnwindAssembly_x86::Initialize();
-
-  EmulateInstructionARM::Initialize();
-  EmulateInstructionARM64::Initialize();
-  EmulateInstructionMIPS::Initialize();
-  EmulateInstructionMIPS64::Initialize();
-  EmulateInstructionPPC64::Initialize();
-
-  SymbolFileDWARFDebugMap::Initialize();
-  ItaniumABILanguageRuntime::Initialize();
-  AppleObjCRuntimeV2::Initialize();
-  AppleObjCRuntimeV1::Initialize();
-  SystemRuntimeMacOSX::Initialize();
-  RenderScriptRuntime::Initialize();
-
-  CPlusPlusLanguage::Initialize();
-  ObjCLanguage::Initialize();
-  ObjCPlusPlusLanguage::Initialize();
-
-#if defined(_WIN32)
-  ProcessWindows::Initialize();
-#endif
-#if defined(__FreeBSD__)
-  ProcessFreeBSD::Initialize();
-#endif
-#if defined(__APPLE__)
-  SymbolVendorMacOSX::Initialize();
-  ProcessKDP::Initialize();
-  PlatformAppleTVSimulator::Initialize();
-  PlatformAppleWatchSimulator::Initialize();
-  PlatformRemoteAppleTV::Initialize();
-  PlatformRemoteAppleWatch::Initialize();
-  PlatformRemoteAppleBridge::Initialize();
-  DynamicLoaderDarwinKernel::Initialize();
-#endif
-
-  // This plugin is valid on any host that talks to a Darwin remote. It
-  // shouldn't be limited to __APPLE__.
-  StructuredDataDarwinLog::Initialize();
-
-  // Platform agnostic plugins
-  platform_gdb_server::PlatformRemoteGDBServer::Initialize();
-
-  process_gdb_remote::ProcessGDBRemote::Initialize();
-  DynamicLoaderMacOSXDYLD::Initialize();
-  DynamicLoaderMacOS::Initialize();
-  DynamicLoaderPOSIXDYLD::Initialize();
-  DynamicLoaderStatic::Initialize();
-  DynamicLoaderWindowsDYLD::Initialize();
-
-  // Scan for any system or user LLDB plug-ins
-  PluginManager::Initialize();
-
-  // The process settings need to know about installed plug-ins, so the Settings
-  // must be initialized
-  // AFTER PluginManager::Initialize is called.
-
-  Debugger::SettingsInitialize();
-
   return llvm::Error::success();
 }
 
@@ -282,106 +31,5 @@
   static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
   Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION);
 
-  Debugger::SettingsTerminate();
-
-  // Terminate and unload and loaded system or user LLDB plug-ins
-  PluginManager::Terminate();
-
-  ClangASTContext::Terminate();
-
-  ArchitectureArm::Terminate();
-  ArchitectureMips::Terminate();
-  ArchitecturePPC64::Terminate();
-
-#define LLVM_TARGET(t) LLDB_PROCESS_ ## t(Terminate)
-#include "llvm/Config/Targets.def"
-
-  DisassemblerLLVMC::Terminate();
-
-  JITLoaderGDB::Terminate();
-  ProcessElfCore::Terminate();
-  ProcessMachCore::Terminate();
-  minidump::ProcessMinidump::Terminate();
-  MemoryHistoryASan::Terminate();
-  AddressSanitizerRuntime::Terminate();
-  ThreadSanitizerRuntime::Terminate();
-  UndefinedBehaviorSanitizerRuntime::Terminate();
-  MainThreadCheckerRuntime::Terminate();
-  wasm::SymbolVendorWasm::Terminate();
-  SymbolVendorELF::Terminate();
-  breakpad::SymbolFileBreakpad::Terminate();
-  SymbolFileDWARF::Terminate();
-  SymbolFilePDB::Terminate();
-  SymbolFileSymtab::Terminate();
-  UnwindAssembly_x86::Terminate();
-  UnwindAssemblyInstEmulation::Terminate();
-
-  EmulateInstructionARM::Terminate();
-  EmulateInstructionARM64::Terminate();
-  EmulateInstructionMIPS::Terminate();
-  EmulateInstructionMIPS64::Terminate();
-  EmulateInstructionPPC64::Terminate();
-
-  SymbolFileDWARFDebugMap::Terminate();
-  ItaniumABILanguageRuntime::Terminate();
-  AppleObjCRuntimeV2::Terminate();
-  AppleObjCRuntimeV1::Terminate();
-  SystemRuntimeMacOSX::Terminate();
-  RenderScriptRuntime::Terminate();
-
-  CPlusPlusLanguage::Terminate();
-  ObjCLanguage::Terminate();
-  ObjCPlusPlusLanguage::Terminate();
-
-#if defined(__APPLE__)
-  DynamicLoaderDarwinKernel::Terminate();
-  ProcessKDP::Terminate();
-  SymbolVendorMacOSX::Terminate();
-  PlatformAppleTVSimulator::Terminate();
-  PlatformAppleWatchSimulator::Terminate();
-  PlatformRemoteAppleTV::Terminate();
-  PlatformRemoteAppleWatch::Terminate();
-  PlatformRemoteAppleBridge::Terminate();
-#endif
-
-#if defined(__FreeBSD__)
-  ProcessFreeBSD::Terminate();
-#endif
-  Debugger::SettingsTerminate();
-
-  platform_gdb_server::PlatformRemoteGDBServer::Terminate();
-  process_gdb_remote::ProcessGDBRemote::Terminate();
-  StructuredDataDarwinLog::Terminate();
-
-  DynamicLoaderMacOSXDYLD::Terminate();
-  DynamicLoaderMacOS::Terminate();
-  DynamicLoaderPOSIXDYLD::Terminate();
-  DynamicLoaderStatic::Terminate();
-  DynamicLoaderWindowsDYLD::Terminate();
-
-
-  platform_freebsd::PlatformFreeBSD::Terminate();
-  platform_linux::PlatformLinux::Terminate();
-  platform_netbsd::PlatformNetBSD::Terminate();
-  platform_openbsd::PlatformOpenBSD::Terminate();
-  PlatformWindows::Terminate();
-  platform_android::PlatformAndroid::Terminate();
-  PlatformMacOSX::Terminate();
-  PlatformRemoteiOS::Terminate();
-#if defined(__APPLE__)
-  PlatformiOSSimulator::Terminate();
-  PlatformDarwinKernel::Terminate();
-#endif
-
-  breakpad::ObjectFileBreakpad::Terminate();
-  ObjectFileELF::Terminate();
-  ObjectFileMachO::Terminate();
-  ObjectFilePECOFF::Terminate();
-  wasm::ObjectFileWasm::Terminate();
-
-  ObjectContainerBSDArchive::Terminate();
-  ObjectContainerUniversalMachO::Terminate();
-
-  // Now shutdown the common parts, in reverse order.
-  SystemInitializerCommon::Terminate();
+  SystemInitializerAllPlugins::Terminate();
 }
Index: lldb/tools/lldb-test/CMakeLists.txt
===================================================================
--- lldb/tools/lldb-test/CMakeLists.txt
+++ lldb/tools/lldb-test/CMakeLists.txt
@@ -18,6 +18,7 @@
     lldbTarget
     lldbUtility
     ${LLDB_ALL_PLUGINS}
+    lldbInitializationAllPlugins
     ${host_lib}
 
   LINK_COMPONENTS
Index: lldb/source/Initialization/Common/CMakeLists.txt
===================================================================
--- /dev/null
+++ lldb/source/Initialization/Common/CMakeLists.txt
@@ -0,0 +1,22 @@
+if ( CMAKE_SYSTEM_NAME MATCHES "Linux|Android|FreeBSD|NetBSD" )
+  list(APPEND EXTRA_PLUGINS lldbPluginProcessPOSIX)
+endif()
+
+if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
+  list(APPEND EXTRA_PLUGINS lldbPluginProcessWindowsCommon)
+endif ()
+
+add_lldb_library(lldbInitialization
+  SystemInitializerCommon.cpp
+  SystemInitializer.cpp
+  SystemLifetimeManager.cpp
+
+  LINK_LIBS
+    lldbCore
+    lldbHost
+    lldbPluginProcessGDBRemote
+    ${EXTRA_PLUGINS}
+    ${LLDB_SYSTEM_LIBS}
+  LINK_COMPONENTS
+    Support
+  )
Index: lldb/source/Initialization/CMakeLists.txt
===================================================================
--- lldb/source/Initialization/CMakeLists.txt
+++ lldb/source/Initialization/CMakeLists.txt
@@ -1,22 +1,2 @@
-if ( CMAKE_SYSTEM_NAME MATCHES "Linux|Android|FreeBSD|NetBSD" )
-  list(APPEND EXTRA_PLUGINS lldbPluginProcessPOSIX)
-endif()
-
-if ( CMAKE_SYSTEM_NAME MATCHES "Windows" )
-  list(APPEND EXTRA_PLUGINS lldbPluginProcessWindowsCommon)
-endif ()
-
-add_lldb_library(lldbInitialization
-  SystemInitializerCommon.cpp
-  SystemInitializer.cpp
-  SystemLifetimeManager.cpp
-
-  LINK_LIBS
-    lldbCore
-    lldbHost
-    lldbPluginProcessGDBRemote
-    ${EXTRA_PLUGINS}
-    ${LLDB_SYSTEM_LIBS}
-  LINK_COMPONENTS
-    Support
-  )
+add_subdirectory(Common)
+add_subdirectory(AllPlugins)
Index: lldb/source/Initialization/AllPlugins/SystemInitializerAllPlugins.cpp
===================================================================
--- /dev/null
+++ lldb/source/Initialization/AllPlugins/SystemInitializerAllPlugins.cpp
@@ -0,0 +1,386 @@
+//===-- SystemInitializerAllPlugins.cpp -------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Initialization/SystemInitializerAllPlugins.h"
+
+#include "lldb/Core/Debugger.h"
+#include "lldb/Host/Host.h"
+#include "lldb/Initialization/SystemInitializerCommon.h"
+#include "lldb/Interpreter/CommandInterpreter.h"
+#include "lldb/Symbol/ClangASTContext.h"
+#include "lldb/Utility/Timer.h"
+
+#include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"
+#include "Plugins/ABI/MacOSX-arm64/ABIMacOSX_arm64.h"
+#include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
+#include "Plugins/ABI/SysV-arc/ABISysV_arc.h"
+#include "Plugins/ABI/SysV-arm/ABISysV_arm.h"
+#include "Plugins/ABI/SysV-arm64/ABISysV_arm64.h"
+#include "Plugins/ABI/SysV-hexagon/ABISysV_hexagon.h"
+#include "Plugins/ABI/SysV-i386/ABISysV_i386.h"
+#include "Plugins/ABI/SysV-mips/ABISysV_mips.h"
+#include "Plugins/ABI/SysV-mips64/ABISysV_mips64.h"
+#include "Plugins/ABI/SysV-ppc/ABISysV_ppc.h"
+#include "Plugins/ABI/SysV-ppc64/ABISysV_ppc64.h"
+#include "Plugins/ABI/SysV-s390x/ABISysV_s390x.h"
+#include "Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h"
+#include "Plugins/ABI/Windows-x86_64/ABIWindows_x86_64.h"
+#include "Plugins/Architecture/Arm/ArchitectureArm.h"
+#include "Plugins/Architecture/Mips/ArchitectureMips.h"
+#include "Plugins/Architecture/PPC64/ArchitecturePPC64.h"
+#include "Plugins/Disassembler/llvm/DisassemblerLLVMC.h"
+#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.h"
+#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h"
+#include "Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h"
+#include "Plugins/DynamicLoader/Static/DynamicLoaderStatic.h"
+#include "Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.h"
+#include "Plugins/Instruction/ARM/EmulateInstructionARM.h"
+#include "Plugins/Instruction/ARM64/EmulateInstructionARM64.h"
+#include "Plugins/Instruction/MIPS/EmulateInstructionMIPS.h"
+#include "Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h"
+#include "Plugins/Instruction/PPC64/EmulateInstructionPPC64.h"
+#include "Plugins/InstrumentationRuntime/ASan/ASanRuntime.h"
+#include "Plugins/InstrumentationRuntime/MainThreadChecker/MainThreadCheckerRuntime.h"
+#include "Plugins/InstrumentationRuntime/TSan/TSanRuntime.h"
+#include "Plugins/InstrumentationRuntime/UBSan/UBSanRuntime.h"
+#include "Plugins/JITLoader/GDB/JITLoaderGDB.h"
+#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
+#include "Plugins/Language/ObjC/ObjCLanguage.h"
+#include "Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h"
+#include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h"
+#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h"
+#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h"
+#include "Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h"
+#include "Plugins/MemoryHistory/asan/MemoryHistoryASan.h"
+#include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h"
+#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h"
+#include "Plugins/ObjectFile/Breakpad/ObjectFileBreakpad.h"
+#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
+#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
+#include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"
+#include "Plugins/ObjectFile/wasm/ObjectFileWasm.h"
+#include "Plugins/Platform/Android/PlatformAndroid.h"
+#include "Plugins/Platform/FreeBSD/PlatformFreeBSD.h"
+#include "Plugins/Platform/Linux/PlatformLinux.h"
+#include "Plugins/Platform/MacOSX/PlatformMacOSX.h"
+#include "Plugins/Platform/MacOSX/PlatformRemoteiOS.h"
+#include "Plugins/Platform/NetBSD/PlatformNetBSD.h"
+#include "Plugins/Platform/OpenBSD/PlatformOpenBSD.h"
+#include "Plugins/Platform/Windows/PlatformWindows.h"
+#include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
+#include "Plugins/Process/elf-core/ProcessElfCore.h"
+#include "Plugins/Process/gdb-remote/ProcessGDBRemote.h"
+#include "Plugins/Process/mach-core/ProcessMachCore.h"
+#include "Plugins/Process/minidump/ProcessMinidump.h"
+#include "Plugins/ScriptInterpreter/None/ScriptInterpreterNone.h"
+#include "Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h"
+#include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h"
+#include "Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h"
+#include "Plugins/SymbolFile/PDB/SymbolFilePDB.h"
+#include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h"
+#include "Plugins/SymbolVendor/ELF/SymbolVendorELF.h"
+#include "Plugins/SymbolVendor/wasm/SymbolVendorWasm.h"
+#include "Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h"
+#include "Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.h"
+#include "Plugins/UnwindAssembly/x86/UnwindAssembly-x86.h"
+
+#if defined(__APPLE__)
+#include "Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h"
+#include "Plugins/Platform/MacOSX/PlatformAppleTVSimulator.h"
+#include "Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.h"
+#include "Plugins/Platform/MacOSX/PlatformDarwinKernel.h"
+#include "Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h"
+#include "Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h"
+#include "Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h"
+#include "Plugins/Platform/MacOSX/PlatformiOSSimulator.h"
+#include "Plugins/Process/MacOSX-Kernel/ProcessKDP.h"
+#include "Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.h"
+#endif
+#include "Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h"
+
+#if defined(__FreeBSD__)
+#include "Plugins/Process/FreeBSD/ProcessFreeBSD.h"
+#endif
+
+#if defined(_WIN32)
+#include "Plugins/Process/Windows/Common/ProcessWindows.h"
+#include "lldb/Host/windows/windows.h"
+#endif
+
+#include "llvm/Support/TargetSelect.h"
+
+#include <string>
+
+using namespace lldb_private;
+
+SystemInitializerAllPlugins::SystemInitializerAllPlugins() {}
+
+SystemInitializerAllPlugins::~SystemInitializerAllPlugins() {}
+
+#define LLDB_PROCESS_AArch64(op)                                               \
+  ABIMacOSX_arm64::op();                                                       \
+  ABISysV_arm64::op();
+#define LLDB_PROCESS_ARM(op)                                                   \
+  ABIMacOSX_arm::op();                                                         \
+  ABISysV_arm::op();
+#define LLDB_PROCESS_Hexagon(op) ABISysV_hexagon::op();
+#define LLDB_PROCESS_Mips(op)                                                  \
+  ABISysV_mips::op();                                                          \
+  ABISysV_mips64::op();
+#define LLDB_PROCESS_PowerPC(op)                                               \
+  ABISysV_ppc::op();                                                           \
+  ABISysV_ppc64::op();
+#define LLDB_PROCESS_SystemZ(op) ABISysV_s390x::op();
+#define LLDB_PROCESS_X86(op)                                                   \
+  ABIMacOSX_i386::op();                                                        \
+  ABISysV_i386::op();                                                          \
+  ABISysV_x86_64::op();                                                        \
+  ABIWindows_x86_64::op();
+
+#define LLDB_PROCESS_AMDGPU(op)
+#define LLDB_PROCESS_ARC(op)
+#define LLDB_PROCESS_AVR(op)
+#define LLDB_PROCESS_BPF(op)
+#define LLDB_PROCESS_Lanai(op)
+#define LLDB_PROCESS_MSP430(op)
+#define LLDB_PROCESS_NVPTX(op)
+#define LLDB_PROCESS_RISCV(op)
+#define LLDB_PROCESS_Sparc(op)
+#define LLDB_PROCESS_WebAssembly(op)
+#define LLDB_PROCESS_XCore(op)
+
+llvm::Error SystemInitializerAllPlugins::Initialize() {
+  if (auto e = SystemInitializerCommon::Initialize())
+    return e;
+
+  breakpad::ObjectFileBreakpad::Initialize();
+  ObjectFileELF::Initialize();
+  ObjectFileMachO::Initialize();
+  ObjectFilePECOFF::Initialize();
+  wasm::ObjectFileWasm::Initialize();
+
+  ObjectContainerBSDArchive::Initialize();
+  ObjectContainerUniversalMachO::Initialize();
+
+  ScriptInterpreterNone::Initialize();
+
+  platform_freebsd::PlatformFreeBSD::Initialize();
+  platform_linux::PlatformLinux::Initialize();
+  platform_netbsd::PlatformNetBSD::Initialize();
+  platform_openbsd::PlatformOpenBSD::Initialize();
+  PlatformWindows::Initialize();
+  platform_android::PlatformAndroid::Initialize();
+  PlatformRemoteiOS::Initialize();
+  PlatformMacOSX::Initialize();
+#if defined(__APPLE__)
+  PlatformiOSSimulator::Initialize();
+  PlatformDarwinKernel::Initialize();
+#endif
+
+  // Initialize LLVM and Clang
+  llvm::InitializeAllTargets();
+  llvm::InitializeAllAsmPrinters();
+  llvm::InitializeAllTargetMCs();
+  llvm::InitializeAllDisassemblers();
+
+  ClangASTContext::Initialize();
+
+#define LLVM_TARGET(t) LLDB_PROCESS_##t(Initialize)
+#include "llvm/Config/Targets.def"
+
+  ArchitectureArm::Initialize();
+  ArchitectureMips::Initialize();
+  ArchitecturePPC64::Initialize();
+
+  DisassemblerLLVMC::Initialize();
+
+  JITLoaderGDB::Initialize();
+  ProcessElfCore::Initialize();
+  ProcessMachCore::Initialize();
+  minidump::ProcessMinidump::Initialize();
+  MemoryHistoryASan::Initialize();
+  AddressSanitizerRuntime::Initialize();
+  ThreadSanitizerRuntime::Initialize();
+  UndefinedBehaviorSanitizerRuntime::Initialize();
+  MainThreadCheckerRuntime::Initialize();
+
+  SymbolVendorELF::Initialize();
+  breakpad::SymbolFileBreakpad::Initialize();
+  SymbolFileDWARF::Initialize();
+  SymbolFilePDB::Initialize();
+  SymbolFileSymtab::Initialize();
+  wasm::SymbolVendorWasm::Initialize();
+  UnwindAssemblyInstEmulation::Initialize();
+  UnwindAssembly_x86::Initialize();
+
+  EmulateInstructionARM::Initialize();
+  EmulateInstructionARM64::Initialize();
+  EmulateInstructionMIPS::Initialize();
+  EmulateInstructionMIPS64::Initialize();
+  EmulateInstructionPPC64::Initialize();
+
+  SymbolFileDWARFDebugMap::Initialize();
+  ItaniumABILanguageRuntime::Initialize();
+  AppleObjCRuntimeV2::Initialize();
+  AppleObjCRuntimeV1::Initialize();
+  SystemRuntimeMacOSX::Initialize();
+  RenderScriptRuntime::Initialize();
+
+  CPlusPlusLanguage::Initialize();
+  ObjCLanguage::Initialize();
+  ObjCPlusPlusLanguage::Initialize();
+
+#if defined(_WIN32)
+  ProcessWindows::Initialize();
+#endif
+#if defined(__FreeBSD__)
+  ProcessFreeBSD::Initialize();
+#endif
+#if defined(__APPLE__)
+  SymbolVendorMacOSX::Initialize();
+  ProcessKDP::Initialize();
+  PlatformAppleTVSimulator::Initialize();
+  PlatformAppleWatchSimulator::Initialize();
+  PlatformRemoteAppleTV::Initialize();
+  PlatformRemoteAppleWatch::Initialize();
+  PlatformRemoteAppleBridge::Initialize();
+  DynamicLoaderDarwinKernel::Initialize();
+#endif
+
+  // This plugin is valid on any host that talks to a Darwin remote. It
+  // shouldn't be limited to __APPLE__.
+  StructuredDataDarwinLog::Initialize();
+
+  // Platform agnostic plugins
+  platform_gdb_server::PlatformRemoteGDBServer::Initialize();
+
+  process_gdb_remote::ProcessGDBRemote::Initialize();
+  DynamicLoaderMacOSXDYLD::Initialize();
+  DynamicLoaderMacOS::Initialize();
+  DynamicLoaderPOSIXDYLD::Initialize();
+  DynamicLoaderStatic::Initialize();
+  DynamicLoaderWindowsDYLD::Initialize();
+
+  // Scan for any system or user LLDB plug-ins
+  PluginManager::Initialize();
+
+  // The process settings need to know about installed plug-ins, so the Settings
+  // must be initialized
+  // AFTER PluginManager::Initialize is called.
+
+  Debugger::SettingsInitialize();
+
+  return llvm::Error::success();
+}
+
+void SystemInitializerAllPlugins::Terminate() {
+  static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
+  Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION);
+
+  Debugger::SettingsTerminate();
+
+  // Terminate and unload and loaded system or user LLDB plug-ins
+  PluginManager::Terminate();
+
+  ClangASTContext::Terminate();
+
+  ArchitectureArm::Terminate();
+  ArchitectureMips::Terminate();
+  ArchitecturePPC64::Terminate();
+
+#define LLVM_TARGET(t) LLDB_PROCESS_##t(Terminate)
+#include "llvm/Config/Targets.def"
+
+  DisassemblerLLVMC::Terminate();
+
+  JITLoaderGDB::Terminate();
+  ProcessElfCore::Terminate();
+  ProcessMachCore::Terminate();
+  minidump::ProcessMinidump::Terminate();
+  MemoryHistoryASan::Terminate();
+  AddressSanitizerRuntime::Terminate();
+  ThreadSanitizerRuntime::Terminate();
+  UndefinedBehaviorSanitizerRuntime::Terminate();
+  MainThreadCheckerRuntime::Terminate();
+  wasm::SymbolVendorWasm::Terminate();
+  SymbolVendorELF::Terminate();
+  breakpad::SymbolFileBreakpad::Terminate();
+  SymbolFileDWARF::Terminate();
+  SymbolFilePDB::Terminate();
+  SymbolFileSymtab::Terminate();
+  UnwindAssembly_x86::Terminate();
+  UnwindAssemblyInstEmulation::Terminate();
+
+  EmulateInstructionARM::Terminate();
+  EmulateInstructionARM64::Terminate();
+  EmulateInstructionMIPS::Terminate();
+  EmulateInstructionMIPS64::Terminate();
+  EmulateInstructionPPC64::Terminate();
+
+  SymbolFileDWARFDebugMap::Terminate();
+  ItaniumABILanguageRuntime::Terminate();
+  AppleObjCRuntimeV2::Terminate();
+  AppleObjCRuntimeV1::Terminate();
+  SystemRuntimeMacOSX::Terminate();
+  RenderScriptRuntime::Terminate();
+
+  CPlusPlusLanguage::Terminate();
+  ObjCLanguage::Terminate();
+  ObjCPlusPlusLanguage::Terminate();
+
+#if defined(__APPLE__)
+  DynamicLoaderDarwinKernel::Terminate();
+  ProcessKDP::Terminate();
+  SymbolVendorMacOSX::Terminate();
+  PlatformAppleTVSimulator::Terminate();
+  PlatformAppleWatchSimulator::Terminate();
+  PlatformRemoteAppleTV::Terminate();
+  PlatformRemoteAppleWatch::Terminate();
+  PlatformRemoteAppleBridge::Terminate();
+#endif
+
+#if defined(__FreeBSD__)
+  ProcessFreeBSD::Terminate();
+#endif
+  Debugger::SettingsTerminate();
+
+  platform_gdb_server::PlatformRemoteGDBServer::Terminate();
+  process_gdb_remote::ProcessGDBRemote::Terminate();
+  StructuredDataDarwinLog::Terminate();
+
+  DynamicLoaderMacOSXDYLD::Terminate();
+  DynamicLoaderMacOS::Terminate();
+  DynamicLoaderPOSIXDYLD::Terminate();
+  DynamicLoaderStatic::Terminate();
+  DynamicLoaderWindowsDYLD::Terminate();
+
+  platform_freebsd::PlatformFreeBSD::Terminate();
+  platform_linux::PlatformLinux::Terminate();
+  platform_netbsd::PlatformNetBSD::Terminate();
+  platform_openbsd::PlatformOpenBSD::Terminate();
+  PlatformWindows::Terminate();
+  platform_android::PlatformAndroid::Terminate();
+  PlatformMacOSX::Terminate();
+  PlatformRemoteiOS::Terminate();
+#if defined(__APPLE__)
+  PlatformiOSSimulator::Terminate();
+  PlatformDarwinKernel::Terminate();
+#endif
+
+  breakpad::ObjectFileBreakpad::Terminate();
+  ObjectFileELF::Terminate();
+  ObjectFileMachO::Terminate();
+  ObjectFilePECOFF::Terminate();
+  wasm::ObjectFileWasm::Terminate();
+
+  ObjectContainerBSDArchive::Terminate();
+  ObjectContainerUniversalMachO::Terminate();
+
+  // Now shutdown the common parts, in reverse order.
+  SystemInitializerCommon::Terminate();
+}
Index: lldb/source/Initialization/AllPlugins/CMakeLists.txt
===================================================================
--- /dev/null
+++ lldb/source/Initialization/AllPlugins/CMakeLists.txt
@@ -0,0 +1,10 @@
+get_property(LLDB_ALL_PLUGINS GLOBAL PROPERTY LLDB_PLUGINS)
+
+add_lldb_library(lldbInitializationAllPlugins
+  SystemInitializerAllPlugins.cpp
+  LINK_LIBS
+    lldbInitialization
+    ${LLDB_ALL_PLUGINS}
+  LINK_COMPONENTS
+    Support
+  )
Index: lldb/source/API/SystemInitializerFull.h
===================================================================
--- lldb/source/API/SystemInitializerFull.h
+++ lldb/source/API/SystemInitializerFull.h
@@ -9,7 +9,7 @@
 #ifndef LLDB_API_SYSTEM_INITIALIZER_FULL_H
 #define LLDB_API_SYSTEM_INITIALIZER_FULL_H
 
-#include "lldb/Initialization/SystemInitializerCommon.h"
+#include "lldb/Initialization/SystemInitializerAllPlugins.h"
 
 namespace lldb_private {
 /// Initializes lldb.
@@ -18,7 +18,7 @@
 /// services needed to use the full LLDB application.  This class is
 /// not intended to be used externally, but is instead used
 /// internally by SBDebugger to initialize the system.
-class SystemInitializerFull : public SystemInitializerCommon {
+class SystemInitializerFull : public SystemInitializerAllPlugins {
 public:
   SystemInitializerFull();
   ~SystemInitializerFull() override;
Index: lldb/source/API/SystemInitializerFull.cpp
===================================================================
--- lldb/source/API/SystemInitializerFull.cpp
+++ lldb/source/API/SystemInitializerFull.cpp
@@ -9,8 +9,10 @@
 #include "SystemInitializerFull.h"
 #include "lldb/API/SBCommandInterpreter.h"
 #include "lldb/Host/Config.h"
+#include "lldb/Utility/Timer.h"
 
 #if LLDB_ENABLE_PYTHON
+#include "Plugins/OperatingSystem/Python/OperatingSystemPython.h"
 #include "Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.h"
 #endif
 
@@ -18,179 +20,24 @@
 #include "Plugins/ScriptInterpreter/Lua/ScriptInterpreterLua.h"
 #endif
 
-#include "lldb/Core/Debugger.h"
-#include "lldb/Host/Host.h"
-#include "lldb/Initialization/SystemInitializerCommon.h"
-#include "lldb/Interpreter/CommandInterpreter.h"
-#include "lldb/Symbol/ClangASTContext.h"
-#include "lldb/Utility/Timer.h"
-
-#include "Plugins/ABI/MacOSX-arm/ABIMacOSX_arm.h"
-#include "Plugins/ABI/MacOSX-arm64/ABIMacOSX_arm64.h"
-#include "Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.h"
-#include "Plugins/ABI/SysV-arc/ABISysV_arc.h"
-#include "Plugins/ABI/SysV-arm/ABISysV_arm.h"
-#include "Plugins/ABI/SysV-arm64/ABISysV_arm64.h"
-#include "Plugins/ABI/SysV-hexagon/ABISysV_hexagon.h"
-#include "Plugins/ABI/SysV-i386/ABISysV_i386.h"
-#include "Plugins/ABI/SysV-mips/ABISysV_mips.h"
-#include "Plugins/ABI/SysV-mips64/ABISysV_mips64.h"
-#include "Plugins/ABI/SysV-ppc/ABISysV_ppc.h"
-#include "Plugins/ABI/SysV-ppc64/ABISysV_ppc64.h"
-#include "Plugins/ABI/SysV-s390x/ABISysV_s390x.h"
-#include "Plugins/ABI/SysV-x86_64/ABISysV_x86_64.h"
-#include "Plugins/ABI/Windows-x86_64/ABIWindows_x86_64.h"
-#include "Plugins/Architecture/Arm/ArchitectureArm.h"
-#include "Plugins/Architecture/Mips/ArchitectureMips.h"
-#include "Plugins/Architecture/PPC64/ArchitecturePPC64.h"
-#include "Plugins/Disassembler/llvm/DisassemblerLLVMC.h"
-#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOS.h"
-#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h"
-#include "Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h"
-#include "Plugins/DynamicLoader/Static/DynamicLoaderStatic.h"
-#include "Plugins/DynamicLoader/Windows-DYLD/DynamicLoaderWindowsDYLD.h"
-#include "Plugins/Instruction/ARM/EmulateInstructionARM.h"
-#include "Plugins/Instruction/ARM64/EmulateInstructionARM64.h"
-#include "Plugins/Instruction/MIPS/EmulateInstructionMIPS.h"
-#include "Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h"
-#include "Plugins/Instruction/PPC64/EmulateInstructionPPC64.h"
-#include "Plugins/InstrumentationRuntime/ASan/ASanRuntime.h"
-#include "Plugins/InstrumentationRuntime/MainThreadChecker/MainThreadCheckerRuntime.h"
-#include "Plugins/InstrumentationRuntime/TSan/TSanRuntime.h"
-#include "Plugins/InstrumentationRuntime/UBSan/UBSanRuntime.h"
-#include "Plugins/JITLoader/GDB/JITLoaderGDB.h"
-#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h"
-#include "Plugins/Language/ObjC/ObjCLanguage.h"
-#include "Plugins/Language/ObjCPlusPlus/ObjCPlusPlusLanguage.h"
-#include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h"
-#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h"
-#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h"
-#include "Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h"
-#include "Plugins/MemoryHistory/asan/MemoryHistoryASan.h"
-#include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h"
-#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h"
-#include "Plugins/ObjectFile/Breakpad/ObjectFileBreakpad.h"
-#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
-#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
-#include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"
-#include "Plugins/ObjectFile/wasm/ObjectFileWasm.h"
-#include "Plugins/OperatingSystem/Python/OperatingSystemPython.h"
-#include "Plugins/Platform/Android/PlatformAndroid.h"
-#include "Plugins/Platform/FreeBSD/PlatformFreeBSD.h"
-#include "Plugins/Platform/Linux/PlatformLinux.h"
-#include "Plugins/Platform/MacOSX/PlatformMacOSX.h"
-#include "Plugins/Platform/MacOSX/PlatformRemoteiOS.h"
-#include "Plugins/Platform/NetBSD/PlatformNetBSD.h"
-#include "Plugins/Platform/OpenBSD/PlatformOpenBSD.h"
-#include "Plugins/Platform/Windows/PlatformWindows.h"
-#include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
-#include "Plugins/Process/elf-core/ProcessElfCore.h"
-#include "Plugins/Process/gdb-remote/ProcessGDBRemote.h"
-#include "Plugins/Process/mach-core/ProcessMachCore.h"
-#include "Plugins/Process/minidump/ProcessMinidump.h"
-#include "Plugins/ScriptInterpreter/None/ScriptInterpreterNone.h"
-#include "Plugins/SymbolFile/Breakpad/SymbolFileBreakpad.h"
-#include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h"
-#include "Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h"
-#include "Plugins/SymbolFile/PDB/SymbolFilePDB.h"
-#include "Plugins/SymbolFile/Symtab/SymbolFileSymtab.h"
-#include "Plugins/SymbolVendor/ELF/SymbolVendorELF.h"
-#include "Plugins/SymbolVendor/wasm/SymbolVendorWasm.h"
-#include "Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h"
-#include "Plugins/UnwindAssembly/InstEmulation/UnwindAssemblyInstEmulation.h"
-#include "Plugins/UnwindAssembly/x86/UnwindAssembly-x86.h"
-
-#if defined(__APPLE__)
-#include "Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h"
-#include "Plugins/Platform/MacOSX/PlatformAppleTVSimulator.h"
-#include "Plugins/Platform/MacOSX/PlatformAppleWatchSimulator.h"
-#include "Plugins/Platform/MacOSX/PlatformDarwinKernel.h"
-#include "Plugins/Platform/MacOSX/PlatformRemoteAppleBridge.h"
-#include "Plugins/Platform/MacOSX/PlatformRemoteAppleTV.h"
-#include "Plugins/Platform/MacOSX/PlatformRemoteAppleWatch.h"
-#include "Plugins/Platform/MacOSX/PlatformiOSSimulator.h"
-#include "Plugins/Process/MacOSX-Kernel/ProcessKDP.h"
-#include "Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.h"
-#endif
-#include "Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h"
-
-#if defined(__FreeBSD__)
-#include "Plugins/Process/FreeBSD/ProcessFreeBSD.h"
-#endif
-
-#if defined(_WIN32)
-#include "Plugins/Process/Windows/Common/ProcessWindows.h"
-#include "lldb/Host/windows/windows.h"
-#endif
-
-#include "llvm/Support/TargetSelect.h"
-
+// Include MCJIT.h to initialize the JIT.
 #pragma clang diagnostic push
 #pragma clang diagnostic ignored "-Wglobal-constructors"
 #include "llvm/ExecutionEngine/MCJIT.h"
 #pragma clang diagnostic pop
 
-#include <string>
-
 using namespace lldb_private;
 
 SystemInitializerFull::SystemInitializerFull() {}
 
 SystemInitializerFull::~SystemInitializerFull() {}
 
-#define LLDB_PROCESS_AArch64(op)                                               \
-  ABIMacOSX_arm64::op();                                                       \
-  ABISysV_arm64::op();
-#define LLDB_PROCESS_ARM(op)                                                   \
-  ABIMacOSX_arm::op();                                                         \
-  ABISysV_arm::op();
-#define LLDB_PROCESS_ARC(op)                                                   \
-  ABISysV_arc::op();
-#define LLDB_PROCESS_Hexagon(op) ABISysV_hexagon::op();
-#define LLDB_PROCESS_Mips(op)                                                  \
-  ABISysV_mips::op();                                                          \
-  ABISysV_mips64::op();
-#define LLDB_PROCESS_PowerPC(op)                                               \
-  ABISysV_ppc::op();                                                          \
-  ABISysV_ppc64::op();
-#define LLDB_PROCESS_SystemZ(op) ABISysV_s390x::op();
-#define LLDB_PROCESS_X86(op)                                                   \
-  ABIMacOSX_i386::op();                                                        \
-  ABISysV_i386::op();                                                          \
-  ABISysV_x86_64::op();                                                        \
-  ABIWindows_x86_64::op();
-
-#define LLDB_PROCESS_AMDGPU(op)
-#define LLDB_PROCESS_AVR(op)
-#define LLDB_PROCESS_BPF(op)
-#define LLDB_PROCESS_Lanai(op)
-#define LLDB_PROCESS_MSP430(op)
-#define LLDB_PROCESS_NVPTX(op)
-#define LLDB_PROCESS_RISCV(op)
-#define LLDB_PROCESS_Sparc(op)
-#define LLDB_PROCESS_WebAssembly(op)
-#define LLDB_PROCESS_XCore(op)
-
 llvm::Error SystemInitializerFull::Initialize() {
-  if (auto e = SystemInitializerCommon::Initialize())
+  if (auto e = SystemInitializerAllPlugins::Initialize())
     return e;
 
-  breakpad::ObjectFileBreakpad::Initialize();
-  ObjectFileELF::Initialize();
-  ObjectFileMachO::Initialize();
-  ObjectFilePECOFF::Initialize();
-  wasm::ObjectFileWasm::Initialize();
-
-  ObjectContainerBSDArchive::Initialize();
-  ObjectContainerUniversalMachO::Initialize();
-
-  ScriptInterpreterNone::Initialize();
-
 #if LLDB_ENABLE_PYTHON
   OperatingSystemPython::Initialize();
-#endif
-
-#if LLDB_ENABLE_PYTHON
   ScriptInterpreterPython::Initialize();
 #endif
 
@@ -198,111 +45,7 @@
   ScriptInterpreterLua::Initialize();
 #endif
 
-  platform_freebsd::PlatformFreeBSD::Initialize();
-  platform_linux::PlatformLinux::Initialize();
-  platform_netbsd::PlatformNetBSD::Initialize();
-  platform_openbsd::PlatformOpenBSD::Initialize();
-  PlatformWindows::Initialize();
-  platform_android::PlatformAndroid::Initialize();
-  PlatformRemoteiOS::Initialize();
-  PlatformMacOSX::Initialize();
-#if defined(__APPLE__)
-  PlatformiOSSimulator::Initialize();
-  PlatformDarwinKernel::Initialize();
-#endif
-
-  // Initialize LLVM and Clang
-  llvm::InitializeAllTargets();
-  llvm::InitializeAllAsmPrinters();
-  llvm::InitializeAllTargetMCs();
-  llvm::InitializeAllDisassemblers();
-
-  ClangASTContext::Initialize();
-
-#define LLVM_TARGET(t) LLDB_PROCESS_ ## t(Initialize)
-#include "llvm/Config/Targets.def"
-
-  ArchitectureArm::Initialize();
-  ArchitectureMips::Initialize();
-  ArchitecturePPC64::Initialize();
-
-  DisassemblerLLVMC::Initialize();
-
-  JITLoaderGDB::Initialize();
-  ProcessElfCore::Initialize();
-  ProcessMachCore::Initialize();
-  minidump::ProcessMinidump::Initialize();
-  MemoryHistoryASan::Initialize();
-  AddressSanitizerRuntime::Initialize();
-  ThreadSanitizerRuntime::Initialize();
-  UndefinedBehaviorSanitizerRuntime::Initialize();
-  MainThreadCheckerRuntime::Initialize();
-
-  SymbolVendorELF::Initialize();
-  breakpad::SymbolFileBreakpad::Initialize();
-  SymbolFileDWARF::Initialize();
-  SymbolFilePDB::Initialize();
-  SymbolFileSymtab::Initialize();
-  wasm::SymbolVendorWasm::Initialize();
-  UnwindAssemblyInstEmulation::Initialize();
-  UnwindAssembly_x86::Initialize();
-
-  EmulateInstructionARM::Initialize();
-  EmulateInstructionARM64::Initialize();
-  EmulateInstructionMIPS::Initialize();
-  EmulateInstructionMIPS64::Initialize();
-  EmulateInstructionPPC64::Initialize();
-
-  SymbolFileDWARFDebugMap::Initialize();
-  ItaniumABILanguageRuntime::Initialize();
-  AppleObjCRuntimeV2::Initialize();
-  AppleObjCRuntimeV1::Initialize();
-  SystemRuntimeMacOSX::Initialize();
-  RenderScriptRuntime::Initialize();
-
-  CPlusPlusLanguage::Initialize();
-  ObjCLanguage::Initialize();
-  ObjCPlusPlusLanguage::Initialize();
-
-#if defined(_WIN32)
-  ProcessWindows::Initialize();
-#endif
-#if defined(__FreeBSD__)
-  ProcessFreeBSD::Initialize();
-#endif
-#if defined(__APPLE__)
-  SymbolVendorMacOSX::Initialize();
-  ProcessKDP::Initialize();
-  PlatformAppleTVSimulator::Initialize();
-  PlatformAppleWatchSimulator::Initialize();
-  PlatformRemoteAppleTV::Initialize();
-  PlatformRemoteAppleWatch::Initialize();
-  PlatformRemoteAppleBridge::Initialize();
-  DynamicLoaderDarwinKernel::Initialize();
-#endif
-
-  // This plugin is valid on any host that talks to a Darwin remote. It
-  // shouldn't be limited to __APPLE__.
-  StructuredDataDarwinLog::Initialize();
-
-  // Platform agnostic plugins
-  platform_gdb_server::PlatformRemoteGDBServer::Initialize();
-
-  process_gdb_remote::ProcessGDBRemote::Initialize();
-  DynamicLoaderMacOSXDYLD::Initialize();
-  DynamicLoaderMacOS::Initialize();
-  DynamicLoaderPOSIXDYLD::Initialize();
-  DynamicLoaderStatic::Initialize();
-  DynamicLoaderWindowsDYLD::Initialize();
-
-  // Scan for any system or user LLDB plug-ins
-  PluginManager::Initialize();
 
-  // The process settings need to know about installed plug-ins, so the
-  // Settings must be initialized
-  // AFTER PluginManager::Initialize is called.
-
-  Debugger::SettingsInitialize();
 
   return llvm::Error::success();
 }
@@ -311,118 +54,14 @@
   static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
   Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION);
 
-  Debugger::SettingsTerminate();
-
-  // Terminate and unload and loaded system or user LLDB plug-ins
-  PluginManager::Terminate();
-
-  ClangASTContext::Terminate();
-
-  ArchitectureArm::Terminate();
-  ArchitectureMips::Terminate();
-  ArchitecturePPC64::Terminate();
-
-#define LLVM_TARGET(t) LLDB_PROCESS_ ## t(Terminate)
-#include "llvm/Config/Targets.def"
-
-  DisassemblerLLVMC::Terminate();
-
-  JITLoaderGDB::Terminate();
-  ProcessElfCore::Terminate();
-  ProcessMachCore::Terminate();
-  minidump::ProcessMinidump::Terminate();
-  MemoryHistoryASan::Terminate();
-  AddressSanitizerRuntime::Terminate();
-  ThreadSanitizerRuntime::Terminate();
-  UndefinedBehaviorSanitizerRuntime::Terminate();
-  MainThreadCheckerRuntime::Terminate();
-  wasm::SymbolVendorWasm::Terminate();
-  SymbolVendorELF::Terminate();
-  breakpad::SymbolFileBreakpad::Terminate();
-  SymbolFileDWARF::Terminate();
-  SymbolFilePDB::Terminate();
-  SymbolFileSymtab::Terminate();
-  UnwindAssembly_x86::Terminate();
-  UnwindAssemblyInstEmulation::Terminate();
-
-  EmulateInstructionARM::Terminate();
-  EmulateInstructionARM64::Terminate();
-  EmulateInstructionMIPS::Terminate();
-  EmulateInstructionMIPS64::Terminate();
-  EmulateInstructionPPC64::Terminate();
-
-  SymbolFileDWARFDebugMap::Terminate();
-  ItaniumABILanguageRuntime::Terminate();
-  AppleObjCRuntimeV2::Terminate();
-  AppleObjCRuntimeV1::Terminate();
-  SystemRuntimeMacOSX::Terminate();
-  RenderScriptRuntime::Terminate();
-
-  CPlusPlusLanguage::Terminate();
-  ObjCLanguage::Terminate();
-  ObjCPlusPlusLanguage::Terminate();
-
-#if defined(__APPLE__)
-  DynamicLoaderDarwinKernel::Terminate();
-  ProcessKDP::Terminate();
-  SymbolVendorMacOSX::Terminate();
-  PlatformAppleTVSimulator::Terminate();
-  PlatformAppleWatchSimulator::Terminate();
-  PlatformRemoteAppleTV::Terminate();
-  PlatformRemoteAppleWatch::Terminate();
-  PlatformRemoteAppleBridge::Terminate();
-#endif
-
-#if defined(__FreeBSD__)
-  ProcessFreeBSD::Terminate();
-#endif
-  Debugger::SettingsTerminate();
-
-  platform_gdb_server::PlatformRemoteGDBServer::Terminate();
-  process_gdb_remote::ProcessGDBRemote::Terminate();
-  StructuredDataDarwinLog::Terminate();
-
-  DynamicLoaderMacOSXDYLD::Terminate();
-  DynamicLoaderMacOS::Terminate();
-  DynamicLoaderPOSIXDYLD::Terminate();
-  DynamicLoaderStatic::Terminate();
-  DynamicLoaderWindowsDYLD::Terminate();
+  SystemInitializerAllPlugins::Terminate();
 
-
-  platform_freebsd::PlatformFreeBSD::Terminate();
-  platform_linux::PlatformLinux::Terminate();
-  platform_netbsd::PlatformNetBSD::Terminate();
-  platform_openbsd::PlatformOpenBSD::Terminate();
-  PlatformWindows::Terminate();
-  platform_android::PlatformAndroid::Terminate();
-  PlatformMacOSX::Terminate();
-  PlatformRemoteiOS::Terminate();
-#if defined(__APPLE__)
-  PlatformiOSSimulator::Terminate();
-  PlatformDarwinKernel::Terminate();
-#endif
-
-  breakpad::ObjectFileBreakpad::Terminate();
-  ObjectFileELF::Terminate();
-  ObjectFileMachO::Terminate();
-  ObjectFilePECOFF::Terminate();
-  wasm::ObjectFileWasm::Terminate();
-
-  ObjectContainerBSDArchive::Terminate();
-  ObjectContainerUniversalMachO::Terminate();
-
-#if LLDB_ENABLE_PYTHON
-  OperatingSystemPython::Terminate();
+#if LLDB_ENABLE_LUA
+  ScriptInterpreterLua::Terminate();
 #endif
 
 #if LLDB_ENABLE_PYTHON
   ScriptInterpreterPython::Terminate();
+  OperatingSystemPython::Terminate();
 #endif
-
-#if LLDB_ENABLE_LUA
-  ScriptInterpreterLua::Terminate();
-#endif
-
-  // Now shutdown the common parts, in reverse order.
-  SystemInitializerCommon::Terminate();
 }
Index: lldb/source/API/CMakeLists.txt
===================================================================
--- lldb/source/API/CMakeLists.txt
+++ lldb/source/API/CMakeLists.txt
@@ -99,7 +99,7 @@
     lldbDataFormatters
     lldbExpression
     lldbHost
-    lldbInitialization
+    lldbInitializationAllPlugins
     lldbInterpreter
     lldbSymbol
     lldbTarget
Index: lldb/include/lldb/Initialization/SystemInitializerAllPlugins.h
===================================================================
--- /dev/null
+++ lldb/include/lldb/Initialization/SystemInitializerAllPlugins.h
@@ -0,0 +1,28 @@
+//===-- SystemInitializerAllPlugins.h ---------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_API_SYSTEM_INITIALIZER_ALL_PLUGINS_H
+#define LLDB_API_SYSTEM_INITIALIZER_ALL_PLUGINS_H
+
+#include "lldb/Initialization/SystemInitializerCommon.h"
+
+namespace lldb_private {
+
+/// Initializes all LLDB plugins.
+class SystemInitializerAllPlugins : public SystemInitializerCommon {
+public:
+  SystemInitializerAllPlugins();
+  ~SystemInitializerAllPlugins() override;
+
+  llvm::Error Initialize() override;
+  void Terminate() override;
+};
+
+} // namespace lldb_private
+
+#endif // LLDB_API_SYSTEM_INITIALIZER_ALL_PLUGINS_H
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to