[llvm] r280522 - [codeview] Use the correct max CV record length of 0xFF00

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 2 11:43:28 PDT 2016


Author: rnk
Date: Fri Sep  2 13:43:27 2016
New Revision: 280522

URL: http://llvm.org/viewvc/llvm-project?rev=280522&view=rev
Log:
[codeview] Use the correct max CV record length of 0xFF00

Previously we were splitting our records at 0xFFFF bytes, which the
Microsoft tools don't like.

Should fix failure on the new Windows self-host buildbot.

This length appears in microsoft-pdb/PDB/dbi/dbiimpl.h

Modified:
    llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h
    llvm/trunk/lib/DebugInfo/CodeView/ListRecordBuilder.cpp
    llvm/trunk/test/DebugInfo/COFF/big-type.ll

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h?rev=280522&r1=280521&r2=280522&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h Fri Sep  2 13:43:27 2016
@@ -26,6 +26,10 @@ using llvm::support::little32_t;
 using llvm::support::ulittle16_t;
 using llvm::support::ulittle32_t;
 
+/// Limit on the size of all codeview symbol and type records, including the
+/// RecordPrefix. MSVC does not emit any records larger than this.
+enum : unsigned { MaxRecordLength = 0xFF00 };
+
 struct RecordPrefix {
   ulittle16_t RecordLen;  // Record length, starting from &Leaf.
   ulittle16_t RecordKind; // Record kind enum (SymRecordKind or TypeRecordKind)

Modified: llvm/trunk/lib/DebugInfo/CodeView/ListRecordBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/ListRecordBuilder.cpp?rev=280522&r1=280521&r2=280522&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/ListRecordBuilder.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/ListRecordBuilder.cpp Fri Sep  2 13:43:27 2016
@@ -20,7 +20,7 @@ ListRecordBuilder::ListRecordBuilder(Typ
 void ListRecordBuilder::writeMemberType(const ListContinuationRecord &R) {
   TypeRecordBuilder &Builder = getBuilder();
 
-  assert(getLastContinuationSize() < 65535 - 8 && "continuation won't fit");
+  assert(getLastContinuationSize() < MaxRecordLength - 8 && "continuation won't fit");
 
   Builder.writeTypeRecordKind(TypeRecordKind::ListContinuation);
   Builder.writeUInt16(0);
@@ -48,11 +48,12 @@ void ListRecordBuilder::finishSubRecord(
   // space for a continuation record (8 bytes). If the segment does not fit,
   // back up and insert a continuation record, sliding the current subrecord
   // down.
-  if (getLastContinuationSize() > 65535 - 8) {
+  if (getLastContinuationSize() > MaxRecordLength - 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!");
+    assert(SubrecordCopy.size() < MaxRecordLength - 8 &&
+           "subrecord is too large to slide!");
     Builder.truncate(SubrecordStart);
 
     // Write a placeholder continuation record.
@@ -61,7 +62,7 @@ void ListRecordBuilder::finishSubRecord(
     Builder.writeUInt32(0);
     ContinuationOffsets.push_back(Builder.size());
     assert(Builder.size() == SubrecordStart + 8 && "wrong continuation size");
-    assert(getLastContinuationSize() < 65535 && "segment too big");
+    assert(getLastContinuationSize() < MaxRecordLength && "segment too big");
 
     // Start a new list record of the appropriate kind, and copy the previous
     // subrecord into place.

Modified: llvm/trunk/test/DebugInfo/COFF/big-type.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/COFF/big-type.ll?rev=280522&r1=280521&r2=280522&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/COFF/big-type.ll (original)
+++ llvm/trunk/test/DebugInfo/COFF/big-type.ll Fri Sep  2 13:43:27 2016
@@ -7,8 +7,8 @@
 ; CHECK-NEXT: Enumerator {
 ; CHECK-NEXT:   TypeLeafKind: LF_ENUMERATE (0x1502)
 ; CHECK-NEXT:   AccessSpecifier: Public (0x3)
-; CHECK-NEXT:   EnumValue: 5460
-; CHECK-NEXT:   Name: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE5461
+; CHECK-NEXT:   EnumValue: 5436
+; CHECK-NEXT:   Name: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE5437
 ; CHECK-NEXT: }
 ; CHECK-NOT: ContinuationIndex
 
@@ -17,8 +17,8 @@
 ; CHECK-NEXT: Enumerator {
 ; CHECK-NEXT:   TypeLeafKind: LF_ENUMERATE (0x1502)
 ; CHECK-NEXT:   AccessSpecifier: Public (0x3)
-; CHECK-NEXT:   EnumValue: 4095
-; CHECK-NEXT:   Name: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE4096
+; CHECK-NEXT:   EnumValue: 4077
+; CHECK-NEXT:   Name: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE4078
 ; CHECK-NEXT: }
 ; CHECK: ContinuationIndex: <field list> (0x1000)
 
@@ -27,8 +27,8 @@
 ; CHECK-NEXT: Enumerator {
 ; CHECK-NEXT:   TypeLeafKind: LF_ENUMERATE (0x1502)
 ; CHECK-NEXT:   AccessSpecifier: Public (0x3)
-; CHECK-NEXT:   EnumValue: 2730
-; CHECK-NEXT:   Name: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE2731
+; CHECK-NEXT:   EnumValue: 2718
+; CHECK-NEXT:   Name: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE2719
 ; CHECK-NEXT: }
 ; CHECK: ContinuationIndex: <field list> (0x1001)
 
@@ -37,8 +37,8 @@
 ; CHECK-NEXT: Enumerator {
 ; CHECK-NEXT:   TypeLeafKind: LF_ENUMERATE (0x1502)
 ; CHECK-NEXT:   AccessSpecifier: Public (0x3)
-; CHECK-NEXT:   EnumValue: 1365
-; CHECK-NEXT:   Name: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE1366
+; CHECK-NEXT:   EnumValue: 1359
+; CHECK-NEXT:   Name: EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE1360
 ; CHECK-NEXT: }
 ; CHECK: ContinuationIndex: <field list> (0x1002)
 




More information about the llvm-commits mailing list