[llvm-pdbutil] Dig deeper into the PDB and DBI streams when explaining.

This will show more detail when using `llvm-pdbutil explain` on an
offset in the DBI or PDB streams.  Specifically, it will dig into
individual header fields and substreams to give a more precise
description of what the byte represents.

llvm-svn: 328878
diff --git a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
index f472bfa..c96761f 100644
--- a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
+++ b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
@@ -615,9 +615,8 @@
                                     cl::desc("<input PDB file>"), cl::Required,
                                     cl::sub(ExplainSubcommand));
 
-cl::opt<uint64_t> Offset("offset", cl::desc("The file offset to explain"),
-                         cl::sub(ExplainSubcommand), cl::Required,
-                         cl::OneOrMore);
+cl::list<uint64_t> Offsets("offset", cl::desc("The file offset to explain"),
+                           cl::sub(ExplainSubcommand), cl::OneOrMore);
 } // namespace explain
 }
 
@@ -1091,9 +1090,12 @@
 static void explain() {
   std::unique_ptr<IPDBSession> Session;
   PDBFile &File = loadPDB(opts::explain::InputFilename.front(), Session);
-  auto O = llvm::make_unique<ExplainOutputStyle>(File, opts::explain::Offset);
 
-  ExitOnErr(O->dump());
+  for (uint64_t Off : opts::explain::Offsets) {
+    auto O = llvm::make_unique<ExplainOutputStyle>(File, Off);
+
+    ExitOnErr(O->dump());
+  }
 }
 
 static bool parseRange(StringRef Str,