[PDB] Add native support for dumping array types.
llvm-svn: 343412
diff --git a/llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp b/llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp
index 2de2403..6f92452 100644
--- a/llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp
+++ b/llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp
@@ -19,6 +19,7 @@
#include "llvm/DebugInfo/PDB/IPDBSession.h"
#include "llvm/DebugInfo/PDB/PDBSymbolExe.h"
+#include "llvm/DebugInfo/PDB/PDBSymbolTypeArray.h"
#include "llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h"
#include "llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h"
#include "llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h"
@@ -201,6 +202,9 @@
if (opts::pretty::Typedefs)
dumpSymbolCategory<PDBSymbolTypeTypedef>(Printer, Exe, *this, "Typedefs");
+ if (opts::pretty::Arrays)
+ dumpSymbolCategory<PDBSymbolTypeArray>(Printer, Exe, *this, "Arrays");
+
if (opts::pretty::Pointers)
dumpSymbolCategory<PDBSymbolTypePointer>(Printer, Exe, *this, "Pointers");
@@ -284,6 +288,15 @@
Dumper.start(Symbol);
}
+void TypeDumper::dump(const PDBSymbolTypeArray &Symbol) {
+ auto ElementType = Symbol.getElementType();
+
+ ElementType->dump(*this);
+ Printer << "[";
+ WithColor(Printer, PDB_ColorItem::LiteralValue).get() << Symbol.getCount();
+ Printer << "]";
+}
+
void TypeDumper::dump(const PDBSymbolTypeFunctionSig &Symbol) {
FunctionDumper Dumper(Printer);
Dumper.start(Symbol, nullptr, FunctionDumper::PointerType::None);
diff --git a/llvm/tools/llvm-pdbutil/PrettyTypeDumper.h b/llvm/tools/llvm-pdbutil/PrettyTypeDumper.h
index cb6fcb1..e63ebe0 100644
--- a/llvm/tools/llvm-pdbutil/PrettyTypeDumper.h
+++ b/llvm/tools/llvm-pdbutil/PrettyTypeDumper.h
@@ -26,6 +26,7 @@
void dump(const PDBSymbolTypeEnum &Symbol) override;
void dump(const PDBSymbolTypeTypedef &Symbol) override;
void dump(const PDBSymbolTypeFunctionSig &Symbol) override;
+ void dump(const PDBSymbolTypeArray &Symbol) override;
void dump(const PDBSymbolTypeBuiltin &Symbol) override;
void dump(const PDBSymbolTypePointer &Symbol) override;
diff --git a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
index c9162dd..f71ff9f 100644
--- a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
+++ b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
@@ -193,6 +193,8 @@
static cl::opt<bool> Funcsigs("funcsigs",
cl::desc("Dump function signature information"),
cl::sub(DiaDumpSubcommand));
+static cl::opt<bool> Arrays("arrays", cl::desc("Dump array types"),
+ cl::sub(DiaDumpSubcommand));
} // namespace diadump
namespace pretty {
@@ -245,6 +247,8 @@
cl::cat(TypeCategory), cl::sub(PrettySubcommand));
cl::opt<bool> Pointers("pointers", cl::desc("Display pointer types"),
cl::cat(TypeCategory), cl::sub(PrettySubcommand));
+cl::opt<bool> Arrays("arrays", cl::desc("Display arrays"),
+ cl::cat(TypeCategory), cl::sub(PrettySubcommand));
cl::opt<SymbolSortMode> SymbolOrder(
"symbol-order", cl::desc("symbol sort order"),
@@ -1015,7 +1019,8 @@
SymTypes.push_back(PDB_SymType::UDT);
if (opts::diadump::Funcsigs)
SymTypes.push_back(PDB_SymType::FunctionSig);
-
+ if (opts::diadump::Arrays)
+ SymTypes.push_back(PDB_SymType::ArrayType);
PdbSymbolIdField Ids = opts::diadump::NoSymIndexIds ? PdbSymbolIdField::None
: PdbSymbolIdField::All;
PdbSymbolIdField Recurse = PdbSymbolIdField::None;
@@ -1182,7 +1187,8 @@
}
if (opts::pretty::Classes || opts::pretty::Enums || opts::pretty::Typedefs ||
- opts::pretty::Funcsigs || opts::pretty::Pointers) {
+ opts::pretty::Funcsigs || opts::pretty::Pointers ||
+ opts::pretty::Arrays) {
Printer.NewLine();
WithColor(Printer, PDB_ColorItem::SectionHeader).get() << "---TYPES---";
Printer.Indent();
@@ -1275,6 +1281,7 @@
dumpInjectedSources(Printer, *Session);
}
+ Printer.NewLine();
outs().flush();
}
diff --git a/llvm/tools/llvm-pdbutil/llvm-pdbutil.h b/llvm/tools/llvm-pdbutil/llvm-pdbutil.h
index eaedb1a..cbccac2 100644
--- a/llvm/tools/llvm-pdbutil/llvm-pdbutil.h
+++ b/llvm/tools/llvm-pdbutil/llvm-pdbutil.h
@@ -83,6 +83,7 @@
extern llvm::cl::opt<bool> Classes;
extern llvm::cl::opt<bool> Enums;
extern llvm::cl::opt<bool> Funcsigs;
+extern llvm::cl::opt<bool> Arrays;
extern llvm::cl::opt<bool> Typedefs;
extern llvm::cl::opt<bool> Pointers;
extern llvm::cl::opt<bool> All;