From 5ace35cba5d697b06970bc8338c2656797b747da Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Wed, 25 Oct 2017 23:00:40 +0000 Subject: [PATCH] Fix SizeOfImage in the PE header. IIUC, SizeOfImage is the distance from the end of the last section to the image base, rounded up to the page size. So the previous code is wrong. Should fix https://bugs.llvm.org/show_bug.cgi?id=34949 (It is nice to know that lld is already being used to create Putty distribution binaries.) llvm-svn: 316626 --- lld/COFF/Writer.cpp | 2 +- lld/test/COFF/hello32.test | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index 08b7e31f7bcd..0ab2263e2740 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -615,7 +615,7 @@ void Writer::assignAddresses() { RVA += alignTo(Sec->getVirtualSize(), PageSize); FileSize += alignTo(Sec->getRawSize(), SectorSize); } - SizeOfImage = SizeOfHeaders + alignTo(RVA - 0x1000, PageSize); + SizeOfImage = alignTo(RVA, PageSize); } template void Writer::writeHeader() { diff --git a/lld/test/COFF/hello32.test b/lld/test/COFF/hello32.test index feb65f39d4d1..923bffdc9820 100644 --- a/lld/test/COFF/hello32.test +++ b/lld/test/COFF/hello32.test @@ -39,7 +39,7 @@ HEADER-NEXT: MajorImageVersion: 0 HEADER-NEXT: MinorImageVersion: 0 HEADER-NEXT: MajorSubsystemVersion: 6 HEADER-NEXT: MinorSubsystemVersion: 0 -HEADER-NEXT: SizeOfImage: 16896 +HEADER-NEXT: SizeOfImage: 20480 HEADER-NEXT: SizeOfHeaders: 512 HEADER-NEXT: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3) HEADER-NEXT: Characteristics [ (0x9140)