From 4eca75df00fe2e52b4be5ee4952872ec460641a2 Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Wed, 3 Jul 2013 12:55:56 +0000 Subject: [PATCH] [PECOFF][Writer] Fix SizeOfImage header. It should include the first unmapped page. llvm-svn: 185534 --- lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp | 10 ++++------ lld/test/pecoff/trivial.test | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp index f6c8b60643b9..703b970b664f 100644 --- a/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp +++ b/lld/lib/ReaderWriter/PECOFF/WriterPECOFF.cpp @@ -566,20 +566,18 @@ private: // there's no technical reason to do so, but we'll follow that convention // so that we don't produce odd-looking binary. We should update the code // (or this comment) once we figure the reason out. - uint32_t offset = PAGE_SIZE; - uint32_t va = offset; + uint32_t rva = PAGE_SIZE; for (auto &cp : _chunks) { if (SectionChunk *chunk = dyn_cast(&*cp)) { - chunk->setVirtualAddress(va); - + chunk->setVirtualAddress(rva); // Skip the empty section. if (chunk->size() == 0) continue; numSections++; - va = llvm::RoundUpToAlignment(va + chunk->size(), PAGE_SIZE); + rva = llvm::RoundUpToAlignment(rva + chunk->size(), PAGE_SIZE); } } - imageSize = va - offset; + imageSize = rva; } /// Apply relocations to the output file buffer. This two pass. In the first diff --git a/lld/test/pecoff/trivial.test b/lld/test/pecoff/trivial.test index 2a19db869714..ad314f6b3fe7 100644 --- a/lld/test/pecoff/trivial.test +++ b/lld/test/pecoff/trivial.test @@ -39,7 +39,7 @@ FILE: MajorImageVersion: 0 FILE: MinorImageVersion: 0 FILE: MajorSubsystemVersion: 3 FILE: MinorSubsystemVersion: 11 -FILE: SizeOfImage: 4096 +FILE: SizeOfImage: 8192 FILE: SizeOfHeaders: 512 FILE: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3) FILE: Subsystem [ (0x8540)