183 changes: 108 additions & 75 deletions lldb/source/lldb.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
#include "Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h"
#include "Plugins/Instruction/ARM/EmulateInstructionARM.h"
#include "Plugins/Instruction/ARM64/EmulateInstructionARM64.h"
#include "Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.h"
#include "Plugins/JITLoader/GDB/JITLoaderGDB.h"
#include "Plugins/LanguageRuntime/CPlusPlus/ItaniumABI/ItaniumABILanguageRuntime.h"
#include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h"
Expand All @@ -61,23 +60,24 @@
#ifndef LLDB_DISABLE_PYTHON
#include "Plugins/OperatingSystem/Python/OperatingSystemPython.h"
#endif
#if defined (__APPLE__)

#include "Plugins/DynamicLoader/MacOSX-DYLD/DynamicLoaderMacOSXDYLD.h"
#include "Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h"
#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV1.h"
#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h"
#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h"
#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
#include "Plugins/Process/MacOSX-Kernel/ProcessKDP.h"
#include "Plugins/Platform/MacOSX/PlatformMacOSX.h"
#include "Plugins/Platform/MacOSX/PlatformRemoteiOS.h"
#include "Plugins/Platform/MacOSX/PlatformDarwinKernel.h"
#include "Plugins/Platform/MacOSX/PlatformiOSSimulator.h"
#include "Plugins/SystemRuntime/MacOSX/SystemRuntimeMacOSX.h"
#endif

#if defined (__APPLE__)
#include "Plugins/DynamicLoader/Darwin-Kernel/DynamicLoaderDarwinKernel.h"
#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
#include "Plugins/Platform/MacOSX/PlatformDarwinKernel.h"
#include "Plugins/Process/mach-core/ProcessMachCore.h"

#include "Plugins/Process/MacOSX-Kernel/ProcessKDP.h"
#include "Plugins/SymbolVendor/MacOSX/SymbolVendorMacOSX.h"
#endif

#if defined (__linux__)
#include "Plugins/Process/Linux/ProcessLinux.h"
Expand Down Expand Up @@ -110,7 +110,7 @@ static void fatal_error_handler(void *user_data, const std::string& reason,
}

void
lldb_private::Initialize ()
lldb_private::InitializeForLLGS ()
{
// Make sure we initialize only once
static Mutex g_inited_mutex(Mutex::eMutexTypeRecursive);
Expand Down Expand Up @@ -141,70 +141,90 @@ lldb_private::Initialize ()

Log::Initialize();
HostInfo::Initialize();
Timer::Initialize ();
Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__);
Timer::Initialize();
Timer scoped_timer(__PRETTY_FUNCTION__, __PRETTY_FUNCTION__);

// Initialize LLVM and Clang
llvm::InitializeAllTargets();
llvm::InitializeAllAsmPrinters();
llvm::InitializeAllTargetMCs();
llvm::InitializeAllDisassemblers();
llvm::install_fatal_error_handler(fatal_error_handler, 0);

// Initialize plug-ins
ABIMacOSX_i386::Initialize();
ABIMacOSX_arm::Initialize();
ABIMacOSX_arm64::Initialize();
ABISysV_x86_64::Initialize();
ABISysV_ppc::Initialize();
ABISysV_ppc64::Initialize();
DisassemblerLLVMC::Initialize();

ObjectContainerBSDArchive::Initialize();
ObjectFileELF::Initialize();
SymbolVendorELF::Initialize();
SymbolFileDWARF::Initialize();
SymbolFileSymtab::Initialize();
UnwindAssemblyInstEmulation::Initialize();
UnwindAssembly_x86::Initialize();
EmulateInstructionARM::Initialize ();
EmulateInstructionARM64::Initialize ();
ObjectFilePECOFF::Initialize ();
DynamicLoaderPOSIXDYLD::Initialize ();
EmulateInstructionARM::Initialize();
EmulateInstructionARM64::Initialize();
ObjectFilePECOFF::Initialize();
DynamicLoaderPOSIXDYLD::Initialize();
PlatformFreeBSD::Initialize();
PlatformLinux::Initialize();
PlatformWindows::Initialize();
PlatformKalimba::Initialize();
PlatformAndroid::Initialize();
SymbolFileDWARFDebugMap::Initialize();
ItaniumABILanguageRuntime::Initialize();
#ifndef LLDB_DISABLE_PYTHON
ScriptInterpreterPython::InitializePrivate();
OperatingSystemPython::Initialize();
#endif
JITLoaderGDB::Initialize();
ProcessElfCore::Initialize();
MemoryHistoryASan::Initialize();
AddressSanitizerRuntime::Initialize();

