diff options
Diffstat (limited to 'lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp')
| -rw-r--r-- | lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp | 25 | 
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp b/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp index c19a2f0d3110..23c7456d7772 100644 --- a/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp +++ b/lib/DebugInfo/PDB/Native/DbiStreamBuilder.cpp @@ -129,16 +129,21 @@ uint32_t DbiStreamBuilder::calculateSectionMapStreamSize() const {    return sizeof(SecMapHeader) + sizeof(SecMapEntry) * SectionMap.size();  } -uint32_t DbiStreamBuilder::calculateFileInfoSubstreamSize() const { -  uint32_t Size = 0; -  Size += sizeof(ulittle16_t);                         // NumModules -  Size += sizeof(ulittle16_t);                         // NumSourceFiles -  Size += ModiList.size() * sizeof(ulittle16_t);       // ModIndices -  Size += ModiList.size() * sizeof(ulittle16_t);       // ModFileCounts +uint32_t DbiStreamBuilder::calculateNamesOffset() const { +  uint32_t Offset = 0; +  Offset += sizeof(ulittle16_t);                         // NumModules +  Offset += sizeof(ulittle16_t);                         // NumSourceFiles +  Offset += ModiList.size() * sizeof(ulittle16_t);       // ModIndices +  Offset += ModiList.size() * sizeof(ulittle16_t);       // ModFileCounts    uint32_t NumFileInfos = 0;    for (const auto &M : ModiList)      NumFileInfos += M->source_files().size(); -  Size += NumFileInfos * sizeof(ulittle32_t); // FileNameOffsets +  Offset += NumFileInfos * sizeof(ulittle32_t); // FileNameOffsets +  return Offset; +} + +uint32_t DbiStreamBuilder::calculateFileInfoSubstreamSize() const { +  uint32_t Size = calculateNamesOffset();    Size += calculateNamesBufferSize();    return alignTo(Size, sizeof(uint32_t));  } @@ -157,9 +162,8 @@ uint32_t DbiStreamBuilder::calculateDbgStreamsSize() const {  Error DbiStreamBuilder::generateFileInfoSubstream() {    uint32_t Size = calculateFileInfoSubstreamSize(); -  uint32_t NameSize = calculateNamesBufferSize();    auto Data = Allocator.Allocate<uint8_t>(Size); -  uint32_t NamesOffset = Size - NameSize; +  uint32_t NamesOffset = calculateNamesOffset();    FileInfoBuffer = MutableBinaryByteStream(MutableArrayRef<uint8_t>(Data, Size),                                             llvm::support::little); @@ -207,6 +211,9 @@ Error DbiStreamBuilder::generateFileInfoSubstream() {      }    } +  if (auto EC = NameBufferWriter.padToAlignment(sizeof(uint32_t))) +    return EC; +    if (NameBufferWriter.bytesRemaining() > 0)      return make_error<RawError>(raw_error_code::invalid_format,                                  "The names buffer contained unexpected data.");  | 
