diff options
-rw-r--r-- | lld/COFF/Writer.cpp | 24 | ||||
-rw-r--r-- | lld/test/COFF/baserel.test | 2 | ||||
-rw-r--r-- | lld/test/COFF/hello32.test | 4 |
3 files changed, 13 insertions, 17 deletions
diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index bc9e29be53a..abb72f10888 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -37,8 +37,7 @@ using namespace lld; using namespace lld::coff; static const int PageSize = 4096; -static const int FileAlignment = 512; -static const int SectionAlignment = 4096; +static const int SectorSize = 512; static const int DOSStubSize = 64; static const int NumberfOfDataDirectory = 16; @@ -174,7 +173,7 @@ void OutputSection::addChunk(Chunk *C) { Off += C->getSize(); Header.VirtualSize = Off; if (C->hasData()) - Header.SizeOfRawData = RoundUpToAlignment(Off, FileAlignment); + Header.SizeOfRawData = RoundUpToAlignment(Off, SectorSize); } void OutputSection::addPermissions(uint32_t C) { @@ -507,15 +506,14 @@ void Writer::createSymbolAndStringTable() { // We position the symbol table to be adjacent to the end of the last section. uint64_t FileOff = LastSection->getFileOff() + - RoundUpToAlignment(LastSection->getRawSize(), FileAlignment); + RoundUpToAlignment(LastSection->getRawSize(), SectorSize); if (!OutputSymtab.empty()) { PointerToSymbolTable = FileOff; FileOff += OutputSymtab.size() * sizeof(coff_symbol16); } if (!Strtab.empty()) FileOff += Strtab.size() + 4; - FileSize = SizeOfHeaders + - RoundUpToAlignment(FileOff - SizeOfHeaders, FileAlignment); + FileSize = RoundUpToAlignment(FileOff, SectorSize); } // Visits all sections to assign incremental, non-overlapping RVAs and @@ -526,9 +524,9 @@ void Writer::assignAddresses() { sizeof(coff_section) * OutputSections.size(); SizeOfHeaders += Config->is64() ? sizeof(pe32plus_header) : sizeof(pe32_header); - SizeOfHeaders = RoundUpToAlignment(SizeOfHeaders, PageSize); + SizeOfHeaders = RoundUpToAlignment(SizeOfHeaders, SectorSize); uint64_t RVA = 0x1000; // The first page is kept unmapped. - uint64_t FileOff = SizeOfHeaders; + FileSize = SizeOfHeaders; // Move DISCARDABLE (or non-memory-mapped) sections to the end of file because // the loader cannot handle holes. std::stable_partition( @@ -539,13 +537,11 @@ void Writer::assignAddresses() { if (Sec->getName() == ".reloc") addBaserels(Sec); Sec->setRVA(RVA); - Sec->setFileOffset(FileOff); + Sec->setFileOffset(FileSize); RVA += RoundUpToAlignment(Sec->getVirtualSize(), PageSize); - FileOff += RoundUpToAlignment(Sec->getRawSize(), FileAlignment); + FileSize += RoundUpToAlignment(Sec->getRawSize(), SectorSize); } SizeOfImage = SizeOfHeaders + RoundUpToAlignment(RVA - 0x1000, PageSize); - FileSize = SizeOfHeaders + - RoundUpToAlignment(FileOff - SizeOfHeaders, FileAlignment); } template <typename PEHeaderTy> void Writer::writeHeader() { @@ -584,8 +580,8 @@ template <typename PEHeaderTy> void Writer::writeHeader() { Buf += sizeof(*PE); PE->Magic = Config->is64() ? PE32Header::PE32_PLUS : PE32Header::PE32; PE->ImageBase = Config->ImageBase; - PE->SectionAlignment = SectionAlignment; - PE->FileAlignment = FileAlignment; + PE->SectionAlignment = PageSize; + PE->FileAlignment = SectorSize; PE->MajorImageVersion = Config->MajorImageVersion; PE->MinorImageVersion = Config->MinorImageVersion; PE->MajorOperatingSystemVersion = Config->MajorOSVersion; diff --git a/lld/test/COFF/baserel.test b/lld/test/COFF/baserel.test index 6d9b0164dc3..bac9c22cbc3 100644 --- a/lld/test/COFF/baserel.test +++ b/lld/test/COFF/baserel.test @@ -61,7 +61,7 @@ # BASEREL-HEADER-NEXT: VirtualSize: 0x20 # BASEREL-HEADER-NEXT: VirtualAddress: 0x5000 # BASEREL-HEADER-NEXT: RawDataSize: 512 -# BASEREL-HEADER-NEXT: PointerToRawData: 0x1800 +# BASEREL-HEADER-NEXT: PointerToRawData: 0xC00 # BASEREL-HEADER-NEXT: PointerToRelocations: 0x0 # BASEREL-HEADER-NEXT: PointerToLineNumbers: 0x0 # BASEREL-HEADER-NEXT: RelocationCount: 0 diff --git a/lld/test/COFF/hello32.test b/lld/test/COFF/hello32.test index 5157a4e0579..4307d4bf89a 100644 --- a/lld/test/COFF/hello32.test +++ b/lld/test/COFF/hello32.test @@ -38,8 +38,8 @@ HEADER-NEXT: MajorImageVersion: 0 HEADER-NEXT: MinorImageVersion: 0 HEADER-NEXT: MajorSubsystemVersion: 6 HEADER-NEXT: MinorSubsystemVersion: 0 -HEADER-NEXT: SizeOfImage: 20480 -HEADER-NEXT: SizeOfHeaders: 4096 +HEADER-NEXT: SizeOfImage: 16896 +HEADER-NEXT: SizeOfHeaders: 512 HEADER-NEXT: Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI (0x3) HEADER-NEXT: Characteristics [ (0x8140) HEADER-NEXT: IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE (0x40) |