From ebc13c47f2b7b87216adf16850ace17a28d5b18f Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Fri, 31 Jan 2014 05:15:42 +0000 Subject: [PATCH] [PECOFF] Do not emit a section if it's empty. The PE32+ loader does not seem to like an executable with an empty section, so we should not emit a section if it's empty. llvm-svn: 200514 --- lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp | 3 ++- lld/test/pecoff/pe32plus.test | 2 +- lld/test/pecoff/trivial.test | 19 +------------------ 3 files changed, 4 insertions(+), 20 deletions(-) diff --git a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp index ebdc246217fb..71daf5ad27ef 100644 --- a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp @@ -932,7 +932,8 @@ void PECOFFWriter::build(const File &linkedFile) { StringRef sectionName = i.first; std::vector &contents = i.second; auto *section = new AtomChunk(_ctx, sectionName, contents); - addSectionChunk(section, sectionTable); + if (section->size() > 0) + addSectionChunk(section, sectionTable); } // Now that we know the addresses of all defined atoms that needs to be diff --git a/lld/test/pecoff/pe32plus.test b/lld/test/pecoff/pe32plus.test index 6d6bf2fda21a..fff670ba054a 100644 --- a/lld/test/pecoff/pe32plus.test +++ b/lld/test/pecoff/pe32plus.test @@ -9,7 +9,7 @@ CHECK-NEXT: Arch: x86_64 CHECK-NEXT: AddressSize: 64bit CHECK-NEXT: ImageFileHeader { CHECK-NEXT: Machine: IMAGE_FILE_MACHINE_AMD64 (0x8664) -CHECK-NEXT: SectionCount: 3 +CHECK-NEXT: SectionCount: 2 CHECK-NEXT: TimeDateStamp: CHECK-NEXT: PointerToSymbolTable: 0x0 CHECK-NEXT: SymbolCount: 0 diff --git a/lld/test/pecoff/trivial.test b/lld/test/pecoff/trivial.test index a60d65633e4c..6f149d0b21b9 100644 --- a/lld/test/pecoff/trivial.test +++ b/lld/test/pecoff/trivial.test @@ -17,7 +17,7 @@ FILE-NEXT: Arch: i386 FILE-NEXT: AddressSize: 32bit FILE-NEXT: ImageFileHeader { FILE-NEXT: Machine: IMAGE_FILE_MACHINE_I386 (0x14C) -FILE-NEXT: SectionCount: 2 +FILE-NEXT: SectionCount: 1 FILE-NEXT: TimeDateStamp: FILE-NEXT: PointerToSymbolTable: 0x0 FILE-NEXT: SymbolCount: 0 @@ -66,23 +66,6 @@ SECTIONS-NEXT: AddressSize: 32bit SECTIONS-NEXT: Sections [ SECTIONS-NEXT: Section { SECTIONS-NEXT: Number: 1 -SECTIONS-NEXT: Name: .data (2E 64 61 74 61 00 00 00) -SECTIONS-NEXT: VirtualSize: 0x0 -SECTIONS-NEXT: VirtualAddress: 0x1000 -SECTIONS-NEXT: RawDataSize: 0 -SECTIONS-NEXT: PointerToRawData: 0x200 -SECTIONS-NEXT: PointerToRelocations: 0x0 -SECTIONS-NEXT: PointerToLineNumbers: 0x0 -SECTIONS-NEXT: RelocationCount: 0 -SECTIONS-NEXT: LineNumberCount: 0 -SECTIONS-NEXT: Characteristics [ -SECTIONS-NEXT: IMAGE_SCN_CNT_INITIALIZED_DATA -SECTIONS-NEXT: IMAGE_SCN_MEM_READ -SECTIONS-NEXT: IMAGE_SCN_MEM_WRITE -SECTIONS-NEXT: ] -SECTIONS-NEXT: } -SECTIONS-NEXT: Section { -SECTIONS-NEXT: Number: 2 SECTIONS-NEXT: Name: .text (2E 74 65 78 74 00 00 00) SECTIONS-NEXT: VirtualSize: 0x6 SECTIONS-NEXT: VirtualAddress: 0x1000