[lld] r246480 - Don't allocate space for SHT_NOBITS sections.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 31 13:23:57 PDT 2015


Author: rafael
Date: Mon Aug 31 15:23:57 2015
New Revision: 246480

URL: http://llvm.org/viewvc/llvm-project?rev=246480&view=rev
Log:
Don't allocate space for SHT_NOBITS sections.

Added:
    lld/trunk/test/elf2/bss.s
Modified:
    lld/trunk/ELF/Writer.cpp

Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=246480&r1=246479&r2=246480&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Mon Aug 31 15:23:57 2015
@@ -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>:
       VA += RoundUpToAlignment(Size, Align);
     }
     Sec->setFileOffset(FileOff);
-    FileOff += RoundUpToAlignment(Size, Align);
+    if (Sec->getType() != SHT_NOBITS)
+      FileOff += RoundUpToAlignment(Size, Align);
   }
 
   // Regular sections.

Added: lld/trunk/test/elf2/bss.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/bss.s?rev=246480&view=auto
==============================================================================
--- lld/trunk/test/elf2/bss.s (added)
+++ lld/trunk/test/elf2/bss.s Mon Aug 31 15:23:57 2015
@@ -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




More information about the llvm-commits mailing list