[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