aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/ELFWriter.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-07-16 17:41:06 +0000
committerChris Lattner <sabre@nondot.org>2005-07-16 17:41:06 +0000
commit0589523525a156e096baf975c5e6e7e4112cb673 (patch)
tree2734a5f6d17159e41bbf75120c1aefaca81277ca /lib/CodeGen/ELFWriter.cpp
parent56c3261e3415154969f8a2881e4097c40d92c60c (diff)
Only get the .bss and .data sections when needed instead of unconditionally.
This allows is to not emit empty sections when .data or .bss is not used. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22457 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/ELFWriter.cpp')
-rw-r--r--lib/CodeGen/ELFWriter.cpp14
1 files changed, 3 insertions, 11 deletions
diff --git a/lib/CodeGen/ELFWriter.cpp b/lib/CodeGen/ELFWriter.cpp
index afd6c3b05c..d53afde6a4 100644
--- a/lib/CodeGen/ELFWriter.cpp
+++ b/lib/CodeGen/ELFWriter.cpp
@@ -223,8 +223,7 @@ bool ELFWriter::doInitialization(Module &M) {
return false;
}
-void ELFWriter::EmitGlobal(GlobalVariable *GV, ELFSection &DataSection,
- ELFSection &BSSSection) {
+void ELFWriter::EmitGlobal(GlobalVariable *GV) {
// If this is an external global, emit it now. TODO: Note that it would be
// better to ignore the symbol here and only add it to the symbol table if
// referenced.
@@ -264,6 +263,7 @@ void ELFWriter::EmitGlobal(GlobalVariable *GV, ELFSection &DataSection,
// Handle alignment. Ensure section is aligned at least as much as required
// by this symbol.
+ ELFSection &BSSSection = getBSSSection();
BSSSection.Align = std::max(BSSSection.Align, Align);
// Within the section, emit enough virtual padding to get us to an alignment
@@ -315,17 +315,9 @@ bool ELFWriter::runOnMachineFunction(MachineFunction &MF) {
bool ELFWriter::doFinalization(Module &M) {
// Okay, the ELF header and .text sections have been completed, build the
// .data, .bss, and "common" sections next.
- ELFSection &DataSection =
- getSection(".data", ELFSection::SHT_PROGBITS,
- ELFSection::SHF_WRITE | ELFSection::SHF_ALLOC);
-
- ELFSection &BSSSection =
- getSection(".bss", ELFSection::SHT_NOBITS,
- ELFSection::SHF_WRITE | ELFSection::SHF_ALLOC);
-
for (Module::global_iterator I = M.global_begin(), E = M.global_end();
I != E; ++I)
- EmitGlobal(I, DataSection, BSSSection);
+ EmitGlobal(I);
// Emit the symbol table now, if non-empty.
EmitSymbolTable();