Skip to content

Commit fa3fa5b

Browse files
committedMay 24, 2018
Move ObjectFile initialization out of SystemInitializerCommon
Summary: For lldb-server, it is sufficient to parse only the native object file format for its target OS (no other file can be loaded into a running process). This moves the object file initialization code into specific initializer classes: lldb-test and liblldb get all object files; lldb-server gets only one of them. For this to work, I've needed to create a special SystemInitializer for use in lldb-server, instead of it calling directly into the common one. This reduces the size of lldb-server by about 2%, which is not earth-shattering, but it's an easy win, and it helps. Reviewers: zturner, clayborg Subscribers: mgorny, lldb-commits Differential Revision: https://reviews.llvm.org/D47250 llvm-svn: 333182
1 parent ae8ae5d commit fa3fa5b

File tree

8 files changed

+90
-15
lines changed

8 files changed

+90
-15
lines changed
 

‎lldb/source/API/SystemInitializerFull.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@
7070
#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h"
7171
#include "Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h"
7272
#include "Plugins/MemoryHistory/asan/MemoryHistoryASan.h"
73+
#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
74+
#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
75+
#include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"
7376
#include "Plugins/OperatingSystem/Go/OperatingSystemGo.h"
7477
#include "Plugins/OperatingSystem/Python/OperatingSystemPython.h"
7578
#include "Plugins/Platform/Android/PlatformAndroid.h"
@@ -251,6 +254,11 @@ SystemInitializerFull::~SystemInitializerFull() {}
251254

