Object/COFF: Do not rely on VirtualSize being 0 in object files.

llvm-svn: 241387
This commit is contained in:
Rui Ueyama 2015-07-04 03:25:51 +00:00
parent cffbe7cb55
commit d5297ee724
1 changed files with 4 additions and 8 deletions

View File

@ -918,19 +918,15 @@ uint64_t COFFObjectFile::getSectionSize(const coff_section *Sec) const {
// whether or not we have an executable image.
//
// For object files, SizeOfRawData contains the size of section's data;
// VirtualSize is always zero.
// VirtualSize should be zero but isn't due to buggy COFF writers.
//
// For executables, SizeOfRawData *must* be a multiple of FileAlignment; the
// actual section size is in VirtualSize. It is possible for VirtualSize to
// be greater than SizeOfRawData; the contents past that point should be
// considered to be zero.
uint32_t SectionSize;
if (Sec->VirtualSize)
SectionSize = std::min(Sec->VirtualSize, Sec->SizeOfRawData);
else
SectionSize = Sec->SizeOfRawData;
return SectionSize;
if (getDOSHeader())
return std::min(Sec->VirtualSize, Sec->SizeOfRawData);
return Sec->SizeOfRawData;
}
std::error_code