Fix SizeOfImage in the PE header.
authorRui Ueyama <ruiu@google.com>
Wed, 25 Oct 2017 23:00:40 +0000 (23:00 +0000)
committerRui Ueyama <ruiu@google.com>
Wed, 25 Oct 2017 23:00:40 +0000 (23:00 +0000)
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
lld/test/COFF/hello32.test

index 08b7e31..0ab2263 100644 (file)
@@ -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 <typename PEHeaderTy> void Writer::writeHeader() {
index feb65f3..923bffd 100644 (file)
@@ -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)