252255
void SystemInitializerFull::Initialize() {
253256
SystemInitializerCommon::Initialize();
257+
258+
ObjectFileELF::Initialize();
259+
ObjectFileMachO::Initialize();
260+
ObjectFilePECOFF::Initialize();
261+
254262
ScriptInterpreterNone::Initialize();
255263

256264
#ifndef LLDB_DISABLE_PYTHON
@@ -514,6 +522,10 @@ void SystemInitializerFull::Terminate() {
514522
PlatformDarwinKernel::Terminate();
515523
#endif
516524

525+
ObjectFileELF::Terminate();
526+
ObjectFileMachO::Terminate();
527+
ObjectFilePECOFF::Terminate();
528+
517529
// Now shutdown the common parts, in reverse order.
518530
SystemInitializerCommon::Terminate();
519531
}

‎lldb/source/Initialization/CMakeLists.txt

-3
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ add_lldb_library(lldbInitialization
1919
lldbPluginInstructionMIPS64
2020
lldbPluginObjectContainerBSDArchive
2121
lldbPluginObjectContainerMachOArchive
22-
lldbPluginObjectFileELF
23-
lldbPluginObjectFileMachO
24-
lldbPluginObjectFilePECOFF
2522
lldbPluginProcessGDBRemote
2623
${EXTRA_PLUGINS}
2724
${LLDB_SYSTEM_LIBS}

‎lldb/source/Initialization/SystemInitializerCommon.cpp

-9
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,11 @@
1414
#include "Plugins/Instruction/MIPS64/EmulateInstructionMIPS64.h"
1515
#include "Plugins/ObjectContainer/BSD-Archive/ObjectContainerBSDArchive.h"
1616
#include "Plugins/ObjectContainer/Universal-Mach-O/ObjectContainerUniversalMachO.h"
17-
#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
18-
#include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"
1917
#include "Plugins/Process/gdb-remote/ProcessGDBRemoteLog.h"
2018
#include "lldb/Host/Host.h"
2119
#include "lldb/Host/HostInfo.h"
2220
#include "lldb/Utility/Log.h"
2321
#include "lldb/Utility/Timer.h"
24-
#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
2522

2623
#if defined(__linux__) || defined(__FreeBSD__) || defined(__NetBSD__)
2724
#include "Plugins/Process/POSIX/ProcessPOSIXLog.h"
@@ -78,9 +75,6 @@ void SystemInitializerCommon::Initialize() {
7875

7976
// Initialize plug-ins
8077
ObjectContainerBSDArchive::Initialize();
81-
ObjectFileELF::Initialize();
82-
ObjectFileMachO::Initialize();
83-
ObjectFilePECOFF::Initialize();
8478

8579
EmulateInstructionARM::Initialize();
8680
EmulateInstructionMIPS::Initialize();
@@ -103,9 +97,6 @@ void SystemInitializerCommon::Terminate() {
10397
static Timer::Category func_cat(LLVM_PRETTY_FUNCTION);
10498
Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION);
10599
ObjectContainerBSDArchive::Terminate();
106-
ObjectFileELF::Terminate();
107-
ObjectFileMachO::Terminate();
108-
ObjectFilePECOFF::Terminate();
109100

110101
EmulateInstructionARM::Terminate();
111102
EmulateInstructionMIPS::Terminate();

‎lldb/tools/lldb-server/CMakeLists.txt

+9
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,21 @@ if(CMAKE_SYSTEM_NAME MATCHES "NetBSD")
3434
list(APPEND LLDB_PLUGINS lldbPluginProcessNetBSD)
3535
endif()
3636

37+
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
38+
list(APPEND LLDB_PLUGINS lldbPluginObjectFileMachO)
39+
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows")
40+
list(APPEND LLDB_PLUGINS lldbPluginObjectFilePECOFF)
41+
else()
42+
list(APPEND LLDB_PLUGINS lldbPluginObjectFileELF)
43+
endif()
44+
3745
add_lldb_tool(lldb-server INCLUDE_IN_FRAMEWORK
3846
Acceptor.cpp
3947
lldb-gdbserver.cpp
4048
lldb-platform.cpp
4149
lldb-server.cpp
4250
LLDBServerUtilities.cpp
51+
SystemInitializerLLGS.cpp
4352

4453
LINK_LIBS
4554
lldbBase
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//===-- SystemInitializerLLGS.cpp -------------------------------*- C++ -*-===//
2+
//
3+
// The LLVM Compiler Infrastructure
4+
//
5+
// This file is distributed under the University of Illinois Open Source
6+
// License. See LICENSE.TXT for details.
7+
//
8+
//===----------------------------------------------------------------------===//
9+
10+
#include "SystemInitializerLLGS.h"
11+
12+
#if defined(__APPLE__)
13+
#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
14+
using HostObjectFile = lldb_private::ObjectFileMachO;
15+
#elif defined(_WIN32)
16+
#include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"
17+
using HostObjectFile = lldb_private::ObjectFilePECOFF;
18+
#else
19+
#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
20+
using HostObjectFile = ObjectFileELF;
21+
#endif
22+
23+
using namespace lldb_private;
24+
25+
void SystemInitializerLLGS::Initialize() {
26+
SystemInitializerCommon::Initialize();
27+
HostObjectFile::Initialize();
28+
}
29+
30+
void SystemInitializerLLGS::Terminate() {
31+
HostObjectFile::Terminate();
32+
SystemInitializerCommon::Terminate();
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
//===-- SystemInitializerLLGS.h ---------------------------------*- C++ -*-===//
2+
//
3+
// The LLVM Compiler Infrastructure
4+
//
5+
// This file is distributed under the University of Illinois Open Source
6+
// License. See LICENSE.TXT for details.
7+
//
8+
//===----------------------------------------------------------------------===//
9+
10+
#ifndef LLDB_SYSTEMINITIALIZERLLGS_H
11+
#define LLDB_SYSTEMINITIALIZERLLGS_H
12+
13+
#include "lldb/Initialization/SystemInitializerCommon.h"
14+
15+
class SystemInitializerLLGS : public lldb_private::SystemInitializerCommon {
16+
public:
17+
void Initialize() override;
18+
void Terminate() override;
19+
};
20+
21+
#endif // LLDB_SYSTEMINITIALIZERLLGS_H

‎lldb/tools/lldb-server/lldb-server.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
//
88
//===----------------------------------------------------------------------===//
99

10-
#include "lldb/Initialization/SystemInitializerCommon.h"
10+
#include "SystemInitializerLLGS.h"
1111
#include "lldb/Initialization/SystemLifetimeManager.h"
1212
#include "lldb/lldb-private.h"
1313

@@ -35,8 +35,8 @@ int main_gdbserver(int argc, char *argv[]);
3535
int main_platform(int argc, char *argv[]);
3636

3737
static void initialize() {
38-
g_debugger_lifetime->Initialize(
39-
llvm::make_unique<lldb_private::SystemInitializerCommon>(), nullptr);
38+
g_debugger_lifetime->Initialize(llvm::make_unique<SystemInitializerLLGS>(),
39+
nullptr);
4040
}
4141

4242
static void terminate() { g_debugger_lifetime->Terminate(); }

‎lldb/tools/lldb-test/SystemInitializerTest.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@
6060
#include "Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCRuntimeV2.h"
6161
#include "Plugins/LanguageRuntime/RenderScript/RenderScriptRuntime/RenderScriptRuntime.h"
6262
#include "Plugins/MemoryHistory/asan/MemoryHistoryASan.h"
63+
#include "Plugins/ObjectFile/ELF/ObjectFileELF.h"
64+
#include "Plugins/ObjectFile/Mach-O/ObjectFileMachO.h"
65+
#include "Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.h"
6366
#include "Plugins/OperatingSystem/Go/OperatingSystemGo.h"
6467
#include "Plugins/Platform/Android/PlatformAndroid.h"
6568
#include "Plugins/Platform/FreeBSD/PlatformFreeBSD.h"
@@ -119,6 +122,11 @@ SystemInitializerTest::~SystemInitializerTest() {}
119122

120123
void SystemInitializerTest::Initialize() {
121124
SystemInitializerCommon::Initialize();
125+
126+
ObjectFileELF::Initialize();
127+
ObjectFileMachO::Initialize();
128+
ObjectFilePECOFF::Initialize();
129+
122130
ScriptInterpreterNone::Initialize();
123131

124132
OperatingSystemGo::Initialize();
@@ -345,6 +353,10 @@ void SystemInitializerTest::Terminate() {
345353
PlatformDarwinKernel::Terminate();
346354
#endif
347355

356+
ObjectFileELF::Terminate();
357+
ObjectFileMachO::Terminate();
358+
ObjectFilePECOFF::Terminate();
359+
348360
// Now shutdown the common parts, in reverse order.
349361
SystemInitializerCommon::Terminate();
350362
}

0 commit comments

Comments
 (0)