summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-08-31 20:23:57 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-08-31 20:23:57 +0000
commit058f3432463b73863616b29dbbf00cadd7e463a1 (patch)
tree7da593ef8552a7355da74fdd28f2e815c6d64275
parent742fd989b500c39df35e1f0f72a38e6b497aaa0f (diff)
downloadbcm5719-llvm-058f3432463b73863616b29dbbf00cadd7e463a1.tar.gz
bcm5719-llvm-058f3432463b73863616b29dbbf00cadd7e463a1.zip
Don't allocate space for SHT_NOBITS sections.
llvm-svn: 246480
-rw-r--r--lld/ELF/Writer.cpp4
-rw-r--r--lld/test/elf2/bss.s36
2 files changed, 39 insertions, 1 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 31f64083a87..94b42656a1c 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -63,6 +63,7 @@ public:
uintX_t getFlags() { return Header.sh_flags; }
uintX_t getFileOff() { return Header.sh_offset; }
uintX_t getAlign() { return Header.sh_addralign; }
+ uint32_t getType() { return Header.sh_type; }
virtual void finalize() {}
virtual void writeTo(uint8_t *Buf) = 0;
@@ -449,7 +450,8 @@ template <class ELFT> void Writer<ELFT>::assignAddresses() {
VA += RoundUpToAlignment(Size, Align);
}
Sec->setFileOffset(FileOff);
- FileOff += RoundUpToAlignment(Size, Align);
+ if (Sec->getType() != SHT_NOBITS)
+ FileOff += RoundUpToAlignment(Size, Align);
}
// Regular sections.
diff --git a/lld/test/elf2/bss.s b/lld/test/elf2/bss.s
new file mode 100644
index 00000000000..8c766176329
--- /dev/null
+++ b/lld/test/elf2/bss.s
@@ -0,0 +1,36 @@
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t
+// RUN: lld -flavor gnu2 %t -o %t2
+// RUN: llvm-readobj -sections %t2 | FileCheck %s
+// REQUIRES: x86
+
+// Test that bss takes no space on disk.
+
+// CHECK: Name: .bss
+// CHECK-NEXT: Type: SHT_NOBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: SHF_ALLOC
+// CHECK-NEXT: SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x1000
+// CHECK-NEXT: Offset: 0x1000
+// CHECK-NEXT: Size: 4
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 4
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: }
+// CHECK-NEXT: Section {
+// CHECK-NEXT: Index:
+// CHECK-NEXT: Name:
+// CHECK-NEXT: Type:
+// CHECK-NEXT: Flags [
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address:
+// CHECK-NEXT: Offset: 0x1000
+
+
+ .global _start
+_start:
+
+ .bss
+ .zero 4
OpenPOWER on IntegriCloud