blob: 9230cac257b50d4c8a97aefb5f58747a46191d63 [file] [log] [blame]
//===-- SystemInitializerTest.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 "SystemInitializerTest.h"
#include "lldb/Core/Debugger.h"
#include "lldb/Core/PluginManager.h"
#include "lldb/Host/Host.h"
#include "lldb/Initialization/SystemInitializerCommon.h"
#include "lldb/Interpreter/CommandInterpreter.h"
#include "lldb/Utility/Timer.h"
#include "llvm/Support/TargetSelect.h"
#include <string>
using namespace lldb_private;
SystemInitializerTest::SystemInitializerTest() {}
SystemInitializerTest::~SystemInitializerTest() {}
#define LLDB_PROCESS_AArch64(op) \
op(ABIMacOSX_arm64); \
op(ABISysV_arm64);
#define LLDB_PROCESS_ARM(op) \
op(ABIMacOSX_arm); \
op(ABISysV_arm);
#define LLDB_PROCESS_Hexagon(op) op(ABISysV_hexagon);
#define LLDB_PROCESS_Mips(op) \
op(ABISysV_mips); \
op(ABISysV_mips64);
#define LLDB_PROCESS_PowerPC(op) \
op(ABISysV_ppc); \
op(ABISysV_ppc64);
#define LLDB_PROCESS_SystemZ(op) op(ABISysV_s390x);
#define LLDB_PROCESS_X86(op) \
op(ABIMacOSX_i386); \
op(ABISysV_i386); \
op(ABISysV_x86_64); \
op(ABIWindows_x86_64);
#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())
return e;
LLDB_PLUGIN_INITIALIZE(ObjectFileBreakpad);
LLDB_PLUGIN_INITIALIZE(ObjectFileELF);
LLDB_PLUGIN_INITIALIZE(ObjectFileMachO);
LLDB_PLUGIN_INITIALIZE(ObjectFilePECOFF);
LLDB_PLUGIN_INITIALIZE(ObjectFileWasm);
LLDB_PLUGIN_INITIALIZE(ObjectContainerBSDArchive);
LLDB_PLUGIN_INITIALIZE(ObjectContainerUniversalMachO);
LLDB_PLUGIN_INITIALIZE(ScriptInterpreterNone);
LLDB_PLUGIN_INITIALIZE(PlatformFreeBSD);
LLDB_PLUGIN_INITIALIZE(PlatformLinux);
LLDB_PLUGIN_INITIALIZE(PlatformNetBSD);
LLDB_PLUGIN_INITIALIZE(PlatformOpenBSD);
LLDB_PLUGIN_INITIALIZE(PlatformWindows);
LLDB_PLUGIN_INITIALIZE(PlatformAndroid);
LLDB_PLUGIN_INITIALIZE(PlatformRemoteiOS);
LLDB_PLUGIN_INITIALIZE(PlatformMacOSX);
// Initialize LLVM and Clang
llvm::InitializeAllTargets();
llvm::InitializeAllAsmPrinters();
llvm::InitializeAllTargetMCs();
llvm::InitializeAllDisassemblers();
LLDB_PLUGIN_INITIALIZE(TypeSystemClang);
#define LLVM_TARGET(t) LLDB_PROCESS_##t(LLDB_PLUGIN_INITIALIZE)
#include "llvm/Config/Targets.def"
LLDB_PLUGIN_INITIALIZE(ArchitectureArm);
LLDB_PLUGIN_INITIALIZE(ArchitectureMips);
LLDB_PLUGIN_INITIALIZE(ArchitecturePPC64);
LLDB_PLUGIN_INITIALIZE(DisassemblerLLVMC);
LLDB_PLUGIN_INITIALIZE(JITLoaderGDB);
LLDB_PLUGIN_INITIALIZE(ProcessElfCore);
LLDB_PLUGIN_INITIALIZE(ProcessMachCore);
LLDB_PLUGIN_INITIALIZE(ProcessMinidump);
LLDB_PLUGIN_INITIALIZE(MemoryHistoryASan);
LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeASan);
LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeTSan);
LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeUBSan);
LLDB_PLUGIN_INITIALIZE(InstrumentationRuntimeMainThreadChecker);
LLDB_PLUGIN_INITIALIZE(SymbolVendorELF);
LLDB_PLUGIN_INITIALIZE(SymbolFileBreakpad);
LLDB_PLUGIN_INITIALIZE(SymbolFileDWARF);
LLDB_PLUGIN_INITIALIZE(SymbolFilePDB);
LLDB_PLUGIN_INITIALIZE(SymbolFileSymtab);
LLDB_PLUGIN_INITIALIZE(SymbolVendorWasm);
LLDB_PLUGIN_INITIALIZE(UnwindAssemblyInstEmulation);
LLDB_PLUGIN_INITIALIZE(UnwindAssembly_x86);
LLDB_PLUGIN_INITIALIZE(EmulateInstructionARM);
LLDB_PLUGIN_INITIALIZE(EmulateInstructionARM64);
LLDB_PLUGIN_INITIALIZE(EmulateInstructionMIPS);
LLDB_PLUGIN_INITIALIZE(EmulateInstructionMIPS64);
LLDB_PLUGIN_INITIALIZE(EmulateInstructionPPC64);
LLDB_PLUGIN_INITIALIZE(SymbolFileDWARFDebugMap);
LLDB_PLUGIN_INITIALIZE(ItaniumABILanguageRuntime);
LLDB_PLUGIN_INITIALIZE(AppleObjCRuntime);
LLDB_PLUGIN_INITIALIZE(SystemRuntimeMacOSX);
LLDB_PLUGIN_INITIALIZE(RenderScriptRuntime);
LLDB_PLUGIN_INITIALIZE(CPlusPlusLanguage);
LLDB_PLUGIN_INITIALIZE(ObjCLanguage);
LLDB_PLUGIN_INITIALIZE(ObjCPlusPlusLanguage);
#if defined(_WIN32)
LLDB_PLUGIN_INITIALIZE(ProcessWindows);
#endif
#if defined(__FreeBSD__)
LLDB_PLUGIN_INITIALIZE(ProcessFreeBSD);
#endif
#if defined(__APPLE__)
LLDB_PLUGIN_INITIALIZE(SymbolVendorMacOSX);
LLDB_PLUGIN_INITIALIZE(ProcessKDP);
LLDB_PLUGIN_INITIALIZE(DynamicLoaderDarwinKernel);
#endif
// This plugin is valid on any host that talks to a Darwin remote. It
// shouldn't be limited to __APPLE__.
LLDB_PLUGIN_INITIALIZE(StructuredDataDarwinLog);
// Platform agnostic plugins
LLDB_PLUGIN_INITIALIZE(PlatformRemoteGDBServer);
LLDB_PLUGIN_INITIALIZE(ProcessGDBRemote);
LLDB_PLUGIN_INITIALIZE(DynamicLoaderMacOSXDYLD);
LLDB_PLUGIN_INITIALIZE(DynamicLoaderMacOS);
LLDB_PLUGIN_INITIALIZE(DynamicLoaderPOSIXDYLD);
LLDB_PLUGIN_INITIALIZE(DynamicLoaderStatic);
LLDB_PLUGIN_INITIALIZE(DynamicLoaderWindowsDYLD);
// 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 SystemInitializerTest::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();
LLDB_PLUGIN_TERMINATE(TypeSystemClang);
LLDB_PLUGIN_TERMINATE(ArchitectureArm);
LLDB_PLUGIN_TERMINATE(ArchitectureMips);
LLDB_PLUGIN_TERMINATE(ArchitecturePPC64);
#define LLVM_TARGET(t) LLDB_PROCESS_##t(LLDB_PLUGIN_TERMINATE)
#include "llvm/Config/Targets.def"
LLDB_PLUGIN_TERMINATE(DisassemblerLLVMC);
LLDB_PLUGIN_TERMINATE(JITLoaderGDB);
LLDB_PLUGIN_TERMINATE(ProcessElfCore);
LLDB_PLUGIN_TERMINATE(ProcessMachCore);
LLDB_PLUGIN_TERMINATE(ProcessMinidump);
LLDB_PLUGIN_TERMINATE(MemoryHistoryASan);
LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeASan);
LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeTSan);
LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeUBSan);
LLDB_PLUGIN_TERMINATE(InstrumentationRuntimeMainThreadChecker);
LLDB_PLUGIN_TERMINATE(SymbolVendorWasm);
LLDB_PLUGIN_TERMINATE(SymbolVendorELF);
LLDB_PLUGIN_TERMINATE(SymbolFileBreakpad);
LLDB_PLUGIN_TERMINATE(SymbolFileDWARF);
LLDB_PLUGIN_TERMINATE(SymbolFilePDB);
LLDB_PLUGIN_TERMINATE(SymbolFileSymtab);
LLDB_PLUGIN_TERMINATE(UnwindAssembly_x86);
LLDB_PLUGIN_TERMINATE(UnwindAssemblyInstEmulation);
LLDB_PLUGIN_TERMINATE(EmulateInstructionARM);
LLDB_PLUGIN_TERMINATE(EmulateInstructionARM64);
LLDB_PLUGIN_TERMINATE(EmulateInstructionMIPS);
LLDB_PLUGIN_TERMINATE(EmulateInstructionMIPS64);
LLDB_PLUGIN_TERMINATE(EmulateInstructionPPC64);
LLDB_PLUGIN_TERMINATE(SymbolFileDWARFDebugMap);
LLDB_PLUGIN_TERMINATE(ItaniumABILanguageRuntime);
LLDB_PLUGIN_TERMINATE(AppleObjCRuntime);
LLDB_PLUGIN_TERMINATE(SystemRuntimeMacOSX);
LLDB_PLUGIN_TERMINATE(RenderScriptRuntime);
LLDB_PLUGIN_TERMINATE(CPlusPlusLanguage);
LLDB_PLUGIN_TERMINATE(ObjCLanguage);
LLDB_PLUGIN_TERMINATE(ObjCPlusPlusLanguage);
#if defined(__APPLE__)
LLDB_PLUGIN_TERMINATE(DynamicLoaderDarwinKernel);
LLDB_PLUGIN_TERMINATE(ProcessKDP);
LLDB_PLUGIN_TERMINATE(SymbolVendorMacOSX);
#endif
#if defined(__FreeBSD__)
LLDB_PLUGIN_TERMINATE(ProcessFreeBSD);
#endif
Debugger::SettingsTerminate();
LLDB_PLUGIN_TERMINATE(PlatformRemoteGDBServer);
LLDB_PLUGIN_TERMINATE(ProcessGDBRemote);
LLDB_PLUGIN_TERMINATE(StructuredDataDarwinLog);
LLDB_PLUGIN_TERMINATE(DynamicLoaderMacOSXDYLD);
LLDB_PLUGIN_TERMINATE(DynamicLoaderMacOS);
LLDB_PLUGIN_TERMINATE(DynamicLoaderPOSIXDYLD);
LLDB_PLUGIN_TERMINATE(DynamicLoaderStatic);
LLDB_PLUGIN_TERMINATE(DynamicLoaderWindowsDYLD);
LLDB_PLUGIN_TERMINATE(PlatformFreeBSD);
LLDB_PLUGIN_TERMINATE(PlatformLinux);
LLDB_PLUGIN_TERMINATE(PlatformNetBSD);
LLDB_PLUGIN_TERMINATE(PlatformOpenBSD);
LLDB_PLUGIN_TERMINATE(PlatformWindows);
LLDB_PLUGIN_TERMINATE(PlatformAndroid);
LLDB_PLUGIN_TERMINATE(PlatformRemoteiOS);
LLDB_PLUGIN_TERMINATE(PlatformMacOSX);
LLDB_PLUGIN_TERMINATE(ObjectFileBreakpad);
LLDB_PLUGIN_TERMINATE(ObjectFileELF);
LLDB_PLUGIN_TERMINATE(ObjectFileMachO);
LLDB_PLUGIN_TERMINATE(ObjectFilePECOFF);
LLDB_PLUGIN_TERMINATE(ObjectFileWasm);
LLDB_PLUGIN_TERMINATE(ObjectContainerBSDArchive);
LLDB_PLUGIN_TERMINATE(ObjectContainerUniversalMachO);
LLDB_PLUGIN_TERMINATE(ScriptInterpreterNone);
// Now shutdown the common parts, in reverse order.
SystemInitializerCommon::Terminate();
}