[lld] r288298 - Dump Codeview type information correctly.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 30 17:22:49 PST 2016
Author: ruiu
Date: Wed Nov 30 19:22:48 2016
New Revision: 288298
URL: http://llvm.org/viewvc/llvm-project?rev=288298&view=rev
Log:
Dump Codeview type information correctly.
Modified:
lld/trunk/COFF/PDB.cpp
lld/trunk/test/COFF/dumppdb.test
Modified: lld/trunk/COFF/PDB.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/PDB.cpp?rev=288298&r1=288297&r2=288298&view=diff
==============================================================================
--- lld/trunk/COFF/PDB.cpp (original)
+++ lld/trunk/COFF/PDB.cpp Wed Nov 30 19:22:48 2016
@@ -60,32 +60,47 @@ static SectionChunk *findByName(std::vec
return nullptr;
}
+static void dumpDebugT(ScopedPrinter &W, ObjectFile *File) {
+ SectionChunk *Sec = findByName(File->getDebugChunks(), ".debug$T");
+ if (!Sec)
+ return;
+
+ // First 4 bytes are section magic.
+ ArrayRef<uint8_t> Data = Sec->getContents();
+ if (Data.size() < 4)
+ fatal(".debug$T too short");
+ if (read32le(Data.data()) != COFF::DEBUG_SECTION_MAGIC)
+ fatal(".debug$T has an invalid magic");
+
+ CVTypeDumper TypeDumper(&W, false);
+ if (auto EC = TypeDumper.dump(Data.slice(4)))
+ fatal(EC, "CVTypeDumper::dump failed");
+}
+
+static void dumpDebugS(ScopedPrinter &W, ObjectFile *File) {
+ SectionChunk *Sec = findByName(File->getDebugChunks(), ".debug$S");
+ if (!Sec)
+ return;
+
+ msf::ByteStream Stream(Sec->getContents());
+ CVSymbolArray Symbols;
+ msf::StreamReader Reader(Stream);
+ if (auto EC = Reader.readArray(Symbols, Reader.getLength()))
+ fatal(EC, "StreamReader.readArray<CVSymbolArray> failed");
+
+ CVTypeDumper TypeDumper(&W, false);
+ CVSymbolDumper SymbolDumper(W, TypeDumper, nullptr, false);
+ if (auto EC = SymbolDumper.dump(Symbols))
+ fatal(EC, "CVSymbolDumper::dump failed");
+}
+
// Dump CodeView debug info. This is for debugging.
static void dumpCodeView(SymbolTable *Symtab) {
ScopedPrinter W(outs());
for (ObjectFile *File : Symtab->ObjectFiles) {
- SectionChunk *DebugT = findByName(File->getDebugChunks(), ".debug$T");
- if (!DebugT)
- continue;
-
- CVTypeDumper TypeDumper(&W, false);
- if (auto EC = TypeDumper.dump(DebugT->getContents()))
- fatal(EC, "CVTypeDumper::dump failed");
-
- SectionChunk *DebugS = findByName(File->getDebugChunks(), ".debug$S");
- if (!DebugS)
- continue;
-
- msf::ByteStream Stream(DebugS->getContents());
- CVSymbolArray Symbols;
- msf::StreamReader Reader(Stream);
- if (auto EC = Reader.readArray(Symbols, Reader.getLength()))
- fatal(EC, "StreamReader.readArray<CVSymbolArray> failed");
-
- CVSymbolDumper SymbolDumper(W, TypeDumper, nullptr, false);
- if (auto EC = SymbolDumper.dump(Symbols))
- fatal(EC, "CVSymbolDumper::dump failed");
+ dumpDebugT(W, File);
+ dumpDebugS(W, File);
}
}
Modified: lld/trunk/test/COFF/dumppdb.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/dumppdb.test?rev=288298&r1=288297&r2=288298&view=diff
==============================================================================
--- lld/trunk/test/COFF/dumppdb.test (original)
+++ lld/trunk/test/COFF/dumppdb.test Wed Nov 30 19:22:48 2016
@@ -2,10 +2,75 @@
# RUN: lld-link /debug /pdb:%t.pdb /dumppdb /dll /out:%t.dll /entry:main \
# RUN: /nodefaultlib %t.obj | FileCheck %s
-# CHECK: UnknownLeaf (0x1000) {
-# CHECK-NEXT: TypeLeafKind: 0x0
-# CHECK-NEXT: Kind: 0x0
-# CHECK-NEXT: Length: 2
+# CHECK: ArgList (0x1000) {
+# CHECK-NEXT: TypeLeafKind: LF_ARGLIST (0x1201)
+# CHECK-NEXT: NumArgs: 1
+# CHECK-NEXT: Arguments [
+# CHECK-NEXT: ArgType: 0x0
+# CHECK-NEXT: ]
+# CHECK-NEXT: }
+# CHECK-NEXT: Procedure (0x1001) {
+# CHECK-NEXT: TypeLeafKind: LF_PROCEDURE (0x1008)
+# CHECK-NEXT: ReturnType: int (0x74)
+# CHECK-NEXT: CallingConvention: NearC (0x0)
+# CHECK-NEXT: FunctionOptions [ (0x0)
+# CHECK-NEXT: ]
+# CHECK-NEXT: NumParameters: 0
+# CHECK-NEXT: ArgListType: (<no type>) (0x1000)
+# CHECK-NEXT: }
+# CHECK-NEXT: FuncId (0x1002) {
+# CHECK-NEXT: TypeLeafKind: LF_FUNC_ID (0x1601)
+# CHECK-NEXT: ParentScope: 0x0
+# CHECK-NEXT: FunctionType: int (<no type>) (0x1001)
+# CHECK-NEXT: Name: main
+# CHECK-NEXT: }
+# CHECK-NEXT: StringId (0x1003) {
+# CHECK-NEXT: TypeLeafKind: LF_STRING_ID (0x1605)
+# CHECK-NEXT: Id: 0x0
+# CHECK-NEXT: StringData: D:\b
+# CHECK-NEXT: }
+# CHECK-NEXT: StringId (0x1004) {
+# CHECK-NEXT: TypeLeafKind: LF_STRING_ID (0x1605)
+# CHECK-NEXT: Id: 0x0
+# CHECK-NEXT: StringData: C:\vs14\VC\BIN\amd64\cl.exe
+# CHECK-NEXT: }
+# CHECK-NEXT: StringId (0x1005) {
+# CHECK-NEXT: TypeLeafKind: LF_STRING_ID (0x1605)
+# CHECK-NEXT: Id: 0x0
+# CHECK-NEXT: StringData: -Z7 -c -MT -IC:\vs14\VC\INCLUDE -IC:\vs14\VC\ATLMFC\INCLUDE -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared"
+# CHECK-NEXT: }
+# CHECK-NEXT: StringList (0x1006) {
+# CHECK-NEXT: TypeLeafKind: LF_SUBSTR_LIST (0x1604)
+# CHECK-NEXT: NumArgs: 1
+# CHECK-NEXT: Arguments [
+# CHECK-NEXT: ArgType: -Z7 -c -MT -IC:\vs14\VC\INCLUDE -IC:\vs14\VC\ATLMFC\INCLUDE -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" (0x1005)
+# CHECK-NEXT: ]
+# CHECK-NEXT: }
+# CHECK-NEXT: StringId (0x1007) {
+# CHECK-NEXT: TypeLeafKind: LF_STRING_ID (0x1605)
+# CHECK-NEXT: Id: (-Z7 -c -MT -IC:\vs14\VC\INCLUDE -IC:\vs14\VC\ATLMFC\INCLUDE -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared") (0x1006)
+# CHECK-NEXT: StringData: -I"C:\Program Files (x86)\Windows Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TC -X
+# CHECK-NEXT: }
+# CHECK-NEXT: StringId (0x1008) {
+# CHECK-NEXT: TypeLeafKind: LF_STRING_ID (0x1605)
+# CHECK-NEXT: Id: 0x0
+# CHECK-NEXT: StringData: ret42.c
+# CHECK-NEXT: }
+# CHECK-NEXT: StringId (0x1009) {
+# CHECK-NEXT: TypeLeafKind: LF_STRING_ID (0x1605)
+# CHECK-NEXT: Id: 0x0
+# CHECK-NEXT: StringData: D:\b\vc140.pdb
+# CHECK-NEXT: }
+# CHECK-NEXT: BuildInfo (0x100A) {
+# CHECK-NEXT: TypeLeafKind: LF_BUILDINFO (0x1603)
+# CHECK-NEXT: NumArgs: 5
+# CHECK-NEXT: Arguments [
+# CHECK-NEXT: ArgType: D:\b (0x1003)
+# CHECK-NEXT: ArgType: C:\vs14\VC\BIN\amd64\cl.exe (0x1004)
+# CHECK-NEXT: ArgType: ret42.c (0x1008)
+# CHECK-NEXT: ArgType: D:\b\vc140.pdb (0x1009)
+# CHECK-NEXT: ArgType: -I"C:\Program Files (x86)\Windows Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TC -X (0x1007)
+# CHECK-NEXT: ]
# CHECK-NEXT: }
# CHECK-NEXT: UnknownSym {
# CHECK-NEXT: Kind: 0x0
More information about the llvm-commits
mailing list