From: George Rimar Date: Fri, 1 Apr 2016 11:04:47 +0000 (+0000) Subject: Split Writer::assignAddresses(): extract common code to fixFileOff(). NFC. X-Git-Tag: llvmorg-3.9.0-rc1~10267 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=b345e0d15c5422bb4049092211f44015ee45d1bc;p=platform%2Fupstream%2Fllvm.git Split Writer::assignAddresses(): extract common code to fixFileOff(). NFC. llvm-svn: 265131 --- diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 48e81dc..e8fbf08 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -1369,19 +1369,25 @@ template void Writer::fixSectionAlignments() { } } +template +static uintX_t fixFileOff(uintX_t FileOff, uintX_t Align, + OutputSectionBase *Sec) { + if (Sec->getType() != SHT_NOBITS) + FileOff = alignTo(FileOff, Align); + Sec->setFileOffset(FileOff); + if (Sec->getType() != SHT_NOBITS) + FileOff += Sec->getSize(); + return FileOff; +} + // Used for relocatable output (-r). In this case we create only ELF file // header, do not create program headers. Also assign of section addresses // is very straightforward: we just put all sections sequentually to the file. template void Writer::assignAddressesRelocatable() { Out::ElfHeader->setSize(sizeof(Elf_Ehdr)); uintX_t FileOff = 0; - for (OutputSectionBase *Sec : OutputSections) { - if (Sec->getType() != SHT_NOBITS) - FileOff = alignTo(FileOff, Sec->getAlign()); - Sec->setFileOffset(FileOff); - if (Sec->getType() != SHT_NOBITS) - FileOff += Sec->getSize(); - } + for (OutputSectionBase *Sec : OutputSections) + FileOff = fixFileOff(FileOff, Sec->getAlign(), Sec); SectionHeaderOff = alignTo(FileOff, sizeof(uintX_t)); FileSize = SectionHeaderOff + getNumSections() * sizeof(Elf_Shdr); } @@ -1401,12 +1407,7 @@ template void Writer::assignAddresses() { uintX_t Align = Sec->getAlign(); if (Sec->PageAlign) Align = std::max(Align, Target->PageSize); - - if (Sec->getType() != SHT_NOBITS) - FileOff = alignTo(FileOff, Align); - Sec->setFileOffset(FileOff); - if (Sec->getType() != SHT_NOBITS) - FileOff += Sec->getSize(); + FileOff = fixFileOff(FileOff, Align, Sec); // We only assign VAs to allocated sections. if (needsPtLoad(Sec)) {