]> granicus.if.org Git - llvm/commitdiff
Align Modi and FileInfo substreams on 32-byte offsets.
authorRui Ueyama <ruiu@google.com>
Wed, 16 Nov 2016 00:59:27 +0000 (00:59 +0000)
committerRui Ueyama <ruiu@google.com>
Wed, 16 Nov 2016 00:59:27 +0000 (00:59 +0000)
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

lib/DebugInfo/PDB/Raw/DbiStreamBuilder.cpp

index 9989c4c6dd77141c18f1eafc0b9605451dab7a58..33c07ffa3b8decac17d893434e8739e47968bd6a 100644 (file)
@@ -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<RawError>(raw_error_code::invalid_format,
                                 "Unexpected bytes in Modi Stream Data");
   return Error::success();
@@ -228,7 +228,7 @@ Error DbiStreamBuilder::generateFileInfoSubstream() {
     return make_error<RawError>(raw_error_code::invalid_format,
                                 "The names buffer contained unexpected data.");
 
-  if (MetadataWriter.bytesRemaining() > 0)
+  if (MetadataWriter.bytesRemaining() > sizeof(uint32_t))
     return make_error<RawError>(
         raw_error_code::invalid_format,
         "The metadata buffer contained unexpected data.");