#if defined (__APPLE__)

//----------------------------------------------------------------------
// Apple/Darwin hosted plugins
//----------------------------------------------------------------------
DynamicLoaderMacOSXDYLD::Initialize();
DynamicLoaderDarwinKernel::Initialize();
AppleObjCRuntimeV2::Initialize();
AppleObjCRuntimeV1::Initialize();
ObjectContainerUniversalMachO::Initialize();
ObjectFileMachO::Initialize();
ProcessKDP::Initialize();
ProcessMachCore::Initialize();
SymbolVendorMacOSX::Initialize();
PlatformDarwinKernel::Initialize();

PlatformRemoteiOS::Initialize();
PlatformMacOSX::Initialize();
PlatformiOSSimulator::Initialize();
SystemRuntimeMacOSX::Initialize();

#if defined (__APPLE__)
SymbolVendorMacOSX::Initialize();
DynamicLoaderDarwinKernel::Initialize();
PlatformDarwinKernel::Initialize();
ObjectFileMachO::Initialize();
#endif

#ifndef LLDB_DISABLE_PYTHON
ScriptInterpreterPython::InitializePrivate();
OperatingSystemPython::Initialize();
#endif
}
}

void
lldb_private::Initialize ()
{
// Make sure we initialize only once
static Mutex g_inited_mutex(Mutex::eMutexTypeRecursive);
static bool g_inited = false;

InitializeForLLGS();
Mutex::Locker locker(g_inited_mutex);
if (!g_inited)
{
g_inited = true;
// Initialize LLVM and Clang
llvm::InitializeAllTargets();
llvm::InitializeAllAsmPrinters();
llvm::InitializeAllTargetMCs();
llvm::InitializeAllDisassemblers();

ABIMacOSX_i386::Initialize();
ABIMacOSX_arm::Initialize();
ABIMacOSX_arm64::Initialize();
ABISysV_x86_64::Initialize();
ABISysV_ppc::Initialize();
ABISysV_ppc64::Initialize();
DisassemblerLLVMC::Initialize();

JITLoaderGDB::Initialize();
ProcessElfCore::Initialize();
MemoryHistoryASan::Initialize();
AddressSanitizerRuntime::Initialize();

#if defined (__linux__)
//----------------------------------------------------------------------
// Linux hosted plugins
Expand All @@ -218,11 +238,15 @@ lldb_private::Initialize ()
#if defined (__FreeBSD__)
ProcessFreeBSD::Initialize();
#endif

#if defined (__APPLE__)
ProcessKDP::Initialize();
ProcessMachCore::Initialize();
#endif
//----------------------------------------------------------------------
// Platform agnostic plugins
//----------------------------------------------------------------------
PlatformRemoteGDBServer::Initialize ();
PlatformRemoteGDBServer::Initialize();

ProcessGDBRemote::Initialize();
DynamicLoaderStatic::Initialize();

Expand All @@ -231,8 +255,9 @@ lldb_private::Initialize ()

// The process settings need to know about installed plug-ins, so the Settings must be initialized
// AFTER PluginManager::Initialize is called.

Debugger::SettingsInitialize();

}
}

Expand All @@ -243,19 +268,9 @@ lldb_private::WillTerminate()
}

void
lldb_private::Terminate ()
lldb_private::TerminateLLGS ()
{
Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__);

// Terminate and unload and loaded system or user LLDB plug-ins
PluginManager::Terminate();
ABIMacOSX_i386::Terminate();
ABIMacOSX_arm::Terminate();
ABIMacOSX_arm64::Terminate();
ABISysV_x86_64::Terminate();
ABISysV_ppc::Terminate();
ABISysV_ppc64::Terminate();
DisassemblerLLVMC::Terminate();
ObjectContainerBSDArchive::Terminate();
ObjectFileELF::Terminate();
SymbolVendorELF::Terminate();
Expand All @@ -274,33 +289,51 @@ lldb_private::Terminate ()
PlatformAndroid::Terminate();
SymbolFileDWARFDebugMap::Terminate();
ItaniumABILanguageRuntime::Terminate();
#ifndef LLDB_DISABLE_PYTHON
OperatingSystemPython::Terminate();
#endif
JITLoaderGDB::Terminate();
ProcessElfCore::Terminate();
MemoryHistoryASan::Terminate();
AddressSanitizerRuntime::Terminate();

