[llvm] r271622 - [pdb] Dump file checksums from pdb codeview line info.
Zachary Turner via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 2 21:01:52 PDT 2016
Author: zturner
Date: Thu Jun 2 23:01:48 2016
New Revision: 271622
URL: http://llvm.org/viewvc/llvm-project?rev=271622&view=rev
Log:
[pdb] Dump file checksums from pdb codeview line info.
Modified:
llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h
llvm/trunk/include/llvm/DebugInfo/CodeView/EnumTables.h
llvm/trunk/include/llvm/DebugInfo/CodeView/Line.h
llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h
llvm/trunk/lib/DebugInfo/CodeView/EnumTables.cpp
llvm/trunk/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp
llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test
llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h?rev=271622&r1=271621&r2=271622&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h Thu Jun 2 23:01:48 2016
@@ -537,6 +537,13 @@ enum class ThunkOrdinal {
};
enum class TrampolineType { TrampIncremental, BranchIsland };
+
+// These values correspond to the CV_SourceChksum_t enumeration.
+enum class FileChecksumKind : uint8_t { None, MD5, SHA1, SHA256 };
+
+enum LineFlags : uint32_t {
+ HaveColumns = 1, // CV_LINES_HAVE_COLUMNS
+};
}
}
Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/EnumTables.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/EnumTables.h?rev=271622&r1=271621&r2=271622&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/EnumTables.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/EnumTables.h Thu Jun 2 23:01:48 2016
@@ -27,6 +27,7 @@ ArrayRef<EnumEntry<uint32_t>> getFrameCo
ArrayRef<EnumEntry<SourceLanguage>> getSourceLanguageNames();
ArrayRef<EnumEntry<uint32_t>> getCompileSym2FlagNames();
ArrayRef<EnumEntry<uint32_t>> getCompileSym3FlagNames();
+ArrayRef<EnumEntry<uint32_t>> getFileChecksumNames();
ArrayRef<EnumEntry<unsigned>> getCPUTypeNames();
ArrayRef<EnumEntry<uint32_t>> getFrameProcSymFlagNames();
ArrayRef<EnumEntry<uint16_t>> getExportSymFlagNames();
Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/Line.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/Line.h?rev=271622&r1=271621&r2=271622&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/Line.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/Line.h Thu Jun 2 23:01:48 2016
@@ -141,13 +141,6 @@ struct InlineeSourceLine {
// ulittle32_t Files[];
};
-enum class FileChecksumKind : uint8_t {
- None,
- MD5,
- SHA1,
- SHA256
-};
-
struct FileChecksum {
ulittle32_t FileNameOffset; // Offset of filename in string table substream.
uint8_t ChecksumSize;
@@ -155,10 +148,6 @@ struct FileChecksum {
// Checksum bytes follow.
};
-enum LineFlags : uint32_t {
- HaveColumns = 1, // CV_LINES_HAVE_COLUMNS
-};
-
} // namespace codeview
} // namespace llvm
Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h?rev=271622&r1=271621&r2=271622&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h Thu Jun 2 23:01:48 2016
@@ -26,9 +26,9 @@ struct LineColumnEntry {
FixedStreamArray<ColumnNumberEntry> Columns;
};
-class FileLineInfoExtractor {
+template <> class VarStreamArrayExtractor<LineColumnEntry> {
public:
- FileLineInfoExtractor(const LineSubstreamHeader *Header) : Header(Header) {}
+ VarStreamArrayExtractor(const LineSubstreamHeader *Header) : Header(Header) {}
Error operator()(StreamRef Stream, uint32_t &Len,
LineColumnEntry &Item) const {
@@ -64,7 +64,31 @@ private:
const LineSubstreamHeader *Header;
};
-typedef VarStreamArray<LineColumnEntry, FileLineInfoExtractor> LineInfoArray;
+struct FileChecksumEntry {
+ uint32_t FileNameOffset;
+ FileChecksumKind Kind;
+ ArrayRef<uint8_t> Checksum;
+};
+
+template <> class VarStreamArrayExtractor<FileChecksumEntry> {
+public:
+ Error operator()(StreamRef Stream, uint32_t &Len,
+ FileChecksumEntry &Item) const {
+ const FileChecksum *Header;
+ StreamReader Reader(Stream);
+ if (auto EC = Reader.readObject(Header))
+ return EC;
+ Item.FileNameOffset = Header->FileNameOffset;
+ Item.Kind = static_cast<FileChecksumKind>(Header->ChecksumKind);
+ if (auto EC = Reader.readBytes(Item.Checksum, Header->ChecksumSize))
+ return EC;
+ Len = sizeof(FileChecksum) + Header->ChecksumSize;
+ return Error::success();
+ }
+};
+
+typedef VarStreamArray<LineColumnEntry> LineInfoArray;
+typedef VarStreamArray<FileChecksumEntry> FileChecksumArray;
class IModuleSubstreamVisitor {
public:
@@ -73,9 +97,10 @@ public:
virtual Error visitUnknown(ModuleSubstreamKind Kind, StreamRef Data) = 0;
virtual Error visitSymbols(StreamRef Data);
virtual Error visitLines(StreamRef Data, const LineSubstreamHeader *Header,
- LineInfoArray Lines);
+ const LineInfoArray &Lines);
virtual Error visitStringTable(StreamRef Data);
- virtual Error visitFileChecksums(StreamRef Data);
+ virtual Error visitFileChecksums(StreamRef Data,
+ const FileChecksumArray &Checksums);
virtual Error visitFrameData(StreamRef Data);
virtual Error visitInlineeLines(StreamRef Data);
virtual Error visitCrossScopeImports(StreamRef Data);
Modified: llvm/trunk/lib/DebugInfo/CodeView/EnumTables.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/EnumTables.cpp?rev=271622&r1=271621&r2=271622&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/EnumTables.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/EnumTables.cpp Thu Jun 2 23:01:48 2016
@@ -147,6 +147,13 @@ static const EnumEntry<uint32_t> Compile
CV_ENUM_CLASS_ENT(CompileSym3Flags, Exp),
};
+static const EnumEntry<uint32_t> FileChecksumNames[] = {
+ CV_ENUM_CLASS_ENT(FileChecksumKind, None),
+ CV_ENUM_CLASS_ENT(FileChecksumKind, MD5),
+ CV_ENUM_CLASS_ENT(FileChecksumKind, SHA1),
+ CV_ENUM_CLASS_ENT(FileChecksumKind, SHA256),
+};
+
static const EnumEntry<unsigned> CPUTypeNames[] = {
CV_ENUM_CLASS_ENT(CPUType, Intel8080),
CV_ENUM_CLASS_ENT(CPUType, Intel8086),
@@ -339,6 +346,9 @@ ArrayRef<EnumEntry<uint32_t>> getCompile
ArrayRef<EnumEntry<uint32_t>> getCompileSym3FlagNames() {
return makeArrayRef(CompileSym3FlagNames);
}
+ArrayRef<EnumEntry<uint32_t>> getFileChecksumNames() {
+ return makeArrayRef(FileChecksumNames);
+}
ArrayRef<EnumEntry<unsigned>> getCPUTypeNames() {
return makeArrayRef(CPUTypeNames);
}
Modified: llvm/trunk/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp?rev=271622&r1=271621&r2=271622&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp Thu Jun 2 23:01:48 2016
@@ -17,13 +17,14 @@ Error IModuleSubstreamVisitor::visitSymb
}
Error IModuleSubstreamVisitor::visitLines(StreamRef Data,
const LineSubstreamHeader *Header,
- LineInfoArray Lines) {
+ const LineInfoArray &Lines) {
return visitUnknown(ModuleSubstreamKind::Lines, Data);
}
Error IModuleSubstreamVisitor::visitStringTable(StreamRef Data) {
return visitUnknown(ModuleSubstreamKind::StringTable, Data);
}
-Error IModuleSubstreamVisitor::visitFileChecksums(StreamRef Data) {
+Error IModuleSubstreamVisitor::visitFileChecksums(
+ StreamRef Data, const FileChecksumArray &Checksums) {
return visitUnknown(ModuleSubstreamKind::FileChecksums, Data);
}
Error IModuleSubstreamVisitor::visitFrameData(StreamRef Data) {
@@ -64,7 +65,7 @@ Error llvm::codeview::visitModuleSubstre
const LineSubstreamHeader *Header;
if (auto EC = Reader.readObject(Header))
return EC;
- FileLineInfoExtractor E(Header);
+ VarStreamArrayExtractor<LineColumnEntry> E(Header);
LineInfoArray LineInfos(E);
if (auto EC = Reader.readArray(LineInfos, Reader.bytesRemaining()))
return EC;
@@ -72,8 +73,13 @@ Error llvm::codeview::visitModuleSubstre
}
case ModuleSubstreamKind::StringTable:
return V.visitStringTable(R.getRecordData());
- case ModuleSubstreamKind::FileChecksums:
- return V.visitFileChecksums(R.getRecordData());
+ case ModuleSubstreamKind::FileChecksums: {
+ StreamReader Reader(R.getRecordData());
+ FileChecksumArray Checksums;
+ if (auto EC = Reader.readArray(Checksums, Reader.bytesRemaining()))
+ return EC;
+ return V.visitFileChecksums(R.getRecordData(), Checksums);
+ }
case ModuleSubstreamKind::FrameData:
return V.visitFrameData(R.getRecordData());
case ModuleSubstreamKind::InlineeLines:
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=271622&r1=271621&r2=271622&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test Thu Jun 2 23:01:48 2016
@@ -70,9 +70,9 @@
; EMPTY-NEXT: Version: 1
; EMPTY-NEXT: Name Count: 4
; EMPTY-NEXT: Names [
-; EMPTY-NEXT: d:\src\llvm\test\debuginfo\pdb\inputs\predefined c++ attributes (compiler internal)
-; EMPTY-NEXT: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
-; EMPTY-NEXT: $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =
+; EMPTY-NEXT: 1: d:\src\llvm\test\debuginfo\pdb\inputs\predefined c++ attributes (compiler internal)
+; EMPTY-NEXT: 86: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
+; EMPTY-NEXT: 134: $T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =
; EMPTY-NEXT: ]
; EMPTY-NEXT: }
; EMPTY-NEXT: Type Info Stream (TPI) {
@@ -351,17 +351,15 @@
; EMPTY-NEXT: EndDelta: 0
; EMPTY-NEXT: IsStatement: Yes
; EMPTY-NEXT: }
-; EMPTY-NEXT: Data (
-; EMPTY-NEXT: 0000: 10000000 01000000 0A000000 00000000 |................|
-; EMPTY-NEXT: 0010: 03000000 24000000 00000000 05000080 |....$...........|
-; EMPTY-NEXT: 0020: 03000000 06000080 08000000 07000080 |................|
-; EMPTY-NEXT: )
; EMPTY-NEXT: }
; EMPTY-NEXT: FileChecksums {
-; EMPTY-NEXT: Data (
-; EMPTY-NEXT: 0000: 56000000 1001A0A5 BD0D3ECD 93FC29D1 |V.........>...).|
-; EMPTY-NEXT: 0010: 9DE826FB F4BC0000 |..&.....|
-; EMPTY-NEXT: )
+; EMPTY-NEXT: Checksum {
+; EMPTY-NEXT: FileNameOffset: 86
+; EMPTY-NEXT: Kind: MD5 (0x1)
+; EMPTY-NEXT: Checksum (
+; EMPTY-NEXT: 0000: A0A5BD0D 3ECD93FC 29D19DE8 26FBF4BC |....>...)...&...|
+; EMPTY-NEXT: )
+; EMPTY-NEXT: }
; EMPTY-NEXT: }
; EMPTY-NEXT: ]
; EMPTY-NEXT: }
Modified: llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp?rev=271622&r1=271621&r2=271622&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp Thu Jun 2 23:01:48 2016
@@ -427,7 +427,7 @@ static Error dumpNamedStream(ScopedPrint
for (uint32_t ID : NameTable.name_ids()) {
StringRef Str = NameTable.getStringForID(ID);
if (!Str.empty())
- P.printString(Str);
+ P.printString(to_string(ID), Str);
}
}
return Error::success();
@@ -528,13 +528,21 @@ static Error dumpDbiStream(ScopedPrinter
DictScope DD(P, "Unknown");
return printBinaryData(Data);
}
- Error visitFileChecksums(StreamRef Data) override {
+ Error
+ visitFileChecksums(StreamRef Data,
+ const FileChecksumArray &Checksums) override {
DictScope DD(P, "FileChecksums");
- return printBinaryData(Data);
+ for (const auto &C : Checksums) {
+ DictScope DDD(P, "Checksum");
+ P.printNumber("FileNameOffset", C.FileNameOffset);
+ P.printEnum("Kind", uint8_t(C.Kind), getFileChecksumNames());
+ P.printBinaryBlock("Checksum", C.Checksum);
+ }
+ return Error::success();
}
Error visitLines(StreamRef Data, const LineSubstreamHeader *Header,
- LineInfoArray Lines) override {
+ const LineInfoArray &Lines) override {
DictScope DD(P, "Lines");
for (const auto &L : Lines) {
P.printNumber("FileOffset", L.Offset);
@@ -557,7 +565,7 @@ static Error dumpDbiStream(ScopedPrinter
P.printNumber("End", C.EndColumn);
}
}
- return printBinaryData(Data);
+ return Error::success();
}
private:
More information about the llvm-commits
mailing list