From: Rui Ueyama Date: Wed, 16 Nov 2016 00:59:27 +0000 (+0000) Subject: Align Modi and FileInfo substreams on 32-byte offsets. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1a2f700e22e7c8fdfc660d0d37837ccaf27aeef5;p=llvm Align Modi and FileInfo substreams on 32-byte offsets. This is required by DbiStream, but DbiStreamBuilder didn't align these substreams, so the output of DbiSTreamBuilder couldn't be read by DbiStream. Test will be added to LLD. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@287067 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp b/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp index 9989c4c6dd7..33c07ffa3b8 100644 --- a/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp +++ b/lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp @@ -107,7 +107,7 @@ uint32_t DbiStreamBuilder::calculateModiSubstreamSize() const { Size += M->Mod.size() + 1; Size += M->Obj.size() + 1; } - return Size; + return alignTo(Size, sizeof(uint32_t)); } uint32_t DbiStreamBuilder::calculateSectionContribsStreamSize() const { @@ -134,7 +134,7 @@ uint32_t DbiStreamBuilder::calculateFileInfoSubstreamSize() const { NumFileInfos += M->SourceFiles.size(); Size += NumFileInfos * sizeof(ulittle32_t); // FileNameOffsets Size += calculateNamesBufferSize(); - return Size; + return alignTo(Size, sizeof(uint32_t)); } uint32_t DbiStreamBuilder::calculateNamesBufferSize() const { @@ -167,7 +167,7 @@ Error DbiStreamBuilder::generateModiSubstream() { if (auto EC = ModiWriter.writeZeroString(M->Obj)) return EC; } - if (ModiWriter.bytesRemaining() != 0) + if (ModiWriter.bytesRemaining() > sizeof(uint32_t)) return make_error(raw_error_code::invalid_format, "Unexpected bytes in Modi Stream Data"); return Error::success(); @@ -228,7 +228,7 @@ Error DbiStreamBuilder::generateFileInfoSubstream() { return make_error(raw_error_code::invalid_format, "The names buffer contained unexpected data."); - if (MetadataWriter.bytesRemaining() > 0) + if (MetadataWriter.bytesRemaining() > sizeof(uint32_t)) return make_error( raw_error_code::invalid_format, "The metadata buffer contained unexpected data.");