[llvm] r272843 - [Codeview] Add a class for LF_UDT_MOD_SRC_LINE.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 15 14:25:29 PDT 2016


Author: ruiu
Date: Wed Jun 15 16:25:29 2016
New Revision: 272843

URL: http://llvm.org/viewvc/llvm-project?rev=272843&view=rev
Log:
[Codeview] Add a class for LF_UDT_MOD_SRC_LINE.

Differential Revision: http://reviews.llvm.org/D21406

Modified:
    llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h
    llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecords.def
    llvm/trunk/include/llvm/DebugInfo/CodeView/TypeTableBuilder.h
    llvm/trunk/lib/DebugInfo/CodeView/TypeDumper.cpp
    llvm/trunk/lib/DebugInfo/CodeView/TypeRecord.cpp
    llvm/trunk/lib/DebugInfo/CodeView/TypeTableBuilder.cpp
    llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h?rev=272843&r1=272842&r2=272843&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecord.h Wed Jun 15 16:25:29 2016
@@ -767,6 +767,44 @@ private:
   uint32_t LineNumber;
 };
 
+// LF_UDT_MOD_SRC_LINE
+class UdtModSourceLineRecord : public TypeRecord {
+public:
+  UdtModSourceLineRecord(TypeIndex UDT, TypeIndex SourceFile,
+                         uint32_t LineNumber, uint16_t Module)
+      : TypeRecord(TypeRecordKind::UdtSourceLine), UDT(UDT),
+        SourceFile(SourceFile), LineNumber(LineNumber), Module(Module) {}
+
+  bool remapTypeIndices(ArrayRef<TypeIndex> IndexMap);
+
+  static ErrorOr<UdtModSourceLineRecord> deserialize(TypeRecordKind Kind,
+                                                     ArrayRef<uint8_t> &Data) {
+    const Layout *L = nullptr;
+    CV_DESERIALIZE(Data, L);
+
+    return UdtModSourceLineRecord(L->UDT, L->SourceFile, L->LineNumber,
+                                  L->Module);
+  }
+
+  TypeIndex getUDT() const { return UDT; }
+  TypeIndex getSourceFile() const { return SourceFile; }
+  uint32_t getLineNumber() const { return LineNumber; }
+  uint16_t getModule() const { return Module; }
+
+private:
+  struct Layout {
+    TypeIndex UDT;        // The user-defined type
+    TypeIndex SourceFile; // StringID containing the source filename
+    ulittle32_t LineNumber;
+    ulittle16_t Module; // Module that contributes this UDT definition
+  };
+
+  TypeIndex UDT;
+  TypeIndex SourceFile;
+  uint32_t LineNumber;
+  uint16_t Module;
+};
+
 // LF_BUILDINFO
 class BuildInfoRecord : public TypeRecord {
 public:

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecords.def
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecords.def?rev=272843&r1=272842&r2=272843&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecords.def (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeRecords.def Wed Jun 15 16:25:29 2016
@@ -81,6 +81,7 @@ TYPE_RECORD(LF_BUILDINFO, 0x1603, BuildI
 TYPE_RECORD_ALIAS(LF_SUBSTR_LIST, 0x1604, StringList, ArgList)
 TYPE_RECORD(LF_STRING_ID, 0x1605, StringId)
 TYPE_RECORD(LF_UDT_SRC_LINE, 0x1606, UdtSourceLine)
+TYPE_RECORD(LF_UDT_MOD_SRC_LINE, 0x1607, UdtModSourceLine)
 
 TYPE_RECORD(LF_METHODLIST, 0x1206, MethodOverloadList)
 
@@ -194,10 +195,6 @@ CV_TYPE(LF_MODIFIER_EX, 0x1518)
 CV_TYPE(LF_VECTOR, 0x151b)
 CV_TYPE(LF_MATRIX, 0x151c)
 
-// ID leaf records. Subsequent leaf types may be referenced from .debug$S.
-
-CV_TYPE(LF_UDT_MOD_SRC_LINE, 0x1607)
-
 // Numeric leaf types. These are generally contained in other records, and not
 // encountered in the main type stream.
 

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeTableBuilder.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeTableBuilder.h?rev=272843&r1=272842&r2=272843&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeTableBuilder.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeTableBuilder.h Wed Jun 15 16:25:29 2016
@@ -51,6 +51,7 @@ public:
   TypeIndex writeStringId(const StringIdRecord &Record);
   TypeIndex writeVFTable(const VFTableRecord &Record);
   TypeIndex writeUdtSourceLine(const UdtSourceLineRecord &Record);
+  TypeIndex writeUdtModSourceLine(const UdtModSourceLineRecord &Record);
   TypeIndex writeFuncId(const FuncIdRecord &Record);
   TypeIndex writeMemberFuncId(const MemberFuncIdRecord &Record);
   TypeIndex writeBuildInfo(const BuildInfoRecord &Record);

Modified: llvm/trunk/lib/DebugInfo/CodeView/TypeDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeDumper.cpp?rev=272843&r1=272842&r2=272843&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/TypeDumper.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/TypeDumper.cpp Wed Jun 15 16:25:29 2016
@@ -514,6 +514,14 @@ void CVTypeDumperImpl::visitUdtSourceLin
   W.printNumber("LineNumber", Line.getLineNumber());
 }
 
+void CVTypeDumperImpl::visitUdtModSourceLine(TypeLeafKind Leaf,
+                                             UdtModSourceLineRecord &Line) {
+  printTypeIndex("UDT", Line.getUDT());
+  printTypeIndex("SourceFile", Line.getSourceFile());
+  W.printNumber("LineNumber", Line.getLineNumber());
+  W.printNumber("Module", Line.getModule());
+}
+
 void CVTypeDumperImpl::visitBuildInfo(TypeLeafKind Leaf,
                                       BuildInfoRecord &Args) {
   W.printNumber("NumArgs", static_cast<uint32_t>(Args.getArgs().size()));

Modified: llvm/trunk/lib/DebugInfo/CodeView/TypeRecord.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeRecord.cpp?rev=272843&r1=272842&r2=272843&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/TypeRecord.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/TypeRecord.cpp Wed Jun 15 16:25:29 2016
@@ -491,6 +491,13 @@ bool UdtSourceLineRecord::remapTypeIndic
   return Success;
 }
 
+bool UdtModSourceLineRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) {
+  bool Success = true;
+  Success &= remapIndex(IndexMap, UDT);
+  Success &= remapIndex(IndexMap, SourceFile);
+  return Success;
+}
+
 bool BuildInfoRecord::remapTypeIndices(ArrayRef<TypeIndex> IndexMap) {
   bool Success = true;
   for (TypeIndex &Arg : ArgIndices)

Modified: llvm/trunk/lib/DebugInfo/CodeView/TypeTableBuilder.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeTableBuilder.cpp?rev=272843&r1=272842&r2=272843&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/TypeTableBuilder.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/TypeTableBuilder.cpp Wed Jun 15 16:25:29 2016
@@ -226,7 +226,16 @@ TypeTableBuilder::writeUdtSourceLine(con
 }
 
 TypeIndex
-TypeTableBuilder::writeFuncId(const FuncIdRecord &Record) {
+TypeTableBuilder::writeUdtModSourceLine(const UdtModSourceLineRecord &Record) {
+  TypeRecordBuilder Builder(Record.getKind());
+  Builder.writeTypeIndex(Record.getUDT());
+  Builder.writeTypeIndex(Record.getSourceFile());
+  Builder.writeUInt32(Record.getLineNumber());
+  Builder.writeUInt16(Record.getModule());
+  return writeRecord(Builder);
+}
+
+TypeIndex TypeTableBuilder::writeFuncId(const FuncIdRecord &Record) {
   TypeRecordBuilder Builder(Record.getKind());
   Builder.writeTypeIndex(Record.getParentScope());
   Builder.writeTypeIndex(Record.getFunctionType());

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test?rev=272843&r1=272842&r2=272843&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test Wed Jun 15 16:25:29 2016
@@ -153,72 +153,72 @@
 ; EMPTY-NEXT:     Record count: 15
 ; EMPTY-NEXT:     Records [
 ; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UnknownLeaf (0x104B) {
+; EMPTY-NEXT:         UdtModSourceLine (0x104B) {
 ; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UnknownType {
-; EMPTY-NEXT:             Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:             Length: 16
-; EMPTY-NEXT:           }
+; EMPTY-NEXT:           UDT: __vc_attributes::threadingAttribute (0x100B)
+; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
+; EMPTY-NEXT:           LineNumber: 481
+; EMPTY-NEXT:           Module: 1
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         Bytes (
 ; EMPTY-NEXT:           0000: 0B100000 01000000 E1010000 0100F2F1  |................|
 ; EMPTY-NEXT:         )
 ; EMPTY-NEXT:       }
 ; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UnknownLeaf (0x104C) {
+; EMPTY-NEXT:         UdtModSourceLine (0x104C) {
 ; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UnknownType {
-; EMPTY-NEXT:             Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:             Length: 16
-; EMPTY-NEXT:           }
+; EMPTY-NEXT:           UDT: __vc_attributes::event_receiverAttribute (0x1017)
+; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
+; EMPTY-NEXT:           LineNumber: 194
+; EMPTY-NEXT:           Module: 1
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         Bytes (
 ; EMPTY-NEXT:           0000: 17100000 01000000 C2000000 0100F2F1  |................|
 ; EMPTY-NEXT:         )
 ; EMPTY-NEXT:       }
 ; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UnknownLeaf (0x104D) {
+; EMPTY-NEXT:         UdtModSourceLine (0x104D) {
 ; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UnknownType {
-; EMPTY-NEXT:             Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:             Length: 16
-; EMPTY-NEXT:           }
+; EMPTY-NEXT:           UDT: __vc_attributes::aggregatableAttribute (0x1021)
+; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
+; EMPTY-NEXT:           LineNumber: 603
+; EMPTY-NEXT:           Module: 1
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         Bytes (
 ; EMPTY-NEXT:           0000: 21100000 01000000 5B020000 0100F2F1  |!.......[.......|
 ; EMPTY-NEXT:         )
 ; EMPTY-NEXT:       }
 ; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UnknownLeaf (0x104E) {
+; EMPTY-NEXT:         UdtModSourceLine (0x104E) {
 ; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UnknownType {
-; EMPTY-NEXT:             Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:             Length: 16
-; EMPTY-NEXT:           }
+; EMPTY-NEXT:           UDT: __vc_attributes::event_sourceAttribute (0x102C)
+; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
+; EMPTY-NEXT:           LineNumber: 1200
+; EMPTY-NEXT:           Module: 1
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         Bytes (
 ; EMPTY-NEXT:           0000: 2C100000 01000000 B0040000 0100F2F1  |,...............|
 ; EMPTY-NEXT:         )
 ; EMPTY-NEXT:       }
 ; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UnknownLeaf (0x104F) {
+; EMPTY-NEXT:         UdtModSourceLine (0x104F) {
 ; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UnknownType {
-; EMPTY-NEXT:             Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:             Length: 16
-; EMPTY-NEXT:           }
+; EMPTY-NEXT:           UDT: __vc_attributes::moduleAttribute (0x103A)
+; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
+; EMPTY-NEXT:           LineNumber: 540
+; EMPTY-NEXT:           Module: 1
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         Bytes (
 ; EMPTY-NEXT:           0000: 3A100000 01000000 1C020000 0100F2F1  |:...............|
 ; EMPTY-NEXT:         )
 ; EMPTY-NEXT:       }
 ; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UnknownLeaf (0x1050) {
+; EMPTY-NEXT:         UdtModSourceLine (0x1050) {
 ; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UnknownType {
-; EMPTY-NEXT:             Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:             Length: 16
-; EMPTY-NEXT:           }
+; EMPTY-NEXT:           UDT: __vc_attributes::helper_attributes::usageAttribute (0x1042)
+; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
+; EMPTY-NEXT:           LineNumber: 108
+; EMPTY-NEXT:           Module: 1
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         Bytes (
 ; EMPTY-NEXT:           0000: 42100000 01000000 6C000000 0100F2F1  |B.......l.......|
@@ -1003,66 +1003,66 @@
 ; ALL:   Record count: 15
 ; ALL:   Records [
 ; ALL:     {
-; ALL:       UnknownLeaf (0x104B) {
+; ALL:       UdtModSourceLine (0x104B) {
 ; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UnknownType {
-; ALL:           Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:           Length: 16
-; ALL:         }
+; ALL:         UDT: __vc_attributes::threadingAttribute (0x100B)
+; ALL:         SourceFile: <unknown simple type> (0x1)
+; ALL:         LineNumber: 481
+; ALL:         Module: 1
 ; ALL:       }
 ; ALL:     }
 ; ALL:     {
-; ALL:       UnknownLeaf (0x104C) {
+; ALL:       UdtModSourceLine (0x104C) {
 ; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UnknownType {
-; ALL:           Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:           Length: 16
-; ALL:         }
+; ALL:         UDT: __vc_attributes::event_receiverAttribute (0x1017)
+; ALL:         SourceFile: <unknown simple type> (0x1)
+; ALL:         LineNumber: 194
+; ALL:         Module: 1
 ; ALL:       }
 ; ALL:     }
 ; ALL:     {
-; ALL:       UnknownLeaf (0x104D) {
+; ALL:       UdtModSourceLine (0x104D) {
 ; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UnknownType {
-; ALL:           Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:           Length: 16
-; ALL:         }
+; ALL:         UDT: __vc_attributes::aggregatableAttribute (0x1021)
+; ALL:         SourceFile: <unknown simple type> (0x1)
+; ALL:         LineNumber: 603
+; ALL:         Module: 1
 ; ALL:       }
 ; ALL:     }
 ; ALL:     {
-; ALL:       UnknownLeaf (0x104E) {
+; ALL:       UdtModSourceLine (0x104E) {
 ; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UnknownType {
-; ALL:           Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:           Length: 16
-; ALL:         }
+; ALL:         UDT: __vc_attributes::event_sourceAttribute (0x102C)
+; ALL:         SourceFile: <unknown simple type> (0x1)
+; ALL:         LineNumber: 1200
+; ALL:         Module: 1
 ; ALL:       }
 ; ALL:     }
 ; ALL:     {
-; ALL:       UnknownLeaf (0x104F) {
+; ALL:       UdtModSourceLine (0x104F) {
 ; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UnknownType {
-; ALL:           Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:           Length: 16
-; ALL:         }
+; ALL:         UDT: __vc_attributes::moduleAttribute (0x103A)
+; ALL:         SourceFile: <unknown simple type> (0x1)
+; ALL:         LineNumber: 540
+; ALL:         Module: 1
 ; ALL:       }
 ; ALL:     }
 ; ALL:     {
-; ALL:       UnknownLeaf (0x1050) {
+; ALL:       UdtModSourceLine (0x1050) {
 ; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UnknownType {
-; ALL:           Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:           Length: 16
-; ALL:         }
+; ALL:         UDT: __vc_attributes::helper_attributes::usageAttribute (0x1042)
+; ALL:         SourceFile: <unknown simple type> (0x1)
+; ALL:         LineNumber: 108
+; ALL:         Module: 1
 ; ALL:       }
 ; ALL:     }
 ; ALL:     {
-; ALL:       UnknownLeaf (0x1051) {
+; ALL:       UdtModSourceLine (0x1051) {
 ; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UnknownType {
-; ALL:           Kind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:           Length: 16
-; ALL:         }
+; ALL:         UDT: __vc_attributes::helper_attributes::v1_alttypeAttribute (0x104A)
+; ALL:         SourceFile: <unknown simple type> (0x1)
+; ALL:         LineNumber: 96
+; ALL:         Module: 1
 ; ALL:       }
 ; ALL:     }
 ; ALL:     {




More information about the llvm-commits mailing list