#if defined (__APPLE__)
DynamicLoaderMacOSXDYLD::Terminate();
DynamicLoaderDarwinKernel::Terminate();
AppleObjCRuntimeV2::Terminate();
AppleObjCRuntimeV1::Terminate();
ObjectContainerUniversalMachO::Terminate();
ObjectFileMachO::Terminate();
ProcessMachCore::Terminate();
ProcessKDP::Terminate();
SymbolVendorMacOSX::Terminate();
PlatformMacOSX::Terminate();
PlatformDarwinKernel::Terminate();
PlatformRemoteiOS::Terminate();
PlatformiOSSimulator::Terminate();
SystemRuntimeMacOSX::Terminate();

#if defined (__APPLE__)
DynamicLoaderDarwinKernel::Terminate();
ObjectFileMachO::Terminate();
PlatformDarwinKernel::Terminate();
SymbolVendorMacOSX::Terminate();
#endif
#ifndef LLDB_DISABLE_PYTHON
OperatingSystemPython::Terminate();
#endif

Debugger::SettingsTerminate ();
Log::Terminate();
}

void
lldb_private::Terminate ()
{
Timer scoped_timer (__PRETTY_FUNCTION__, __PRETTY_FUNCTION__);
// Terminate and unload and loaded system or user LLDB plug-ins
PluginManager::Terminate();
ABIMacOSX_i386::Terminate();
ABIMacOSX_arm::Terminate();
ABIMacOSX_arm64::Terminate();
ABISysV_x86_64::Terminate();
ABISysV_ppc::Terminate();
ABISysV_ppc64::Terminate();
DisassemblerLLVMC::Terminate();

JITLoaderGDB::Terminate();
ProcessElfCore::Terminate();
MemoryHistoryASan::Terminate();
AddressSanitizerRuntime::Terminate();

#if defined (__APPLE__)
ProcessMachCore::Terminate();
ProcessKDP::Terminate();
#endif
#if defined(_MSC_VER)
DynamicLoaderWindows::Terminate();
#endif
Expand All @@ -312,12 +345,12 @@ lldb_private::Terminate ()
#if defined (__FreeBSD__)
ProcessFreeBSD::Terminate();
#endif
Debugger::SettingsTerminate ();

PlatformRemoteGDBServer::Terminate();
ProcessGDBRemote::Terminate();
DynamicLoaderStatic::Terminate();

Log::Terminate();
TerminateLLGS();
}

#if defined (__APPLE__)
Expand Down
4 changes: 0 additions & 4 deletions lldb/tools/lldb-server/lldb-gdbserver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -507,8 +507,6 @@ main_gdbserver (int argc, char *argv[])
std::string named_pipe_path;
bool reverse_connect = false;

Debugger::Initialize (NULL);

lldb::DebuggerSP debugger_sp = Debugger::CreateInstance ();

debugger_sp->SetInputFileHandle(stdin, false);
Expand Down Expand Up @@ -689,8 +687,6 @@ main_gdbserver (int argc, char *argv[])

ConnectToRemote (gdb_server, reverse_connect, host_and_port, progname, subcommand, named_pipe_path.c_str ());

Debugger::Terminate ();

fprintf(stderr, "lldb-gdbserver exiting...\n");

return 0;
Expand Down
3 changes: 0 additions & 3 deletions lldb/tools/lldb-server/lldb-platform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ main_platform (int argc, char *argv[])
Error error;
std::string listen_host_port;
int ch;
Debugger::Initialize(NULL);

lldb::DebuggerSP debugger_sp = Debugger::CreateInstance ();

Expand Down Expand Up @@ -306,8 +305,6 @@ main_platform (int argc, char *argv[])
}
} while (g_stay_alive);

Debugger::Terminate();

fprintf(stderr, "lldb-platform exiting...\n");

return 0;
Expand Down
19 changes: 19 additions & 0 deletions lldb/tools/lldb-server/lldb-server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
//
//===----------------------------------------------------------------------===//

#include "lldb/lldb-private.h"

#include <stdio.h>
#include <stdlib.h>

Expand All @@ -24,6 +26,19 @@ display_usage (const char *progname)
int main_gdbserver (int argc, char *argv[]);
int main_platform (int argc, char *argv[]);

static void
initialize ()
{
lldb_private::InitializeForLLGS();
}

static void
terminate ()
{
lldb_private::WillTerminate();
lldb_private::TerminateLLGS();
}

//----------------------------------------------------------------------
// main
//----------------------------------------------------------------------
Expand All @@ -39,11 +54,15 @@ main (int argc, char *argv[])
}
else if (argv[1][0] == 'g')
{
initialize();
main_gdbserver(argc, argv);
terminate();
}
else if (argv[1][0] == 'p')
{
initialize();
main_platform(argc, argv);
terminate();
}
else {
display_usage(progname);
Expand Down