Add python back to the components initialized / terminated for LLGS - found
that "lldb-server platform" needs python. No noticeable affect to binary size.
REPOSITORY
rL LLVM
http://reviews.llvm.org/D7880
Files:
include/lldb/lldb-private.h
source/lldb.cpp
tools/lldb-server/lldb-gdbserver.cpp
tools/lldb-server/lldb-platform.cpp
tools/lldb-server/lldb-server.cpp
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
Index: include/lldb/lldb-private.h
===================================================================
--- include/lldb/lldb-private.h
+++ include/lldb/lldb-private.h
@@ -38,6 +38,15 @@
void
Initialize();
+//------------------------------------------------------------------
+/// Initializes subset of lldb for LLGS.
+///
+/// This function only initializes the set of components and plugins
+/// necessary for lldb-platform and lldb-gdbserver, reducing the
+/// impact on the statically linked binary size.
+//------------------------------------------------------------------
+void
+InitializeForLLGS();
//------------------------------------------------------------------
/// Notifies any classes that lldb will be terminating soon.
@@ -70,6 +79,18 @@
void
Terminate();
+//------------------------------------------------------------------
+/// Terminates subset of lldb initialized by InitializeForLLGS
+///
+/// This function optionally can be called when clients are done
+/// using lldb functionality to free up any static resources
+/// that have been allocated during initialization or during
+/// function calls. No lldb functions should be called after
+/// calling this function without again calling DCInitialize()
+/// again.
+//------------------------------------------------------------------
+void
+TerminateLLGS();
const char *
GetVersion ();
Index: source/lldb.cpp
===================================================================
--- source/lldb.cpp
+++ source/lldb.cpp
@@ -110,9 +110,9 @@
}
void
-lldb_private::Initialize ()
+lldb_private::InitializeForLLGS ()
{
- // Make sure we inialize only once
+ // Make sure we initialize only once
static Mutex g_inited_mutex(Mutex::eMutexTypeRecursive);
static bool g_inited = false;
@@ -141,51 +141,32 @@
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
@@ -196,15 +177,53 @@
AppleObjCRuntimeV1::Initialize();
ObjectContainerUniversalMachO::Initialize();
ObjectFileMachO::Initialize();
- ProcessKDP::Initialize();
- ProcessMachCore::Initialize();
+
SymbolVendorMacOSX::Initialize();
PlatformDarwinKernel::Initialize();
PlatformRemoteiOS::Initialize();
PlatformMacOSX::Initialize();
PlatformiOSSimulator::Initialize();
SystemRuntimeMacOSX::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
@@ -218,21 +237,26 @@
#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();
// 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();
+
}
}
@@ -243,19 +267,9 @@
}
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();
@@ -274,33 +288,52 @@
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();
#endif
- Debugger::SettingsTerminate ();
+#ifndef LLDB_DISABLE_PYTHON
+ OperatingSystemPython::Terminate();
+#endif
+
+ 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
@@ -312,12 +345,12 @@
#if defined (__FreeBSD__)
ProcessFreeBSD::Terminate();
#endif
+ Debugger::SettingsTerminate ();
PlatformRemoteGDBServer::Terminate();
ProcessGDBRemote::Terminate();
DynamicLoaderStatic::Terminate();
-
- Log::Terminate();
+ TerminateLLGS();
}
#if defined (__APPLE__)
Index: tools/lldb-server/lldb-gdbserver.cpp
===================================================================
--- tools/lldb-server/lldb-gdbserver.cpp
+++ tools/lldb-server/lldb-gdbserver.cpp
@@ -507,8 +507,6 @@
std::string named_pipe_path;
bool reverse_connect = false;
- Debugger::Initialize (NULL);
-
lldb::DebuggerSP debugger_sp = Debugger::CreateInstance ();
debugger_sp->SetInputFileHandle(stdin, false);
@@ -689,8 +687,6 @@
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;
Index: tools/lldb-server/lldb-platform.cpp
===================================================================
--- tools/lldb-server/lldb-platform.cpp
+++ tools/lldb-server/lldb-platform.cpp
@@ -111,7 +111,6 @@
Error error;
std::string listen_host_port;
int ch;
- Debugger::Initialize(NULL);
lldb::DebuggerSP debugger_sp = Debugger::CreateInstance ();
@@ -306,8 +305,6 @@
}
} while (g_stay_alive);
- Debugger::Terminate();
-
fprintf(stderr, "lldb-platform exiting...\n");
return 0;
Index: tools/lldb-server/lldb-server.cpp
===================================================================
--- tools/lldb-server/lldb-server.cpp
+++ tools/lldb-server/lldb-server.cpp
@@ -7,6 +7,8 @@
//
//===----------------------------------------------------------------------===//
+#include "lldb/lldb-private.h"
+
#include <stdio.h>
#include <stdlib.h>
@@ -24,6 +26,19 @@
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
//----------------------------------------------------------------------
@@ -39,11 +54,15 @@
}
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);
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits