summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-pdbutil
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2018-09-30 16:19:18 +0000
committerZachary Turner <zturner@google.com>2018-09-30 16:19:18 +0000
commit518cb2d5608b8bedb68c7e626d380a1531d17145 (patch)
tree579366eede6aff93613a15054ffa1d9c25f887a1 /llvm/tools/llvm-pdbutil
parent5cd7be3c17ec68ae42d87b586ba608430488dde6 (diff)
downloadbcm5719-llvm-518cb2d5608b8bedb68c7e626d380a1531d17145.tar.gz
bcm5719-llvm-518cb2d5608b8bedb68c7e626d380a1531d17145.zip
[PDB] Add native support for dumping array types.
llvm-svn: 343412
Diffstat (limited to 'llvm/tools/llvm-pdbutil')
-rw-r--r--llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp13
-rw-r--r--llvm/tools/llvm-pdbutil/PrettyTypeDumper.h1
-rw-r--r--llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp11
-rw-r--r--llvm/tools/llvm-pdbutil/llvm-pdbutil.h1
4 files changed, 24 insertions, 2 deletions
diff --git a/llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp b/llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp
index 2de24038dcf..6f924521a75 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 @@ void TypeDumper::start(const PDBSymbolExe &Exe) {
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 @@ void TypeDumper::dump(const PDBSymbolTypeTypedef &Symbol) {
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 cb6fcb1add7..e63ebe03055 100644
--- a/llvm/tools/llvm-pdbutil/PrettyTypeDumper.h
+++ b/llvm/tools/llvm-pdbutil/PrettyTypeDumper.h
@@ -26,6 +26,7 @@ public:
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 c9162dd1577..f71ff9ff1af 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> Compilands("compilands",
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::opt<bool> Funcsigs("funcsigs", cl::desc("Display function signatures"),
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 @@ static void dumpDia(StringRef Path) {
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 @@ static void dumpPretty(StringRef Path) {
}
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 @@ static void dumpPretty(StringRef Path) {
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 eaedb1a56f9..cbccac29599 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> Globals;
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;
OpenPOWER on IntegriCloud