diff options
-rw-r--r-- | include/llvm/DebugInfo/CodeView/ListRecordBuilder.h | 2 | ||||
-rw-r--r-- | include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h | 1 | ||||
-rw-r--r-- | lib/DebugInfo/CodeView/ListRecordBuilder.cpp | 2 | ||||
-rw-r--r-- | lib/DebugInfo/CodeView/TypeRecordBuilder.cpp | 11 |
4 files changed, 6 insertions, 10 deletions
diff --git a/include/llvm/DebugInfo/CodeView/ListRecordBuilder.h b/include/llvm/DebugInfo/CodeView/ListRecordBuilder.h index cc53b53fe50..00bf03d417a 100644 --- a/include/llvm/DebugInfo/CodeView/ListRecordBuilder.h +++ b/include/llvm/DebugInfo/CodeView/ListRecordBuilder.h @@ -50,7 +50,7 @@ private: return ContinuationOffsets.empty() ? 0 : ContinuationOffsets.back(); } size_t getLastContinuationEnd() const { return Builder.size(); } - unsigned getLastContinuationSize() const { + size_t getLastContinuationSize() const { return getLastContinuationEnd() - getLastContinuationStart(); } diff --git a/include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h b/include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h index 010d06e5e31..eb7993baab8 100644 --- a/include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h +++ b/include/llvm/DebugInfo/CodeView/TypeRecordBuilder.h @@ -40,7 +40,6 @@ public: void writeEncodedInteger(int64_t Value); void writeEncodedSignedInteger(int64_t Value); void writeEncodedUnsignedInteger(uint64_t Value); - void writeNullTerminatedString(const char *Value); void writeNullTerminatedString(StringRef Value); void writeGuid(StringRef Guid); void writeBytes(StringRef Value) { Stream << Value; } diff --git a/lib/DebugInfo/CodeView/ListRecordBuilder.cpp b/lib/DebugInfo/CodeView/ListRecordBuilder.cpp index dc72f500c87..eb79e8ac9a3 100644 --- a/lib/DebugInfo/CodeView/ListRecordBuilder.cpp +++ b/lib/DebugInfo/CodeView/ListRecordBuilder.cpp @@ -49,8 +49,10 @@ void ListRecordBuilder::finishSubRecord() { // back up and insert a continuation record, sliding the current subrecord // down. if (getLastContinuationSize() > 65535 - 8) { + assert(SubrecordStart != 0 && "can't slide from the start!"); SmallString<128> SubrecordCopy( Builder.str().slice(SubrecordStart, Builder.size())); + assert(SubrecordCopy.size() < 65530 && "subrecord is too large to slide!"); Builder.truncate(SubrecordStart); // Write a placeholder continuation record. diff --git a/lib/DebugInfo/CodeView/TypeRecordBuilder.cpp b/lib/DebugInfo/CodeView/TypeRecordBuilder.cpp index f1c293e39fd..112612cc85e 100644 --- a/lib/DebugInfo/CodeView/TypeRecordBuilder.cpp +++ b/lib/DebugInfo/CodeView/TypeRecordBuilder.cpp @@ -91,15 +91,10 @@ void TypeRecordBuilder::writeEncodedUnsignedInteger(uint64_t Value) { } } -void TypeRecordBuilder::writeNullTerminatedString(const char *Value) { - assert(Value != nullptr); - - size_t Length = strlen(Value); - Stream.write(Value, Length); - writeUInt8(0); -} - void TypeRecordBuilder::writeNullTerminatedString(StringRef Value) { + // Microsoft's linker seems to have trouble with symbol names longer than + // 0xffd8 bytes. + Value = Value.substr(0, 0xffd8); Stream.write(Value.data(), Value.size()); writeUInt8(0); } |