[lld] r197002 - [PECOFF] Writer: Remove NULL padding at the end of each section.
Rui Ueyama
ruiu at google.com
Tue Dec 10 20:06:26 PST 2013
Author: ruiu
Date: Tue Dec 10 22:06:26 2013
New Revision: 197002
URL: http://llvm.org/viewvc/llvm-project?rev=197002&view=rev
Log:
[PECOFF] Writer: Remove NULL padding at the end of each section.
If section size is not multiple of 512, the writer added NULL bytes at the end
of it to make it so. That is not required by the PE/COFF spec, and the MSVC's
linker does not do that too. So we don't need to do that, too.
Modified:
lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
lld/trunk/test/pecoff/base-reloc.test
lld/trunk/test/pecoff/bss-section.test
lld/trunk/test/pecoff/common-symbol.test
lld/trunk/test/pecoff/hello.test
lld/trunk/test/pecoff/nonstandard-sections.test
lld/trunk/test/pecoff/section-renaming.test
lld/trunk/test/pecoff/trivial.test
Modified: lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp?rev=197002&r1=197001&r2=197002&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp (original)
+++ lld/trunk/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp Tue Dec 10 22:06:26 2013
@@ -71,12 +71,12 @@ public:
kindDataDirectory
};
- explicit Chunk(Kind kind) : _kind(kind), _size(0), _align(1) {}
+ explicit Chunk(Kind kind) : _kind(kind), _size(0) {}
virtual ~Chunk() {};
virtual void write(uint8_t *buffer) = 0;
virtual uint64_t size() const { return _size; }
+ virtual uint64_t align() const { return 1; }
- uint64_t align() const { return _align; }
uint64_t fileOffset() const { return _fileOffset; }
void setFileOffset(uint64_t fileOffset) { _fileOffset = fileOffset; }
Kind getKind() const { return _kind; }
@@ -85,7 +85,6 @@ protected:
Kind _kind;
uint64_t _size;
uint64_t _fileOffset;
- uint64_t _align;
};
/// A HeaderChunk is an abstract class to represent a file header for
@@ -249,12 +248,7 @@ private:
/// written to the raw data section.
class SectionChunk : public AtomChunk {
public:
- /// Returns the size of the section on disk. The returned value is multiple
- /// of disk sector, so the size may include the null padding at the end of
- /// section.
- virtual uint64_t size() const {
- return llvm::RoundUpToAlignment(_size, _align);
- }
+ virtual uint64_t align() const { return SECTOR_SIZE; }
virtual uint64_t rawSize() const { return _size; }
@@ -596,10 +590,7 @@ void SectionChunk::appendAtom(const Defi
SectionChunk::SectionChunk(StringRef sectionName, uint32_t characteristics)
: AtomChunk(kindSection), _sectionName(sectionName),
- _characteristics(characteristics) {
- // The section should be aligned to disk sector.
- _align = SECTOR_SIZE;
-}
+ _characteristics(characteristics) {}
void GenericSectionChunk::write(uint8_t *buffer) {
if (_atomLayouts.empty())
Modified: lld/trunk/test/pecoff/base-reloc.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/base-reloc.test?rev=197002&r1=197001&r2=197002&view=diff
==============================================================================
--- lld/trunk/test/pecoff/base-reloc.test (original)
+++ lld/trunk/test/pecoff/base-reloc.test Tue Dec 10 22:06:26 2013
@@ -15,7 +15,7 @@
# objdump does.
BASEREL-SECTION: Contents of section .reloc:
-BASEREL-SECTION-NEXT: 3000 00200000 0c000000 07300c30 00000000
+BASEREL-SECTION-NEXT: 3000 00200000 0c000000 07300c30
NOBASEREL-SECTION-NOT: Contents of section .reloc:
@@ -36,7 +36,7 @@ BASEREL-HEADER: BaseRelocationTableS
BASEREL-HEADER: Name: .reloc (2E 72 65 6C 6F 63 00 00)
BASEREL-HEADER-NEXT: VirtualSize: 0xC
BASEREL-HEADER-NEXT: VirtualAddress: 0x3000
-BASEREL-HEADER-NEXT: RawDataSize: 512
+BASEREL-HEADER-NEXT: RawDataSize: 12
BASEREL-HEADER-NEXT: PointerToRawData: 0x600
BASEREL-HEADER-NEXT: PointerToRelocations: 0x0
BASEREL-HEADER-NEXT: PointerToLineNumbers: 0x0
Modified: lld/trunk/test/pecoff/bss-section.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/bss-section.test?rev=197002&r1=197001&r2=197002&view=diff
==============================================================================
--- lld/trunk/test/pecoff/bss-section.test (original)
+++ lld/trunk/test/pecoff/bss-section.test Tue Dec 10 22:06:26 2013
@@ -6,7 +6,7 @@ CHECK: Number: 1
CHECK-NEXT: Name: .bss
CHECK-NEXT: VirtualSize: 0x0
CHECK-NEXT: VirtualAddress: 0x1000
-CHECK-NEXT: RawDataSize: 1024
+CHECK-NEXT: RawDataSize: 800
CHECK-NEXT: PointerToRawData: 0x0
CHECK-NEXT: PointerToRelocations: 0x0
CHECK-NEXT: PointerToLineNumbers: 0x0
Modified: lld/trunk/test/pecoff/common-symbol.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/common-symbol.test?rev=197002&r1=197001&r2=197002&view=diff
==============================================================================
--- lld/trunk/test/pecoff/common-symbol.test (original)
+++ lld/trunk/test/pecoff/common-symbol.test Tue Dec 10 22:06:26 2013
@@ -8,7 +8,7 @@ CHECK: Number: 1
CHECK-NEXT: Name: .bss (2E 62 73 73 00 00 00 00)
CHECK-NEXT: VirtualSize: 0x0
CHECK-NEXT: VirtualAddress: 0x1000
-CHECK-NEXT: RawDataSize: 512
+CHECK-NEXT: RawDataSize: 8
CHECK-NEXT: PointerToRawData: 0x0
CHECK-NEXT: PointerToRelocations: 0x0
CHECK-NEXT: PointerToLineNumbers: 0x0
Modified: lld/trunk/test/pecoff/hello.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/hello.test?rev=197002&r1=197001&r2=197002&view=diff
==============================================================================
--- lld/trunk/test/pecoff/hello.test (original)
+++ lld/trunk/test/pecoff/hello.test Tue Dec 10 22:06:26 2013
@@ -4,7 +4,7 @@
# RUN: llvm-readobj -file-headers %t1 | FileCheck -check-prefix=FILE %s
FILE: ImageOptionalHeader {
-FILE: SizeOfInitializedData: 1024
+FILE: SizeOfInitializedData: 30
FILE: SizeOfHeaders: 512
FILE: }
@@ -20,7 +20,7 @@ SECTIONS-NEXT: Number: 1
SECTIONS-NEXT: Name: .data
SECTIONS-NEXT: VirtualSize: 0x12
SECTIONS-NEXT: VirtualAddress: 0x1000
-SECTIONS-NEXT: RawDataSize: 512
+SECTIONS-NEXT: RawDataSize: 18
SECTIONS-NEXT: PointerToRawData: 0x200
SECTIONS-NEXT: PointerToRelocations: 0x0
SECTIONS-NEXT: PointerToLineNumbers: 0x0
@@ -37,7 +37,7 @@ SECTIONS-NEXT: Number: 2
SECTIONS-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
SECTIONS-NEXT: VirtualSize: 0x1C
SECTIONS-NEXT: VirtualAddress: 0x2000
-SECTIONS-NEXT: RawDataSize: 512
+SECTIONS-NEXT: RawDataSize: 28
SECTIONS-NEXT: PointerToRawData: 0x400
SECTIONS-NEXT: PointerToRelocations: 0x0
SECTIONS-NEXT: PointerToLineNumbers: 0x0
Modified: lld/trunk/test/pecoff/nonstandard-sections.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/nonstandard-sections.test?rev=197002&r1=197001&r2=197002&view=diff
==============================================================================
--- lld/trunk/test/pecoff/nonstandard-sections.test (original)
+++ lld/trunk/test/pecoff/nonstandard-sections.test Tue Dec 10 22:06:26 2013
@@ -10,7 +10,7 @@ CHECK-NEXT: Number: 1
CHECK-NEXT: Name: .bar (2E 62 61 72 00 00 00 00)
CHECK-NEXT: VirtualSize: 0x4
CHECK-NEXT: VirtualAddress: 0x1000
-CHECK-NEXT: RawDataSize: 512
+CHECK-NEXT: RawDataSize: 4
CHECK-NEXT: PointerToRawData: 0x400
CHECK-NEXT: PointerToRelocations: 0x0
CHECK-NEXT: PointerToLineNumbers: 0x0
@@ -26,7 +26,7 @@ CHECK-NEXT: Number: 2
CHECK-NEXT: Name: .data (2E 64 61 74 61 00 00 00)
CHECK-NEXT: VirtualSize: 0x4
CHECK-NEXT: VirtualAddress: 0x2000
-CHECK-NEXT: RawDataSize: 512
+CHECK-NEXT: RawDataSize: 4
CHECK-NEXT: PointerToRawData: 0x600
CHECK-NEXT: PointerToRelocations: 0x0
CHECK-NEXT: PointerToLineNumbers: 0x0
@@ -43,7 +43,7 @@ CHECK-NEXT: Number: 3
CHECK-NEXT: Name: .foo (2E 66 6F 6F 00 00 00 00)
CHECK-NEXT: VirtualSize: 0x4
CHECK-NEXT: VirtualAddress: 0x3000
-CHECK-NEXT: RawDataSize: 512
+CHECK-NEXT: RawDataSize: 4
CHECK-NEXT: PointerToRawData: 0x800
CHECK-NEXT: PointerToRelocations: 0x0
CHECK-NEXT: PointerToLineNumbers: 0x0
@@ -60,7 +60,7 @@ CHECK-NEXT: Number: 4
CHECK-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
CHECK-NEXT: VirtualSize: 0x4
CHECK-NEXT: VirtualAddress: 0x4000
-CHECK-NEXT: RawDataSize: 512
+CHECK-NEXT: RawDataSize: 4
CHECK-NEXT: PointerToRawData: 0xA00
CHECK-NEXT: PointerToRelocations: 0x0
CHECK-NEXT: PointerToLineNumbers: 0x0
Modified: lld/trunk/test/pecoff/section-renaming.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/section-renaming.test?rev=197002&r1=197001&r2=197002&view=diff
==============================================================================
--- lld/trunk/test/pecoff/section-renaming.test (original)
+++ lld/trunk/test/pecoff/section-renaming.test Tue Dec 10 22:06:26 2013
@@ -12,7 +12,7 @@ CHECK-NEXT: Number: 1
CHECK-NEXT: Name: .data (2E 64 61 74 61 00 00 00)
CHECK-NEXT: VirtualSize: 0x4
CHECK-NEXT: VirtualAddress: 0x1000
-CHECK-NEXT: RawDataSize: 512
+CHECK-NEXT: RawDataSize: 4
CHECK-NEXT: PointerToRawData: 0x200
CHECK-NEXT: PointerToRelocations: 0x0
CHECK-NEXT: PointerToLineNumbers: 0x0
@@ -29,7 +29,7 @@ CHECK-NEXT: Number: 2
CHECK-NEXT: Name: .hoge (2E 68 6F 67 65 00 00 00)
CHECK-NEXT: VirtualSize: 0x4
CHECK-NEXT: VirtualAddress: 0x2000
-CHECK-NEXT: RawDataSize: 512
+CHECK-NEXT: RawDataSize: 4
CHECK-NEXT: PointerToRawData: 0x400
CHECK-NEXT: PointerToRelocations: 0x0
CHECK-NEXT: PointerToLineNumbers: 0x0
@@ -46,7 +46,7 @@ CHECK-NEXT: Number: 3
CHECK-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
CHECK-NEXT: VirtualSize: 0x8
CHECK-NEXT: VirtualAddress: 0x3000
-CHECK-NEXT: RawDataSize: 512
+CHECK-NEXT: RawDataSize: 8
CHECK-NEXT: PointerToRawData: 0x600
CHECK-NEXT: PointerToRelocations: 0x0
CHECK-NEXT: PointerToLineNumbers: 0x0
Modified: lld/trunk/test/pecoff/trivial.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/pecoff/trivial.test?rev=197002&r1=197001&r2=197002&view=diff
==============================================================================
--- lld/trunk/test/pecoff/trivial.test (original)
+++ lld/trunk/test/pecoff/trivial.test Tue Dec 10 22:06:26 2013
@@ -30,7 +30,7 @@ FILE-NEXT: }
FILE-NEXT: ImageOptionalHeader {
FILE-NEXT: MajorLinkerVersion: 0
FILE-NEXT: MinorLinkerVersion: 0
-FILE-NEXT: SizeOfCode: 512
+FILE-NEXT: SizeOfCode: 6
FILE-NEXT: SizeOfInitializedData: 0
FILE-NEXT: SizeOfUninitializedData: 0
FILE-NEXT: AddressOfEntryPoint: 0x1000
@@ -86,7 +86,7 @@ SECTIONS-NEXT: Number: 2
SECTIONS-NEXT: Name: .text (2E 74 65 78 74 00 00 00)
SECTIONS-NEXT: VirtualSize: 0x6
SECTIONS-NEXT: VirtualAddress: 0x1000
-SECTIONS-NEXT: RawDataSize: 512
+SECTIONS-NEXT: RawDataSize: 6
SECTIONS-NEXT: PointerToRawData: 0x200
SECTIONS-NEXT: PointerToRelocations: 0x0
SECTIONS-NEXT: PointerToLineNumbers: 0x0
More information about the llvm-commits
mailing list