diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-08-31 20:23:57 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-08-31 20:23:57 +0000 |
commit | 058f3432463b73863616b29dbbf00cadd7e463a1 (patch) | |
tree | 7da593ef8552a7355da74fdd28f2e815c6d64275 | |
parent | 742fd989b500c39df35e1f0f72a38e6b497aaa0f (diff) | |
download | bcm5719-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.cpp | 4 | ||||
-rw-r--r-- | lld/test/elf2/bss.s | 36 |
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 |