aboutsummaryrefslogtreecommitdiff
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
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
-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();