[llvm] r305495 - [llvm-pdbutil] rewrite the "raw" output style.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 15 12:34:43 PDT 2017


Author: zturner
Date: Thu Jun 15 14:34:41 2017
New Revision: 305495

URL: http://llvm.org/viewvc/llvm-project?rev=305495&view=rev
Log:
[llvm-pdbutil] rewrite the "raw" output style.

After some internal discussions, we agreed that the raw output style had
outlived its usefulness. It was originally created before we had even
thought of dumping to YAML, and it was intended to give us some insight
into the internals of a PDB file. Now we have YAML mode which does
almost exactly this but is more powerful in that it can round-trip back
to a PDB, which the raw mode could not do. So the raw mode had become
purely a maintenance burden.

One option was to just delete it. However, its original goal was to be
as readable as possible while staying close to the "metal" - i.e.
presenting the output in a way that maps directly to the underlying file
format. We don't actually need that last requirement anymore since it's
covered by the yaml mode, so we could repurpose "raw" mode to actually
just be as readable as possible.

This patch implements about 80% of the functionality previously in raw
mode, but in a completely different style that is more akin to what
cvdump outputs. Records are very compressed, often times appearing on
just one line. One nice thing about this is that it makes full record
matching easier, because you can grep for indices, names, and leaf types
on a single line often.

See the tests for some examples of what the new output looks like.

Note that this patch actually regresses the functionality of raw mode in
a few areas, but only because the patch was already unreasonably large
and going 100% would have been even worse. Specifically, this patch is
missing:

The ability to dump module debug subsections (checksums, lines, etc)
The ability to dump section headers
Aside from that everything is here. While goign through the tests fixing
them all up, I found many duplicate tests. They've been deleted. In
subsequent patches I will go through and re-add the missing
functionality.

Differential Revision: https://reviews.llvm.org/D34191

Added:
    llvm/trunk/tools/llvm-pdbutil/FormatUtil.cpp
    llvm/trunk/tools/llvm-pdbutil/FormatUtil.h
    llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp
    llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h
    llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.cpp
    llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.h
    llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.cpp
    llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.h
Removed:
    llvm/trunk/test/DebugInfo/PDB/pdb-yaml-types.test
    llvm/trunk/test/tools/llvm-pdbdump/raw-stream-data.test
    llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.cpp
    llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.h
Modified:
    llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h
    llvm/trunk/include/llvm/DebugInfo/CodeView/Formatters.h
    llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h
    llvm/trunk/include/llvm/DebugInfo/CodeView/TypeIndex.h
    llvm/trunk/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h
    llvm/trunk/include/llvm/DebugInfo/PDB/Native/PublicsStream.h
    llvm/trunk/include/llvm/DebugInfo/PDB/Native/RawConstants.h
    llvm/trunk/include/llvm/DebugInfo/PDB/Native/SymbolStream.h
    llvm/trunk/include/llvm/Support/BinaryStreamArray.h
    llvm/trunk/include/llvm/Support/FormatProviders.h
    llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp
    llvm/trunk/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp
    llvm/trunk/lib/DebugInfo/CodeView/TypeDatabase.cpp
    llvm/trunk/lib/DebugInfo/CodeView/TypeIndex.cpp
    llvm/trunk/lib/DebugInfo/PDB/Native/PublicsStream.cpp
    llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
    llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-mergeids.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-mergetypes.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-blocks.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-stream.test
    llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test
    llvm/trunk/tools/llvm-pdbutil/CMakeLists.txt
    llvm/trunk/tools/llvm-pdbutil/LinePrinter.cpp
    llvm/trunk/tools/llvm-pdbutil/LinePrinter.h
    llvm/trunk/tools/llvm-pdbutil/YAMLOutputStyle.cpp
    llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp
    llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.h

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=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h Thu Jun 15 14:34:41 2017
@@ -418,6 +418,8 @@ CV_DEFINE_ENUM_CLASS_FLAGS_OPERATORS(Pro
 
 /// Corresponds to COMPILESYM2::Flags bitfield.
 enum class CompileSym2Flags : uint32_t {
+  None = 0,
+  SourceLanguageMask = 0xFF,
   EC = 1 << 8,
   NoDbgInfo = 1 << 9,
   LTCG = 1 << 10,
@@ -432,6 +434,8 @@ CV_DEFINE_ENUM_CLASS_FLAGS_OPERATORS(Com
 
 /// Corresponds to COMPILESYM3::Flags bitfield.
 enum class CompileSym3Flags : uint32_t {
+  None = 0,
+  SourceLanguageMask = 0xFF,
   EC = 1 << 8,
   NoDbgInfo = 1 << 9,
   LTCG = 1 << 10,
@@ -448,6 +452,7 @@ enum class CompileSym3Flags : uint32_t {
 CV_DEFINE_ENUM_CLASS_FLAGS_OPERATORS(CompileSym3Flags)
 
 enum class ExportFlags : uint16_t {
+  None = 0,
   IsConstant = 1 << 0,
   IsData = 1 << 1,
   IsPrivate = 1 << 2,

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/Formatters.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/Formatters.h?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/Formatters.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/Formatters.h Thu Jun 15 14:34:41 2017
@@ -12,7 +12,10 @@
 
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/DebugInfo/CodeView/TypeIndex.h"
 #include "llvm/Support/FormatAdapters.h"
+#include "llvm/Support/FormatProviders.h"
+#include "llvm/Support/FormatVariadic.h"
 
 namespace llvm {
 namespace codeview {
@@ -35,6 +38,20 @@ inline detail::GuidAdapter fmt_guid(Arra
   return detail::GuidAdapter(Item);
 }
 }
+
+template <> struct format_provider<codeview::TypeIndex> {
+public:
+  static void format(const codeview::TypeIndex &V, llvm::raw_ostream &Stream,
+                     StringRef Style) {
+    if (V.isNoneType())
+      Stream << "<no type>";
+    else {
+      Stream << formatv("{0:X+4}", V.getIndex());
+      if (V.isSimple())
+        Stream << " (" << codeview::TypeIndex::simpleTypeName(V) << ")";
+    }
+  }
+};
 }
 
 #endif

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h Thu Jun 15 14:34:41 2017
@@ -363,7 +363,7 @@ public:
       : SymbolRecord(SymbolRecordKind::PublicSym32),
         RecordOffset(RecordOffset) {}
 
-  uint32_t Index;
+  TypeIndex Index;
   uint32_t Offset;
   uint16_t Segment;
   StringRef Name;
@@ -379,7 +379,7 @@ public:
       : SymbolRecord(SymbolRecordKind::RegisterSym),
         RecordOffset(RecordOffset) {}
 
-  uint32_t Index;
+  TypeIndex Index;
   RegisterId Register;
   StringRef Name;
 
@@ -679,7 +679,7 @@ public:
       : SymbolRecord(SymbolRecordKind::FileStaticSym),
         RecordOffset(RecordOffset) {}
 
-  uint32_t Index;
+  TypeIndex Index;
   uint32_t ModFilenameOffset;
   LocalSymFlags Flags;
   StringRef Name;
@@ -814,7 +814,7 @@ public:
 
   uint32_t CodeOffset;
   uint16_t Register;
-  uint8_t CookieKind;
+  FrameCookieKind CookieKind;
   uint8_t Flags;
 
   uint32_t RecordOffset;
@@ -871,7 +871,7 @@ public:
 
   uint32_t Offset;
   TypeIndex Type;
-  uint16_t Register;
+  RegisterId Register;
   StringRef Name;
 
   uint32_t RecordOffset;

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/TypeIndex.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/TypeIndex.h?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeIndex.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeIndex.h Thu Jun 15 14:34:41 2017
@@ -248,6 +248,8 @@ public:
     return A.toArrayIndex() - B.toArrayIndex();
   }
 
+  static StringRef simpleTypeName(TypeIndex TI);
+
 private:
   support::ulittle32_t Index;
 };

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h Thu Jun 15 14:34:41 2017
@@ -40,6 +40,10 @@ public:
   iterator_range<codeview::CVSymbolArray::Iterator>
   symbols(bool *HadError) const;
 
+  const codeview::CVSymbolArray &getSymbolArray() const {
+    return SymbolsSubstream;
+  }
+
   llvm::iterator_range<DebugSubsectionIterator> subsections() const;
 
   bool hasDebugSubsections() const;

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Native/PublicsStream.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Native/PublicsStream.h?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Native/PublicsStream.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/PublicsStream.h Thu Jun 15 14:34:41 2017
@@ -35,6 +35,7 @@ public:
   uint32_t getSymHash() const;
   uint32_t getAddrMap() const;
   uint32_t getNumBuckets() const { return NumBuckets; }
+  Expected<const codeview::CVSymbolArray &> getSymbolArray() const;
   iterator_range<codeview::CVSymbolArray::Iterator>
   getSymbols(bool *HadError) const;
   FixedStreamArray<support::ulittle32_t> getHashBuckets() const {

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Native/RawConstants.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Native/RawConstants.h?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Native/RawConstants.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/RawConstants.h Thu Jun 15 14:34:41 2017
@@ -98,15 +98,19 @@ enum class DbgHeaderType : uint16_t {
 };
 
 enum class OMFSegDescFlags : uint16_t {
+  None = 0,
   Read = 1 << 0,              // Segment is readable.
   Write = 1 << 1,             // Segment is writable.
   Execute = 1 << 2,           // Segment is executable.
   AddressIs32Bit = 1 << 3,    // Descriptor describes a 32-bit linear address.
   IsSelector = 1 << 8,        // Frame represents a selector.
   IsAbsoluteAddress = 1 << 9, // Frame represents an absolute address.
-  IsGroup = 1 << 10           // If set, descriptor represents a group.
+  IsGroup = 1 << 10,          // If set, descriptor represents a group.
+  LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ IsGroup)
 };
 
+LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
+
 } // end namespace pdb
 } // end namespace llvm
 

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/Native/SymbolStream.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/Native/SymbolStream.h?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Native/SymbolStream.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/SymbolStream.h Thu Jun 15 14:34:41 2017
@@ -27,6 +27,10 @@ public:
   ~SymbolStream();
   Error reload();
 
+  const codeview::CVSymbolArray &getSymbolArray() const {
+    return SymbolRecords;
+  }
+
   iterator_range<codeview::CVSymbolArray::Iterator>
   getSymbols(bool *HadError) const;
 

Modified: llvm/trunk/include/llvm/Support/BinaryStreamArray.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/BinaryStreamArray.h?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/BinaryStreamArray.h (original)
+++ llvm/trunk/include/llvm/Support/BinaryStreamArray.h Thu Jun 15 14:34:41 2017
@@ -290,6 +290,12 @@ public:
     return FixedStreamArrayIterator<T>(*this, size());
   }
 
+  const T &front() const { return *begin(); }
+  const T &back() const {
+    FixedStreamArrayIterator<T> I = end();
+    return *(--I);
+  }
+
   BinaryStreamRef getUnderlyingStream() const { return Stream; }
 
 private:

Modified: llvm/trunk/include/llvm/Support/FormatProviders.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/FormatProviders.h?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/FormatProviders.h (original)
+++ llvm/trunk/include/llvm/Support/FormatProviders.h Thu Jun 15 14:34:41 2017
@@ -19,6 +19,7 @@
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/ADT/Twine.h"
+#include "llvm/Support/Endian.h"
 #include "llvm/Support/FormatVariadicDetails.h"
 #include "llvm/Support/NativeFormatting.h"
 
@@ -150,6 +151,19 @@ public:
   }
 };
 
+template <typename T, llvm::support::endianness E, int alignment>
+struct format_provider<
+    support::detail::packed_endian_specific_integral<T, E, alignment>> {
+  using Type =
+      support::detail::packed_endian_specific_integral<T, E, alignment>;
+
+public:
+  static void format(const Type &V, llvm::raw_ostream &Stream,
+                     StringRef Style) {
+    format_provider<T>::format(static_cast<T>(V), Stream, Style);
+  }
+};
+
 /// Implementation of format_provider<T> for integral pointer types.
 ///
 /// The options string of a pointer type has the grammar:

Modified: llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp Thu Jun 15 14:34:41 2017
@@ -212,7 +212,7 @@ Error CVSymbolDumperImpl::visitKnownReco
 Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR,
                                            FileStaticSym &FileStatic) {
   DictScope S(W, "FileStatic");
-  W.printNumber("Index", FileStatic.Index);
+  printTypeIndex("Index", FileStatic.Index);
   W.printNumber("ModFilenameOffset", FileStatic.ModFilenameOffset);
   W.printFlags("Flags", uint16_t(FileStatic.Flags), getLocalFlagNames());
   W.printString("Name", FileStatic.Name);
@@ -516,7 +516,7 @@ Error CVSymbolDumperImpl::visitKnownReco
 Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR,
                                            RegisterSym &Register) {
   DictScope S(W, "RegisterSym");
-  W.printNumber("Type", Register.Index);
+  printTypeIndex("Type", Register.Index);
   W.printEnum("Seg", uint16_t(Register.Register), getRegisterNames());
   W.printString("Name", Register.Name);
   return Error::success();
@@ -524,7 +524,7 @@ Error CVSymbolDumperImpl::visitKnownReco
 
 Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR, PublicSym32 &Public) {
   DictScope S(W, "PublicSym");
-  W.printNumber("Type", Public.Index);
+  printTypeIndex("Type", Public.Index);
   W.printNumber("Seg", Public.Segment);
   W.printNumber("Off", Public.Offset);
   W.printString("Name", Public.Name);
@@ -631,7 +631,7 @@ Error CVSymbolDumperImpl::visitKnownReco
 
   W.printHex("Offset", RegRel.Offset);
   printTypeIndex("Type", RegRel.Type);
-  W.printHex("Register", RegRel.Register);
+  W.printEnum("Register", uint16_t(RegRel.Register), getRegisterNames());
   W.printString("VarName", RegRel.Name);
   return Error::success();
 }

Modified: llvm/trunk/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp Thu Jun 15 14:34:41 2017
@@ -307,7 +307,7 @@ Error SymbolRecordMapping::visitKnownRec
 
   error(IO.mapInteger(FrameCookie.CodeOffset));
   error(IO.mapInteger(FrameCookie.Register));
-  error(IO.mapInteger(FrameCookie.CookieKind));
+  error(IO.mapEnum(FrameCookie.CookieKind));
   error(IO.mapInteger(FrameCookie.Flags));
 
   return Error::success();
@@ -439,7 +439,7 @@ Error SymbolRecordMapping::visitKnownRec
 
   error(IO.mapInteger(RegRel.Offset));
   error(IO.mapInteger(RegRel.Type));
-  error(IO.mapInteger(RegRel.Register));
+  error(IO.mapEnum(RegRel.Register));
   error(IO.mapStringZ(RegRel.Name));
 
   return Error::success();

Modified: llvm/trunk/lib/DebugInfo/CodeView/TypeDatabase.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeDatabase.cpp?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/TypeDatabase.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/TypeDatabase.cpp Thu Jun 15 14:34:41 2017
@@ -12,59 +12,6 @@
 using namespace llvm;
 using namespace llvm::codeview;
 
-namespace {
-struct SimpleTypeEntry {
-  StringRef Name;
-  SimpleTypeKind Kind;
-};
-}
-
-/// The names here all end in "*". If the simple type is a pointer type, we
-/// return the whole name. Otherwise we lop off the last character in our
-/// StringRef.
-static const SimpleTypeEntry SimpleTypeNames[] = {
-    {"void*", SimpleTypeKind::Void},
-    {"<not translated>*", SimpleTypeKind::NotTranslated},
-    {"HRESULT*", SimpleTypeKind::HResult},
-    {"signed char*", SimpleTypeKind::SignedCharacter},
-    {"unsigned char*", SimpleTypeKind::UnsignedCharacter},
-    {"char*", SimpleTypeKind::NarrowCharacter},
-    {"wchar_t*", SimpleTypeKind::WideCharacter},
-    {"char16_t*", SimpleTypeKind::Character16},
-    {"char32_t*", SimpleTypeKind::Character32},
-    {"__int8*", SimpleTypeKind::SByte},
-    {"unsigned __int8*", SimpleTypeKind::Byte},
-    {"short*", SimpleTypeKind::Int16Short},
-    {"unsigned short*", SimpleTypeKind::UInt16Short},
-    {"__int16*", SimpleTypeKind::Int16},
-    {"unsigned __int16*", SimpleTypeKind::UInt16},
-    {"long*", SimpleTypeKind::Int32Long},
-    {"unsigned long*", SimpleTypeKind::UInt32Long},
-    {"int*", SimpleTypeKind::Int32},
-    {"unsigned*", SimpleTypeKind::UInt32},
-    {"__int64*", SimpleTypeKind::Int64Quad},
-    {"unsigned __int64*", SimpleTypeKind::UInt64Quad},
-    {"__int64*", SimpleTypeKind::Int64},
-    {"unsigned __int64*", SimpleTypeKind::UInt64},
-    {"__int128*", SimpleTypeKind::Int128},
-    {"unsigned __int128*", SimpleTypeKind::UInt128},
-    {"__half*", SimpleTypeKind::Float16},
-    {"float*", SimpleTypeKind::Float32},
-    {"float*", SimpleTypeKind::Float32PartialPrecision},
-    {"__float48*", SimpleTypeKind::Float48},
-    {"double*", SimpleTypeKind::Float64},
-    {"long double*", SimpleTypeKind::Float80},
-    {"__float128*", SimpleTypeKind::Float128},
-    {"_Complex float*", SimpleTypeKind::Complex32},
-    {"_Complex double*", SimpleTypeKind::Complex64},
-    {"_Complex long double*", SimpleTypeKind::Complex80},
-    {"_Complex __float128*", SimpleTypeKind::Complex128},
-    {"bool*", SimpleTypeKind::Boolean8},
-    {"__bool16*", SimpleTypeKind::Boolean16},
-    {"__bool32*", SimpleTypeKind::Boolean32},
-    {"__bool64*", SimpleTypeKind::Boolean64},
-};
-
 TypeDatabase::TypeDatabase(uint32_t Capacity) : TypeNameStorage(Allocator) {
   CVUDTNames.resize(Capacity);
   TypeRecords.resize(Capacity);
@@ -103,22 +50,8 @@ StringRef TypeDatabase::saveTypeName(Str
 }
 
 StringRef TypeDatabase::getTypeName(TypeIndex Index) const {
-  if (Index.isNoneType())
-    return "<no type>";
-
-  if (Index.isSimple()) {
-    // This is a simple type.
-    for (const auto &SimpleTypeName : SimpleTypeNames) {
-      if (SimpleTypeName.Kind == Index.getSimpleKind()) {
-        if (Index.getSimpleMode() == SimpleTypeMode::Direct)
-          return SimpleTypeName.Name.drop_back(1);
-        // Otherwise, this is a pointer type. We gloss over the distinction
-        // between near, far, 64, 32, etc, and just give a pointer type.
-        return SimpleTypeName.Name;
-      }
-    }
-    return "<unknown simple type>";
-  }
+  if (Index.isNoneType() || Index.isSimple())
+    return TypeIndex::simpleTypeName(Index);
 
   if (contains(Index))
     return CVUDTNames[Index.toArrayIndex()];

Modified: llvm/trunk/lib/DebugInfo/CodeView/TypeIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/TypeIndex.cpp?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/TypeIndex.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/TypeIndex.cpp Thu Jun 15 14:34:41 2017
@@ -15,11 +15,88 @@
 using namespace llvm;
 using namespace llvm::codeview;
 
+namespace {
+struct SimpleTypeEntry {
+  StringRef Name;
+  SimpleTypeKind Kind;
+};
+
+/// The names here all end in "*". If the simple type is a pointer type, we
+/// return the whole name. Otherwise we lop off the last character in our
+/// StringRef.
+static const SimpleTypeEntry SimpleTypeNames[] = {
+    {"void*", SimpleTypeKind::Void},
+    {"<not translated>*", SimpleTypeKind::NotTranslated},
+    {"HRESULT*", SimpleTypeKind::HResult},
+    {"signed char*", SimpleTypeKind::SignedCharacter},
+    {"unsigned char*", SimpleTypeKind::UnsignedCharacter},
+    {"char*", SimpleTypeKind::NarrowCharacter},
+    {"wchar_t*", SimpleTypeKind::WideCharacter},
+    {"char16_t*", SimpleTypeKind::Character16},
+    {"char32_t*", SimpleTypeKind::Character32},
+    {"__int8*", SimpleTypeKind::SByte},
+    {"unsigned __int8*", SimpleTypeKind::Byte},
+    {"short*", SimpleTypeKind::Int16Short},
+    {"unsigned short*", SimpleTypeKind::UInt16Short},
+    {"__int16*", SimpleTypeKind::Int16},
+    {"unsigned __int16*", SimpleTypeKind::UInt16},
+    {"long*", SimpleTypeKind::Int32Long},
+    {"unsigned long*", SimpleTypeKind::UInt32Long},
+    {"int*", SimpleTypeKind::Int32},
+    {"unsigned*", SimpleTypeKind::UInt32},
+    {"__int64*", SimpleTypeKind::Int64Quad},
+    {"unsigned __int64*", SimpleTypeKind::UInt64Quad},
+    {"__int64*", SimpleTypeKind::Int64},
+    {"unsigned __int64*", SimpleTypeKind::UInt64},
+    {"__int128*", SimpleTypeKind::Int128},
+    {"unsigned __int128*", SimpleTypeKind::UInt128},
+    {"__half*", SimpleTypeKind::Float16},
+    {"float*", SimpleTypeKind::Float32},
+    {"float*", SimpleTypeKind::Float32PartialPrecision},
+    {"__float48*", SimpleTypeKind::Float48},
+    {"double*", SimpleTypeKind::Float64},
+    {"long double*", SimpleTypeKind::Float80},
+    {"__float128*", SimpleTypeKind::Float128},
+    {"_Complex float*", SimpleTypeKind::Complex32},
+    {"_Complex double*", SimpleTypeKind::Complex64},
+    {"_Complex long double*", SimpleTypeKind::Complex80},
+    {"_Complex __float128*", SimpleTypeKind::Complex128},
+    {"bool*", SimpleTypeKind::Boolean8},
+    {"__bool16*", SimpleTypeKind::Boolean16},
+    {"__bool32*", SimpleTypeKind::Boolean32},
+    {"__bool64*", SimpleTypeKind::Boolean64},
+};
+} // namespace
+
+StringRef TypeIndex::simpleTypeName(TypeIndex TI) {
+  assert(TI.isNoneType() || TI.isSimple());
+
+  if (TI.isNoneType())
+    return "<no type>";
+
+  // This is a simple type.
+  for (const auto &SimpleTypeName : SimpleTypeNames) {
+    if (SimpleTypeName.Kind == TI.getSimpleKind()) {
+      if (TI.getSimpleMode() == SimpleTypeMode::Direct)
+        return SimpleTypeName.Name.drop_back(1);
+      // Otherwise, this is a pointer type. We gloss over the distinction
+      // between near, far, 64, 32, etc, and just give a pointer type.
+      return SimpleTypeName.Name;
+    }
+  }
+  return "<unknown simple type>";
+}
+
 void llvm::codeview::printTypeIndex(ScopedPrinter &Printer, StringRef FieldName,
                                     TypeIndex TI, TypeCollection &Types) {
   StringRef TypeName;
-  if (!TI.isNoneType())
-    TypeName = Types.getTypeName(TI);
+  if (!TI.isNoneType()) {
+    if (TI.isSimple())
+      TypeName = TypeIndex::simpleTypeName(TI);
+    else
+      TypeName = Types.getTypeName(TI);
+  }
+
   if (!TypeName.empty())
     Printer.printHex(FieldName, TypeName, TI.getIndex());
   else

Modified: llvm/trunk/lib/DebugInfo/PDB/Native/PublicsStream.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/Native/PublicsStream.cpp?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/Native/PublicsStream.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/Native/PublicsStream.cpp Thu Jun 15 14:34:41 2017
@@ -130,4 +130,13 @@ PublicsStream::getSymbols(bool *HadError
   return SS.getSymbols(HadError);
 }
 
+Expected<const codeview::CVSymbolArray &>
+PublicsStream::getSymbolArray() const {
+  auto SymbolS = Pdb.getPDBSymbolStream();
+  if (!SymbolS)
+    return SymbolS.takeError();
+
+  return SymbolS->getSymbolArray();
+}
+
 Error PublicsStream::commit() { return Error::success(); }

Modified: llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp (original)
+++ llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp Thu Jun 15 14:34:41 2017
@@ -35,6 +35,7 @@ LLVM_YAML_DECLARE_SCALAR_TRAITS(APSInt,
 LLVM_YAML_DECLARE_SCALAR_TRAITS(TypeIndex, false)
 
 LLVM_YAML_DECLARE_ENUM_TRAITS(SymbolKind)
+LLVM_YAML_DECLARE_ENUM_TRAITS(FrameCookieKind)
 
 LLVM_YAML_DECLARE_BITSET_TRAITS(CompileSym2Flags)
 LLVM_YAML_DECLARE_BITSET_TRAITS(CompileSym3Flags)
@@ -149,6 +150,15 @@ void ScalarEnumerationTraits<ThunkOrdina
   }
 }
 
+void ScalarEnumerationTraits<FrameCookieKind>::enumeration(
+    IO &io, FrameCookieKind &FC) {
+  auto ThunkNames = getFrameCookieKindNames();
+  for (const auto &E : ThunkNames) {
+    io.enumCase(FC, E.Name.str().c_str(),
+                static_cast<FrameCookieKind>(E.Value));
+  }
+}
+
 namespace llvm {
 namespace CodeViewYAML {
 namespace detail {

Removed: llvm/trunk/test/DebugInfo/PDB/pdb-yaml-types.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdb-yaml-types.test?rev=305494&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdb-yaml-types.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdb-yaml-types.test (removed)
@@ -1,74 +0,0 @@
-RUN: llvm-pdbutil pdb2yaml -tpi-stream %p/Inputs/big-read.pdb > %t.yaml
-RUN: FileCheck -check-prefix=YAML %s < %t.yaml
-RUN: llvm-pdbutil yaml2pdb %t.yaml -pdb %t.pdb
-RUN: llvm-pdbutil raw -tpi-records %t.pdb | FileCheck %s --check-prefix=PDB
-
-Only verify the beginning of the type stream.
-
-YAML:      TpiStream:       
-YAML-NEXT:   Version:         VC80
-YAML-NEXT:   Records:         
-YAML-NEXT:     - Kind:            LF_ARGLIST
-YAML-NEXT:       ArgList:         
-YAML-NEXT:         ArgIndices:      [  ]
-YAML-NEXT:     - Kind:            LF_PROCEDURE
-YAML-NEXT:       Procedure:       
-YAML-NEXT:         ReturnType:      3
-YAML-NEXT:         CallConv:        NearC
-YAML-NEXT:         Options:         [ None ]
-YAML-NEXT:         ParameterCount:  0
-YAML-NEXT:         ArgumentList:    4096
-YAML-NEXT:     - Kind:            LF_PROCEDURE
-YAML-NEXT:       Procedure:       
-YAML-NEXT:         ReturnType:      116
-YAML-NEXT:         CallConv:        NearC
-YAML-NEXT:         Options:         [ None ]
-YAML-NEXT:         ParameterCount:  0
-YAML-NEXT:         ArgumentList:    4096
-
-This test is mostly checking to make sure we include the type index offset
-table, and eventually hash codes. The type index offsets should be similar to
-what are already present in big-read.pdb.
-
-PDB:      Type Info Stream (TPI) {
-PDB-NEXT:   TPI Version: 20040203
-PDB-NEXT:   Record count: 728
-PDB-NEXT:   Records [
-PDB-NEXT:     {
-PDB-NEXT:       ArgList (0x1000) {
-PDB-NEXT:         TypeLeafKind: LF_ARGLIST (0x1201)
-PDB-NEXT:         NumArgs: 0
-PDB-NEXT:         Arguments [
-PDB-NEXT:         ]
-PDB-NEXT:       }
-PDB-NEXT:     }
-PDB-NEXT:     {
-PDB-NEXT:       Procedure (0x1001) {
-PDB-NEXT:         TypeLeafKind: LF_PROCEDURE (0x1008)
-PDB-NEXT:         ReturnType: void (0x3)
-PDB-NEXT:         CallingConvention: NearC (0x0)
-PDB-NEXT:         FunctionOptions [ (0x0)
-PDB-NEXT:         ]
-PDB-NEXT:         NumParameters: 0
-PDB-NEXT:         ArgListType: () (0x1000)
-PDB-NEXT:       }
-PDB-NEXT:     }
-PDB-NEXT:     {
-PDB-NEXT:       Procedure (0x1002) {
-PDB-NEXT:         TypeLeafKind: LF_PROCEDURE (0x1008)
-PDB-NEXT:         ReturnType: int (0x74)
-PDB-NEXT:         CallingConvention: NearC (0x0)
-PDB-NEXT:         FunctionOptions [ (0x0)
-PDB-NEXT:         ]
-PDB-NEXT:         NumParameters: 0
-PDB-NEXT:         ArgListType: () (0x1000)
-PDB-NEXT:       }
-PDB-NEXT:     }
-...
-PDB:          TypeIndexOffsets [
-PDB-NEXT:       Index: 0x1000, Offset: 0
-PDB-NEXT:       Index: 0x106c, Offset: 8,116
-PDB-NEXT:       Index: 0x1118, Offset: 16,372
-PDB-NEXT:       Index: 0x11df, Offset: 24,564
-PDB-NEXT:       Index: 0x128e, Offset: 32,752
-PDB-NEXT:     ]

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test Thu Jun 15 14:34:41 2017
@@ -1,6 +1,5 @@
 ; RUN: llvm-pdbutil yaml2pdb -pdb=%t.pdb %p/Inputs/debug-subsections.yaml
 ; RUN: llvm-pdbutil pdb2yaml -all -no-file-headers %t.pdb | FileCheck --check-prefix=YAML %s
-; RUN: llvm-pdbutil raw -subsections=all %t.pdb | FileCheck --check-prefix=RAW %s
 
 YAML:      Modules:
 YAML-NEXT:   - Module:          Foo.obj
@@ -61,150 +60,7 @@ YAML-NEXT:                EndDelta:
 YAML-NEXT:            Columns:
 YAML-NEXT:      - !InlineeLines
 YAML-NEXT:        HasExtraFiles:   false
-YAML-NEXT:        Sites:           
+YAML-NEXT:        Sites:
 YAML-NEXT:          - FileName:        'f:\dd\externalapis\windows\10\sdk\inc\winerror.h'
 YAML-NEXT:            LineNum:         26950
 YAML-NEXT:            Inlinee:         22767
-
-
-RAW:      DBI Stream {
-RAW:        Modules [
-RAW-NEXT:     {
-RAW-NEXT:       Name: Foo.obj
-RAW:            Subsections [
-RAW-NEXT:         CrossModuleExports [
-RAW-NEXT:           Export {
-RAW-NEXT:             Local: 0x12F4
-RAW-NEXT:             Global: 0x2443
-RAW-NEXT:           }
-RAW-NEXT:           Export {
-RAW-NEXT:             Local: 0x80001083
-RAW-NEXT:             Global: 0x23A3
-RAW-NEXT:           }
-RAW-NEXT:         ]
-RAW-NEXT:       ]
-RAW-NEXT:     }
-RAW-NEXT:     {
-RAW-NEXT:       Name: Bar.obj
-RAW:            Subsections [
-RAW-NEXT:         CrossModuleExports [
-RAW-NEXT:           Export {
-RAW-NEXT:             Local: 0x10A9
-RAW-NEXT:             Global: 0x17D1
-RAW-NEXT:           }
-RAW-NEXT:           Export {
-RAW-NEXT:             Local: 0x10C9
-RAW-NEXT:             Global: 0x1245
-RAW-NEXT:           }
-RAW-NEXT:         ]
-RAW-NEXT:         CrossModuleImports [
-RAW-NEXT:           ModuleImport {
-RAW-NEXT:             Module: Foo.obj
-RAW-NEXT:             Imports: [0x12F4, 0x80001083]
-RAW-NEXT:           }
-RAW-NEXT:         ]
-RAW-NEXT:       ]
-RAW-NEXT:     }
-RAW-NEXT:     {
-RAW-NEXT:       Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-RAW:            Subsections [
-RAW-NEXT:         FileChecksums {
-RAW-NEXT:           Checksum {
-RAW-NEXT:             FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
-RAW-NEXT:             Kind: MD5 (0x1)
-RAW-NEXT:             Checksum (
-RAW-NEXT:               0000: A0A5BD0D 3ECD93FC 29D19DE8 26FBF4BC  |....>...)...&...|
-RAW-NEXT:             )
-RAW-NEXT:           }
-RAW-NEXT:           Checksum {
-RAW-NEXT:             FileName: f:\dd\externalapis\windows\10\sdk\inc\winerror.h
-RAW-NEXT:             Kind: MD5 (0x1)
-RAW-NEXT:             Checksum (
-RAW-NEXT:               0000: 1154D69F 5B265019 6E1FC34F 4134E56B  |.T..[&P.n..OA4.k|
-RAW-NEXT:             )
-RAW-NEXT:           }
-RAW-NEXT:         }
-RAW-NEXT:         Lines {
-RAW-NEXT:           RelocSegment: 1
-RAW-NEXT:           RelocOffset: 100016
-RAW-NEXT:           CodeSize: 10
-RAW-NEXT:           HasColumns: No
-RAW-NEXT:           FileEntry {
-RAW-NEXT:             FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
-RAW-NEXT:             Line {
-RAW-NEXT:               Offset: 0
-RAW-NEXT:               LineNumberStart: 5
-RAW-NEXT:               EndDelta: 0
-RAW-NEXT:               IsStatement: Yes
-RAW-NEXT:             }
-RAW-NEXT:             Line {
-RAW-NEXT:               Offset: 3
-RAW-NEXT:               LineNumberStart: 6
-RAW-NEXT:               EndDelta: 0
-RAW-NEXT:               IsStatement: Yes
-RAW-NEXT:             }
-RAW-NEXT:             Line {
-RAW-NEXT:               Offset: 8
-RAW-NEXT:               LineNumberStart: 7
-RAW-NEXT:               EndDelta: 0
-RAW-NEXT:               IsStatement: Yes
-RAW-NEXT:             }
-RAW-NEXT:           }
-RAW-NEXT:         }
-RAW-NEXT:         InlineeLines {
-RAW-NEXT:           HasExtraFiles: No
-RAW-NEXT:           Lines [
-RAW-NEXT:             Inlinee {
-RAW-NEXT:               FileName: f:\dd\externalapis\windows\10\sdk\inc\winerror.h
-RAW-NEXT:               Function {
-RAW-NEXT:                 Index: 0x58ef (unknown function)
-RAW-NEXT:               }
-RAW-NEXT:               SourceLine: 26950
-RAW-NEXT:             }
-RAW-NEXT:           ]
-RAW-NEXT:         }
-RAW-NEXT:       ]
-RAW-NEXT:     }
-RAW-NEXT:     {
-RAW-NEXT:       Name: ObjFileSubsections
-RAW-NEXT:       Debug Stream Index: 11
-RAW-NEXT:       Object File Name: ObjFileSubsections
-RAW-NEXT:       Num Files: 0
-RAW-NEXT:       Source File Name Idx: 0
-RAW-NEXT:       Pdb File Name Idx: 0
-RAW-NEXT:       Line Info Byte Size: 0
-RAW-NEXT:       C13 Line Info Byte Size: 116
-RAW-NEXT:       Symbol Byte Size: 4
-RAW-NEXT:       Type Server Index: 0
-RAW-NEXT:       Has EC Info: No
-RAW-NEXT:       Subsections [
-RAW-NEXT:         String Table [
-RAW-NEXT:           String1
-RAW-NEXT:           String2
-RAW-NEXT:           String3
-RAW-NEXT:         ]
-RAW-NEXT:         Symbols [
-RAW-NEXT:           {
-RAW-NEXT:             ObjectName {
-RAW-NEXT:               Signature: 0x0
-RAW-NEXT:               ObjectName: ObjFileSubsections
-RAW-NEXT:             }
-RAW-NEXT:           }
-RAW-NEXT:         ]
-RAW-NEXT:         FrameData [
-RAW-NEXT:           Frame {
-RAW-NEXT:             Rva: 6
-RAW-NEXT:             CodeSize: 1
-RAW-NEXT:             LocalSize: 2
-RAW-NEXT:             ParamsSize: 4
-RAW-NEXT:             MaxStackSize: 3
-RAW-NEXT:             FrameFunc: MyFunc
-RAW-NEXT:             PrologSize: 5
-RAW-NEXT:             SavedRegsSize: 7
-RAW-NEXT:             Flags: 0
-RAW-NEXT:           }
-RAW-NEXT:         ]
-RAW-NEXT:       ]
-RAW-NEXT:     }
-RAW-NEXT:   ]
-RAW-NEXT: }

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=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test Thu Jun 15 14:34:41 2017
@@ -1,2901 +1,1093 @@
-; RUN: llvm-pdbutil raw -headers -string-table -tpi-records -tpi-record-bytes -module-syms \
-; RUN:              -sym-record-bytes -globals -publics -module-files \
-; RUN:              -stream-summary -stream-blocks -ipi-records -ipi-record-bytes \
-; RUN:              -section-contribs -section-map -section-headers -subsections=all \
-; RUN:              -tpi-hash -fpo -page-stats %p/Inputs/empty.pdb | FileCheck -check-prefix=EMPTY %s
 ; RUN: llvm-pdbutil raw -all %p/Inputs/empty.pdb | FileCheck -check-prefix=ALL %s
-; RUN: llvm-pdbutil raw -headers -modules -module-files \
+; RUN: llvm-pdbutil raw -summary -modules -files \
 ; RUN:              %p/Inputs/big-read.pdb | FileCheck -check-prefix=BIG %s
-; RUN: not llvm-pdbutil raw -headers %p/Inputs/bad-block-size.pdb 2>&1 | FileCheck -check-prefix=BAD-BLOCK-SIZE %s
+; RUN: not llvm-pdbutil raw -summary %p/Inputs/bad-block-size.pdb 2>&1 | FileCheck -check-prefix=BAD-BLOCK-SIZE %s
+
+ALL:                                Summary
+ALL-NEXT: ============================================================
+ALL-NEXT:   Block Size: 4096
+ALL-NEXT:   Number of blocks: 25
+ALL-NEXT:   Number of streams: 17
+ALL-NEXT:   Signature: 1424295906
+ALL-NEXT:   Age: 1
+ALL-NEXT:   GUID: {0B355641-86A0-A249-896F-9988FAE52FF0}
+ALL-NEXT:   Features: 0x1
+ALL-NEXT:   Has Debug Info: true
+ALL-NEXT:   Has Types: true
+ALL-NEXT:   Has IDs: true
+ALL-NEXT:   Has Globals: true
+ALL-NEXT:   Has Publics: true
+ALL-NEXT:   Is incrementally linked: true
+ALL-NEXT:   Has conflicting types: false
+ALL-NEXT:   Is stripped: false
+ALL:                                  Streams
+ALL-NEXT: ============================================================
+ALL-NEXT: Stream  0: [Old MSF Directory] (40 bytes)
+ALL-NEXT:   Stream  1: [PDB Stream] (118 bytes)
+ALL-NEXT:   Stream  2: [TPI Stream] (5392 bytes)
+ALL-NEXT:   Stream  3: [DBI Stream] (739 bytes)
+ALL-NEXT:   Stream  4: [IPI Stream] (784 bytes)
+ALL-NEXT:   Stream  5: [Named Stream "/LinkInfo"] (0 bytes)
+ALL-NEXT:   Stream  6: [Global Symbol Hash] (556 bytes)
+ALL-NEXT:   Stream  7: [Public Symbol Hash] (604 bytes)
+ALL-NEXT:   Stream  8: [Public Symbol Records] (104 bytes)
+ALL-NEXT:   Stream  9: [Named Stream "/src/headerblock"] (0 bytes)
+ALL-NEXT:   Stream 10: [Section Header Data] (160 bytes)
+ALL-NEXT:   Stream 11: [New FPO Data] (32 bytes)
+ALL-NEXT:   Stream 12: [Module "d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj"] (308 bytes)
+ALL-NEXT:   Stream 13: [Named Stream "/names"] (239 bytes)
+ALL-NEXT:   Stream 14: [Module "* Linker *"] (520 bytes)
+ALL-NEXT:   Stream 15: [TPI Hash] (308 bytes)
+ALL-NEXT:   Stream 16: [IPI Hash] (68 bytes)
+ALL:                                String Table
+ALL-NEXT: ============================================================
+ALL-NEXT:    ID | String
+ALL-NEXT:     1 | 'd:\src\llvm\test\debuginfo\pdb\inputs\predefined c++ attributes (compiler internal)'
+ALL-NEXT:    86 | 'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
+ALL-NEXT:   134 | '$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = '
+ALL:      		                    Modules
+ALL-NEXT: ============================================================
+ALL-NEXT:   Mod 0000 | Name: `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`:
+ALL-NEXT:              Obj: `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`:
+ALL-NEXT:              debug stream: 12, # files: 1, has ec info: false
+ALL-NEXT:              contributing source files:
+ALL-NEXT:              - d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
+ALL-NEXT:   Mod 0001 | Name: `* Linker *`:
+ALL-NEXT:              Obj: ``:
+ALL-NEXT:              debug stream: 14, # files: 0, has ec info: false
+ALL-NEXT:              contributing source files:
+ALL:                           Types (TPI Stream)
+ALL-NEXT: ============================================================
+ALL-NEXT:   Showing 75 records
+ALL-NEXT:   0x1000 | LF_ARGLIST [size = 8]
+ALL-NEXT:   0x1001 | LF_PROCEDURE [size = 16]
+ALL-NEXT:            return type = 0x0074 (int), # args = 0, param list = 0x1000
+ALL-NEXT:            calling conv = cdecl, options = None
+ALL-NEXT:   0x1002 | LF_FIELDLIST [size = 76]
+ALL-NEXT:            - LF_ENUMERATE [apartment = 1]
+ALL-NEXT:            - LF_ENUMERATE [single = 2]
+ALL-NEXT:            - LF_ENUMERATE [free = 3]
+ALL-NEXT:            - LF_ENUMERATE [neutral = 4]
+ALL-NEXT:            - LF_ENUMERATE [both = 5]
+ALL-NEXT:   0x1003 | LF_ENUM [size = 120]
+ALL-NEXT:            name: `__vc_attributes::threadingAttribute::threading_e`
+ALL-NEXT:            unique name: `.?AW4threading_e at threadingAttribute@__vc_attributes@@`
+ALL-NEXT:            field list: 0x1002, underlying type: 0x0074 (int)
+ALL-NEXT:            options: has unique name | is nested
+ALL-NEXT:   0x1004 | LF_STRUCTURE [size = 100]
+ALL-NEXT:            class name: `__vc_attributes::threadingAttribute`
+ALL-NEXT:            unique name: `.?AUthreadingAttribute at __vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: <no type>
+ALL-NEXT:            options: forward ref | has unique name
+ALL-NEXT:   0x1005 | LF_POINTER [size = 12]
+ALL-NEXT:            referent = 0x1004, mode = pointer, opts = const, kind = ptr32
+ALL-NEXT:   0x1006 | LF_ARGLIST [size = 12]
+ALL-NEXT:            0x1003: `__vc_attributes::threadingAttribute::threading_e`
+ALL-NEXT:   0x1007 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 1, # args = 0x1006, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x1004, this type = 0x1005, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x1008 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 0, # args = 0x1000, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x1004, this type = 0x1005, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x1009 | LF_METHODLIST [size = 20]
+ALL-NEXT:            - Method [type = 0x1007, vftable offset = -1, attrs = public]
+ALL-NEXT:            - Method [type = 0x1008, vftable offset = -1, attrs = public]
+ALL-NEXT:   0x100A | LF_FIELDLIST [size = 68]
+ALL-NEXT:            - LF_NESTTYPE [name = `threading_e`, parent = 0x1003]
+ALL-NEXT:            - LF_METHOD [name = `threadingAttribute`, # overloads = 2, overload list = 0x1009]
+ALL-NEXT:            - LF_MEMBER [name = `value`, Type = 0x1003, offset = 0, attrs = public]
+ALL-NEXT:   0x100B | LF_STRUCTURE [size = 100]
+ALL-NEXT:            class name: `__vc_attributes::threadingAttribute`
+ALL-NEXT:            unique name: `.?AUthreadingAttribute at __vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: 0x100A
+ALL-NEXT:            options: has ctor / dtor | contains nested class | has unique name
+ALL-NEXT:   0x100C | LF_FIELDLIST [size = 48]
+ALL-NEXT:            - LF_ENUMERATE [native = 0]
+ALL-NEXT:            - LF_ENUMERATE [com = 1]
+ALL-NEXT:            - LF_ENUMERATE [managed = 2]
+ALL-NEXT:   0x100D | LF_ENUM [size = 120]
+ALL-NEXT:            name: `__vc_attributes::event_receiverAttribute::type_e`
+ALL-NEXT:            unique name: `.?AW4type_e at event_receiverAttribute@__vc_attributes@@`
+ALL-NEXT:            field list: 0x100C, underlying type: 0x0074 (int)
+ALL-NEXT:            options: has unique name | is nested
+ALL-NEXT:   0x100E | LF_STRUCTURE [size = 112]
+ALL-NEXT:            class name: `__vc_attributes::event_receiverAttribute`
+ALL-NEXT:            unique name: `.?AUevent_receiverAttribute at __vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: <no type>
+ALL-NEXT:            options: forward ref | has unique name
+ALL-NEXT:   0x100F | LF_POINTER [size = 12]
+ALL-NEXT:            referent = 0x100E, mode = pointer, opts = const, kind = ptr32
+ALL-NEXT:   0x1010 | LF_ARGLIST [size = 16]
+ALL-NEXT:            0x100D: `__vc_attributes::event_receiverAttribute::type_e`
+ALL-NEXT:            0x0030 (bool): `bool`
+ALL-NEXT:   0x1011 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 2, # args = 0x1010, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x100E, this type = 0x100F, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x1012 | LF_ARGLIST [size = 12]
+ALL-NEXT:            0x100D: `__vc_attributes::event_receiverAttribute::type_e`
+ALL-NEXT:   0x1013 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 1, # args = 0x1012, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x100E, this type = 0x100F, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x1014 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 0, # args = 0x1000, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x100E, this type = 0x100F, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x1015 | LF_METHODLIST [size = 28]
+ALL-NEXT:            - Method [type = 0x1011, vftable offset = -1, attrs = public]
+ALL-NEXT:            - Method [type = 0x1013, vftable offset = -1, attrs = public]
+ALL-NEXT:            - Method [type = 0x1014, vftable offset = -1, attrs = public]
+ALL-NEXT:   0x1016 | LF_FIELDLIST [size = 96]
+ALL-NEXT:            - LF_NESTTYPE [name = `type_e`, parent = 0x100D]
+ALL-NEXT:            - LF_METHOD [name = `event_receiverAttribute`, # overloads = 3, overload list = 0x1015]
+ALL-NEXT:            - LF_MEMBER [name = `type`, Type = 0x100D, offset = 0, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `layout_dependent`, Type = 0x0030 (bool), offset = 4, attrs = public]
+ALL-NEXT:   0x1017 | LF_STRUCTURE [size = 112]
+ALL-NEXT:            class name: `__vc_attributes::event_receiverAttribute`
+ALL-NEXT:            unique name: `.?AUevent_receiverAttribute at __vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: 0x1016
+ALL-NEXT:            options: has ctor / dtor | contains nested class | has unique name
+ALL-NEXT:   0x1018 | LF_FIELDLIST [size = 48]
+ALL-NEXT:            - LF_ENUMERATE [never = 0]
+ALL-NEXT:            - LF_ENUMERATE [allowed = 1]
+ALL-NEXT:            - LF_ENUMERATE [always = 2]
+ALL-NEXT:   0x1019 | LF_ENUM [size = 116]
+ALL-NEXT:            name: `__vc_attributes::aggregatableAttribute::type_e`
+ALL-NEXT:            unique name: `.?AW4type_e at aggregatableAttribute@__vc_attributes@@`
+ALL-NEXT:            field list: 0x1018, underlying type: 0x0074 (int)
+ALL-NEXT:            options: has unique name | is nested
+ALL-NEXT:   0x101A | LF_STRUCTURE [size = 108]
+ALL-NEXT:            class name: `__vc_attributes::aggregatableAttribute`
+ALL-NEXT:            unique name: `.?AUaggregatableAttribute at __vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: <no type>
+ALL-NEXT:            options: forward ref | has unique name
+ALL-NEXT:   0x101B | LF_POINTER [size = 12]
+ALL-NEXT:            referent = 0x101A, mode = pointer, opts = const, kind = ptr32
+ALL-NEXT:   0x101C | LF_ARGLIST [size = 12]
+ALL-NEXT:            0x1019: `__vc_attributes::aggregatableAttribute::type_e`
+ALL-NEXT:   0x101D | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 1, # args = 0x101C, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x101A, this type = 0x101B, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x101E | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 0, # args = 0x1000, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x101A, this type = 0x101B, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x101F | LF_METHODLIST [size = 20]
+ALL-NEXT:            - Method [type = 0x101D, vftable offset = -1, attrs = public]
+ALL-NEXT:            - Method [type = 0x101E, vftable offset = -1, attrs = public]
+ALL-NEXT:   0x1020 | LF_FIELDLIST [size = 68]
+ALL-NEXT:            - LF_NESTTYPE [name = `type_e`, parent = 0x1019]
+ALL-NEXT:            - LF_METHOD [name = `aggregatableAttribute`, # overloads = 2, overload list = 0x101F]
+ALL-NEXT:            - LF_MEMBER [name = `type`, Type = 0x1019, offset = 0, attrs = public]
+ALL-NEXT:   0x1021 | LF_STRUCTURE [size = 108]
+ALL-NEXT:            class name: `__vc_attributes::aggregatableAttribute`
+ALL-NEXT:            unique name: `.?AUaggregatableAttribute at __vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: 0x1020
+ALL-NEXT:            options: has ctor / dtor | contains nested class | has unique name
+ALL-NEXT:   0x1022 | LF_ENUM [size = 116]
+ALL-NEXT:            name: `__vc_attributes::event_sourceAttribute::type_e`
+ALL-NEXT:            unique name: `.?AW4type_e at event_sourceAttribute@__vc_attributes@@`
+ALL-NEXT:            field list: 0x100C, underlying type: 0x0074 (int)
+ALL-NEXT:            options: has unique name | is nested
+ALL-NEXT:   0x1023 | LF_FIELDLIST [size = 28]
+ALL-NEXT:            - LF_ENUMERATE [speed = 0]
+ALL-NEXT:            - LF_ENUMERATE [size = 1]
+ALL-NEXT:   0x1024 | LF_ENUM [size = 124]
+ALL-NEXT:            name: `__vc_attributes::event_sourceAttribute::optimize_e`
+ALL-NEXT:            unique name: `.?AW4optimize_e at event_sourceAttribute@__vc_attributes@@`
+ALL-NEXT:            field list: 0x1023, underlying type: 0x0074 (int)
+ALL-NEXT:            options: has unique name | is nested
+ALL-NEXT:   0x1025 | LF_STRUCTURE [size = 108]
+ALL-NEXT:            class name: `__vc_attributes::event_sourceAttribute`
+ALL-NEXT:            unique name: `.?AUevent_sourceAttribute at __vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: <no type>
+ALL-NEXT:            options: forward ref | has unique name
+ALL-NEXT:   0x1026 | LF_POINTER [size = 12]
+ALL-NEXT:            referent = 0x1025, mode = pointer, opts = const, kind = ptr32
+ALL-NEXT:   0x1027 | LF_ARGLIST [size = 12]
+ALL-NEXT:            0x1022: `__vc_attributes::event_sourceAttribute::type_e`
+ALL-NEXT:   0x1028 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 1, # args = 0x1027, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x1025, this type = 0x1026, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x1029 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 0, # args = 0x1000, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x1025, this type = 0x1026, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x102A | LF_METHODLIST [size = 20]
+ALL-NEXT:            - Method [type = 0x1028, vftable offset = -1, attrs = public]
+ALL-NEXT:            - Method [type = 0x1029, vftable offset = -1, attrs = public]
+ALL-NEXT:   0x102B | LF_FIELDLIST [size = 128]
+ALL-NEXT:            - LF_NESTTYPE [name = `type_e`, parent = 0x1022]
+ALL-NEXT:            - LF_NESTTYPE [name = `optimize_e`, parent = 0x1024]
+ALL-NEXT:            - LF_METHOD [name = `event_sourceAttribute`, # overloads = 2, overload list = 0x102A]
+ALL-NEXT:            - LF_MEMBER [name = `type`, Type = 0x1022, offset = 0, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `optimize`, Type = 0x1024, offset = 4, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `decorate`, Type = 0x0030 (bool), offset = 8, attrs = public]
+ALL-NEXT:   0x102C | LF_STRUCTURE [size = 108]
+ALL-NEXT:            class name: `__vc_attributes::event_sourceAttribute`
+ALL-NEXT:            unique name: `.?AUevent_sourceAttribute at __vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: 0x102B
+ALL-NEXT:            options: has ctor / dtor | contains nested class | has unique name
+ALL-NEXT:   0x102D | LF_FIELDLIST [size = 92]
+ALL-NEXT:            - LF_ENUMERATE [dll = 1]
+ALL-NEXT:            - LF_ENUMERATE [exe = 2]
+ALL-NEXT:            - LF_ENUMERATE [service = 3]
+ALL-NEXT:            - LF_ENUMERATE [unspecified = 4]
+ALL-NEXT:            - LF_ENUMERATE [EXE = 2]
+ALL-NEXT:            - LF_ENUMERATE [SERVICE = 3]
+ALL-NEXT:   0x102E | LF_ENUM [size = 104]
+ALL-NEXT:            name: `__vc_attributes::moduleAttribute::type_e`
+ALL-NEXT:            unique name: `.?AW4type_e at moduleAttribute@__vc_attributes@@`
+ALL-NEXT:            field list: 0x102D, underlying type: 0x0074 (int)
+ALL-NEXT:            options: has unique name | is nested
+ALL-NEXT:   0x102F | LF_STRUCTURE [size = 96]
+ALL-NEXT:            class name: `__vc_attributes::moduleAttribute`
+ALL-NEXT:            unique name: `.?AUmoduleAttribute at __vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: <no type>
+ALL-NEXT:            options: forward ref | has unique name
+ALL-NEXT:   0x1030 | LF_POINTER [size = 12]
+ALL-NEXT:            referent = 0x102F, mode = pointer, opts = const, kind = ptr32
+ALL-NEXT:   0x1031 | LF_MODIFIER [size = 12]
+ALL-NEXT:            referent = 0x0070 (char), modifiers = const
+ALL-NEXT:   0x1032 | LF_POINTER [size = 12]
+ALL-NEXT:            referent = 0x1031, mode = pointer, opts = None, kind = ptr32
+ALL-NEXT:   0x1033 | LF_ARGLIST [size = 68]
+ALL-NEXT:            0x102E: `__vc_attributes::moduleAttribute::type_e`
+ALL-NEXT:            0x1032: `const char*`
+ALL-NEXT:            0x1032: `const char*`
+ALL-NEXT:            0x1032: `const char*`
+ALL-NEXT:            0x0074 (int): `int`
+ALL-NEXT:            0x0030 (bool): `bool`
+ALL-NEXT:            0x1032: `const char*`
+ALL-NEXT:            0x0074 (int): `int`
+ALL-NEXT:            0x1032: `const char*`
+ALL-NEXT:            0x1032: `const char*`
+ALL-NEXT:            0x0074 (int): `int`
+ALL-NEXT:            0x0030 (bool): `bool`
+ALL-NEXT:            0x0030 (bool): `bool`
+ALL-NEXT:            0x1032: `const char*`
+ALL-NEXT:            0x1032: `const char*`
+ALL-NEXT:   0x1034 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 15, # args = 0x1033, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x102F, this type = 0x1030, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x1035 | LF_ARGLIST [size = 12]
+ALL-NEXT:            0x102E: `__vc_attributes::moduleAttribute::type_e`
+ALL-NEXT:   0x1036 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 1, # args = 0x1035, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x102F, this type = 0x1030, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x1037 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 0, # args = 0x1000, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x102F, this type = 0x1030, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x1038 | LF_METHODLIST [size = 28]
+ALL-NEXT:            - Method [type = 0x1034, vftable offset = -1, attrs = public]
+ALL-NEXT:            - Method [type = 0x1036, vftable offset = -1, attrs = public]
+ALL-NEXT:            - Method [type = 0x1037, vftable offset = -1, attrs = public]
+ALL-NEXT:   0x1039 | LF_FIELDLIST [size = 356]
+ALL-NEXT:            - LF_NESTTYPE [name = `type_e`, parent = 0x102E]
+ALL-NEXT:            - LF_METHOD [name = `moduleAttribute`, # overloads = 3, overload list = 0x1038]
+ALL-NEXT:            - LF_MEMBER [name = `type`, Type = 0x102E, offset = 0, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `name`, Type = 0x1032, offset = 4, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `version`, Type = 0x1032, offset = 8, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `uuid`, Type = 0x1032, offset = 12, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `lcid`, Type = 0x0074 (int), offset = 16, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `control`, Type = 0x0030 (bool), offset = 20, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `helpstring`, Type = 0x1032, offset = 24, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `helpstringcontext`, Type = 0x0074 (int), offset = 28, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `helpstringdll`, Type = 0x1032, offset = 32, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `helpfile`, Type = 0x1032, offset = 36, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `helpcontext`, Type = 0x0074 (int), offset = 40, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `hidden`, Type = 0x0030 (bool), offset = 44, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `restricted`, Type = 0x0030 (bool), offset = 45, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `custom`, Type = 0x1032, offset = 48, attrs = public]
+ALL-NEXT:            - LF_MEMBER [name = `resource_name`, Type = 0x1032, offset = 52, attrs = public]
+ALL-NEXT:   0x103A | LF_STRUCTURE [size = 96]
+ALL-NEXT:            class name: `__vc_attributes::moduleAttribute`
+ALL-NEXT:            unique name: `.?AUmoduleAttribute at __vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: 0x1039
+ALL-NEXT:            options: has ctor / dtor | contains nested class | has unique name
+ALL-NEXT:   0x103B | LF_FIELDLIST [size = 756]
+ALL-NEXT:            - LF_ENUMERATE [eAnyUsage = 0]
+ALL-NEXT:            - LF_ENUMERATE [eCoClassUsage = 1]
+ALL-NEXT:            - LF_ENUMERATE [eCOMInterfaceUsage = 2]
+ALL-NEXT:            - LF_ENUMERATE [eInterfaceUsage = 6]
+ALL-NEXT:            - LF_ENUMERATE [eMemberUsage = 8]
+ALL-NEXT:            - LF_ENUMERATE [eMethodUsage = 16]
+ALL-NEXT:            - LF_ENUMERATE [eInterfaceMethodUsage = 32]
+ALL-NEXT:            - LF_ENUMERATE [eInterfaceMemberUsage = 64]
+ALL-NEXT:            - LF_ENUMERATE [eCoClassMemberUsage = 128]
+ALL-NEXT:            - LF_ENUMERATE [eCoClassMethodUsage = 256]
+ALL-NEXT:            - LF_ENUMERATE [eGlobalMethodUsage = 768]
+ALL-NEXT:            - LF_ENUMERATE [eGlobalDataUsage = 1024]
+ALL-NEXT:            - LF_ENUMERATE [eClassUsage = 2048]
+ALL-NEXT:            - LF_ENUMERATE [eInterfaceParameterUsage = 4096]
+ALL-NEXT:            - LF_ENUMERATE [eMethodParameterUsage = 12288]
+ALL-NEXT:            - LF_ENUMERATE [eIDLModuleUsage = 16384]
+ALL-NEXT:            - LF_ENUMERATE [eAnonymousUsage = 32768]
+ALL-NEXT:            - LF_ENUMERATE [eTypedefUsage = 65536]
+ALL-NEXT:            - LF_ENUMERATE [eUnionUsage = 131072]
+ALL-NEXT:            - LF_ENUMERATE [eEnumUsage = 262144]
+ALL-NEXT:            - LF_ENUMERATE [eDefineTagUsage = 524288]
+ALL-NEXT:            - LF_ENUMERATE [eStructUsage = 1048576]
+ALL-NEXT:            - LF_ENUMERATE [eLocalUsage = 2097152]
+ALL-NEXT:            - LF_ENUMERATE [ePropertyUsage = 4194304]
+ALL-NEXT:            - LF_ENUMERATE [eEventUsage = 8388608]
+ALL-NEXT:            - LF_ENUMERATE [eTemplateUsage = 16777216]
+ALL-NEXT:            - LF_ENUMERATE [eModuleUsage = 16777216]
+ALL-NEXT:            - LF_ENUMERATE [eIllegalUsage = 33554432]
+ALL-NEXT:            - LF_ENUMERATE [eAsynchronousUsage = 67108864]
+ALL-NEXT:            - LF_ENUMERATE [eAnyIDLUsage = 4161535]
+ALL-NEXT:   0x103C | LF_ENUM [size = 140]
+ALL-NEXT:            name: `__vc_attributes::helper_attributes::usageAttribute::usage_e`
+ALL-NEXT:            unique name: `.?AW4usage_e at usageAttribute@helper_attributes at __vc_attributes@@`
+ALL-NEXT:            field list: 0x103B, underlying type: 0x0074 (int)
+ALL-NEXT:            options: has unique name | is nested
+ALL-NEXT:   0x103D | LF_STRUCTURE [size = 128]
+ALL-NEXT:            class name: `__vc_attributes::helper_attributes::usageAttribute`
+ALL-NEXT:            unique name: `.?AUusageAttribute at helper_attributes@__vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: <no type>
+ALL-NEXT:            options: forward ref | has unique name
+ALL-NEXT:   0x103E | LF_POINTER [size = 12]
+ALL-NEXT:            referent = 0x103D, mode = pointer, opts = const, kind = ptr32
+ALL-NEXT:   0x103F | LF_ARGLIST [size = 12]
+ALL-NEXT:            0x0075 (unsigned): `unsigned`
+ALL-NEXT:   0x1040 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 1, # args = 0x103F, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x103D, this type = 0x103E, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x1041 | LF_FIELDLIST [size = 60]
+ALL-NEXT:            - LF_NESTTYPE [name = `usage_e`, parent = 0x103C]
+ALL-NEXT:            - LF_ONEMETHOD [name = `usageAttribute`]
+ALL-NEXT:              type = 0x1040, vftable offset = -1, attrs = public
+ALL-NEXT:            - LF_MEMBER [name = `value`, Type = 0x0075 (unsigned), offset = 0, attrs = public]
+ALL-NEXT:   0x1042 | LF_STRUCTURE [size = 128]
+ALL-NEXT:            class name: `__vc_attributes::helper_attributes::usageAttribute`
+ALL-NEXT:            unique name: `.?AUusageAttribute at helper_attributes@__vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: 0x1041
+ALL-NEXT:            options: has ctor / dtor | contains nested class | has unique name
+ALL-NEXT:   0x1043 | LF_FIELDLIST [size = 68]
+ALL-NEXT:            - LF_ENUMERATE [eBoolean = 0]
+ALL-NEXT:            - LF_ENUMERATE [eInteger = 1]
+ALL-NEXT:            - LF_ENUMERATE [eFloat = 2]
+ALL-NEXT:            - LF_ENUMERATE [eDouble = 3]
+ALL-NEXT:   0x1044 | LF_ENUM [size = 148]
+ALL-NEXT:            name: `__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e`
+ALL-NEXT:            unique name: `.?AW4type_e at v1_alttypeAttribute@helper_attributes at __vc_attributes@@`
+ALL-NEXT:            field list: 0x1043, underlying type: 0x0074 (int)
+ALL-NEXT:            options: has unique name | is nested
+ALL-NEXT:   0x1045 | LF_STRUCTURE [size = 140]
+ALL-NEXT:            class name: `__vc_attributes::helper_attributes::v1_alttypeAttribute`
+ALL-NEXT:            unique name: `.?AUv1_alttypeAttribute at helper_attributes@__vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: <no type>
+ALL-NEXT:            options: forward ref | has unique name
+ALL-NEXT:   0x1046 | LF_POINTER [size = 12]
+ALL-NEXT:            referent = 0x1045, mode = pointer, opts = const, kind = ptr32
+ALL-NEXT:   0x1047 | LF_ARGLIST [size = 12]
+ALL-NEXT:            0x1044: `__vc_attributes::helper_attributes::v1_alttypeAttribute::type_e`
+ALL-NEXT:   0x1048 | LF_MFUNCTION [size = 28]
+ALL-NEXT:            return type = 1, # args = 0x1047, param list = 0x0003 (void)
+ALL-NEXT:            class type = 0x1045, this type = 0x1046, this adjust = 0
+ALL-NEXT:            calling conv = thiscall, options = constructor
+ALL-NEXT:   0x1049 | LF_FIELDLIST [size = 64]
+ALL-NEXT:            - LF_NESTTYPE [name = `type_e`, parent = 0x1044]
+ALL-NEXT:            - LF_ONEMETHOD [name = `v1_alttypeAttribute`]
+ALL-NEXT:              type = 0x1048, vftable offset = -1, attrs = public
+ALL-NEXT:            - LF_MEMBER [name = `type`, Type = 0x1044, offset = 0, attrs = public]
+ALL-NEXT:   0x104A | LF_STRUCTURE [size = 140]
+ALL-NEXT:            class name: `__vc_attributes::helper_attributes::v1_alttypeAttribute`
+ALL-NEXT:            unique name: `.?AUv1_alttypeAttribute at helper_attributes@__vc_attributes@@`
+ALL-NEXT:            vtable: <no type>, base list: <no type>, field list: 0x1049
+ALL-NEXT:            options: has ctor / dtor | contains nested class | has unique name
+ALL:                           Types (IPI Stream)
+ALL-NEXT: ============================================================
+ALL-NEXT:   Showing 15 records
+ALL-NEXT:   0x1000 | LF_UDT_MOD_SRC_LINE [size = 20]
+ALL-NEXT:            udt = 0x100B, mod = 1, file = 1, line = 481
+ALL-NEXT:   0x1001 | LF_UDT_MOD_SRC_LINE [size = 20]
+ALL-NEXT:            udt = 0x1017, mod = 1, file = 1, line = 194
+ALL-NEXT:   0x1002 | LF_UDT_MOD_SRC_LINE [size = 20]
+ALL-NEXT:            udt = 0x1021, mod = 1, file = 1, line = 603
+ALL-NEXT:   0x1003 | LF_UDT_MOD_SRC_LINE [size = 20]
+ALL-NEXT:            udt = 0x102C, mod = 1, file = 1, line = 1200
+ALL-NEXT:   0x1004 | LF_UDT_MOD_SRC_LINE [size = 20]
+ALL-NEXT:            udt = 0x103A, mod = 1, file = 1, line = 540
+ALL-NEXT:   0x1005 | LF_UDT_MOD_SRC_LINE [size = 20]
+ALL-NEXT:            udt = 0x1042, mod = 1, file = 1, line = 108
+ALL-NEXT:   0x1006 | LF_UDT_MOD_SRC_LINE [size = 20]
+ALL-NEXT:            udt = 0x104A, mod = 1, file = 1, line = 96
+ALL-NEXT:   0x1007 | LF_STRING_ID [size = 48] ID: <no type>, String: d:\src\llvm\test\DebugInfo\PDB\Inputs
+ALL-NEXT:   0x1008 | LF_STRING_ID [size = 76] ID: <no type>, String: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe
+ALL-NEXT:   0x1009 | LF_STRING_ID [size = 20] ID: <no type>, String: empty.cpp
+ALL-NEXT:   0x100A | LF_STRING_ID [size = 56] ID: <no type>, String: d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb
+ALL-NEXT:   0x100B | LF_STRING_ID [size = 252] ID: <no type>, String: -Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows
+ALL-NEXT:   0x100C | LF_SUBSTR_LIST [size = 12]
+ALL-NEXT:            0x100B: `-Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows`
+ALL-NEXT:   0x100D | LF_STRING_ID [size = 96] ID: 0x100C, String:  Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X
+ALL-NEXT:   0x100E | LF_BUILDINFO [size = 28]
+ALL-NEXT:            0x1007: `d:\src\llvm\test\DebugInfo\PDB\Inputs`
+ALL-NEXT:            0x1008: `C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe`
+ALL-NEXT:            0x1009: `empty.cpp`
+ALL-NEXT:            0x100A: `d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb`
+ALL-NEXT:            0x100D: ` Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X`
+ALL:                             Public Symbols
+ALL-NEXT: ============================================================
+ALL-NEXT:   - S_PUB32 [size = 36] `?__purecall@@3PAXA`
+ALL-NEXT:       type = <no type>, addr = 0003:0000
+ALL-NEXT:   - S_PUB32 [size = 20] `_main`
+ALL-NEXT:       type = 0x0002 (<unknown simple type>), addr = 0001:0016
+ALL-NEXT:   - S_PROCREF [size = 20] `main`
+ALL-NEXT:       module = 1, sum name = 0, offset = 120
+ALL-NEXT:   - S_GDATA32 [size = 28] `__purecall`
+ALL-NEXT:       type = 0x0403 (void*), addr = 0003:0000
+ALL:                                Symbols
+ALL-NEXT: ============================================================
+ALL-NEXT:   Mod 0000 | `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`:
+ALL-NEXT:   - S_OBJNAME [size = 56] sig=0, `d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj`
+ALL-NEXT:   - S_COMPILE3 [size = 60]
+ALL-NEXT:       machine = intel pentium 3, Ver = Microsoft (R) Optimizing Compiler, language = c++
+ALL-NEXT:       frontend = 18.0.31101.0, backend = 18.0.31101.0
+ALL-NEXT:       flags = security checks
+ALL-NEXT:   - S_GPROC32 [size = 44] `main`
+ALL-NEXT:       parent = 0, addr = 0001:0016, code size = 10, end = 196
+ALL-NEXT:       debug start = 3, debug end = 8, flags = has fp
+ALL-NEXT:   - S_FRAMEPROC [size = 32]
+ALL-NEXT:       size = 0, padding size = 0, offset to padding = 0
+ALL-NEXT:       bytes of callee saved registers = 0, exception handler addr = 0000:0000
+ALL-NEXT:       flags = has async eh | opt speed
+ALL-NEXT:   - S_END [size = 4]
+ALL-NEXT:   - S_BUILDINFO [size = 8] BuildId = `4110`
+ALL-NEXT:   Mod 0001 | `* Linker *`:
+ALL-NEXT:   - S_OBJNAME [size = 20] sig=0, `* Linker *`
+ALL-NEXT:   - S_COMPILE3 [size = 48]
+ALL-NEXT:       machine = intel 80386, Ver = Microsoft (R) LINK, language = link
+ALL-NEXT:       frontend = 0.0.0.0, backend = 12.0.31101.0
+ALL-NEXT:       flags = none
+ALL-NEXT:   - S_ENVBLOCK [size = 172]
+ALL-NEXT:     - cwd
+ALL-NEXT:     - d:\src\llvm\test\DebugInfo\PDB\Inputs
+ALL-NEXT:     - exe
+ALL-NEXT:     - C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\link.exe
+ALL-NEXT:     - pdb
+ALL-NEXT:     - d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.pdb
+ALL-NEXT:   - S_TRAMPOLINE [size = 20]
+ALL-NEXT:       type = tramp incremental, size = 5, source = 0001:0005, target = 0001:0005
+ALL-NEXT:   - S_SECTION [size = 28] `.text`
+ALL-NEXT:       length = 4122, alignment = 12, rva = 4096, section # = 1, characteristics = 1610612768
+ALL-NEXT:   - S_COFFGROUP [size = 28] `.text$mn`
+ALL-NEXT:       length = 4122, addr = 0001:0000, characteristics = 1610612768
+ALL-NEXT:   - S_SECTION [size = 28] `.rdata`
+ALL-NEXT:       length = 690, alignment = 12, rva = 12288, section # = 2, characteristics = 1073741888
+ALL-NEXT:   - S_COFFGROUP [size = 28] `.rdata`
+ALL-NEXT:       length = 323, addr = 0002:0000, characteristics = 1073741888
+ALL-NEXT:   - S_COFFGROUP [size = 28] `.edata`
+ALL-NEXT:       length = 0, addr = 0002:0323, characteristics = 1073741888
+ALL-NEXT:   - S_COFFGROUP [size = 32] `.rdata$debug`
+ALL-NEXT:       length = 366, addr = 0002:0324, characteristics = 1073741888
+ALL-NEXT:   - S_SECTION [size = 28] `.data`
+ALL-NEXT:       length = 4, alignment = 12, rva = 16384, section # = 3, characteristics = 3221225536
+ALL-NEXT:   - S_COFFGROUP [size = 24] `.bss`
+ALL-NEXT:       length = 4, addr = 0003:0000, characteristics = 3221225600
+ALL-NEXT:   - S_SECTION [size = 28] `.reloc`
+ALL-NEXT:       length = 8, alignment = 12, rva = 20480, section # = 4, characteristics = 1107296320
+ALL:                         Section Contributions
+ALL-NEXT: ============================================================
+ALL-NEXT:   SC  | mod = 1, 0001:0000, size = 10, data crc = 0, reloc crc = 0
+ALL-NEXT:         IMAGE_SCN_CNT_CODE | IMAGE_SCN_MEM_EXECUTE | IMAGE_SCN_MEM_READ
+ALL-NEXT:   SC  | mod = 0, 0001:0016, size = 10, data crc = 3617027124, reloc crc = 0
+ALL-NEXT:         IMAGE_SCN_CNT_CODE | IMAGE_SCN_ALIGN_16BYTES | IMAGE_SCN_MEM_EXECUTE |
+ALL-NEXT:         IMAGE_SCN_MEM_READ
+ALL-NEXT:   SC  | mod = 1, 0002:0000, size = 56, data crc = 0, reloc crc = 0
+ALL-NEXT:         IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_MEM_READ
+ALL-NEXT:   SC  | mod = 1, 0002:0324, size = 72, data crc = 0, reloc crc = 0
+ALL-NEXT:         IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ
+ALL-NEXT:   SC  | mod = 1, 0002:0396, size = 20, data crc = 0, reloc crc = 0
+ALL-NEXT:         IMAGE_SCN_CNT_INITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ
+ALL-NEXT:   SC  | mod = 0, 0003:0000, size = 4, data crc = 0, reloc crc = 0
+ALL-NEXT:         IMAGE_SCN_CNT_UNINITIALIZED_DATA | IMAGE_SCN_ALIGN_4BYTES | IMAGE_SCN_MEM_READ |
+ALL-NEXT:         IMAGE_SCN_MEM_WRITE
+ALL:                              Section Map
+ALL-NEXT: ============================================================
+ALL-NEXT:   Section 0000 | ovl = 0, group = 0, frame = 0, name = 1
+ALL-NEXT:                  class = 65535, offset = 0, size = 4122
+ALL-NEXT:                  flags = read | execute | 32 bit addr | selector
+ALL-NEXT:   Section 0001 | ovl = 1, group = 0, frame = 0, name = 2
+ALL-NEXT:                  class = 65535, offset = 0, size = 690
+ALL-NEXT:                  flags = read | 32 bit addr | selector
+ALL-NEXT:   Section 0002 | ovl = 2, group = 0, frame = 0, name = 3
+ALL-NEXT:                  class = 65535, offset = 0, size = 4
+ALL-NEXT:                  flags = read | write | 32 bit addr | selector
+ALL-NEXT:   Section 0003 | ovl = 3, group = 0, frame = 0, name = 4
+ALL-NEXT:                  class = 65535, offset = 0, size = 8
+ALL-NEXT:                  flags = read | 32 bit addr | selector
+ALL-NEXT:   Section 0004 | ovl = 4, group = 0, frame = 0, name = 0
+ALL-NEXT:                  class = 65535, offset = 0, size = 4294967295
+ALL-NEXT:                  flags = 32 bit addr | absolute addr
+
+
+
+BIG:                           Summary
+BIG-NEXT: ============================================================
+BIG-NEXT:   Block Size: 4096
+BIG-NEXT:   Number of blocks: 99
+BIG-NEXT:   Number of streams: 64
+BIG-NEXT:   Signature: 1461714535
+BIG-NEXT:   Age: 1
+BIG-NEXT:   GUID: {880ECC89-DF81-0B4F-839C-58CBD052E937}
+BIG-NEXT:   Features: 0x1
+BIG-NEXT:   Has Debug Info: true
+BIG-NEXT:   Has Types: true
+BIG-NEXT:   Has IDs: true
+BIG-NEXT:   Has Globals: true
+BIG-NEXT:   Has Publics: true
+BIG-NEXT:   Is incrementally linked: true
+BIG-NEXT:   Has conflicting types: false
+BIG-NEXT:   Is stripped: false
+BIG:                                Modules
+BIG-NEXT: ============================================================
+BIG-NEXT:   Mod 0000 | Name: `D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj`:
+BIG-NEXT:              Obj: `D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj`:
+BIG-NEXT:              debug stream: 12, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - d:\src\llvm\test\tools\llvm-symbolizer\pdb\inputs\test.cpp
+BIG-NEXT:   Mod 0001 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_cpu_disp_.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 14, # files: 14, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\misc\i386\cpu_disp.c
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:   Mod 0002 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_initsect_.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 15, # files: 19, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\rtc\initsect.cpp
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\stdlib.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:   Mod 0003 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_sehprolg4_.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 16, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\eh\i386\sehprolg4.asm
+BIG-NEXT:   Mod 0004 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_chandler4gs_.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 17, # files: 14, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\eh\i386\chandler4gs.c
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:   Mod 0005 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_secchk_.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 18, # files: 14, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\eh\i386\secchk.c
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:   Mod 0006 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_cookie.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 19, # files: 9, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:   Mod 0007 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_report.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 20, # files: 14, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\gs\gs_report.c
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:   Mod 0008 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_support.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 21, # files: 10, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\gs\gs_support.c
+BIG-NEXT:   Mod 0009 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\checkcfg.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 22, # files: 14, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\misc\checkcfg.c
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:   Mod 0010 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\guard_support.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 23, # files: 10, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\misc\guard_support.c
+BIG-NEXT:   Mod 0011 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\loadcfg.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 24, # files: 9, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:   Mod 0012 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_dtor.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 25, # files: 11, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\math.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\utility\dyn_tls_dtor.c
+BIG-NEXT:   Mod 0013 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_init.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 26, # files: 10, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\utility\dyn_tls_init.c
+BIG-NEXT:   Mod 0014 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr_detection.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 27, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\utility\matherr_detection.c
+BIG-NEXT:   Mod 0015 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_detection.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 28, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\utility\ucrt_detection.c
+BIG-NEXT:   Mod 0016 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\argv_mode.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 29, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\defaults\argv_mode.cpp
+BIG-NEXT:   Mod 0017 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\commit_mode.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 30, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\defaults\commit_mode.cpp
+BIG-NEXT:   Mod 0018 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_local_stdio_options.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 31, # files: 24, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\defaults\default_local_stdio_options.cpp
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\math.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\stdlib.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\stdio.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstdio.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_stdio_config.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vadefs.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
+BIG-NEXT:   Mod 0019 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\denormal_control.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 32, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\defaults\denormal_control.cpp
+BIG-NEXT:   Mod 0020 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\env_mode.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 33, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\defaults\env_mode.cpp
+BIG-NEXT:   Mod 0021 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\file_mode.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 34, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\defaults\file_mode.cpp
+BIG-NEXT:   Mod 0022 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\invalid_parameter_handler.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 35, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\defaults\invalid_parameter_handler.cpp
+BIG-NEXT:   Mod 0023 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 36, # files: 2, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\defaults\matherr.cpp
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\math.h
+BIG-NEXT:   Mod 0024 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\new_mode.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 37, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\defaults\new_mode.cpp
+BIG-NEXT:   Mod 0025 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\thread_locale.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 38, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\defaults\thread_locale.cpp
+BIG-NEXT:   Mod 0026 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\tncleanup.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 39, # files: 21, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\eh\tncleanup.cpp
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vcruntime_typeinfo.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vcruntime_exception.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\stdlib.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:   Mod 0027 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\exe_main.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 40, # files: 26, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\math.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\stdio.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstdio.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_stdio_config.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\stdlib.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vadefs.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
+BIG-NEXT:   Mod 0028 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\initializers.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 41, # files: 20, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\math.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\stdlib.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
+BIG-NEXT:   Mod 0029 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 42, # files: 20, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\utility\utility.cpp
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\math.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\stdlib.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
+BIG-NEXT:   Mod 0030 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_stubs.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 43, # files: 1, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\utility\ucrt_stubs.cpp
+BIG-NEXT:   Mod 0031 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility_desktop.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 44, # files: 20, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\utility\utility_desktop.cpp
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\math.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\stdlib.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
+BIG-NEXT:   Mod 0032 | Name: `f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_precision.obj`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib`:
+BIG-NEXT:              debug stream: 45, # files: 20, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\string.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\src\defaults\default_precision.cpp
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\malloc.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
+BIG-NEXT:              - f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\math.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\stdlib.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\ctype.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
+BIG-NEXT:              - f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
+BIG-NEXT:              - f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
+BIG-NEXT:   Mod 0033 | Name: `Import:KERNEL32.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib`:
+BIG-NEXT:              debug stream: 47, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0034 | Name: `KERNEL32.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib`:
+BIG-NEXT:              debug stream: 46, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0035 | Name: `Import:VCRUNTIME140.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib`:
+BIG-NEXT:              debug stream: 49, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0036 | Name: `VCRUNTIME140.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib`:
+BIG-NEXT:              debug stream: 48, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0037 | Name: `Import:api-ms-win-crt-stdio-l1-1-0.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`:
+BIG-NEXT:              debug stream: 59, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0038 | Name: `api-ms-win-crt-stdio-l1-1-0.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`:
+BIG-NEXT:              debug stream: 58, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0039 | Name: `Import:api-ms-win-crt-runtime-l1-1-0.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`:
+BIG-NEXT:              debug stream: 57, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0040 | Name: `api-ms-win-crt-runtime-l1-1-0.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`:
+BIG-NEXT:              debug stream: 56, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0041 | Name: `Import:api-ms-win-crt-math-l1-1-0.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`:
+BIG-NEXT:              debug stream: 55, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0042 | Name: `api-ms-win-crt-math-l1-1-0.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`:
+BIG-NEXT:              debug stream: 54, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0043 | Name: `Import:api-ms-win-crt-locale-l1-1-0.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`:
+BIG-NEXT:              debug stream: 53, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0044 | Name: `api-ms-win-crt-locale-l1-1-0.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`:
+BIG-NEXT:              debug stream: 52, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0045 | Name: `Import:api-ms-win-crt-heap-l1-1-0.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`:
+BIG-NEXT:              debug stream: 51, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0046 | Name: `api-ms-win-crt-heap-l1-1-0.dll`:
+BIG-NEXT:              Obj: `C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib`:
+BIG-NEXT:              debug stream: 50, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+BIG-NEXT:   Mod 0047 | Name: `* Linker *`:
+BIG-NEXT:              Obj: ``:
+BIG-NEXT:              debug stream: 60, # files: 0, has ec info: false
+BIG-NEXT:              contributing source files:
+
+
+BAD-BLOCK-SIZE: Native PDB Error: The PDB file is corrupt. Does not contain superblock
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
-; EMPTY:      FileHeaders {
-; EMPTY-NEXT:   BlockSize: 4096
-; EMPTY-NEXT:   FreeBlockMap: 2
-; EMPTY-NEXT:   NumBlocks: 25
-; EMPTY-NEXT:   NumDirectoryBytes: 136
-; EMPTY-NEXT:   Unknown1: 0
-; EMPTY-NEXT:   BlockMapAddr: 24
-; EMPTY-NEXT:   NumDirectoryBlocks: 1
-; EMPTY-NEXT:   DirectoryBlocks: [23]
-; EMPTY-NEXT:   NumStreams: 17
-; EMPTY-NEXT: }
-; EMPTY-NEXT: Streams [
-; EMPTY-NEXT:   Stream 0: [Old MSF Directory] (40 bytes)
-; EMPTY-NEXT:   Stream 1: [PDB Stream] (118 bytes)
-; EMPTY-NEXT:   Stream 2: [TPI Stream] (5392 bytes)
-; EMPTY-NEXT:   Stream 3: [DBI Stream] (739 bytes)
-; EMPTY-NEXT:   Stream 4: [IPI Stream] (784 bytes)
-; EMPTY-NEXT:   Stream 5: [Named Stream "/LinkInfo"] (0 bytes)
-; EMPTY-NEXT:   Stream 6: [Global Symbol Hash] (556 bytes)
-; EMPTY-NEXT:   Stream 7: [Public Symbol Hash] (604 bytes)
-; EMPTY-NEXT:   Stream 8: [Public Symbol Records] (104 bytes)
-; EMPTY-NEXT:   Stream 9: [Named Stream "/src/headerblock"] (0 bytes)
-; EMPTY-NEXT:   Stream 10: [Section Header Data] (160 bytes)
-; EMPTY-NEXT:   Stream 11: [New FPO Data] (32 bytes)
-; EMPTY-NEXT:   Stream 12: [Module "d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj"] (308 bytes)
-; EMPTY-NEXT:   Stream 13: [Named Stream "/names"] (239 bytes)
-; EMPTY-NEXT:   Stream 14: [Module "* Linker *"] (520 bytes)
-; EMPTY-NEXT:   Stream 15: [TPI Hash] (308 bytes)
-; EMPTY-NEXT:   Stream 16: [IPI Hash] (68 bytes)
-; EMPTY-NEXT: ]
-; EMPTY-NEXT: Msf Free Pages: [3, 4, 5, 8, 9]
-; EMPTY-NEXT: Orphaned Pages: []
-; EMPTY-NEXT: Multiply Used Pages: []
-; EMPTY-NEXT: Use After Free Pages: []
-; EMPTY-NEXT: StreamBlocks [
-; EMPTY-NEXT:   Stream 0: [8]
-; EMPTY-NEXT:   Stream 1: [19]
-; EMPTY-NEXT:   Stream 2: [18, 17]
-; EMPTY-NEXT:   Stream 3: [14]
-; EMPTY-NEXT:   Stream 4: [20]
-; EMPTY-NEXT:   Stream 5: []
-; EMPTY-NEXT:   Stream 6: [11]
-; EMPTY-NEXT:   Stream 7: [13]
-; EMPTY-NEXT:   Stream 8: [12]
-; EMPTY-NEXT:   Stream 9: []
-; EMPTY-NEXT:   Stream 10: [10]
-; EMPTY-NEXT:   Stream 11: [15]
-; EMPTY-NEXT:   Stream 12: [6]
-; EMPTY-NEXT:   Stream 13: [16]
-; EMPTY-NEXT:   Stream 14: [7]
-; EMPTY-NEXT:   Stream 15: [21]
-; EMPTY-NEXT:   Stream 16: [22]
-; EMPTY-NEXT: ]
-; EMPTY-NEXT: String Table {
-; 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: }
-; EMPTY-NEXT: PDB Stream {
-; EMPTY-NEXT:   Version: 20000404
-; EMPTY-NEXT:   Signature: 0x54E507E2
-; EMPTY-NEXT:   Age: 1
-; EMPTY-NEXT:   Guid: {0B355641-86A0-A249-896F-9988FAE52FF0}
-; EMPTY-NEXT:   Features: 0x1
-; EMPTY-NEXT:   Named Streams {
-; EMPTY-NEXT:     /names: 13
-; EMPTY-NEXT:     /LinkInfo: 5
-; EMPTY-NEXT:     /src/headerblock: 9
-; EMPTY-NEXT:   }
-; EMPTY-NEXT: }
-; EMPTY-NEXT: Type Info Stream (TPI) {
-; EMPTY-NEXT:   TPI Version: 20040203
-; EMPTY-NEXT:   Record count: 75
-; EMPTY-NEXT:   Records [
-; EMPTY-NEXT:     {
-; EMPTY-NEXT:       ArgList (0x1000) {
-; EMPTY-NEXT:         TypeLeafKind: LF_ARGLIST (0x1201)
-; EMPTY-NEXT:         NumArgs: 0
-; EMPTY-NEXT:         Arguments [
-; EMPTY-NEXT:         ]
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       Bytes (
-; EMPTY-NEXT:         0000: 00000000                             |....|
-; EMPTY-NEXT:       )
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     {
-; EMPTY-NEXT:       Procedure (0x1001) {
-; EMPTY-NEXT:         TypeLeafKind: LF_PROCEDURE (0x1008)
-; EMPTY-NEXT:         ReturnType: int (0x74)
-; EMPTY-NEXT:         CallingConvention: NearC (0x0)
-; EMPTY-NEXT:         FunctionOptions [ (0x0)
-; EMPTY-NEXT:         ]
-; EMPTY-NEXT:         NumParameters: 0
-; EMPTY-NEXT:         ArgListType: () (0x1000)
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       Bytes (
-; EMPTY-NEXT:         0000: 74000000 00000000 00100000           |t...........|
-; EMPTY-NEXT:       )
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     {
-; EMPTY-NEXT:       FieldList (0x1002) {
-; EMPTY-NEXT:         TypeLeafKind: LF_FIELDLIST (0x1203)
-; EMPTY-NEXT:         Enumerator {
-; EMPTY-NEXT:           TypeLeafKind: LF_ENUMERATE (0x1502)
-; EMPTY-NEXT:           AccessSpecifier: Public (0x3)
-; EMPTY-NEXT:           EnumValue: 1
-; EMPTY-NEXT:           Name: apartment
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Enumerator {
-; EMPTY-NEXT:           TypeLeafKind: LF_ENUMERATE (0x1502)
-; EMPTY-NEXT:           AccessSpecifier: Public (0x3)
-; EMPTY-NEXT:           EnumValue: 2
-; EMPTY-NEXT:           Name: single
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Enumerator {
-; EMPTY-NEXT:           TypeLeafKind: LF_ENUMERATE (0x1502)
-; EMPTY-NEXT:           AccessSpecifier: Public (0x3)
-; EMPTY-NEXT:           EnumValue: 3
-; EMPTY-NEXT:           Name: free
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Enumerator {
-; EMPTY-NEXT:           TypeLeafKind: LF_ENUMERATE (0x1502)
-; EMPTY-NEXT:           AccessSpecifier: Public (0x3)
-; EMPTY-NEXT:           EnumValue: 4
-; EMPTY-NEXT:           Name: neutral
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Enumerator {
-; EMPTY-NEXT:           TypeLeafKind: LF_ENUMERATE (0x1502)
-; EMPTY-NEXT:           AccessSpecifier: Public (0x3)
-; EMPTY-NEXT:           EnumValue: 5
-; EMPTY-NEXT:           Name: both
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       Bytes (
-; EMPTY-NEXT:         0000: 02150300 01006170 6172746D 656E7400  |......apartment.|
-; EMPTY-NEXT:         0010: 02150300 02007369 6E676C65 00F3F2F1  |......single....|
-; EMPTY-NEXT:         0020: 02150300 03006672 656500F1 02150300  |......free......|
-; EMPTY-NEXT:         0030: 04006E65 75747261 6C00F2F1 02150300  |..neutral.......|
-; EMPTY-NEXT:         0040: 0500626F 746800F1                    |..both..|
-; EMPTY-NEXT:       )
-; EMPTY-NEXT:     }
-; EMPTY:          Hash {
-; EMPTY-NEXT:       Number of Hash Buckets: 262143
-; EMPTY-NEXT:       Hash Key Size: 4
-; EMPTY-NEXT:       Values: [205956, 163561, 59811, 208239, 16377, 247078, 194342, 254156, 194536, 167492, 185421, 119540, 261871, 198119, 48056, 251486, 134580, 148190, 113636, 53336, 55779, 220695, 198114, 148734, 81128, 60158, 217249, 174209, 159978, 249504, 141941, 238785, 6214, 94935, 151449, 135589, 73373, 96512, 254299, 17744, 239514, 173189, 130544, 204437, 238560, 144673, 115151, 197306, 256035, 101096, 231280, 52156, 48854, 170035, 177041, 102745, 16947, 183703, 98548, 35693, 171328, 203640, 139292, 49018, 43821, 202555, 165040, 215835, 142625, 52534, 44186, 103930, 110942, 17991, 213215]
-; EMPTY-NEXT:       Adjusters [
-; EMPTY-NEXT:       ]
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     TypeIndexOffsets [
-; EMPTY-NEXT:       Index: 0x1000, Offset: 0
-; EMPTY-NEXT:     ]
-; EMPTY:        Type Info Stream (IPI) {
-; EMPTY-NEXT:     IPI Version: 20040203
-; EMPTY-NEXT:     Record count: 15
-; EMPTY-NEXT:     Records [
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UdtModSourceLine (0x1000) {
-; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UDT: __vc_attributes::threadingAttribute (0x100B)
-; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
-; EMPTY-NEXT:           LineNumber: 481
-; EMPTY-NEXT:           Module: 1
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 0B100000 01000000 E1010000 0100F2F1  |................|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UdtModSourceLine (0x1001) {
-; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UDT: __vc_attributes::event_receiverAttribute (0x1017)
-; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
-; EMPTY-NEXT:           LineNumber: 194
-; EMPTY-NEXT:           Module: 1
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 17100000 01000000 C2000000 0100F2F1  |................|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UdtModSourceLine (0x1002) {
-; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UDT: __vc_attributes::aggregatableAttribute (0x1021)
-; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
-; EMPTY-NEXT:           LineNumber: 603
-; EMPTY-NEXT:           Module: 1
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 21100000 01000000 5B020000 0100F2F1  |!.......[.......|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UdtModSourceLine (0x1003) {
-; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UDT: __vc_attributes::event_sourceAttribute (0x102C)
-; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
-; EMPTY-NEXT:           LineNumber: 1200
-; EMPTY-NEXT:           Module: 1
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 2C100000 01000000 B0040000 0100F2F1  |,...............|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UdtModSourceLine (0x1004) {
-; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UDT: __vc_attributes::moduleAttribute (0x103A)
-; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
-; EMPTY-NEXT:           LineNumber: 540
-; EMPTY-NEXT:           Module: 1
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 3A100000 01000000 1C020000 0100F2F1  |:...............|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UdtModSourceLine (0x1005) {
-; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UDT: __vc_attributes::helper_attributes::usageAttribute (0x1042)
-; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
-; EMPTY-NEXT:           LineNumber: 108
-; EMPTY-NEXT:           Module: 1
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 42100000 01000000 6C000000 0100F2F1  |B.......l.......|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         UdtModSourceLine (0x1006) {
-; EMPTY-NEXT:           TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; EMPTY-NEXT:           UDT: __vc_attributes::helper_attributes::v1_alttypeAttribute (0x104A)
-; EMPTY-NEXT:           SourceFile: <unknown simple type> (0x1)
-; EMPTY-NEXT:           LineNumber: 96
-; EMPTY-NEXT:           Module: 1
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 4A100000 01000000 60000000 0100F2F1  |J.......`.......|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         StringId (0x1007) {
-; EMPTY-NEXT:           TypeLeafKind: LF_STRING_ID (0x1605)
-; EMPTY-NEXT:           Id: 0x0
-; EMPTY-NEXT:           StringData: d:\src\llvm\test\DebugInfo\PDB\Inputs
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 00000000 643A5C73 72635C6C 6C766D5C  |....d:\src\llvm\|
-; EMPTY-NEXT:           0010: 74657374 5C446562 7567496E 666F5C50  |test\DebugInfo\P|
-; EMPTY-NEXT:           0020: 44425C49 6E707574 7300F2F1           |DB\Inputs...|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         StringId (0x1008) {
-; EMPTY-NEXT:           TypeLeafKind: LF_STRING_ID (0x1605)
-; EMPTY-NEXT:           Id: 0x0
-; EMPTY-NEXT:           StringData: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 00000000 433A5C50 726F6772 616D2046  |....C:\Program F|
-; EMPTY-NEXT:           0010: 696C6573 20287838 36295C4D 6963726F  |iles (x86)\Micro|
-; EMPTY-NEXT:           0020: 736F6674 20566973 75616C20 53747564  |soft Visual Stud|
-; EMPTY-NEXT:           0030: 696F2031 322E305C 56435C42 494E5C63  |io 12.0\VC\BIN\c|
-; EMPTY-NEXT:           0040: 6C2E6578 6500F2F1                    |l.exe...|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         StringId (0x1009) {
-; EMPTY-NEXT:           TypeLeafKind: LF_STRING_ID (0x1605)
-; EMPTY-NEXT:           Id: 0x0
-; EMPTY-NEXT:           StringData: empty.cpp
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 00000000 656D7074 792E6370 7000F2F1  |....empty.cpp...|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         StringId (0x100A) {
-; EMPTY-NEXT:           TypeLeafKind: LF_STRING_ID (0x1605)
-; EMPTY-NEXT:           Id: 0x0
-; EMPTY-NEXT:           StringData: d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 00000000 643A5C73 72635C6C 6C766D5C  |....d:\src\llvm\|
-; EMPTY-NEXT:           0010: 74657374 5C446562 7567496E 666F5C50  |test\DebugInfo\P|
-; EMPTY-NEXT:           0020: 44425C49 6E707574 735C7663 3132302E  |DB\Inputs\vc120.|
-; EMPTY-NEXT:           0030: 70646200                             |pdb.|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         StringId (0x100B) {
-; EMPTY-NEXT:           TypeLeafKind: LF_STRING_ID (0x1605)
-; EMPTY-NEXT:           Id: 0x0
-; EMPTY-NEXT:           StringData: -Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 00000000 2D5A6920 2D4D5420 2D492243  |....-Zi -MT -I"C|
-; EMPTY-NEXT:           0010: 3A5C5072 6F677261 6D204669 6C657320  |:\Program Files |
-; EMPTY-NEXT:           0020: 28783836 295C4D69 63726F73 6F667420  |(x86)\Microsoft |
-; EMPTY-NEXT:           0030: 56697375 616C2053 74756469 6F203132  |Visual Studio 12|
-; EMPTY-NEXT:           0040: 2E305C56 435C494E 434C5544 4522202D  |.0\VC\INCLUDE" -|
-; EMPTY-NEXT:           0050: 4922433A 5C50726F 6772616D 2046696C  |I"C:\Program Fil|
-; EMPTY-NEXT:           0060: 65732028 78383629 5C4D6963 726F736F  |es (x86)\Microso|
-; EMPTY-NEXT:           0070: 66742056 69737561 6C205374 7564696F  |ft Visual Studio|
-; EMPTY-NEXT:           0080: 2031322E 305C5643 5C41544C 4D46435C  | 12.0\VC\ATLMFC\|
-; EMPTY-NEXT:           0090: 494E434C 55444522 202D4922 433A5C50  |INCLUDE" -I"C:\P|
-; EMPTY-NEXT:           00A0: 726F6772 616D2046 696C6573 20287838  |rogram Files (x8|
-; EMPTY-NEXT:           00B0: 36295C57 696E646F 7773204B 6974735C  |6)\Windows Kits\|
-; EMPTY-NEXT:           00C0: 382E315C 696E636C 7564655C 73686172  |8.1\include\shar|
-; EMPTY-NEXT:           00D0: 65642220 2D492243 3A5C5072 6F677261  |ed" -I"C:\Progra|
-; EMPTY-NEXT:           00E0: 6D204669 6C657320 28783836 295C5769  |m Files (x86)\Wi|
-; EMPTY-NEXT:           00F0: 6E646F77 7300F2F1                    |ndows...|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         StringList (0x100C) {
-; EMPTY-NEXT:           TypeLeafKind: LF_SUBSTR_LIST (0x1604)
-; EMPTY-NEXT:           NumStrings: 1
-; EMPTY-NEXT:           Strings [
-; EMPTY-NEXT:             String: -Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows
-; EMPTY-NEXT:           ]
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 01000000 0B100000                    |........|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         StringId (0x100D) {
-; EMPTY-NEXT:           TypeLeafKind: LF_STRING_ID (0x1605)
-; EMPTY-NEXT:           Id: "-Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows" (0x100C)
-; EMPTY-NEXT:           StringData:  Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 0C100000 204B6974 735C382E 315C696E  |.... Kits\8.1\in|
-; EMPTY-NEXT:           0010: 636C7564 655C756D 22202D49 22433A5C  |clude\um" -I"C:\|
-; EMPTY-NEXT:           0020: 50726F67 72616D20 46696C65 73202878  |Program Files (x|
-; EMPTY-NEXT:           0030: 3836295C 57696E64 6F777320 4B697473  |86)\Windows Kits|
-; EMPTY-NEXT:           0040: 5C382E31 5C696E63 6C756465 5C77696E  |\8.1\include\win|
-; EMPTY-NEXT:           0050: 72742220 2D545020 2D5800F1           |rt" -TP -X..|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       {
-; EMPTY-NEXT:         BuildInfo (0x100E) {
-; EMPTY-NEXT:           TypeLeafKind: LF_BUILDINFO (0x1603)
-; EMPTY-NEXT:           NumArgs: 5
-; EMPTY-NEXT:           Arguments [
-; EMPTY-NEXT:             ArgType: d:\src\llvm\test\DebugInfo\PDB\Inputs (0x1007)
-; EMPTY-NEXT:             ArgType: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe (0x1008)
-; EMPTY-NEXT:             ArgType: empty.cpp (0x1009)
-; EMPTY-NEXT:             ArgType: d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb (0x100A)
-; EMPTY-NEXT:             ArgType:  Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X (0x100D)
-; EMPTY-NEXT:           ]
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         Bytes (
-; EMPTY-NEXT:           0000: 05000710 00000810 00000910 00000A10  |................|
-; EMPTY-NEXT:           0010: 00000D10 0000F2F1                    |........|
-; EMPTY-NEXT:         )
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       TypeIndexOffsets [
-; EMPTY-NEXT:         Index: 0x1000, Offset: 0
-; EMPTY-NEXT:       ]
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:   }
-; EMPTY:      DBI Stream {
-; EMPTY-NEXT:   Dbi Version: 19990903
-; EMPTY-NEXT:   Age: 1
-; EMPTY-NEXT:   Incremental Linking: Yes
-; EMPTY-NEXT:   Has CTypes: No
-; EMPTY-NEXT:   Is Stripped: No
-; EMPTY-NEXT:   Machine Type: x86
-; EMPTY-NEXT:   Symbol Record Stream Index: 8
-; EMPTY-NEXT:   Public Symbol Stream Index: 7
-; EMPTY-NEXT:   Global Symbol Stream Index: 6
-; EMPTY-NEXT:   Toolchain Version: 12.0
-; EMPTY-NEXT:   mspdb120.dll version: 12.0.31101
-; EMPTY-NEXT:   Modules [
-; EMPTY-NEXT:     {
-; EMPTY-NEXT:       Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-; EMPTY-NEXT:       Debug Stream Index: 12
-; EMPTY-NEXT:       Object File Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-; EMPTY-NEXT:       Num Files: 1
-; EMPTY-NEXT:       Source File Name Idx: 0
-; EMPTY-NEXT:       Pdb File Name Idx: 0
-; EMPTY-NEXT:       Line Info Byte Size: 0
-; EMPTY-NEXT:       C13 Line Info Byte Size: 88
-; EMPTY-NEXT:       Symbol Byte Size: 208
-; EMPTY-NEXT:       Type Server Index: 0
-; EMPTY-NEXT:       Has EC Info: No
-; EMPTY-NEXT:       1 Contributing Source Files [
-; EMPTY-NEXT:         d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
-; EMPTY-NEXT:       ]
-; EMPTY-NEXT:       Symbols [
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           ObjectName {
-; EMPTY-NEXT:             Signature: 0x0
-; EMPTY-NEXT:             ObjectName: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 00000000 643A5C73 72635C6C 6C766D5C  |....d:\src\llvm\|
-; EMPTY-NEXT:             0010: 74657374 5C446562 7567496E 666F5C50  |test\DebugInfo\P|
-; EMPTY-NEXT:             0020: 44425C49 6E707574 735C656D 7074792E  |DB\Inputs\empty.|
-; EMPTY-NEXT:             0030: 6F626A00                             |obj.|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           CompilerFlags3 {
-; EMPTY-NEXT:             Language: Cpp (0x1)
-; EMPTY-NEXT:             Flags [ (0x2000)
-; EMPTY-NEXT:               SecurityChecks (0x2000)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             Machine: Pentium3 (0x7)
-; EMPTY-NEXT:             FrontendVersion: 18.0.31101.0
-; EMPTY-NEXT:             BackendVersion: 18.0.31101.0
-; EMPTY-NEXT:             VersionName: Microsoft (R) Optimizing Compiler
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 01200000 07001200 00007D79 00001200  |. ........}y....|
-; EMPTY-NEXT:             0010: 00007D79 00004D69 63726F73 6F667420  |..}y..Microsoft |
-; EMPTY-NEXT:             0020: 28522920 4F707469 6D697A69 6E672043  |(R) Optimizing C|
-; EMPTY-NEXT:             0030: 6F6D7069 6C657200                    |ompiler.|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           ProcStart {
-; EMPTY-NEXT:             Kind: S_GPROC32 (0x1110)
-; EMPTY-NEXT:             PtrParent: 0x0
-; EMPTY-NEXT:             PtrEnd: 0xC4
-; EMPTY-NEXT:             PtrNext: 0x0
-; EMPTY-NEXT:             CodeSize: 0xA
-; EMPTY-NEXT:             DbgStart: 0x3
-; EMPTY-NEXT:             DbgEnd: 0x8
-; EMPTY-NEXT:             FunctionType: int () (0x1001)
-; EMPTY-NEXT:             Segment: 0x1
-; EMPTY-NEXT:             Flags [ (0x1)
-; EMPTY-NEXT:               HasFP (0x1)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             DisplayName: main
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 00000000 C4000000 00000000 0A000000  |................|
-; EMPTY-NEXT:             0010: 03000000 08000000 01100000 10000000  |................|
-; EMPTY-NEXT:             0020: 0100016D 61696E00                    |...main.|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           FrameProc {
-; EMPTY-NEXT:             TotalFrameBytes: 0x0
-; EMPTY-NEXT:             PaddingFrameBytes: 0x0
-; EMPTY-NEXT:             OffsetToPadding: 0x0
-; EMPTY-NEXT:             BytesOfCalleeSavedRegisters: 0x0
-; EMPTY-NEXT:             OffsetOfExceptionHandler: 0x0
-; EMPTY-NEXT:             SectionIdOfExceptionHandler: 0x0
-; EMPTY-NEXT:             Flags [ (0x128200)
-; EMPTY-NEXT:               AsynchronousExceptionHandling (0x200)
-; EMPTY-NEXT:               OptimizedForSpeed (0x100000)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 00000000 00000000 00000000 00000000  |................|
-; EMPTY-NEXT:             0010: 00000000 00000082 12000000           |............|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           BlockEnd {
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           BuildInfo {
-; EMPTY-NEXT:             BuildId: 4110
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 0E100000                             |....|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:       ]
-; EMPTY-NEXT:       Subsections [
-; EMPTY-NEXT:         Lines {
-; EMPTY-NEXT:           RelocSegment: 1
-; EMPTY-NEXT:           RelocOffset: 16
-; EMPTY-NEXT:           CodeSize: 10
-; EMPTY-NEXT:           HasColumns: No
-; EMPTY-NEXT:           FileEntry {
-; EMPTY-NEXT:             FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
-; EMPTY-NEXT:             Line {
-; EMPTY-NEXT:               Offset: 0
-; EMPTY-NEXT:               LineNumberStart: 5
-; EMPTY-NEXT:               EndDelta: 0
-; EMPTY-NEXT:               IsStatement: Yes
-; EMPTY-NEXT:             }
-; EMPTY-NEXT:             Line {
-; EMPTY-NEXT:               Offset: 3
-; EMPTY-NEXT:               LineNumberStart: 6
-; EMPTY-NEXT:               EndDelta: 0
-; EMPTY-NEXT:               IsStatement: Yes
-; EMPTY-NEXT:             }
-; EMPTY-NEXT:             Line {
-; EMPTY-NEXT:               Offset: 8
-; EMPTY-NEXT:               LineNumberStart: 7
-; EMPTY-NEXT:               EndDelta: 0
-; EMPTY-NEXT:               IsStatement: Yes
-; EMPTY-NEXT:             }
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         FileChecksums {
-; EMPTY-NEXT:           Checksum {
-; EMPTY-NEXT:             FileName: d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
-; 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:     }
-; EMPTY-NEXT:     {
-; EMPTY-NEXT:       Name: * Linker *
-; EMPTY-NEXT:       Debug Stream Index: 14
-; EMPTY-NEXT:       Object File Name:
-; EMPTY-NEXT:       Num Files: 0
-; EMPTY-NEXT:       Source File Name Idx: 0
-; EMPTY-NEXT:       Pdb File Name Idx: 1
-; EMPTY-NEXT:       Line Info Byte Size: 0
-; EMPTY-NEXT:       C13 Line Info Byte Size: 0
-; EMPTY-NEXT:       Symbol Byte Size: 516
-; EMPTY-NEXT:       Type Server Index: 0
-; EMPTY-NEXT:       Has EC Info: No
-; EMPTY-NEXT:       0 Contributing Source Files [
-; EMPTY-NEXT:       ]
-; EMPTY-NEXT:       Symbols [
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           ObjectName {
-; EMPTY-NEXT:             Signature: 0x0
-; EMPTY-NEXT:             ObjectName: * Linker *
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 00000000 2A204C69 6E6B6572 202A0000  |....* Linker *..|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           CompilerFlags3 {
-; EMPTY-NEXT:             Language: Link (0x7)
-; EMPTY-NEXT:             Flags [ (0x0)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             Machine: Intel80386 (0x3)
-; EMPTY-NEXT:             FrontendVersion: 0.0.0.0
-; EMPTY-NEXT:             BackendVersion: 12.0.31101.0
-; EMPTY-NEXT:             VersionName: Microsoft (R) LINK
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 07000000 03000000 00000000 00000C00  |................|
-; EMPTY-NEXT:             0010: 00007D79 00004D69 63726F73 6F667420  |..}y..Microsoft |
-; EMPTY-NEXT:             0020: 28522920 4C494E4B 00000000           |(R) LINK....|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           EnvBlock {
-; EMPTY-NEXT:             Entries [
-; EMPTY-NEXT:               cwd
-; EMPTY-NEXT:               d:\src\llvm\test\DebugInfo\PDB\Inputs
-; EMPTY-NEXT:               exe
-; EMPTY-NEXT:               C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\link.exe
-; EMPTY-NEXT:               pdb
-; EMPTY-NEXT:               d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.pdb
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 00637764 00643A5C 7372635C 6C6C766D  |.cwd.d:\src\llvm|
-; EMPTY-NEXT:             0010: 5C746573 745C4465 62756749 6E666F5C  |\test\DebugInfo\|
-; EMPTY-NEXT:             0020: 5044425C 496E7075 74730065 78650043  |PDB\Inputs.exe.C|
-; EMPTY-NEXT:             0030: 3A5C5072 6F677261 6D204669 6C657320  |:\Program Files |
-; EMPTY-NEXT:             0040: 28783836 295C4D69 63726F73 6F667420  |(x86)\Microsoft |
-; EMPTY-NEXT:             0050: 56697375 616C2053 74756469 6F203132  |Visual Studio 12|
-; EMPTY-NEXT:             0060: 2E305C56 435C4249 4E5C6C69 6E6B2E65  |.0\VC\BIN\link.e|
-; EMPTY-NEXT:             0070: 78650070 64620064 3A5C7372 635C6C6C  |xe.pdb.d:\src\ll|
-; EMPTY-NEXT:             0080: 766D5C74 6573745C 44656275 67496E66  |vm\test\DebugInf|
-; EMPTY-NEXT:             0090: 6F5C5044 425C496E 70757473 5C656D70  |o\PDB\Inputs\emp|
-; EMPTY-NEXT:             00A0: 74792E70 64620000                    |ty.pdb..|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           Trampoline {
-; EMPTY-NEXT:             Type: TrampIncremental (0x0)
-; EMPTY-NEXT:             Size: 5
-; EMPTY-NEXT:             ThunkOff: 5
-; EMPTY-NEXT:             TargetOff: 16
-; EMPTY-NEXT:             ThunkSection: 1
-; EMPTY-NEXT:             TargetSection: 1
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 00000500 05000000 10000000 01000100  |................|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           Section {
-; EMPTY-NEXT:             SectionNumber: 1
-; EMPTY-NEXT:             Alignment: 12
-; EMPTY-NEXT:             Rva: 4096
-; EMPTY-NEXT:             Length: 4122
-; EMPTY-NEXT:             Characteristics [ (0x60000020)
-; EMPTY-NEXT:               IMAGE_SCN_CNT_CODE (0x20)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_EXECUTE (0x20000000)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             Name: .text
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 01000C00 00100000 1A100000 20000060  |............ ..`|
-; EMPTY-NEXT:             0010: 2E746578 74000000                    |.text...|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           COFF Group {
-; EMPTY-NEXT:             Size: 4122
-; EMPTY-NEXT:             Characteristics [ (0x60000020)
-; EMPTY-NEXT:               IMAGE_SCN_CNT_CODE (0x20)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_EXECUTE (0x20000000)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             Offset: 0
-; EMPTY-NEXT:             Segment: 1
-; EMPTY-NEXT:             Name: .text$mn
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 1A100000 20000060 00000000 01002E74  |.... ..`.......t|
-; EMPTY-NEXT:             0010: 65787424 6D6E0000                    |ext$mn..|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           Section {
-; EMPTY-NEXT:             SectionNumber: 2
-; EMPTY-NEXT:             Alignment: 12
-; EMPTY-NEXT:             Rva: 12288
-; EMPTY-NEXT:             Length: 690
-; EMPTY-NEXT:             Characteristics [ (0x40000040)
-; EMPTY-NEXT:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             Name: .rdata
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 02000C00 00300000 B2020000 40000040  |.....0...... at ..@|
-; EMPTY-NEXT:             0010: 2E726461 74610000                    |.rdata..|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           COFF Group {
-; EMPTY-NEXT:             Size: 323
-; EMPTY-NEXT:             Characteristics [ (0x40000040)
-; EMPTY-NEXT:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             Offset: 0
-; EMPTY-NEXT:             Segment: 2
-; EMPTY-NEXT:             Name: .rdata
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 43010000 40000040 00000000 02002E72  |C... at ..@.......r|
-; EMPTY-NEXT:             0010: 64617461 00000000                    |data....|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           COFF Group {
-; EMPTY-NEXT:             Size: 0
-; EMPTY-NEXT:             Characteristics [ (0x40000040)
-; EMPTY-NEXT:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             Offset: 323
-; EMPTY-NEXT:             Segment: 2
-; EMPTY-NEXT:             Name: .edata
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 00000000 40000040 43010000 02002E65  |.... at ..@C......e|
-; EMPTY-NEXT:             0010: 64617461 00000000                    |data....|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           COFF Group {
-; EMPTY-NEXT:             Size: 366
-; EMPTY-NEXT:             Characteristics [ (0x40000040)
-; EMPTY-NEXT:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             Offset: 324
-; EMPTY-NEXT:             Segment: 2
-; EMPTY-NEXT:             Name: .rdata$debug
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 6E010000 40000040 44010000 02002E72  |n... at ..@D......r|
-; EMPTY-NEXT:             0010: 64617461 24646562 75670000           |data$debug..|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           Section {
-; EMPTY-NEXT:             SectionNumber: 3
-; EMPTY-NEXT:             Alignment: 12
-; EMPTY-NEXT:             Rva: 16384
-; EMPTY-NEXT:             Length: 4
-; EMPTY-NEXT:             Characteristics [ (0xC0000040)
-; EMPTY-NEXT:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_WRITE (0x80000000)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             Name: .data
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 03000C00 00400000 04000000 400000C0  |..... at ......@...|
-; EMPTY-NEXT:             0010: 2E646174 61000000                    |.data...|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           COFF Group {
-; EMPTY-NEXT:             Size: 4
-; EMPTY-NEXT:             Characteristics [ (0xC0000080)
-; EMPTY-NEXT:               IMAGE_SCN_CNT_UNINITIALIZED_DATA (0x80)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_WRITE (0x80000000)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             Offset: 0
-; EMPTY-NEXT:             Segment: 3
-; EMPTY-NEXT:             Name: .bss
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 04000000 800000C0 00000000 03002E62  |...............b|
-; EMPTY-NEXT:             0010: 73730000                             |ss..|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:         {
-; EMPTY-NEXT:           Section {
-; EMPTY-NEXT:             SectionNumber: 4
-; EMPTY-NEXT:             Alignment: 12
-; EMPTY-NEXT:             Rva: 20480
-; EMPTY-NEXT:             Length: 8
-; EMPTY-NEXT:             Characteristics [ (0x42000040)
-; EMPTY-NEXT:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
-; EMPTY-NEXT:               IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:             ]
-; EMPTY-NEXT:             Name: .reloc
-; EMPTY-NEXT:           }
-; EMPTY-NEXT:           Bytes (
-; EMPTY-NEXT:             0000: 04000C00 00500000 08000000 40000042  |.....P...... at ..B|
-; EMPTY-NEXT:             0010: 2E72656C 6F630000                    |.reloc..|
-; EMPTY-NEXT:           )
-; EMPTY-NEXT:         }
-; EMPTY-NEXT:       ]
-; EMPTY-NEXT:       Subsections [
-; EMPTY-NEXT:       ]
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:   ]
-; EMPTY-NEXT: }
-; EMPTY-NEXT: Section Contributions [
-; EMPTY-NEXT:   Contribution {
-; EMPTY-NEXT:     ISect: 1
-; EMPTY-NEXT:     Off: 0
-; EMPTY-NEXT:     Size: 10
-; EMPTY-NEXT:     Characteristics [ (0x60000020)
-; EMPTY-NEXT:       IMAGE_SCN_CNT_CODE (0x20)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_EXECUTE (0x20000000)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:     Module {
-; EMPTY-NEXT:       Index: 1
-; EMPTY-NEXT:       Name: * Linker *
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     Data CRC: 0
-; EMPTY-NEXT:     Reloc CRC: 0
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   Contribution {
-; EMPTY-NEXT:     ISect: 1
-; EMPTY-NEXT:     Off: 16
-; EMPTY-NEXT:     Size: 10
-; EMPTY-NEXT:     Characteristics [ (0x60500020)
-; EMPTY-NEXT:       IMAGE_SCN_ALIGN_16BYTES (0x500000)
-; EMPTY-NEXT:       IMAGE_SCN_CNT_CODE (0x20)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_EXECUTE (0x20000000)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:     Module {
-; EMPTY-NEXT:       Index: 0
-; EMPTY-NEXT:       Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     Data CRC: 3617027124
-; EMPTY-NEXT:     Reloc CRC: 0
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   Contribution {
-; EMPTY-NEXT:     ISect: 2
-; EMPTY-NEXT:     Off: 0
-; EMPTY-NEXT:     Size: 56
-; EMPTY-NEXT:     Characteristics [ (0x40000040)
-; EMPTY-NEXT:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:     Module {
-; EMPTY-NEXT:       Index: 1
-; EMPTY-NEXT:       Name: * Linker *
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     Data CRC: 0
-; EMPTY-NEXT:     Reloc CRC: 0
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   Contribution {
-; EMPTY-NEXT:     ISect: 2
-; EMPTY-NEXT:     Off: 324
-; EMPTY-NEXT:     Size: 72
-; EMPTY-NEXT:     Characteristics [ (0x40300040)
-; EMPTY-NEXT:       IMAGE_SCN_ALIGN_4BYTES (0x300000)
-; EMPTY-NEXT:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:     Module {
-; EMPTY-NEXT:       Index: 1
-; EMPTY-NEXT:       Name: * Linker *
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     Data CRC: 0
-; EMPTY-NEXT:     Reloc CRC: 0
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   Contribution {
-; EMPTY-NEXT:     ISect: 2
-; EMPTY-NEXT:     Off: 396
-; EMPTY-NEXT:     Size: 20
-; EMPTY-NEXT:     Characteristics [ (0x40300040)
-; EMPTY-NEXT:       IMAGE_SCN_ALIGN_4BYTES (0x300000)
-; EMPTY-NEXT:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:     Module {
-; EMPTY-NEXT:       Index: 1
-; EMPTY-NEXT:       Name: * Linker *
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     Data CRC: 0
-; EMPTY-NEXT:     Reloc CRC: 0
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   Contribution {
-; EMPTY-NEXT:     ISect: 3
-; EMPTY-NEXT:     Off: 0
-; EMPTY-NEXT:     Size: 4
-; EMPTY-NEXT:     Characteristics [ (0xC0300080)
-; EMPTY-NEXT:       IMAGE_SCN_ALIGN_4BYTES (0x300000)
-; EMPTY-NEXT:       IMAGE_SCN_CNT_UNINITIALIZED_DATA (0x80)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_WRITE (0x80000000)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:     Module {
-; EMPTY-NEXT:       Index: 0
-; EMPTY-NEXT:       Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     Data CRC: 0
-; EMPTY-NEXT:     Reloc CRC: 0
-; EMPTY-NEXT:   }
-; EMPTY-NEXT: ]
-; EMPTY-NEXT: Section Map [
-; EMPTY-NEXT:   Entry {
-; EMPTY-NEXT:     Flags [ (0x10D)
-; EMPTY-NEXT:       AddressIs32Bit (0x8)
-; EMPTY-NEXT:       Execute (0x4)
-; EMPTY-NEXT:       IsSelector (0x100)
-; EMPTY-NEXT:       Read (0x1)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:     Ovl: 0
-; EMPTY-NEXT:     Group: 0
-; EMPTY-NEXT:     Frame: 1
-; EMPTY-NEXT:     SecName: 65535
-; EMPTY-NEXT:     ClassName: 65535
-; EMPTY-NEXT:     Offset: 0
-; EMPTY-NEXT:     SecByteLength: 4122
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   Entry {
-; EMPTY-NEXT:     Flags [ (0x109)
-; EMPTY-NEXT:       AddressIs32Bit (0x8)
-; EMPTY-NEXT:       IsSelector (0x100)
-; EMPTY-NEXT:       Read (0x1)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:     Ovl: 0
-; EMPTY-NEXT:     Group: 0
-; EMPTY-NEXT:     Frame: 2
-; EMPTY-NEXT:     SecName: 65535
-; EMPTY-NEXT:     ClassName: 65535
-; EMPTY-NEXT:     Offset: 0
-; EMPTY-NEXT:     SecByteLength: 690
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   Entry {
-; EMPTY-NEXT:     Flags [ (0x10B)
-; EMPTY-NEXT:       AddressIs32Bit (0x8)
-; EMPTY-NEXT:       IsSelector (0x100)
-; EMPTY-NEXT:       Read (0x1)
-; EMPTY-NEXT:       Write (0x2)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:     Ovl: 0
-; EMPTY-NEXT:     Group: 0
-; EMPTY-NEXT:     Frame: 3
-; EMPTY-NEXT:     SecName: 65535
-; EMPTY-NEXT:     ClassName: 65535
-; EMPTY-NEXT:     Offset: 0
-; EMPTY-NEXT:     SecByteLength: 4
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   Entry {
-; EMPTY-NEXT:     Flags [ (0x109)
-; EMPTY-NEXT:       AddressIs32Bit (0x8)
-; EMPTY-NEXT:       IsSelector (0x100)
-; EMPTY-NEXT:       Read (0x1)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:     Ovl: 0
-; EMPTY-NEXT:     Group: 0
-; EMPTY-NEXT:     Frame: 4
-; EMPTY-NEXT:     SecName: 65535
-; EMPTY-NEXT:     ClassName: 65535
-; EMPTY-NEXT:     Offset: 0
-; EMPTY-NEXT:     SecByteLength: 8
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   Entry {
-; EMPTY-NEXT:     Flags [ (0x208)
-; EMPTY-NEXT:       AddressIs32Bit (0x8)
-; EMPTY-NEXT:       IsAbsoluteAddress (0x200)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:     Ovl: 0
-; EMPTY-NEXT:     Group: 0
-; EMPTY-NEXT:     Frame: 0
-; EMPTY-NEXT:     SecName: 65535
-; EMPTY-NEXT:     ClassName: 65535
-; EMPTY-NEXT:     Offset: 0
-; EMPTY-NEXT:     SecByteLength: 4294967295
-; EMPTY-NEXT:   }
-; EMPTY-NEXT: ]
-; EMPTY-NEXT: Globals Stream {
-; EMPTY-NEXT:   Stream number: 6
-; EMPTY-NEXT:   Number of buckets: 2
-; EMPTY-NEXT:   Hash Buckets: [0, 12]
-; EMPTY-NEXT: }
-; EMPTY-NEXT: Publics Stream {
-; EMPTY-NEXT:   Stream number: 7
-; EMPTY-NEXT:   SymHash: 556
-; EMPTY-NEXT:   AddrMap: 8
-; EMPTY-NEXT:   Number of buckets: 2
-; EMPTY-NEXT:   Hash Buckets: [0, 12]
-; EMPTY-NEXT:   Address Map: [36, 0]
-; EMPTY-NEXT:   Thunk Map: [4112]
-; EMPTY-NEXT:   Section Offsets: [4096, 1]
-; EMPTY-NEXT:   Symbols [
-; EMPTY-NEXT:     {
-; EMPTY-NEXT:       PublicSym {
-; EMPTY-NEXT:         Type: 0
-; EMPTY-NEXT:         Seg: 3
-; EMPTY-NEXT:         Off: 0
-; EMPTY-NEXT:         Name: ?__purecall@@3PAXA
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       Bytes (
-; EMPTY-NEXT:         0000: 00000000 00000000 03003F5F 5F707572  |..........?__pur|
-; EMPTY-NEXT:         0010: 6563616C 6C404033 50415841 00000000  |ecall@@3PAXA....|
-; EMPTY-NEXT:       )
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     {
-; EMPTY-NEXT:       PublicSym {
-; EMPTY-NEXT:         Type: 2
-; EMPTY-NEXT:         Seg: 1
-; EMPTY-NEXT:         Off: 16
-; EMPTY-NEXT:         Name: _main
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       Bytes (
-; EMPTY-NEXT:         0000: 02000000 10000000 01005F6D 61696E00  |.........._main.|
-; EMPTY-NEXT:       )
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     {
-; EMPTY-NEXT:       ProcRef {
-; EMPTY-NEXT:         SumName: 0
-; EMPTY-NEXT:         SymOffset: 120
-; EMPTY-NEXT:         Mod: 1
-; EMPTY-NEXT:         Name: main
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       Bytes (
-; EMPTY-NEXT:         0000: 00000000 78000000 01006D61 696E0000  |....x.....main..|
-; EMPTY-NEXT:       )
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:     {
-; EMPTY-NEXT:       DataSym {
-; EMPTY-NEXT:         Kind: S_GDATA32 (0x110D)
-; EMPTY-NEXT:         Type: void* (0x403)
-; EMPTY-NEXT:         DisplayName: __purecall
-; EMPTY-NEXT:       }
-; EMPTY-NEXT:       Bytes (
-; EMPTY-NEXT:         0000: 03040000 00000000 03005F5F 70757265  |..........__pure|
-; EMPTY-NEXT:         0010: 63616C6C 00000000                    |call....|
-; EMPTY-NEXT:       )
-; EMPTY-NEXT:     }
-; EMPTY-NEXT:   ]
-; EMPTY-NEXT: }
-; EMPTY-NEXT: Section Headers [
-; EMPTY-NEXT:   {
-; EMPTY-NEXT:     Name: .text
-; EMPTY-NEXT:     Virtual Size: 4122
-; EMPTY-NEXT:     Virtual Address: 4096
-; EMPTY-NEXT:     Size of Raw Data: 4608
-; EMPTY-NEXT:     File Pointer to Raw Data: 1024
-; EMPTY-NEXT:     File Pointer to Relocations: 0
-; EMPTY-NEXT:     File Pointer to Linenumbers: 0
-; EMPTY-NEXT:     Number of Relocations: 0
-; EMPTY-NEXT:     Number of Linenumbers: 0
-; EMPTY-NEXT:     Characteristics [ (0x60000020)
-; EMPTY-NEXT:       IMAGE_SCN_CNT_CODE (0x20)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_EXECUTE (0x20000000)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   {
-; EMPTY-NEXT:     Name: .rdata
-; EMPTY-NEXT:     Virtual Size: 690
-; EMPTY-NEXT:     Virtual Address: 12288
-; EMPTY-NEXT:     Size of Raw Data: 1024
-; EMPTY-NEXT:     File Pointer to Raw Data: 5632
-; EMPTY-NEXT:     File Pointer to Relocations: 0
-; EMPTY-NEXT:     File Pointer to Linenumbers: 0
-; EMPTY-NEXT:     Number of Relocations: 0
-; EMPTY-NEXT:     Number of Linenumbers: 0
-; EMPTY-NEXT:     Characteristics [ (0x40000040)
-; EMPTY-NEXT:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   {
-; EMPTY-NEXT:     Name: .data
-; EMPTY-NEXT:     Virtual Size: 4
-; EMPTY-NEXT:     Virtual Address: 16384
-; EMPTY-NEXT:     Size of Raw Data: 0
-; EMPTY-NEXT:     File Pointer to Raw Data: 0
-; EMPTY-NEXT:     File Pointer to Relocations: 0
-; EMPTY-NEXT:     File Pointer to Linenumbers: 0
-; EMPTY-NEXT:     Number of Relocations: 0
-; EMPTY-NEXT:     Number of Linenumbers: 0
-; EMPTY-NEXT:     Characteristics [ (0xC0000040)
-; EMPTY-NEXT:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_WRITE (0x80000000)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   {
-; EMPTY-NEXT:     Name: .reloc
-; EMPTY-NEXT:     Virtual Size: 8
-; EMPTY-NEXT:     Virtual Address: 20480
-; EMPTY-NEXT:     Size of Raw Data: 512
-; EMPTY-NEXT:     File Pointer to Raw Data: 6656
-; EMPTY-NEXT:     File Pointer to Relocations: 0
-; EMPTY-NEXT:     File Pointer to Linenumbers: 0
-; EMPTY-NEXT:     Number of Relocations: 0
-; EMPTY-NEXT:     Number of Linenumbers: 0
-; EMPTY-NEXT:     Characteristics [ (0x42000040)
-; EMPTY-NEXT:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
-; EMPTY-NEXT:       IMAGE_SCN_MEM_READ (0x40000000)
-; EMPTY-NEXT:     ]
-; EMPTY-NEXT:   }
-; EMPTY-NEXT: ]
-; EMPTY:      New FPO [
-; EMPTY-NEXT:   {
-; EMPTY-NEXT:     Offset: 4112
-; EMPTY-NEXT:     Size: 10
-; EMPTY-NEXT:     Number of locals: 0
-; EMPTY-NEXT:     Number of params: 0
-; EMPTY-NEXT:     Size of Prolog: 0
-; EMPTY-NEXT:     Number of Saved Registers: 0
-; EMPTY-NEXT:     Has SEH: No
-; EMPTY-NEXT:     Use BP: No
-; EMPTY-NEXT:     Frame Pointer: 0
-; EMPTY-NEXT:   }
-; EMPTY-NEXT:   {
-; EMPTY-NEXT:     Offset: 0
-; EMPTY-NEXT:     Size: 134
-; EMPTY-NEXT:     Number of locals: 3
-; EMPTY-NEXT:     Number of params: 4
-; EMPTY-NEXT:     Size of Prolog: 0
-; EMPTY-NEXT:     Number of Saved Registers: 0
-; EMPTY-NEXT:     Has SEH: No
-; EMPTY-NEXT:     Use BP: No
-; EMPTY-NEXT:     Frame Pointer: 0
-; EMPTY-NEXT:   }
-; EMPTY-NEXT: ]
-
-; ALL: FileHeaders {
-; ALL:   BlockSize: 4096
-; ALL:   FreeBlockMap: 2
-; ALL:   NumBlocks: 25
-; ALL:   NumDirectoryBytes: 136
-; ALL:   Unknown1: 0
-; ALL:   BlockMapAddr: 24
-; ALL:   NumDirectoryBlocks: 1
-; ALL:   DirectoryBlocks: [23]
-; ALL:   NumStreams: 17
-; ALL: }
-; ALL: Streams [
-; ALL:   Stream 0: [Old MSF Directory] (40 bytes)
-; ALL:   Stream 1: [PDB Stream] (118 bytes)
-; ALL:   Stream 2: [TPI Stream] (5392 bytes)
-; ALL:   Stream 3: [DBI Stream] (739 bytes)
-; ALL:   Stream 4: [IPI Stream] (784 bytes)
-; ALL:   Stream 5: [Named Stream "/LinkInfo"] (0 bytes)
-; ALL:   Stream 6: [Global Symbol Hash] (556 bytes)
-; ALL:   Stream 7: [Public Symbol Hash] (604 bytes)
-; ALL:   Stream 8: [Public Symbol Records] (104 bytes)
-; ALL:   Stream 9: [Named Stream "/src/headerblock"] (0 bytes)
-; ALL:   Stream 10: [Section Header Data] (160 bytes)
-; ALL:   Stream 11: [New FPO Data] (32 bytes)
-; ALL:   Stream 12: [Module "d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj"] (308 bytes)
-; ALL:   Stream 13: [Named Stream "/names"] (239 bytes)
-; ALL:   Stream 14: [Module "* Linker *"] (520 bytes)
-; ALL:   Stream 15: [TPI Hash] (308 bytes)
-; ALL:   Stream 16: [IPI Hash] (68 bytes)
-; ALL: ]
-; ALL: Msf Free Pages: [3, 4, 5, 8, 9]
-; ALL: Orphaned Pages: []
-; ALL: Multiply Used Pages: []
-; ALL: Use After Free Pages: []
-; ALL: StreamBlocks [
-; ALL:   Stream 0: [8]
-; ALL:   Stream 1: [19]
-; ALL:   Stream 2: [18, 17]
-; ALL:   Stream 3: [14]
-; ALL:   Stream 4: [20]
-; ALL:   Stream 5: []
-; ALL:   Stream 6: [11]
-; ALL:   Stream 7: [13]
-; ALL:   Stream 8: [12]
-; ALL:   Stream 9: []
-; ALL:   Stream 10: [10]
-; ALL:   Stream 11: [15]
-; ALL:   Stream 12: [6]
-; ALL:   Stream 13: [16]
-; ALL:   Stream 14: [7]
-; ALL:   Stream 15: [21]
-; ALL:   Stream 16: [22]
-; ALL: ]
-; ALL: PDB Stream {
-; ALL:   Version: 20000404
-; ALL:   Signature: 0x54E507E2
-; ALL:   Age: 1
-; ALL:   Guid: {0B355641-86A0-A249-896F-9988FAE52FF0}
-; ALL:   Features: 0x1
-; ALL: }
-; ALL: Type Info Stream (IPI) {
-; ALL:   IPI Version: 20040203
-; ALL:   Record count: 15
-; ALL:   Records [
-; ALL:     {
-; ALL:       UdtModSourceLine (0x1000) {
-; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UDT: __vc_attributes::threadingAttribute (0x100B)
-; ALL:         SourceFile: <unknown simple type> (0x1)
-; ALL:         LineNumber: 481
-; ALL:         Module: 1
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       UdtModSourceLine (0x1001) {
-; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UDT: __vc_attributes::event_receiverAttribute (0x1017)
-; ALL:         SourceFile: <unknown simple type> (0x1)
-; ALL:         LineNumber: 194
-; ALL:         Module: 1
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       UdtModSourceLine (0x1002) {
-; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UDT: __vc_attributes::aggregatableAttribute (0x1021)
-; ALL:         SourceFile: <unknown simple type> (0x1)
-; ALL:         LineNumber: 603
-; ALL:         Module: 1
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       UdtModSourceLine (0x1003) {
-; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UDT: __vc_attributes::event_sourceAttribute (0x102C)
-; ALL:         SourceFile: <unknown simple type> (0x1)
-; ALL:         LineNumber: 1200
-; ALL:         Module: 1
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       UdtModSourceLine (0x1004) {
-; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UDT: __vc_attributes::moduleAttribute (0x103A)
-; ALL:         SourceFile: <unknown simple type> (0x1)
-; ALL:         LineNumber: 540
-; ALL:         Module: 1
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       UdtModSourceLine (0x1005) {
-; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UDT: __vc_attributes::helper_attributes::usageAttribute (0x1042)
-; ALL:         SourceFile: <unknown simple type> (0x1)
-; ALL:         LineNumber: 108
-; ALL:         Module: 1
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       UdtModSourceLine (0x1006) {
-; ALL:         TypeLeafKind: LF_UDT_MOD_SRC_LINE (0x1607)
-; ALL:         UDT: __vc_attributes::helper_attributes::v1_alttypeAttribute (0x104A)
-; ALL:         SourceFile: <unknown simple type> (0x1)
-; ALL:         LineNumber: 96
-; ALL:         Module: 1
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       StringId (0x1007) {
-; ALL:         TypeLeafKind: LF_STRING_ID (0x1605)
-; ALL:         Id: 0x0
-; ALL:         StringData: d:\src\llvm\test\DebugInfo\PDB\Inputs
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       StringId (0x1008) {
-; ALL:         TypeLeafKind: LF_STRING_ID (0x1605)
-; ALL:         Id: 0x0
-; ALL:         StringData: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       StringId (0x1009) {
-; ALL:         TypeLeafKind: LF_STRING_ID (0x1605)
-; ALL:         Id: 0x0
-; ALL:         StringData: empty.cpp
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       StringId (0x100A) {
-; ALL:         TypeLeafKind: LF_STRING_ID (0x1605)
-; ALL:         Id: 0x0
-; ALL:         StringData: d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       StringId (0x100B) {
-; ALL:         TypeLeafKind: LF_STRING_ID (0x1605)
-; ALL:         Id: 0x0
-; ALL:         StringData: -Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       StringList (0x100C) {
-; ALL:         TypeLeafKind: LF_SUBSTR_LIST (0x1604)
-; ALL:         NumStrings: 1
-; ALL:         Strings [
-; ALL:           String: -Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows (0x100B)
-; ALL:         ]
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       StringId (0x100D) {
-; ALL:         TypeLeafKind: LF_STRING_ID (0x1605)
-; ALL:         Id: "-Zi -MT -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\INCLUDE" -I"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\ATLMFC\INCLUDE" -I"C:\Program Files (x86)\Windows Kits\8.1\include\shared" -I"C:\Program Files (x86)\Windows" (0x100C)
-; ALL:         StringData:  Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       BuildInfo (0x100E) {
-; ALL:         TypeLeafKind: LF_BUILDINFO (0x1603)
-; ALL:         NumArgs: 5
-; ALL:         Arguments [
-; ALL:           ArgType: d:\src\llvm\test\DebugInfo\PDB\Inputs (0x1007)
-; ALL:           ArgType: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.exe (0x1008)
-; ALL:           ArgType: empty.cpp (0x1009)
-; ALL:           ArgType: d:\src\llvm\test\DebugInfo\PDB\Inputs\vc120.pdb (0x100A)
-; ALL:           ArgType:  Kits\8.1\include\um" -I"C:\Program Files (x86)\Windows Kits\8.1\include\winrt" -TP -X (0x100D)
-; ALL:         ]
-; ALL:       }
-; ALL:     }
-; ALL:   ]
-; ALL: }
-; ALL: DBI Stream {
-; ALL:   Dbi Version: 19990903
-; ALL:   Age: 1
-; ALL:   Incremental Linking: Yes
-; ALL:   Has CTypes: No
-; ALL:   Is Stripped: No
-; ALL:   Machine Type: x86
-; ALL:   Symbol Record Stream Index: 8
-; ALL:   Public Symbol Stream Index: 7
-; ALL:   Global Symbol Stream Index: 6
-; ALL:   Toolchain Version: 12.0
-; ALL:   mspdb120.dll version: 12.0.31101
-; ALL:   Modules [
-; ALL:     {
-; ALL:       Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-; ALL:       Debug Stream Index: 12
-; ALL:       Object File Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-; ALL:       Num Files: 1
-; ALL:       Source File Name Idx: 0
-; ALL:       Pdb File Name Idx: 0
-; ALL:       Line Info Byte Size: 0
-; ALL:       C13 Line Info Byte Size: 88
-; ALL:       Symbol Byte Size: 208
-; ALL:       Type Server Index: 0
-; ALL:       Has EC Info: No
-; ALL:       1 Contributing Source Files [
-; ALL:         d:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp
-; ALL:       ]
-; ALL:       Symbols [
-; ALL:         {
-; ALL:           ObjectName {
-; ALL:             Signature: 0x0
-; ALL:             ObjectName: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           CompilerFlags3 {
-; ALL:             Language: Cpp (0x1)
-; ALL:             Flags [ (0x2000)
-; ALL:               SecurityChecks (0x2000)
-; ALL:             ]
-; ALL:             Machine: Pentium3 (0x7)
-; ALL:             FrontendVersion: 18.0.31101.0
-; ALL:             BackendVersion: 18.0.31101.0
-; ALL:             VersionName: Microsoft (R) Optimizing Compiler
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           ProcStart {
-; ALL:             PtrParent: 0x0
-; ALL:             PtrEnd: 0xC4
-; ALL:             PtrNext: 0x0
-; ALL:             CodeSize: 0xA
-; ALL:             DbgStart: 0x3
-; ALL:             DbgEnd: 0x8
-; ALL:             FunctionType: int () (0x1001)
-; ALL:             Segment: 0x1
-; ALL:             Flags [ (0x1)
-; ALL:               HasFP (0x1)
-; ALL:             ]
-; ALL:             DisplayName: main
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           FrameProc {
-; ALL:             TotalFrameBytes: 0x0
-; ALL:             PaddingFrameBytes: 0x0
-; ALL:             OffsetToPadding: 0x0
-; ALL:             BytesOfCalleeSavedRegisters: 0x0
-; ALL:             OffsetOfExceptionHandler: 0x0
-; ALL:             SectionIdOfExceptionHandler: 0x0
-; ALL:             Flags [ (0x128200)
-; ALL:               AsynchronousExceptionHandling (0x200)
-; ALL:               OptimizedForSpeed (0x100000)
-; ALL:             ]
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           BlockEnd {
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           BuildInfo {
-; ALL:             BuildId: 4110
-; ALL:           }
-; ALL:         }
-; ALL:       ]
-; ALL:     }
-; ALL:     {
-; ALL:       Name: * Linker *
-; ALL:       Debug Stream Index: 14
-; ALL:       Object File Name:
-; ALL:       Num Files: 0
-; ALL:       Source File Name Idx: 0
-; ALL:       Pdb File Name Idx: 1
-; ALL:       Line Info Byte Size: 0
-; ALL:       C13 Line Info Byte Size: 0
-; ALL:       Symbol Byte Size: 516
-; ALL:       Type Server Index: 0
-; ALL:       Has EC Info: No
-; ALL:       0 Contributing Source Files [
-; ALL:       ]
-; ALL:       Symbols [
-; ALL:         {
-; ALL:           ObjectName {
-; ALL:             Signature: 0x0
-; ALL:             ObjectName: * Linker *
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           CompilerFlags3 {
-; ALL:             Language: Link (0x7)
-; ALL:             Flags [ (0x0)
-; ALL:             ]
-; ALL:             Machine: Intel80386 (0x3)
-; ALL:             FrontendVersion: 0.0.0.0
-; ALL:             BackendVersion: 12.0.31101.0
-; ALL:             VersionName: Microsoft (R) LINK
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           EnvBlock {
-; ALL:             Entries [
-; ALL:               cwd
-; ALL:               d:\src\llvm\test\DebugInfo\PDB\Inputs
-; ALL:               exe
-; ALL:               C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\link.exe
-; ALL:               pdb
-; ALL:               d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.pdb
-; ALL:             ]
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           Trampoline {
-; ALL:             Type: TrampIncremental (0x0)
-; ALL:             Size: 5
-; ALL:             ThunkOff: 5
-; ALL:             TargetOff: 16
-; ALL:             ThunkSection: 1
-; ALL:             TargetSection: 1
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           Section {
-; ALL:             SectionNumber: 1
-; ALL:             Alignment: 12
-; ALL:             Rva: 4096
-; ALL:             Length: 4122
-; ALL:             Characteristics [ (0x60000020)
-; ALL:               IMAGE_SCN_CNT_CODE (0x20)
-; ALL:               IMAGE_SCN_MEM_EXECUTE (0x20000000)
-; ALL:               IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:             ]
-; ALL:             Name: .text
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           COFF Group {
-; ALL:             Size: 4122
-; ALL:             Characteristics [ (0x60000020)
-; ALL:               IMAGE_SCN_CNT_CODE (0x20)
-; ALL:               IMAGE_SCN_MEM_EXECUTE (0x20000000)
-; ALL:               IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:             ]
-; ALL:             Offset: 0
-; ALL:             Segment: 1
-; ALL:             Name: .text$mn
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           Section {
-; ALL:             SectionNumber: 2
-; ALL:             Alignment: 12
-; ALL:             Rva: 12288
-; ALL:             Length: 690
-; ALL:             Characteristics [ (0x40000040)
-; ALL:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:               IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:             ]
-; ALL:             Name: .rdata
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           COFF Group {
-; ALL:             Size: 323
-; ALL:             Characteristics [ (0x40000040)
-; ALL:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:               IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:             ]
-; ALL:             Offset: 0
-; ALL:             Segment: 2
-; ALL:             Name: .rdata
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           COFF Group {
-; ALL:             Size: 0
-; ALL:             Characteristics [ (0x40000040)
-; ALL:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:               IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:             ]
-; ALL:             Offset: 323
-; ALL:             Segment: 2
-; ALL:             Name: .edata
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           COFF Group {
-; ALL:             Size: 366
-; ALL:             Characteristics [ (0x40000040)
-; ALL:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:               IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:             ]
-; ALL:             Offset: 324
-; ALL:             Segment: 2
-; ALL:             Name: .rdata$debug
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           Section {
-; ALL:             SectionNumber: 3
-; ALL:             Alignment: 12
-; ALL:             Rva: 16384
-; ALL:             Length: 4
-; ALL:             Characteristics [ (0xC0000040)
-; ALL:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:               IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:               IMAGE_SCN_MEM_WRITE (0x80000000)
-; ALL:             ]
-; ALL:             Name: .data
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           COFF Group {
-; ALL:             Size: 4
-; ALL:             Characteristics [ (0xC0000080)
-; ALL:               IMAGE_SCN_CNT_UNINITIALIZED_DATA (0x80)
-; ALL:               IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:               IMAGE_SCN_MEM_WRITE (0x80000000)
-; ALL:             ]
-; ALL:             Offset: 0
-; ALL:             Segment: 3
-; ALL:             Name: .bss
-; ALL:           }
-; ALL:         }
-; ALL:         {
-; ALL:           Section {
-; ALL:             SectionNumber: 4
-; ALL:             Alignment: 12
-; ALL:             Rva: 20480
-; ALL:             Length: 8
-; ALL:             Characteristics [ (0x42000040)
-; ALL:               IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:               IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
-; ALL:               IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:             ]
-; ALL:             Name: .reloc
-; ALL:           }
-; ALL:         }
-; ALL:       ]
-; ALL:     }
-; ALL:   ]
-; ALL: }
-; ALL: Section Contributions [
-; ALL:   Contribution {
-; ALL:     ISect: 1
-; ALL:     Off: 0
-; ALL:     Size: 10
-; ALL:     Characteristics [ (0x60000020)
-; ALL:       IMAGE_SCN_CNT_CODE (0x20)
-; ALL:       IMAGE_SCN_MEM_EXECUTE (0x20000000)
-; ALL:       IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:     ]
-; ALL:     Module {
-; ALL:       Index: 1
-; ALL:       Name: * Linker *
-; ALL:     }
-; ALL:     Data CRC: 0
-; ALL:     Reloc CRC: 0
-; ALL:   }
-; ALL:   Contribution {
-; ALL:     ISect: 1
-; ALL:     Off: 16
-; ALL:     Size: 10
-; ALL:     Characteristics [ (0x60500020)
-; ALL:       IMAGE_SCN_ALIGN_16BYTES (0x500000)
-; ALL:       IMAGE_SCN_CNT_CODE (0x20)
-; ALL:       IMAGE_SCN_MEM_EXECUTE (0x20000000)
-; ALL:       IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:     ]
-; ALL:     Module {
-; ALL:       Index: 0
-; ALL:       Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-; ALL:     }
-; ALL:     Data CRC: 3617027124
-; ALL:     Reloc CRC: 0
-; ALL:   }
-; ALL:   Contribution {
-; ALL:     ISect: 2
-; ALL:     Off: 0
-; ALL:     Size: 56
-; ALL:     Characteristics [ (0x40000040)
-; ALL:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:       IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:     ]
-; ALL:     Module {
-; ALL:       Index: 1
-; ALL:       Name: * Linker *
-; ALL:     }
-; ALL:     Data CRC: 0
-; ALL:     Reloc CRC: 0
-; ALL:   }
-; ALL:   Contribution {
-; ALL:     ISect: 2
-; ALL:     Off: 324
-; ALL:     Size: 72
-; ALL:     Characteristics [ (0x40300040)
-; ALL:       IMAGE_SCN_ALIGN_4BYTES (0x300000)
-; ALL:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:       IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:     ]
-; ALL:     Module {
-; ALL:       Index: 1
-; ALL:       Name: * Linker *
-; ALL:     }
-; ALL:     Data CRC: 0
-; ALL:     Reloc CRC: 0
-; ALL:   }
-; ALL:   Contribution {
-; ALL:     ISect: 2
-; ALL:     Off: 396
-; ALL:     Size: 20
-; ALL:     Characteristics [ (0x40300040)
-; ALL:       IMAGE_SCN_ALIGN_4BYTES (0x300000)
-; ALL:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:       IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:     ]
-; ALL:     Module {
-; ALL:       Index: 1
-; ALL:       Name: * Linker *
-; ALL:     }
-; ALL:     Data CRC: 0
-; ALL:     Reloc CRC: 0
-; ALL:   }
-; ALL:   Contribution {
-; ALL:     ISect: 3
-; ALL:     Off: 0
-; ALL:     Size: 4
-; ALL:     Characteristics [ (0xC0300080)
-; ALL:       IMAGE_SCN_ALIGN_4BYTES (0x300000)
-; ALL:       IMAGE_SCN_CNT_UNINITIALIZED_DATA (0x80)
-; ALL:       IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:       IMAGE_SCN_MEM_WRITE (0x80000000)
-; ALL:     ]
-; ALL:     Module {
-; ALL:       Index: 0
-; ALL:       Name: d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.obj
-; ALL:     }
-; ALL:     Data CRC: 0
-; ALL:     Reloc CRC: 0
-; ALL:   }
-; ALL: ]
-; ALL: Section Map [
-; ALL:   Entry {
-; ALL:     Flags [ (0x10D)
-; ALL:       AddressIs32Bit (0x8)
-; ALL:       Execute (0x4)
-; ALL:       IsSelector (0x100)
-; ALL:       Read (0x1)
-; ALL:     ]
-; ALL:     Ovl: 0
-; ALL:     Group: 0
-; ALL:     Frame: 1
-; ALL:     SecName: 65535
-; ALL:     ClassName: 65535
-; ALL:     Offset: 0
-; ALL:     SecByteLength: 4122
-; ALL:   }
-; ALL:   Entry {
-; ALL:     Flags [ (0x109)
-; ALL:       AddressIs32Bit (0x8)
-; ALL:       IsSelector (0x100)
-; ALL:       Read (0x1)
-; ALL:     ]
-; ALL:     Ovl: 0
-; ALL:     Group: 0
-; ALL:     Frame: 2
-; ALL:     SecName: 65535
-; ALL:     ClassName: 65535
-; ALL:     Offset: 0
-; ALL:     SecByteLength: 690
-; ALL:   }
-; ALL:   Entry {
-; ALL:     Flags [ (0x10B)
-; ALL:       AddressIs32Bit (0x8)
-; ALL:       IsSelector (0x100)
-; ALL:       Read (0x1)
-; ALL:       Write (0x2)
-; ALL:     ]
-; ALL:     Ovl: 0
-; ALL:     Group: 0
-; ALL:     Frame: 3
-; ALL:     SecName: 65535
-; ALL:     ClassName: 65535
-; ALL:     Offset: 0
-; ALL:     SecByteLength: 4
-; ALL:   }
-; ALL:   Entry {
-; ALL:     Flags [ (0x109)
-; ALL:       AddressIs32Bit (0x8)
-; ALL:       IsSelector (0x100)
-; ALL:       Read (0x1)
-; ALL:     ]
-; ALL:     Ovl: 0
-; ALL:     Group: 0
-; ALL:     Frame: 4
-; ALL:     SecName: 65535
-; ALL:     ClassName: 65535
-; ALL:     Offset: 0
-; ALL:     SecByteLength: 8
-; ALL:   }
-; ALL:   Entry {
-; ALL:     Flags [ (0x208)
-; ALL:       AddressIs32Bit (0x8)
-; ALL:       IsAbsoluteAddress (0x200)
-; ALL:     ]
-; ALL:     Ovl: 0
-; ALL:     Group: 0
-; ALL:     Frame: 0
-; ALL:     SecName: 65535
-; ALL:     ClassName: 65535
-; ALL:     Offset: 0
-; ALL:     SecByteLength: 4294967295
-; ALL:   }
-; ALL: ]
-; ALL: Globals Stream {
-; ALL:   Stream number: 6
-; ALL:   Number of buckets: 2
-; ALL:   Hash Buckets: [0, 12]
-; ALL: }
-; ALL: Publics Stream {
-; ALL:   Stream number: 7
-; ALL:   SymHash: 556
-; ALL:   AddrMap: 8
-; ALL:   Number of buckets: 2
-; ALL:   Hash Buckets: [0, 12]
-; ALL:   Address Map: [36, 0]
-; ALL:   Thunk Map: [4112]
-; ALL:   Section Offsets: [4096, 1]
-; ALL:   Symbols [
-; ALL:     {
-; ALL:       PublicSym {
-; ALL:         Type: 0
-; ALL:         Seg: 3
-; ALL:         Off: 0
-; ALL:         Name: ?__purecall@@3PAXA
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       PublicSym {
-; ALL:         Type: 2
-; ALL:         Seg: 1
-; ALL:         Off: 16
-; ALL:         Name: _main
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       ProcRef {
-; ALL:         SumName: 0
-; ALL:         SymOffset: 120
-; ALL:         Mod: 1
-; ALL:         Name: main
-; ALL:       }
-; ALL:     }
-; ALL:     {
-; ALL:       DataSym {
-; ALL:         Type: void* (0x403)
-; ALL:         DisplayName: __purecall
-; ALL:       }
-; ALL:     }
-; ALL:   ]
-; ALL: }
-; ALL: Section Headers [
-; ALL:   {
-; ALL:     Name: .text
-; ALL:     Virtual Size: 4122
-; ALL:     Virtual Address: 4096
-; ALL:     Size of Raw Data: 4608
-; ALL:     File Pointer to Raw Data: 1024
-; ALL:     File Pointer to Relocations: 0
-; ALL:     File Pointer to Linenumbers: 0
-; ALL:     Number of Relocations: 0
-; ALL:     Number of Linenumbers: 0
-; ALL:     Characteristics [ (0x60000020)
-; ALL:       IMAGE_SCN_CNT_CODE (0x20)
-; ALL:       IMAGE_SCN_MEM_EXECUTE (0x20000000)
-; ALL:       IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:     ]
-; ALL:   }
-; ALL:   {
-; ALL:     Name: .rdata
-; ALL:     Virtual Size: 690
-; ALL:     Virtual Address: 12288
-; ALL:     Size of Raw Data: 1024
-; ALL:     File Pointer to Raw Data: 5632
-; ALL:     File Pointer to Relocations: 0
-; ALL:     File Pointer to Linenumbers: 0
-; ALL:     Number of Relocations: 0
-; ALL:     Number of Linenumbers: 0
-; ALL:     Characteristics [ (0x40000040)
-; ALL:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:       IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:     ]
-; ALL:   }
-; ALL:   {
-; ALL:     Name: .data
-; ALL:     Virtual Size: 4
-; ALL:     Virtual Address: 16384
-; ALL:     Size of Raw Data: 0
-; ALL:     File Pointer to Raw Data: 0
-; ALL:     File Pointer to Relocations: 0
-; ALL:     File Pointer to Linenumbers: 0
-; ALL:     Number of Relocations: 0
-; ALL:     Number of Linenumbers: 0
-; ALL:     Characteristics [ (0xC0000040)
-; ALL:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:       IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:       IMAGE_SCN_MEM_WRITE (0x80000000)
-; ALL:     ]
-; ALL:   }
-; ALL:   {
-; ALL:     Name: .reloc
-; ALL:     Virtual Size: 8
-; ALL:     Virtual Address: 20480
-; ALL:     Size of Raw Data: 512
-; ALL:     File Pointer to Raw Data: 6656
-; ALL:     File Pointer to Relocations: 0
-; ALL:     File Pointer to Linenumbers: 0
-; ALL:     Number of Relocations: 0
-; ALL:     Number of Linenumbers: 0
-; ALL:     Characteristics [ (0x42000040)
-; ALL:       IMAGE_SCN_CNT_INITIALIZED_DATA (0x40)
-; ALL:       IMAGE_SCN_MEM_DISCARDABLE (0x2000000)
-; ALL:       IMAGE_SCN_MEM_READ (0x40000000)
-; ALL:     ]
-; ALL:   }
-; ALL: ]
-
-; BIG:      FileHeaders {
-; BIG-NEXT:   BlockSize: 4096
-; BIG-NEXT:   FreeBlockMap: 2
-; BIG-NEXT:   NumBlocks: 99
-; BIG-NEXT:   NumDirectoryBytes: 616
-; BIG-NEXT:   Unknown1: 0
-; BIG-NEXT:   BlockMapAddr: 97
-; BIG-NEXT:   NumDirectoryBlocks: 1
-; BIG-NEXT:   DirectoryBlocks: [96]
-; BIG-NEXT:   NumStreams: 64
-; BIG-NEXT: }
-; BIG-NEXT: PDB Stream {
-; BIG-NEXT:   Version: 20000404
-; BIG-NEXT:   Signature: 0x571FFE67
-; BIG-NEXT:   Age: 1
-; BIG-NEXT:   Guid: {880ECC89-DF81-0B4F-839C-58CBD052E937}
-; BIG-NEXT:   Features: 0x1
-; BIG-NEXT:   Named Streams {
-; BIG-NEXT:     /names: 13
-; BIG-NEXT:     /LinkInfo: 5
-; BIG-NEXT:     /src/headerblock: 61
-; BIG-NEXT:   }
-; BIG-NEXT: }
-; BIG-NEXT: DBI Stream {
-; BIG-NEXT:   Dbi Version: 19990903
-; BIG-NEXT:   Age: 1
-; BIG-NEXT:   Incremental Linking: Yes
-; BIG-NEXT:   Has CTypes: No
-; BIG-NEXT:   Is Stripped: No
-; BIG-NEXT:   Machine Type: x86
-; BIG-NEXT:   Symbol Record Stream Index: 9
-; BIG-NEXT:   Public Symbol Stream Index: 8
-; BIG-NEXT:   Global Symbol Stream Index: 7
-; BIG-NEXT:   Toolchain Version: 14.0
-; BIG-NEXT:   mspdb140.dll version: 14.0.23918
-; BIG-NEXT:   Modules [
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj
-; BIG-NEXT:       Debug Stream Index: 12
-; BIG-NEXT:       Object File Name: D:\src\llvm\test\tools\llvm-symbolizer\pdb\Inputs\test.obj
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 400
-; BIG-NEXT:       Symbol Byte Size: 872
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         d:\src\llvm\test\tools\llvm-symbolizer\pdb\inputs\test.cpp
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_cpu_disp_.obj
-; BIG-NEXT:       Debug Stream Index: 14
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 14
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 344
-; BIG-NEXT:       Symbol Byte Size: 720
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       14 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\misc\i386\cpu_disp.c
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_initsect_.obj
-; BIG-NEXT:       Debug Stream Index: 15
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 19
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 464
-; BIG-NEXT:       Symbol Byte Size: 464
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       19 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\rtc\initsect.cpp
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\stdlib.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_sehprolg4_.obj
-; BIG-NEXT:       Debug Stream Index: 16
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 1
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 32
-; BIG-NEXT:       Symbol Byte Size: 444
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\eh\i386\sehprolg4.asm
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_chandler4gs_.obj
-; BIG-NEXT:       Debug Stream Index: 17
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 14
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 344
-; BIG-NEXT:       Symbol Byte Size: 604
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       14 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\eh\i386\chandler4gs.c
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\_secchk_.obj
-; BIG-NEXT:       Debug Stream Index: 18
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 14
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 344
-; BIG-NEXT:       Symbol Byte Size: 344
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       14 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\eh\i386\secchk.c
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_cookie.obj
-; BIG-NEXT:       Debug Stream Index: 19
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 9
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 224
-; BIG-NEXT:       Symbol Byte Size: 160
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       9 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_report.obj
-; BIG-NEXT:       Debug Stream Index: 20
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 14
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 1392
-; BIG-NEXT:       Symbol Byte Size: 1144
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       14 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\gs\gs_report.c
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\gs_support.obj
-; BIG-NEXT:       Debug Stream Index: 21
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 10
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 432
-; BIG-NEXT:       Symbol Byte Size: 552
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       10 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\gs\gs_support.c
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\checkcfg.obj
-; BIG-NEXT:       Debug Stream Index: 22
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 14
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 392
-; BIG-NEXT:       Symbol Byte Size: 328
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       14 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\misc\checkcfg.c
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\guard_support.obj
-; BIG-NEXT:       Debug Stream Index: 23
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 10
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 352
-; BIG-NEXT:       Symbol Byte Size: 424
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       10 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\misc\guard_support.c
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\loadcfg.obj
-; BIG-NEXT:       Debug Stream Index: 24
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 9
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 224
-; BIG-NEXT:       Symbol Byte Size: 156
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       9 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_dtor.obj
-; BIG-NEXT:       Debug Stream Index: 25
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 11
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 328
-; BIG-NEXT:       Symbol Byte Size: 272
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       11 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\math.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\utility\dyn_tls_dtor.c
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\dyn_tls_init.obj
-; BIG-NEXT:       Debug Stream Index: 26
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 10
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 304
-; BIG-NEXT:       Symbol Byte Size: 272
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       10 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\utility\dyn_tls_init.c
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr_detection.obj
-; BIG-NEXT:       Debug Stream Index: 27
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 88
-; BIG-NEXT:       Symbol Byte Size: 276
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\utility\matherr_detection.c
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_detection.obj
-; BIG-NEXT:       Debug Stream Index: 28
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 88
-; BIG-NEXT:       Symbol Byte Size: 268
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\utility\ucrt_detection.c
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\argv_mode.obj
-; BIG-NEXT:       Debug Stream Index: 29
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 88
-; BIG-NEXT:       Symbol Byte Size: 260
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\defaults\argv_mode.cpp
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\commit_mode.obj
-; BIG-NEXT:       Debug Stream Index: 30
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 88
-; BIG-NEXT:       Symbol Byte Size: 260
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\defaults\commit_mode.cpp
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_local_stdio_options.obj
-; BIG-NEXT:       Debug Stream Index: 31
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 24
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 760
-; BIG-NEXT:       Symbol Byte Size: 620
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       24 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\defaults\default_local_stdio_options.cpp
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\math.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\stdlib.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\stdio.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstdio.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_stdio_config.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vadefs.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\denormal_control.obj
-; BIG-NEXT:       Debug Stream Index: 32
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 80
-; BIG-NEXT:       Symbol Byte Size: 272
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\defaults\denormal_control.cpp
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\env_mode.obj
-; BIG-NEXT:       Debug Stream Index: 33
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 88
-; BIG-NEXT:       Symbol Byte Size: 268
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\defaults\env_mode.cpp
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\file_mode.obj
-; BIG-NEXT:       Debug Stream Index: 34
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 88
-; BIG-NEXT:       Symbol Byte Size: 260
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\defaults\file_mode.cpp
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\invalid_parameter_handler.obj
-; BIG-NEXT:       Debug Stream Index: 35
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 80
-; BIG-NEXT:       Symbol Byte Size: 292
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\defaults\invalid_parameter_handler.cpp
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\matherr.obj
-; BIG-NEXT:       Debug Stream Index: 36
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 2
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 112
-; BIG-NEXT:       Symbol Byte Size: 312
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       2 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\defaults\matherr.cpp
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\math.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\new_mode.obj
-; BIG-NEXT:       Debug Stream Index: 37
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 88
-; BIG-NEXT:       Symbol Byte Size: 260
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\defaults\new_mode.cpp
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\thread_locale.obj
-; BIG-NEXT:       Debug Stream Index: 38
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 88
-; BIG-NEXT:       Symbol Byte Size: 272
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\defaults\thread_locale.cpp
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\tncleanup.obj
-; BIG-NEXT:       Debug Stream Index: 39
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 21
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 624
-; BIG-NEXT:       Symbol Byte Size: 432
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       21 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\eh\tncleanup.cpp
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vcruntime_typeinfo.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vcruntime_exception.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\stdlib.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\exe_main.obj
-; BIG-NEXT:       Debug Stream Index: 40
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 26
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 1668
-; BIG-NEXT:       Symbol Byte Size: 2364
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       26 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\startup\exe_main.cpp
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\math.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\stdio.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstdio.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_stdio_config.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\stdlib.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vadefs.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\initializers.obj
-; BIG-NEXT:       Debug Stream Index: 41
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 20
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 488
-; BIG-NEXT:       Symbol Byte Size: 196
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       20 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\math.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\stdlib.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\evntprov.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility.obj
-; BIG-NEXT:       Debug Stream Index: 42
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 20
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 2500
-; BIG-NEXT:       Symbol Byte Size: 6020
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       20 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\utility\utility.cpp
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\math.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\stdlib.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\ucrt_stubs.obj
-; BIG-NEXT:       Debug Stream Index: 43
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 1
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 368
-; BIG-NEXT:       Symbol Byte Size: 988
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       1 Contributing Source Files [
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\utility\ucrt_stubs.cpp
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\utility_desktop.obj
-; BIG-NEXT:       Debug Stream Index: 44
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 20
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 1240
-; BIG-NEXT:       Symbol Byte Size: 1844
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       20 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\utility\utility_desktop.cpp
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\math.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\stdlib.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: f:\dd\vctools\crt\vcstartup\build\md\msvcrt_kernel32\obj1r\i386\default_precision.obj
-; BIG-NEXT:       Debug Stream Index: 45
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\MSVCRT.lib
-; BIG-NEXT:       Num Files: 20
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 552
-; BIG-NEXT:       Symbol Byte Size: 356
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       20 Contributing Source Files [
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\string.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memory.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_memcpy_s.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\src\defaults\default_precision.cpp
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\internal_shared.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\vcruntime_new.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winuser.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\malloc.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\basetsd.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcruntime\inc\i386\xmmintrin.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winbase.h
-; BIG-NEXT:         f:\dd\vctools\crt\vcstartup\inc\vcstartup_internal.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\math.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\stdlib.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\stralign.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winnt.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\ctype.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\guiddef.h
-; BIG-NEXT:         f:\dd\externalapis\unifiedcrt\inc\corecrt_wstring.h
-; BIG-NEXT:         f:\dd\externalapis\windows\8.1\sdk\inc\winerror.h
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: Import:KERNEL32.dll
-; BIG-NEXT:       Debug Stream Index: 47
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 1616
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: KERNEL32.dll
-; BIG-NEXT:       Debug Stream Index: 46
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\um\x86\kernel32.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 208
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: Import:VCRUNTIME140.dll
-; BIG-NEXT:       Debug Stream Index: 49
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 664
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: VCRUNTIME140.dll
-; BIG-NEXT:       Debug Stream Index: 48
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\MI0E91~1.0\VC\LIB\vcruntime.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 148
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: Import:api-ms-win-crt-stdio-l1-1-0.dll
-; BIG-NEXT:       Debug Stream Index: 59
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 264
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: api-ms-win-crt-stdio-l1-1-0.dll
-; BIG-NEXT:       Debug Stream Index: 58
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 180
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: Import:api-ms-win-crt-runtime-l1-1-0.dll
-; BIG-NEXT:       Debug Stream Index: 57
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 3068
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: api-ms-win-crt-runtime-l1-1-0.dll
-; BIG-NEXT:       Debug Stream Index: 56
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 188
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: Import:api-ms-win-crt-math-l1-1-0.dll
-; BIG-NEXT:       Debug Stream Index: 55
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 140
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: api-ms-win-crt-math-l1-1-0.dll
-; BIG-NEXT:       Debug Stream Index: 54
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 180
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: Import:api-ms-win-crt-locale-l1-1-0.dll
-; BIG-NEXT:       Debug Stream Index: 53
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 148
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: api-ms-win-crt-locale-l1-1-0.dll
-; BIG-NEXT:       Debug Stream Index: 52
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 188
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: Import:api-ms-win-crt-heap-l1-1-0.dll
-; BIG-NEXT:       Debug Stream Index: 51
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 136
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: api-ms-win-crt-heap-l1-1-0.dll
-; BIG-NEXT:       Debug Stream Index: 50
-; BIG-NEXT:       Object File Name: C:\PROGRA~2\WI3CF2~1\10\Lib\10.0.10586.0\ucrt\x86\ucrt.lib
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 0
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 180
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:     {
-; BIG-NEXT:       Name: * Linker *
-; BIG-NEXT:       Debug Stream Index: 60
-; BIG-NEXT:       Object File Name:
-; BIG-NEXT:       Num Files: 0
-; BIG-NEXT:       Source File Name Idx: 0
-; BIG-NEXT:       Pdb File Name Idx: 55
-; BIG-NEXT:       Line Info Byte Size: 0
-; BIG-NEXT:       C13 Line Info Byte Size: 0
-; BIG-NEXT:       Symbol Byte Size: 3080
-; BIG-NEXT:       Type Server Index: 0
-; BIG-NEXT:       Has EC Info: No
-; BIG-NEXT:       0 Contributing Source Files [
-; BIG-NEXT:       ]
-; BIG-NEXT:     }
-; BIG-NEXT:   ]
-; BIG-NEXT: }
 
-; BAD-BLOCK-SIZE: Native PDB Error: The PDB file is corrupt. Does not contain superblock

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-merge-ids-and-types.test Thu Jun 15 14:34:41 2017
@@ -1,65 +1,51 @@
 ; RUN: llvm-pdbutil yaml2pdb -pdb=%t.1.pdb %p/Inputs/merge-ids-and-types-1.yaml
 ; RUN: llvm-pdbutil yaml2pdb -pdb=%t.2.pdb %p/Inputs/merge-ids-and-types-2.yaml
 ; RUN: llvm-pdbutil merge -pdb=%t.3.pdb %t.1.pdb %t.2.pdb
-; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=TPI-TYPES %s
-; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=INTMAIN %s
-; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=VOIDMAIN %s
-; RUN: llvm-pdbutil raw -ipi-records %t.3.pdb | FileCheck -check-prefix=IPI-TYPES %s
-; RUN: llvm-pdbutil raw -ipi-records %t.3.pdb | FileCheck -check-prefix=IPI-NAMES %s
-; RUN: llvm-pdbutil raw -ipi-records %t.3.pdb | FileCheck -check-prefix=IPI-UDT %s
+; RUN: llvm-pdbutil raw -types %t.3.pdb | FileCheck -check-prefix=TPI-TYPES %s
+; RUN: llvm-pdbutil raw -ids %t.3.pdb | FileCheck -check-prefix=IPI-TYPES %s
 
-TPI-TYPES:     Type Info Stream (TPI)
-TPI-TYPES:     Record count: 9
-TPI-TYPES-DAG: TypeLeafKind: LF_POINTER
-TPI-TYPES-DAG: TypeLeafKind: LF_FIELDLIST
-TPI-TYPES-DAG: TypeLeafKind: LF_ARGLIST
-TPI-TYPES-DAG: TypeLeafKind: LF_STRUCTURE
-TPI-TYPES-DAG: TypeLeafKind: LF_MEMBER
-TPI-TYPES-DAG: TypeLeafKind: LF_POINTER
-TPI-TYPES-DAG: TypeLeafKind: LF_ARGLIST
-TPI-TYPES-DAG: TypeLeafKind: LF_MFUNCTION
-TPI-TYPES-DAG: TypeLeafKind: LF_PROCEDURE
-TPI-TYPES-DAG: TypeLeafKind: LF_PROCEDURE
-TPI-TYPES-DAG: TypeLeafKind: LF_ARGLIST
-
-; Both procedures should use the same arglist even though they have a different
-; return type.
-INTMAIN:      ArgList ([[ID:.*]])
-INTMAIN-NEXT:   TypeLeafKind: LF_ARGLIST
-INTMAIN-NEXT:   NumArgs: 2
-INTMAIN-NEXT:   Arguments [
-INTMAIN-NEXT:     ArgType: int
-INTMAIN-NEXT:     ArgType: char**
-INTMAIN:        TypeLeafKind: LF_PROCEDURE
-INTMAIN:          ReturnType: int
-INTMAIN:          NumParameters: 2
-INTMAIN-NEXT:     ArgListType: (int, char**) ([[ID]])
-
-VOIDMAIN:      ArgList ([[ID:.*]])
-VOIDMAIN-NEXT:   TypeLeafKind: LF_ARGLIST
-VOIDMAIN-NEXT:   NumArgs: 2
-VOIDMAIN-NEXT:   Arguments [
-VOIDMAIN-NEXT:     ArgType: int
-VOIDMAIN-NEXT:     ArgType: char**
-VOIDMAIN:        TypeLeafKind: LF_PROCEDURE
-VOIDMAIN:          ReturnType: void
-VOIDMAIN:          NumParameters: 2
-VOIDMAIN-NEXT:     ArgListType: (int, char**) ([[ID]])
-
-IPI-TYPES:     Type Info Stream (IPI)
-IPI-TYPES:     Record count: 6
-IPI-TYPES-DAG: TypeLeafKind: LF_FUNC_ID
-IPI-TYPES-DAG: TypeLeafKind: LF_MFUNC_ID
-IPI-TYPES-DAG: TypeLeafKind: LF_UDT_MOD_SRC_LINE
-IPI-TYPES-DAG: TypeLeafKind: LF_FUNC_ID
-IPI-TYPES-DAG: TypeLeafKind: LF_FUNC_ID
-IPI-TYPES-DAG: TypeLeafKind: LF_MFUNC_ID
-
-IPI-NAMES-DAG: Name: main
-IPI-NAMES-DAG: Name: FooMethod
-IPI-NAMES-DAG: Name: main2
-IPI-NAMES-DAG: Name: foo
-IPI-NAMES-DAG: Name: FooMethod2
-
-IPI-UDT:      TypeLeafKind: LF_UDT_MOD_SRC_LINE
-IPI-UDT-NEXT: UDT: FooBar
+TPI-TYPES:                          Types (TPI Stream)
+TPI-TYPES-NEXT: ============================================================
+TPI-TYPES-NEXT:   Showing 9 records
+TPI-TYPES-NEXT:   0x1000 | LF_POINTER [size = 12]
+TPI-TYPES-NEXT:            referent = 0x0470 (char*), mode = pointer, opts = None, kind = ptr32
+TPI-TYPES-NEXT:   0x1001 | LF_FIELDLIST [size = 24]
+TPI-TYPES-NEXT:            - LF_MEMBER [name = `FooMember`, Type = 0x0403 (void*), offset = 0, attrs = public]
+TPI-TYPES-NEXT:   0x1002 | LF_ARGLIST [size = 16]
+TPI-TYPES-NEXT:            0x0074 (int): `int`
+TPI-TYPES-NEXT:            0x1000: `char**`
+TPI-TYPES-NEXT:   0x1003 | LF_STRUCTURE [size = 36]
+TPI-TYPES-NEXT:            class name: `FooBar`
+TPI-TYPES-NEXT:            unique name: `FooBar`
+TPI-TYPES-NEXT:            vtable: <no type>, base list: <no type>, field list: 0x1001
+TPI-TYPES-NEXT:            options: has unique name
+TPI-TYPES-NEXT:   0x1004 | LF_POINTER [size = 12]
+TPI-TYPES-NEXT:            referent = 0x1003, mode = pointer, opts = None, kind = ptr32
+TPI-TYPES-NEXT:   0x1005 | LF_ARGLIST [size = 12]
+TPI-TYPES-NEXT:            0x0074 (int): `int`
+TPI-TYPES-NEXT:   0x1006 | LF_MFUNCTION [size = 28]
+TPI-TYPES-NEXT:            return type = 1, # args = 0x1005, param list = 0x0003 (void)
+TPI-TYPES-NEXT:            class type = 0x1003, this type = 0x1004, this adjust = 0
+TPI-TYPES-NEXT:            calling conv = thiscall, options = constructor
+TPI-TYPES-NEXT:   0x1007 | LF_PROCEDURE [size = 16]
+TPI-TYPES-NEXT:            return type = 0x0074 (int), # args = 2, param list = 0x1002
+TPI-TYPES-NEXT:            calling conv = cdecl, options = None
+TPI-TYPES-NEXT:   0x1008 | LF_PROCEDURE [size = 16]
+TPI-TYPES-NEXT:            return type = 0x0003 (void), # args = 2, param list = 0x1002
+TPI-TYPES-NEXT:            calling conv = cdecl, options = None
+
+IPI-TYPES:                          Types (IPI Stream)
+IPI-TYPES-NEXT: ============================================================
+IPI-TYPES-NEXT:   Showing 6 records
+IPI-TYPES-NEXT:   0x1000 | LF_FUNC_ID [size = 20]
+IPI-TYPES-NEXT:            name = main, type = 0x1007, parent scope = <no type>
+IPI-TYPES-NEXT:   0x1001 | LF_MFUNC_ID [size = 24]
+IPI-TYPES-NEXT:            name = FooMethod, type = 0x1006, class type = 0x1003
+IPI-TYPES-NEXT:   0x1002 | LF_UDT_MOD_SRC_LINE [size = 20]
+IPI-TYPES-NEXT:            udt = 0x1003, mod = 0, file = 0, line = 0
+IPI-TYPES-NEXT:   0x1003 | LF_FUNC_ID [size = 20]
+IPI-TYPES-NEXT:            name = main2, type = 0x1007, parent scope = <no type>
+IPI-TYPES-NEXT:   0x1004 | LF_FUNC_ID [size = 16]
+IPI-TYPES-NEXT:            name = foo, type = 0x1008, parent scope = <no type>
+IPI-TYPES-NEXT:   0x1005 | LF_MFUNC_ID [size = 24]
+IPI-TYPES-NEXT:            name = FooMethod2, type = 0x1006, class type = 0x1003

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-mergeids.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-mergeids.test?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-mergeids.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-mergeids.test Thu Jun 15 14:34:41 2017
@@ -1,31 +1,24 @@
 ; RUN: llvm-pdbutil yaml2pdb -pdb=%t.1.pdb %p/Inputs/merge-ids-1.yaml
 ; RUN: llvm-pdbutil yaml2pdb -pdb=%t.2.pdb %p/Inputs/merge-ids-2.yaml
 ; RUN: llvm-pdbutil merge -pdb=%t.3.pdb %t.1.pdb %t.2.pdb
-; RUN: llvm-pdbutil raw -ipi-records %t.3.pdb | FileCheck -check-prefix=MERGED %s
-; RUN: llvm-pdbutil raw -ipi-records %t.3.pdb | FileCheck -check-prefix=SUBSTRS %s
-; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=TPI-EMPTY %s
+; RUN: llvm-pdbutil raw -ids %t.3.pdb | FileCheck -check-prefix=MERGED %s
+; RUN: llvm-pdbutil raw -types %t.3.pdb | FileCheck -check-prefix=TPI-EMPTY %s
 
 
-MERGED: Type Info Stream (IPI)
-MERGED: Record count: 8
-MERGED-DAG: StringData: One
-MERGED-DAG: StringData: Two
-MERGED-DAG: StringData: SubOne
-MERGED-DAG: StringData: SubTwo
-MERGED-DAG: StringData: Main
-MERGED-DAG: TypeLeafKind: LF_SUBSTR_LIST
-MERGED-DAG: StringData: OnlyInFirst
-MERGED-DAG: StringData: OnlyInSecond
+MERGED:                          Types (IPI Stream)
+MERGED-NEXT: ============================================================
+MERGED-NEXT:   Showing 8 records
+MERGED-NEXT:   0x1000 | LF_STRING_ID [size = 12] ID: <no type>, String: One
+MERGED-NEXT:   0x1001 | LF_STRING_ID [size = 12] ID: <no type>, String: Two
+MERGED-NEXT:   0x1002 | LF_STRING_ID [size = 20] ID: <no type>, String: OnlyInFirst
+MERGED-NEXT:   0x1003 | LF_STRING_ID [size = 16] ID: <no type>, String: SubOne
+MERGED-NEXT:   0x1004 | LF_STRING_ID [size = 16] ID: <no type>, String: SubTwo
+MERGED-NEXT:   0x1005 | LF_SUBSTR_LIST [size = 16]
+MERGED-NEXT:            0x1003: `SubOne`
+MERGED-NEXT:            0x1004: `SubTwo`
+MERGED-NEXT:   0x1006 | LF_STRING_ID [size = 16] ID: 0x1005, String: Main
+MERGED-NEXT:   0x1007 | LF_STRING_ID [size = 24] ID: <no type>, String: OnlyInSecond
 
-SUBSTRS:      StringList
-SUBSTRS:        TypeLeafKind: LF_SUBSTR_LIST
-SUBSTRS-NEXT:   NumStrings: 2
-SUBSTRS-NEXT:   Strings [
-SUBSTRS-NEXT:     SubOne
-SUBSTRS-NEXT:     SubTwo
-SUBSTRS:      StringId
-SUBSTRS-NEXT:   TypeLeafKind: LF_STRING_ID
-SUBSTRS-NEXT:   Id: "SubOne" "SubTwo"
-SUBSTRS-NEXT:   StringData: Main
-
-TPI-EMPTY: Record count: 0
+TPI-EMPTY:                     Types (TPI Stream)
+TPI-EMPTY-NEXT: ============================================================
+TPI-EMPTY-NEXT:   Showing 0 records

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-mergetypes.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-mergetypes.test?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-mergetypes.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-mergetypes.test Thu Jun 15 14:34:41 2017
@@ -1,24 +1,36 @@
-; RUN: llvm-pdbutil yaml2pdb -pdb=%t.1.pdb %p/Inputs/merge-types-1.yaml
-; RUN: llvm-pdbutil yaml2pdb -pdb=%t.2.pdb %p/Inputs/merge-types-2.yaml
-; RUN: llvm-pdbutil merge -pdb=%t.3.pdb %t.1.pdb %t.2.pdb
-; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=MERGED %s
-; RUN: llvm-pdbutil raw -tpi-records %t.3.pdb | FileCheck -check-prefix=ARGLIST %s
-
-
-MERGED: Type Info Stream (TPI)
-MERGED: Record count: 9
-MERGED-DAG: PointeeType: unsigned
-MERGED-DAG: PointeeType: unsigned*
-MERGED-DAG: PointeeType: unsigned**
-MERGED-DAG: PointeeType: __int64
-MERGED-DAG: PointeeType: __int64*
-MERGED-DAG: Name: OnlyInMerge1
-MERGED-DAG: Name: OnlyInMerge2
-MERGED-DAG: TypeLeafKind: LF_ARGLIST
-
-ARGLIST: TypeLeafKind: LF_ARGLIST
-ARGLIST-NEXT: NumArgs: 3
-ARGLIST-NEXT: Arguments [
-ARGLIST-NEXT: ArgType: unsigned
-ARGLIST-NEXT: ArgType: unsigned*
-ARGLIST-NEXT: ArgType: unsigned**
++; RUN: llvm-pdbutil yaml2pdb -pdb=%t.1.pdb %p/Inputs/merge-types-1.yaml
+; RUN: llvm-pdbutil yaml2pdb -pdb=%t.2.pdb %p/Inputs/merge-types-2.yaml
+; RUN: llvm-pdbutil merge -pdb=%t.3.pdb %t.1.pdb %t.2.pdb
+; RUN: llvm-pdbutil raw -types %t.3.pdb | FileCheck -check-prefix=MERGED %s
+
+
+MERGED:                          Types (TPI Stream)
+MERGED-NEXT: ============================================================
+MERGED-NEXT:   Showing 9 records
+MERGED-NEXT:   0x1000 | LF_POINTER [size = 12]
+MERGED-NEXT:            referent = 0x0075 (unsigned), mode = pointer, opts = None, kind = ptr32
+MERGED-NEXT:   0x1001 | LF_POINTER [size = 12]
+MERGED-NEXT:            referent = 0x0076 (__int64), mode = pointer, opts = None, kind = ptr32
+MERGED-NEXT:   0x1002 | LF_STRUCTURE [size = 48]
+MERGED-NEXT:            class name: `OnlyInMerge1`
+MERGED-NEXT:            unique name: `OnlyInMerge1`
+MERGED-NEXT:            vtable: <no type>, base list: <no type>, field list: <no type>
+MERGED-NEXT:            options: forward ref | has unique name
+MERGED-NEXT:   0x1003 | LF_POINTER [size = 12]
+MERGED-NEXT:            referent = 0x1000, mode = pointer, opts = None, kind = ptr32
+MERGED-NEXT:   0x1004 | LF_POINTER [size = 12]
+MERGED-NEXT:            referent = 0x1003, mode = pointer, opts = None, kind = ptr32
+MERGED-NEXT:   0x1005 | LF_POINTER [size = 12]
+MERGED-NEXT:            referent = 0x1001, mode = pointer, opts = None, kind = ptr32
+MERGED-NEXT:   0x1006 | LF_ARGLIST [size = 20]
+MERGED-NEXT:            0x0075 (unsigned): `unsigned`
+MERGED-NEXT:            0x1000: `unsigned*`
+MERGED-NEXT:            0x1003: `unsigned**`
+MERGED-NEXT:   0x1007 | LF_PROCEDURE [size = 16]
+MERGED-NEXT:            return type = 0x0075 (unsigned), # args = 0, param list = 0x1006
+MERGED-NEXT:            calling conv = cdecl, options = None
+MERGED-NEXT:   0x1008 | LF_STRUCTURE [size = 48]
+MERGED-NEXT:            class name: `OnlyInMerge2`
+MERGED-NEXT:            unique name: `OnlyInMerge2`
+MERGED-NEXT:            vtable: <no type>, base list: <no type>, field list: <no type>
+MERGED-NEXT:            options: forward ref | has unique name

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-blocks.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-blocks.test?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-blocks.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-blocks.test Thu Jun 15 14:34:41 2017
@@ -1,35 +1,29 @@
-; RUN: llvm-pdbutil raw -block-data=0 %p/Inputs/empty.pdb | FileCheck --check-prefix=BLOCK0 %s
-; RUN: llvm-pdbutil raw -block-data=0-1 %p/Inputs/empty.pdb | FileCheck --check-prefix=BLOCK01 %s
-; RUN: not llvm-pdbutil raw -block-data=0,1 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s
-; RUN: not llvm-pdbutil raw -block-data=0a1 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s
-; RUN: not llvm-pdbutil raw -block-data=0- %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s
-
-BLOCK0:      Block Data {
-BLOCK0-NEXT:   Block 0 (
-BLOCK0-NEXT:     0000: 4D696372 6F736F66 7420432F 432B2B20  |Microsoft C/C++ |
-BLOCK0-NEXT:     0010: 4D534620 372E3030 0D0A1A44 53000000  |MSF 7.00...DS...|
-BLOCK0-NEXT:     0020: 00100000 02000000 19000000 88000000  |................|
-BLOCK0-NEXT:     0030: 00000000 18000000 00000000 00000000  |................|
-BLOCK0:          0FE0: 00000000 00000000 00000000 00000000  |................|
-BLOCK0-NEXT:     0FF0: 00000000 00000000 00000000 00000000  |................|
-BLOCK0-NEXT:   )
-BLOCK0-NEXT: }
-
-BLOCK01:      Block Data {
-BLOCK01-NEXT:   Block 0 (
-BLOCK01-NEXT:     0000: 4D696372 6F736F66 7420432F 432B2B20  |Microsoft C/C++ |
-BLOCK01-NEXT:     0010: 4D534620 372E3030 0D0A1A44 53000000  |MSF 7.00...DS...|
-BLOCK01-NEXT:     0020: 00100000 02000000 19000000 88000000  |................|
-BLOCK01-NEXT:     0030: 00000000 18000000 00000000 00000000  |................|
-BLOCK01:          0FE0: 00000000 00000000 00000000 00000000  |................|
-BLOCK01-NEXT:     0FF0: 00000000 00000000 00000000 00000000  |................|
-BLOCK01-NEXT:   )
-BLOCK01-NEXT:   Block 1 (
-BLOCK01-NEXT:     0000: C0FCFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................|
-BLOCK01-NEXT:     0010: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................|
-BLOCK01:          0FE0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................|
-BLOCK01-NEXT:     0FF0: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................|
-BLOCK01-NEXT:   )
-BLOCK01-NEXT: }
-
-BADSYNTAX: Argument '{{.*}}' invalid format.
+; RUN: llvm-pdbutil raw -block-data=0 %p/Inputs/empty.pdb | FileCheck --check-prefix=BLOCK0 %s
+; RUN: llvm-pdbutil raw -block-data=0-1 %p/Inputs/empty.pdb | FileCheck --check-prefix=BLOCK01 %s
+; RUN: not llvm-pdbutil raw -block-data=0,1 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s
+; RUN: not llvm-pdbutil raw -block-data=0a1 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s
+; RUN: not llvm-pdbutil raw -block-data=0- %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BADSYNTAX %s
+
+BLOCK0:                         MSF Blocks
+BLOCK0-NEXT: ============================================================
+BLOCK0-NEXT:   Block 0 (
+BLOCK0-NEXT:     0000: 4D696372 6F736F66 7420432F 432B2B20 4D534620 372E3030 0D0A1A44 53000000  |Microsoft C/C++ MSF 7.00...DS...|
+BLOCK0-NEXT:     0020: 00100000 02000000 19000000 88000000 00000000 18000000 00000000 00000000  |................................|
+BLOCK0-NEXT:     0040: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  |................................|
+BLOCK0-NEXT:     0060: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  |................................|
+BLOCK0-NOT:   Block 1 (
+
+BLOCK01:                         MSF Blocks
+BLOCK01-NEXT: ============================================================
+BLOCK01-NEXT:   Block 0 (
+BLOCK01-NEXT:     0000: 4D696372 6F736F66 7420432F 432B2B20 4D534620 372E3030 0D0A1A44 53000000  |Microsoft C/C++ MSF 7.00...DS...|
+BLOCK01-NEXT:     0020: 00100000 02000000 19000000 88000000 00000000 18000000 00000000 00000000  |................................|
+BLOCK01-NEXT:     0040: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  |................................|
+BLOCK01-NEXT:     0060: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  |................................|
+BLOCK01:       Block 1 (
+BLOCK01-NEXT:    0000: C0FCFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
+BLOCK01-NEXT:    0020: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
+BLOCK01-NEXT:    0040: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  |................................|
+BLOCK01-NOT:  Block 2 (
+
+BADSYNTAX: Argument '{{.*}}' invalid format.

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-stream.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-stream.test?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-stream.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-stream.test Thu Jun 15 14:34:41 2017
@@ -1,23 +1,28 @@
-; RUN: llvm-pdbutil raw -stream-data=1 %p/Inputs/empty.pdb | FileCheck --check-prefix=STREAM1 %s
-; RUN: not llvm-pdbutil raw -stream-data=100 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=INVALIDSTREAM %s
-
-STREAM1:      Stream Data {
-STREAM1-NEXT:   Stream {
-STREAM1-NEXT:     Index: 1
-STREAM1-NEXT:     Type: PDB Stream
-STREAM1-NEXT:     Size: 118
-STREAM1-NEXT:     Blocks: [19]
-STREAM1-NEXT:     Data (
-STREAM1-NEXT:       0000: 942E3101 E207E554 01000000 0B355641  |..1....T.....5VA|
-STREAM1-NEXT:       0010: 86A0A249 896F9988 FAE52FF0 22000000  |...I.o..../."...|
-STREAM1-NEXT:       0020: 2F4C696E 6B496E66 6F002F6E 616D6573  |/LinkInfo./names|
-STREAM1-NEXT:       0030: 002F7372 632F6865 61646572 626C6F63  |./src/headerbloc|
-STREAM1-NEXT:       0040: 6B000300 00000600 00000100 00001A00  |k...............|
-STREAM1-NEXT:       0050: 00000000 00001100 00000900 00000A00  |................|
-STREAM1-NEXT:       0060: 00000D00 00000000 00000500 00000000  |................|
-STREAM1-NEXT:       0070: 00004191 3201                        |..A.2.|
-STREAM1-NEXT:     )
-STREAM1-NEXT:   }
-STREAM1-NEXT: }
-
-INVALIDSTREAM: Native PDB Error: The specified stream could not be loaded.
+; RUN: llvm-pdbutil raw -stream-data=1 %p/Inputs/empty.pdb | FileCheck --check-prefix=STREAM %s
+; RUN: llvm-pdbutil raw -stream-data=100 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=INVALIDSTREAM %s
+; RUN: llvm-pdbutil raw -stream-data=1,100 %p/Inputs/empty.pdb 2>&1 | FileCheck --check-prefix=BOTH %s
+
+STREAM:                             Stream Data
+STREAM-NEXT: ============================================================
+STREAM-NEXT:   Stream 1 (118 bytes): PDB Stream
+STREAM-NEXT:     Data (
+STREAM-NEXT:       0000: 942E3101 E207E554 01000000 0B355641 86A0A249 896F9988 FAE52FF0 22000000  |..1....T.....5VA...I.o..../."...|
+STREAM-NEXT:       0020: 2F4C696E 6B496E66 6F002F6E 616D6573 002F7372 632F6865 61646572 626C6F63  |/LinkInfo./names./src/headerbloc|
+STREAM-NEXT:       0040: 6B000300 00000600 00000100 00001A00 00000000 00001100 00000900 00000A00  |k...............................|
+STREAM-NEXT:       0060: 00000D00 00000000 00000500 00000000 00004191 3201                        |..................A.2.|
+STREAM-NEXT:     )
+
+INVALIDSTREAM:                             Stream Data
+INVALIDSTREAM-NEXT: ============================================================
+INVALIDSTREAM-NEXT:   Stream 100: Not present
+
+BOTH:                             Stream Data
+BOTH-NEXT: ============================================================
+BOTH-NEXT:   Stream 1 (118 bytes): PDB Stream
+BOTH-NEXT:     Data (
+BOTH-NEXT:       0000: 942E3101 E207E554 01000000 0B355641 86A0A249 896F9988 FAE52FF0 22000000  |..1....T.....5VA...I.o..../."...|
+BOTH-NEXT:       0020: 2F4C696E 6B496E66 6F002F6E 616D6573 002F7372 632F6865 61646572 626C6F63  |/LinkInfo./names./src/headerbloc|
+BOTH-NEXT:       0040: 6B000300 00000600 00000100 00001A00 00000000 00001100 00000900 00000A00  |k...............................|
+BOTH-NEXT:       0060: 00000D00 00000000 00000500 00000000 00004191 3201                        |..................A.2.|
+BOTH-NEXT:     )
+BOTH-NEXT:   Stream 100: Not present

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test Thu Jun 15 14:34:41 2017
@@ -3,48 +3,33 @@ RUN:   -pdb-stream -string-table -tpi-st
 RUN:   -stream-metadata %p/Inputs/empty.pdb > %t.1
 RUN: llvm-pdbutil yaml2pdb -pdb=%t.2 %t.1
 
-RUN: llvm-pdbutil raw -headers -string-table -tpi-records %p/Inputs/empty.pdb | FileCheck %s
-RUN: llvm-pdbutil raw -headers -string-table -tpi-records %t.2 | FileCheck %s
+RUN: llvm-pdbutil raw -summary -string-table -types %p/Inputs/empty.pdb | FileCheck %s
+RUN: llvm-pdbutil raw -summary -string-table -types %t.2 | FileCheck %s
 
-CHECK:      FileHeaders {
-CHECK-NEXT:   BlockSize: 4096
-CHECK-NEXT:   FreeBlockMap:
-CHECK-NEXT:   NumBlocks:
-CHECK-NEXT:   NumDirectoryBytes:
-CHECK-NEXT:   Unknown1: 0
-CHECK-NEXT:   BlockMapAddr:
-CHECK-NEXT:   NumDirectoryBlocks: 1
-CHECK-NEXT:   DirectoryBlocks:
-CHECK-NEXT:   NumStreams:
-CHECK-NEXT: }
-CHECK:      String Table {
-CHECK-DAG:   'd:\src\llvm\test\debuginfo\pdb\inputs\predefined c++ attributes (compiler internal)'
-CHECK-DAG:   'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
-CHECK-DAG:   '$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = '
-CHECK-NEXT: }
-CHECK:      PDB Stream {
-CHECK-NEXT:   Version: 20000404
-CHECK-NEXT:   Signature: 0x54E507E2
-CHECK-NEXT:   Age: 1
-CHECK-NEXT:   Guid: {0B355641-86A0-A249-896F-9988FAE52FF0}
-CHECK-NEXT:   Features: 0x1
-CHECK-NEXT:   Named Streams {
-CHECK:          /names: 
-CHECK:        }
-CHECK-NEXT: }
-CHECK:      Type Info Stream (TPI) {
-CHECK-NEXT:   TPI Version: 20040203
-CHECK-NEXT:   Record count: 75
-CHECK:      DBI Stream {
-CHECK-NEXT:   Dbi Version: 19990903
-CHECK-NEXT:   Age: 1
-CHECK-NEXT:   Incremental Linking: Yes
-CHECK-NEXT:   Has CTypes: No
-CHECK-NEXT:   Is Stripped: No
-CHECK-NEXT:   Machine Type: x86
-CHECK-NEXT:   Symbol Record Stream Index:
-CHECK-NEXT:   Public Symbol Stream Index:
-CHECK-NEXT:   Global Symbol Stream Index:
-CHECK-NEXT:   Toolchain Version: 12.0
-CHECK-NEXT:   mspdb120.dll version: 12.0.31101
-CHECK-NEXT: }
+
+CHECK:                                Summary
+CHECK-NEXT: ============================================================
+CHECK-NEXT:  Block Size: 4096
+CHECK-NEXT:  Number of blocks:
+CHECK-NEXT:  Number of streams:
+CHECK-NEXT:  Signature: 1424295906
+CHECK-NEXT:  Age: 1
+CHECK-NEXT:  GUID: {0B355641-86A0-A249-896F-9988FAE52FF0}
+CHECK-NEXT:  Features: 0x1
+CHECK-NEXT:  Has Debug Info: true
+CHECK-NEXT:  Has Types: true
+CHECK-NEXT:  Has IDs: true
+CHECK-NEXT:  Has Globals:
+CHECK-NEXT:  Has Publics:
+CHECK-NEXT:  Is incrementally linked: true
+CHECK-NEXT:  Has conflicting types: false
+CHECK-NEXT:  Is stripped: false
+CHECK:                             String Table
+CHECK-NEXT: ============================================================
+CHECK-NEXT:   ID    | String
+CHECK-NEXT:  {{.*}} | 'd:\src\llvm\test\debuginfo\pdb\inputs\predefined c++ attributes (compiler internal)'
+CHECK-NEXT:  {{.*}} | 'd:\src\llvm\test\debuginfo\pdb\inputs\empty.cpp'
+CHECK-NEXT:  {{.*}} | '$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + = '
+CHECK:                          Types (TPI Stream)
+CHECK-NEXT: ============================================================
+CHECK-NEXT:  Showing 75 records

Removed: llvm/trunk/test/tools/llvm-pdbdump/raw-stream-data.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbdump/raw-stream-data.test?rev=305494&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbdump/raw-stream-data.test (original)
+++ llvm/trunk/test/tools/llvm-pdbdump/raw-stream-data.test (removed)
@@ -1,47 +0,0 @@
-; RUN: llvm-pdbutil raw -stream-data=8 %p/Inputs/LoadAddressTest.pdb \
-; RUN:   | FileCheck %s -check-prefix=FULL_STREAM
-; RUN: llvm-pdbutil raw -stream-data=8:4 %p/Inputs/LoadAddressTest.pdb \
-; RUN:   | FileCheck %s -check-prefix=OFFSET_STREAM
-; RUN: llvm-pdbutil raw -stream-data=8:4 at 24 %p/Inputs/LoadAddressTest.pdb \
-; RUN:   | FileCheck %s -check-prefix=OFFSET_AND_LENGTH
-
-FULL_STREAM:      Stream Data {
-FULL_STREAM-NEXT:   Stream {
-FULL_STREAM-NEXT:     Index: 8
-FULL_STREAM-NEXT:     Type: Public Symbol Records
-FULL_STREAM-NEXT:     Size: 40
-FULL_STREAM-NEXT:     Blocks:
-FULL_STREAM-NEXT:     Data (
-FULL_STREAM-NEXT:       0000: 12000E11 02000000 10000000 01005F6D  |.............._m|
-FULL_STREAM-NEXT:       0010: 61696E00 12002511 00000000 88000000  |ain...%.........|
-FULL_STREAM-NEXT:       0020: 01006D61 696E0000                    |..main..|
-FULL_STREAM-NEXT:     )
-FULL_STREAM-NEXT:   }
-FULL_STREAM-NEXT: }
-
-OFFSET_STREAM:      Stream Data {
-OFFSET_STREAM-NEXT:   Stream {
-OFFSET_STREAM-NEXT:    Index: 8
-OFFSET_STREAM-NEXT:    Type: Public Symbol Records
-OFFSET_STREAM-NEXT:    Size: 40
-OFFSET_STREAM-NEXT:    Blocks: 
-OFFSET_STREAM-NEXT:    Data (
-OFFSET_STREAM-NEXT:      0004: 02000000 10000000 01005F6D 61696E00  |.........._main.|
-OFFSET_STREAM-NEXT:      0014: 12002511 00000000 88000000 01006D61  |..%...........ma|
-OFFSET_STREAM-NEXT:      0024: 696E0000                             |in..|
-OFFSET_STREAM-NEXT:    )
-OFFSET_STREAM-NEXT:  }
-OFFSET_STREAM-NEXT:}
-
-OFFSET_AND_LENGTH:      Stream Data {
-OFFSET_AND_LENGTH-NEXT:   Stream {
-OFFSET_AND_LENGTH-NEXT:    Index: 8
-OFFSET_AND_LENGTH-NEXT:    Type: Public Symbol Records
-OFFSET_AND_LENGTH-NEXT:    Size: 40
-OFFSET_AND_LENGTH-NEXT:    Blocks: 
-OFFSET_AND_LENGTH-NEXT:    Data (
-OFFSET_AND_LENGTH-NEXT:      0004: 02000000 10000000 01005F6D 61696E00  |.........._main.|
-OFFSET_AND_LENGTH-NEXT:      0014: 12002511 00000000                    |..%.....|
-OFFSET_AND_LENGTH-NEXT:    )
-OFFSET_AND_LENGTH-NEXT:  }
-OFFSET_AND_LENGTH-NEXT:}
\ No newline at end of file

Modified: llvm/trunk/tools/llvm-pdbutil/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/CMakeLists.txt?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/CMakeLists.txt (original)
+++ llvm/trunk/tools/llvm-pdbutil/CMakeLists.txt Thu Jun 15 14:34:41 2017
@@ -12,8 +12,10 @@ add_llvm_tool(llvm-pdbutil
   CompactTypeDumpVisitor.cpp
   Diff.cpp
   llvm-pdbutil.cpp
+  FormatUtil.cpp
   LinePrinter.cpp
-  LLVMOutputStyle.cpp
+  MinimalSymbolDumper.cpp
+  MinimalTypeDumper.cpp
   PdbYaml.cpp
   PrettyBuiltinDumper.cpp
   PrettyClassDefinitionDumper.cpp
@@ -25,6 +27,7 @@ add_llvm_tool(llvm-pdbutil
   PrettyTypeDumper.cpp
   PrettyTypedefDumper.cpp
   PrettyVariableDumper.cpp
+  RawOutputStyle.cpp
   StreamUtil.cpp
   YAMLOutputStyle.cpp
   )

Added: llvm/trunk/tools/llvm-pdbutil/FormatUtil.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/FormatUtil.cpp?rev=305495&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/FormatUtil.cpp (added)
+++ llvm/trunk/tools/llvm-pdbutil/FormatUtil.cpp Thu Jun 15 14:34:41 2017
@@ -0,0 +1,49 @@
+//===- FormatUtil.cpp ----------------------------------------- *- C++ --*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "FormatUtil.h"
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/StringExtras.h"
+#include "llvm/Support/FormatAdapters.h"
+#include "llvm/Support/FormatVariadic.h"
+
+using namespace llvm;
+using namespace llvm::pdb;
+
+std::string llvm::pdb::typesetItemList(ArrayRef<std::string> Opts,
+                                       uint32_t GroupSize, uint32_t IndentLevel,
+                                       StringRef Sep) {
+  std::string Result;
+  while (!Opts.empty()) {
+    ArrayRef<std::string> ThisGroup;
+    ThisGroup = Opts.take_front(GroupSize);
+    Opts = Opts.drop_front(ThisGroup.size());
+    Result += join(ThisGroup, Sep);
+    if (!Opts.empty()) {
+      Result += Sep;
+      Result += "\n";
+      Result += formatv("{0}", fmt_repeat(' ', IndentLevel));
+    }
+  }
+  return Result;
+}
+
+std::string llvm::pdb::typesetStringList(uint32_t IndentLevel,
+                                         ArrayRef<StringRef> Strings) {
+  std::string Result = "[";
+  for (const auto &S : Strings) {
+    Result += formatv("\n{0}{1}", fmt_repeat(' ', IndentLevel), S);
+  }
+  Result += "]";
+  return Result;
+}
+
+std::string llvm::pdb::formatSegmentOffset(uint16_t Segment, uint32_t Offset) {
+  return formatv("{0:4}:{1:4}", Segment, Offset);
+}

Added: llvm/trunk/tools/llvm-pdbutil/FormatUtil.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/FormatUtil.h?rev=305495&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/FormatUtil.h (added)
+++ llvm/trunk/tools/llvm-pdbutil/FormatUtil.h Thu Jun 15 14:34:41 2017
@@ -0,0 +1,92 @@
+//===- FormatUtil.h ------------------------------------------- *- C++ --*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMPDBUTIL_FORMAT_UTIL_H
+#define LLVM_TOOLS_LLVMPDBUTIL_FORMAT_UTIL_H
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/FormatVariadic.h"
+
+#include <string>
+#include <type_traits>
+
+namespace llvm {
+namespace pdb {
+
+#define PUSH_MASKED_FLAG(Enum, Mask, TheOpt, Value, Text)                      \
+  if (Enum::TheOpt == (Value & Mask))                                          \
+    Opts.push_back(Text);
+
+#define PUSH_FLAG(Enum, TheOpt, Value, Text)                                   \
+  PUSH_MASKED_FLAG(Enum, Enum::TheOpt, TheOpt, Value, Text)
+
+#define RETURN_CASE(Enum, X, Ret)                                              \
+  case Enum::X:                                                                \
+    return Ret;
+
+template <typename T> static std::string formatUnknownEnum(T Value) {
+  return formatv("unknown ({0})",
+                 static_cast<std::underlying_type<T>::type>(Value))
+      .str();
+}
+
+std::string formatSegmentOffset(uint16_t Segment, uint32_t Offset);
+
+std::string typesetItemList(ArrayRef<std::string> Opts, uint32_t IndentLevel,
+                            uint32_t GroupSize, StringRef Sep);
+
+std::string typesetStringList(uint32_t IndentLevel,
+                              ArrayRef<StringRef> Strings);
+
+/// Returns the number of digits in the given integer.
+inline int NumDigits(uint64_t N) {
+  if (N < 10ULL)
+    return 1;
+  if (N < 100ULL)
+    return 2;
+  if (N < 1000ULL)
+    return 3;
+  if (N < 10000ULL)
+    return 4;
+  if (N < 100000ULL)
+    return 5;
+  if (N < 1000000ULL)
+    return 6;
+  if (N < 10000000ULL)
+    return 7;
+  if (N < 100000000ULL)
+    return 8;
+  if (N < 1000000000ULL)
+    return 9;
+  if (N < 10000000000ULL)
+    return 10;
+  if (N < 100000000000ULL)
+    return 11;
+  if (N < 1000000000000ULL)
+    return 12;
+  if (N < 10000000000000ULL)
+    return 13;
+  if (N < 100000000000000ULL)
+    return 14;
+  if (N < 1000000000000000ULL)
+    return 15;
+  if (N < 10000000000000000ULL)
+    return 16;
+  if (N < 100000000000000000ULL)
+    return 17;
+  if (N < 1000000000000000000ULL)
+    return 18;
+  if (N < 10000000000000000000ULL)
+    return 19;
+  return 20;
+}
+}
+} // namespace llvm
+#endif

Removed: llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.cpp?rev=305494&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.cpp (removed)
@@ -1,1198 +0,0 @@
-//===- LLVMOutputStyle.cpp ------------------------------------ *- C++ --*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "LLVMOutputStyle.h"
-
-#include "CompactTypeDumpVisitor.h"
-#include "StreamUtil.h"
-#include "llvm-pdbutil.h"
-
-#include "llvm/DebugInfo/CodeView/CVTypeVisitor.h"
-#include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h"
-#include "llvm/DebugInfo/CodeView/DebugCrossExSubsection.h"
-#include "llvm/DebugInfo/CodeView/DebugCrossImpSubsection.h"
-#include "llvm/DebugInfo/CodeView/DebugFrameDataSubsection.h"
-#include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h"
-#include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h"
-#include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h"
-#include "llvm/DebugInfo/CodeView/DebugSubsectionVisitor.h"
-#include "llvm/DebugInfo/CodeView/DebugSymbolRVASubsection.h"
-#include "llvm/DebugInfo/CodeView/DebugSymbolsSubsection.h"
-#include "llvm/DebugInfo/CodeView/DebugUnknownSubsection.h"
-#include "llvm/DebugInfo/CodeView/EnumTables.h"
-#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h"
-#include "llvm/DebugInfo/CodeView/Line.h"
-#include "llvm/DebugInfo/CodeView/StringsAndChecksums.h"
-#include "llvm/DebugInfo/CodeView/SymbolDumper.h"
-#include "llvm/DebugInfo/CodeView/TypeDatabaseVisitor.h"
-#include "llvm/DebugInfo/CodeView/TypeDumpVisitor.h"
-#include "llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h"
-#include "llvm/DebugInfo/MSF/MappedBlockStream.h"
-#include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h"
-#include "llvm/DebugInfo/PDB/Native/DbiStream.h"
-#include "llvm/DebugInfo/PDB/Native/EnumTables.h"
-#include "llvm/DebugInfo/PDB/Native/GlobalsStream.h"
-#include "llvm/DebugInfo/PDB/Native/ISectionContribVisitor.h"
-#include "llvm/DebugInfo/PDB/Native/InfoStream.h"
-#include "llvm/DebugInfo/PDB/Native/ModuleDebugStream.h"
-#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
-#include "llvm/DebugInfo/PDB/Native/PublicsStream.h"
-#include "llvm/DebugInfo/PDB/Native/RawError.h"
-#include "llvm/DebugInfo/PDB/Native/TpiHashing.h"
-#include "llvm/DebugInfo/PDB/Native/TpiStream.h"
-#include "llvm/DebugInfo/PDB/PDBExtras.h"
-#include "llvm/Object/COFF.h"
-#include "llvm/Support/BinaryStreamReader.h"
-#include "llvm/Support/FormatVariadic.h"
-
-#include <unordered_map>
-
-using namespace llvm;
-using namespace llvm::codeview;
-using namespace llvm::msf;
-using namespace llvm::pdb;
-
-namespace {
-struct PageStats {
-  explicit PageStats(const BitVector &FreePages)
-      : Upm(FreePages), ActualUsedPages(FreePages.size()),
-        MultiUsePages(FreePages.size()), UseAfterFreePages(FreePages.size()) {
-    const_cast<BitVector &>(Upm).flip();
-    // To calculate orphaned pages, we start with the set of pages that the
-    // MSF thinks are used.  Each time we find one that actually *is* used,
-    // we unset it.  Whichever bits remain set at the end are orphaned.
-    OrphanedPages = Upm;
-  }
-
-  // The inverse of the MSF File's copy of the Fpm.  The basis for which we
-  // determine the allocation status of each page.
-  const BitVector Upm;
-
-  // Pages which are marked as used in the FPM and are used at least once.
-  BitVector ActualUsedPages;
-
-  // Pages which are marked as used in the FPM but are used more than once.
-  BitVector MultiUsePages;
-
-  // Pages which are marked as used in the FPM but are not used at all.
-  BitVector OrphanedPages;
-
-  // Pages which are marked free in the FPM but are used.
-  BitVector UseAfterFreePages;
-};
-
-class C13RawVisitor : public DebugSubsectionVisitor {
-public:
-  C13RawVisitor(ScopedPrinter &P, LazyRandomTypeCollection &TPI,
-                LazyRandomTypeCollection *IPI)
-      : P(P), TPI(TPI), IPI(IPI) {}
-
-  Error visitUnknown(DebugUnknownSubsectionRef &Unknown) override {
-    if (!opts::checkModuleSubsection(opts::ModuleSubsection::Unknown))
-      return Error::success();
-    DictScope DD(P, "Unknown");
-    P.printHex("Kind", static_cast<uint32_t>(Unknown.kind()));
-    ArrayRef<uint8_t> Data;
-    BinaryStreamReader Reader(Unknown.getData());
-    consumeError(Reader.readBytes(Data, Reader.bytesRemaining()));
-    P.printBinaryBlock("Data", Data);
-    return Error::success();
-  }
-
-  Error visitLines(DebugLinesSubsectionRef &Lines,
-                   const StringsAndChecksumsRef &State) override {
-    if (!opts::checkModuleSubsection(opts::ModuleSubsection::Lines))
-      return Error::success();
-
-    DictScope DD(P, "Lines");
-
-    P.printNumber("RelocSegment", Lines.header()->RelocSegment);
-    P.printNumber("RelocOffset", Lines.header()->RelocOffset);
-    P.printNumber("CodeSize", Lines.header()->CodeSize);
-    P.printBoolean("HasColumns", Lines.hasColumnInfo());
-
-    for (const auto &L : Lines) {
-      DictScope DDDD(P, "FileEntry");
-
-      if (auto EC = printFileName("FileName", L.NameIndex, State))
-        return EC;
-
-      for (const auto &N : L.LineNumbers) {
-        DictScope DDD(P, "Line");
-        LineInfo LI(N.Flags);
-        P.printNumber("Offset", N.Offset);
-        if (LI.isAlwaysStepInto())
-          P.printString("StepInto", StringRef("Always"));
-        else if (LI.isNeverStepInto())
-          P.printString("StepInto", StringRef("Never"));
-        else
-          P.printNumber("LineNumberStart", LI.getStartLine());
-        P.printNumber("EndDelta", LI.getLineDelta());
-        P.printBoolean("IsStatement", LI.isStatement());
-      }
-      for (const auto &C : L.Columns) {
-        DictScope DDD(P, "Column");
-        P.printNumber("Start", C.StartColumn);
-        P.printNumber("End", C.EndColumn);
-      }
-    }
-
-    return Error::success();
-  }
-
-  Error visitFileChecksums(DebugChecksumsSubsectionRef &Checksums,
-                           const StringsAndChecksumsRef &State) override {
-    if (!opts::checkModuleSubsection(opts::ModuleSubsection::FileChecksums))
-      return Error::success();
-
-    DictScope DD(P, "FileChecksums");
-    for (const auto &CS : Checksums) {
-      DictScope DDD(P, "Checksum");
-      if (auto Result = getNameFromStringTable(CS.FileNameOffset, State))
-        P.printString("FileName", *Result);
-      else
-        return Result.takeError();
-      P.printEnum("Kind", uint8_t(CS.Kind), getFileChecksumNames());
-      P.printBinaryBlock("Checksum", CS.Checksum);
-    }
-    return Error::success();
-  }
-
-  Error visitInlineeLines(DebugInlineeLinesSubsectionRef &Inlinees,
-                          const StringsAndChecksumsRef &State) override {
-    if (!opts::checkModuleSubsection(opts::ModuleSubsection::InlineeLines))
-      return Error::success();
-
-    DictScope D(P, "InlineeLines");
-    P.printBoolean("HasExtraFiles", Inlinees.hasExtraFiles());
-    ListScope LS(P, "Lines");
-    for (const auto &L : Inlinees) {
-      DictScope DDD(P, "Inlinee");
-      if (auto EC = printFileName("FileName", L.Header->FileID, State))
-        return EC;
-
-      if (auto EC = dumpTypeRecord("Function", L.Header->Inlinee))
-        return EC;
-      P.printNumber("SourceLine", L.Header->SourceLineNum);
-      if (Inlinees.hasExtraFiles()) {
-        ListScope DDDD(P, "ExtraFiles");
-        for (const auto &EF : L.ExtraFiles) {
-          if (auto EC = printFileName("File", EF, State))
-            return EC;
-        }
-      }
-    }
-    return Error::success();
-  }
-
-  Error visitCrossModuleExports(DebugCrossModuleExportsSubsectionRef &CSE,
-                                const StringsAndChecksumsRef &State) override {
-    if (!opts::checkModuleSubsection(opts::ModuleSubsection::CrossScopeExports))
-      return Error::success();
-
-    ListScope D(P, "CrossModuleExports");
-    for (const auto &M : CSE) {
-      DictScope D(P, "Export");
-      P.printHex("Local", M.Local);
-      P.printHex("Global", M.Global);
-    }
-    return Error::success();
-  }
-
-  Error visitCrossModuleImports(DebugCrossModuleImportsSubsectionRef &CSI,
-                                const StringsAndChecksumsRef &State) override {
-    if (!opts::checkModuleSubsection(opts::ModuleSubsection::CrossScopeImports))
-      return Error::success();
-
-    ListScope L(P, "CrossModuleImports");
-    for (const auto &M : CSI) {
-      DictScope D(P, "ModuleImport");
-      auto Name = getNameFromStringTable(M.Header->ModuleNameOffset, State);
-      if (!Name)
-        return Name.takeError();
-      P.printString("Module", *Name);
-      P.printHexList("Imports", M.Imports);
-    }
-    return Error::success();
-  }
-
-  Error visitFrameData(DebugFrameDataSubsectionRef &FD,
-                       const StringsAndChecksumsRef &State) override {
-    if (!opts::checkModuleSubsection(opts::ModuleSubsection::FrameData))
-      return Error::success();
-
-    ListScope L(P, "FrameData");
-    for (const auto &Frame : FD) {
-      DictScope D(P, "Frame");
-      auto Name = getNameFromStringTable(Frame.FrameFunc, State);
-      if (!Name)
-        return joinErrors(make_error<RawError>(raw_error_code::invalid_format,
-                                               "Invalid Frame.FrameFunc index"),
-                          Name.takeError());
-      P.printNumber("Rva", Frame.RvaStart);
-      P.printNumber("CodeSize", Frame.CodeSize);
-      P.printNumber("LocalSize", Frame.LocalSize);
-      P.printNumber("ParamsSize", Frame.ParamsSize);
-      P.printNumber("MaxStackSize", Frame.MaxStackSize);
-      P.printString("FrameFunc", *Name);
-      P.printNumber("PrologSize", Frame.PrologSize);
-      P.printNumber("SavedRegsSize", Frame.SavedRegsSize);
-      P.printNumber("Flags", Frame.Flags);
-    }
-    return Error::success();
-  }
-
-  Error visitSymbols(DebugSymbolsSubsectionRef &Symbols,
-                     const StringsAndChecksumsRef &State) override {
-    if (!opts::checkModuleSubsection(opts::ModuleSubsection::Symbols))
-      return Error::success();
-    ListScope L(P, "Symbols");
-
-    // This section should not actually appear in a PDB file, it really only
-    // appears in object files.  But we support it here for testing.  So we
-    // specify the Object File container type.
-    codeview::CVSymbolDumper SD(P, TPI, CodeViewContainer::ObjectFile, nullptr,
-                                false);
-    for (auto S : Symbols) {
-      DictScope LL(P, "");
-      if (auto EC = SD.dump(S)) {
-        return make_error<RawError>(
-            raw_error_code::corrupt_file,
-            "DEBUG_S_SYMBOLS subsection contained corrupt symbol record");
-      }
-    }
-    return Error::success();
-  }
-
-  Error visitStringTable(DebugStringTableSubsectionRef &Strings,
-                         const StringsAndChecksumsRef &State) override {
-    if (!opts::checkModuleSubsection(opts::ModuleSubsection::StringTable))
-      return Error::success();
-
-    ListScope D(P, "String Table");
-    BinaryStreamReader Reader(Strings.getBuffer());
-    StringRef S;
-    consumeError(Reader.readCString(S));
-    while (Reader.bytesRemaining() > 0) {
-      consumeError(Reader.readCString(S));
-      if (S.empty() && Reader.bytesRemaining() < 4)
-        break;
-      P.printString(S);
-    }
-    return Error::success();
-  }
-
-  Error visitCOFFSymbolRVAs(DebugSymbolRVASubsectionRef &RVAs,
-                            const StringsAndChecksumsRef &State) override {
-    if (!opts::checkModuleSubsection(opts::ModuleSubsection::CoffSymbolRVAs))
-      return Error::success();
-
-    ListScope D(P, "COFF Symbol RVAs");
-    P.printHexList("RVAs", RVAs);
-    return Error::success();
-  }
-
-private:
-  Error dumpTypeRecord(StringRef Label, TypeIndex Index) {
-    bool Success = false;
-    DictScope D(P, Label);
-    if (IPI) {
-      CompactTypeDumpVisitor CTDV(*IPI, Index, &P);
-      if (IPI->contains(Index)) {
-        CVType Type = IPI->getType(Index);
-        if (auto EC = codeview::visitTypeRecord(Type, CTDV))
-          return EC;
-      }
-    }
-
-    if (!Success) {
-      P.printString(
-          llvm::formatv("Index: {0:x} (unknown function)", Index.getIndex())
-              .str());
-    }
-    return Error::success();
-  }
-  Error printFileName(StringRef Label, uint32_t Offset,
-                      const StringsAndChecksumsRef &State) {
-    if (auto Result = getNameFromChecksumsBuffer(Offset, State)) {
-      P.printString(Label, *Result);
-      return Error::success();
-    } else
-      return Result.takeError();
-  }
-
-  Expected<StringRef>
-  getNameFromStringTable(uint32_t Offset, const StringsAndChecksumsRef &State) {
-    return State.strings().getString(Offset);
-  }
-
-  Expected<StringRef>
-  getNameFromChecksumsBuffer(uint32_t Offset,
-                             const StringsAndChecksumsRef &State) {
-    auto Array = State.checksums().getArray();
-    auto ChecksumIter = Array.at(Offset);
-    if (ChecksumIter == Array.end())
-      return make_error<RawError>(raw_error_code::invalid_format);
-    const auto &Entry = *ChecksumIter;
-    return getNameFromStringTable(Entry.FileNameOffset, State);
-  }
-
-  ScopedPrinter &P;
-  LazyRandomTypeCollection &TPI;
-  LazyRandomTypeCollection *IPI;
-};
-}
-
-static void recordKnownUsedPage(PageStats &Stats, uint32_t UsedIndex) {
-  if (Stats.Upm.test(UsedIndex)) {
-    if (Stats.ActualUsedPages.test(UsedIndex))
-      Stats.MultiUsePages.set(UsedIndex);
-    Stats.ActualUsedPages.set(UsedIndex);
-    Stats.OrphanedPages.reset(UsedIndex);
-  } else {
-    // The MSF doesn't think this page is used, but it is.
-    Stats.UseAfterFreePages.set(UsedIndex);
-  }
-}
-
-static void printSectionOffset(llvm::raw_ostream &OS,
-                               const SectionOffset &Off) {
-  OS << Off.Off << ", " << Off.Isect;
-}
-
-LLVMOutputStyle::LLVMOutputStyle(PDBFile &File) : File(File), P(outs()) {}
-
-Error LLVMOutputStyle::dump() {
-  if (auto EC = dumpFileHeaders())
-    return EC;
-
-  if (auto EC = dumpStreamSummary())
-    return EC;
-
-  if (auto EC = dumpFreePageMap())
-    return EC;
-
-  if (auto EC = dumpStreamBlocks())
-    return EC;
-
-  if (auto EC = dumpBlockRanges())
-    return EC;
-
-  if (auto EC = dumpStreamBytes())
-    return EC;
-
-  if (auto EC = dumpStringTable())
-    return EC;
-
-  if (auto EC = dumpInfoStream())
-    return EC;
-
-  if (auto EC = dumpTpiStream(StreamTPI))
-    return EC;
-
-  if (auto EC = dumpTpiStream(StreamIPI))
-    return EC;
-
-  if (auto EC = dumpDbiStream())
-    return EC;
-
-  if (auto EC = dumpSectionContribs())
-    return EC;
-
-  if (auto EC = dumpSectionMap())
-    return EC;
-
-  if (auto EC = dumpGlobalsStream())
-    return EC;
-
-  if (auto EC = dumpPublicsStream())
-    return EC;
-
-  if (auto EC = dumpSectionHeaders())
-    return EC;
-
-  if (auto EC = dumpFpoStream())
-    return EC;
-
-  flush();
-
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpFileHeaders() {
-  if (!opts::raw::DumpHeaders)
-    return Error::success();
-
-  DictScope D(P, "FileHeaders");
-  P.printNumber("BlockSize", File.getBlockSize());
-  P.printNumber("FreeBlockMap", File.getFreeBlockMapBlock());
-  P.printNumber("NumBlocks", File.getBlockCount());
-  P.printNumber("NumDirectoryBytes", File.getNumDirectoryBytes());
-  P.printNumber("Unknown1", File.getUnknown1());
-  P.printNumber("BlockMapAddr", File.getBlockMapIndex());
-  P.printNumber("NumDirectoryBlocks", File.getNumDirectoryBlocks());
-
-  // The directory is not contiguous.  Instead, the block map contains a
-  // contiguous list of block numbers whose contents, when concatenated in
-  // order, make up the directory.
-  P.printList("DirectoryBlocks", File.getDirectoryBlockArray());
-  P.printNumber("NumStreams", File.getNumStreams());
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpStreamSummary() {
-  if (!opts::raw::DumpStreamSummary)
-    return Error::success();
-
-  if (StreamPurposes.empty())
-    discoverStreamPurposes(File, StreamPurposes);
-
-  uint32_t StreamCount = File.getNumStreams();
-
-  ListScope L(P, "Streams");
-  for (uint16_t StreamIdx = 0; StreamIdx < StreamCount; ++StreamIdx) {
-    std::string Label("Stream ");
-    Label += to_string(StreamIdx);
-
-    std::string Value = "[" + StreamPurposes[StreamIdx] + "] (";
-    Value += to_string(File.getStreamByteSize(StreamIdx));
-    Value += " bytes)";
-
-    P.printString(Label, Value);
-  }
-
-  P.flush();
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpFreePageMap() {
-  if (!opts::raw::DumpPageStats)
-    return Error::success();
-
-  // Start with used pages instead of free pages because
-  // the number of free pages is far larger than used pages.
-  BitVector FPM = File.getMsfLayout().FreePageMap;
-
-  PageStats PS(FPM);
-
-  recordKnownUsedPage(PS, 0); // MSF Super Block
-
-  uint32_t BlocksPerSection = msf::getFpmIntervalLength(File.getMsfLayout());
-  uint32_t NumSections = msf::getNumFpmIntervals(File.getMsfLayout());
-  for (uint32_t I = 0; I < NumSections; ++I) {
-    uint32_t Fpm0 = 1 + BlocksPerSection * I;
-    // 2 Fpm blocks spaced at `getBlockSize()` block intervals
-    recordKnownUsedPage(PS, Fpm0);
-    recordKnownUsedPage(PS, Fpm0 + 1);
-  }
-
-  recordKnownUsedPage(PS, File.getBlockMapIndex()); // Stream Table
-
-  for (auto DB : File.getDirectoryBlockArray())
-    recordKnownUsedPage(PS, DB);
-
-  // Record pages used by streams. Note that pages for stream 0
-  // are considered being unused because that's what MSVC tools do.
-  // Stream 0 doesn't contain actual data, so it makes some sense,
-  // though it's a bit confusing to us.
-  for (auto &SE : File.getStreamMap().drop_front(1))
-    for (auto &S : SE)
-      recordKnownUsedPage(PS, S);
-
-  dumpBitVector("Msf Free Pages", FPM);
-  dumpBitVector("Orphaned Pages", PS.OrphanedPages);
-  dumpBitVector("Multiply Used Pages", PS.MultiUsePages);
-  dumpBitVector("Use After Free Pages", PS.UseAfterFreePages);
-  return Error::success();
-}
-
-void LLVMOutputStyle::dumpBitVector(StringRef Name, const BitVector &V) {
-  std::vector<uint32_t> Vec;
-  for (uint32_t I = 0, E = V.size(); I != E; ++I)
-    if (V[I])
-      Vec.push_back(I);
-  P.printList(Name, Vec);
-}
-
-Error LLVMOutputStyle::dumpGlobalsStream() {
-  if (!opts::raw::DumpGlobals)
-    return Error::success();
-  if (!File.hasPDBGlobalsStream()) {
-    P.printString("Globals Stream not present");
-    return Error::success();
-  }
-
-  auto Globals = File.getPDBGlobalsStream();
-  if (!Globals)
-    return Globals.takeError();
-  DictScope D(P, "Globals Stream");
-
-  auto Dbi = File.getPDBDbiStream();
-  if (!Dbi)
-    return Dbi.takeError();
-
-  P.printNumber("Stream number", Dbi->getGlobalSymbolStreamIndex());
-  P.printNumber("Number of buckets", Globals->getNumBuckets());
-  P.printList("Hash Buckets", Globals->getHashBuckets());
-
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpStreamBlocks() {
-  if (!opts::raw::DumpStreamBlocks)
-    return Error::success();
-
-  ListScope L(P, "StreamBlocks");
-  uint32_t StreamCount = File.getNumStreams();
-  for (uint32_t StreamIdx = 0; StreamIdx < StreamCount; ++StreamIdx) {
-    std::string Name("Stream ");
-    Name += to_string(StreamIdx);
-    auto StreamBlocks = File.getStreamBlockList(StreamIdx);
-    P.printList(Name, StreamBlocks);
-  }
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpBlockRanges() {
-  if (!opts::raw::DumpBlockRange.hasValue())
-    return Error::success();
-  auto &R = *opts::raw::DumpBlockRange;
-  uint32_t Max = R.Max.getValueOr(R.Min);
-
-  if (Max < R.Min)
-    return make_error<StringError>(
-        "Invalid block range specified.  Max < Min",
-        std::make_error_code(std::errc::bad_address));
-  if (Max >= File.getBlockCount())
-    return make_error<StringError>(
-        "Invalid block range specified.  Requested block out of bounds",
-        std::make_error_code(std::errc::bad_address));
-
-  DictScope D(P, "Block Data");
-  for (uint32_t I = R.Min; I <= Max; ++I) {
-    auto ExpectedData = File.getBlockData(I, File.getBlockSize());
-    if (!ExpectedData)
-      return ExpectedData.takeError();
-    std::string Label;
-    llvm::raw_string_ostream S(Label);
-    S << "Block " << I;
-    S.flush();
-    P.printBinaryBlock(Label, *ExpectedData);
-  }
-
-  return Error::success();
-}
-
-static Error parseStreamSpec(StringRef Str, uint32_t &SI, uint32_t &Offset,
-                             uint32_t &Size) {
-  if (Str.consumeInteger(0, SI))
-    return make_error<RawError>(raw_error_code::invalid_format,
-                                "Invalid Stream Specification");
-  if (Str.consume_front(":")) {
-    if (Str.consumeInteger(0, Offset))
-      return make_error<RawError>(raw_error_code::invalid_format,
-                                  "Invalid Stream Specification");
-  }
-  if (Str.consume_front("@")) {
-    if (Str.consumeInteger(0, Size))
-      return make_error<RawError>(raw_error_code::invalid_format,
-                                  "Invalid Stream Specification");
-  }
-  if (!Str.empty())
-    return make_error<RawError>(raw_error_code::invalid_format,
-                                "Invalid Stream Specification");
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpStreamBytes() {
-  if (opts::raw::DumpStreamData.empty())
-    return Error::success();
-
-  if (StreamPurposes.empty())
-    discoverStreamPurposes(File, StreamPurposes);
-
-  DictScope D(P, "Stream Data");
-  for (auto &Str : opts::raw::DumpStreamData) {
-    uint32_t SI = 0;
-    uint32_t Begin = 0;
-    uint32_t Size = 0;
-    uint32_t End = 0;
-
-    if (auto EC = parseStreamSpec(Str, SI, Begin, Size))
-      return EC;
-
-    if (SI >= File.getNumStreams())
-      return make_error<RawError>(raw_error_code::no_stream);
-
-    auto S = MappedBlockStream::createIndexedStream(
-        File.getMsfLayout(), File.getMsfBuffer(), SI, File.getAllocator());
-    if (!S)
-      continue;
-    DictScope DD(P, "Stream");
-    if (Size == 0)
-      End = S->getLength();
-    else {
-      End = Begin + Size;
-      if (End >= S->getLength())
-        return make_error<RawError>(raw_error_code::index_out_of_bounds,
-                                    "Stream is not long enough!");
-    }
-
-    P.printNumber("Index", SI);
-    P.printString("Type", StreamPurposes[SI]);
-    P.printNumber("Size", S->getLength());
-    auto Blocks = File.getMsfLayout().StreamMap[SI];
-    P.printList("Blocks", Blocks);
-
-    BinaryStreamReader R(*S);
-    ArrayRef<uint8_t> StreamData;
-    if (auto EC = R.readBytes(StreamData, S->getLength()))
-      return EC;
-    Size = End - Begin;
-    StreamData = StreamData.slice(Begin, Size);
-    P.printBinaryBlock("Data", StreamData, Begin);
-  }
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpStringTable() {
-  if (!opts::raw::DumpStringTable)
-    return Error::success();
-
-  auto IS = File.getStringTable();
-  if (!IS)
-    return IS.takeError();
-
-  DictScope D(P, "String Table");
-  for (uint32_t I : IS->name_ids()) {
-    auto ES = IS->getStringForID(I);
-    if (!ES)
-      return ES.takeError();
-
-    if (ES->empty())
-      continue;
-    llvm::SmallString<32> Str;
-    Str.append("'");
-    Str.append(*ES);
-    Str.append("'");
-    P.printString(Str);
-  }
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpInfoStream() {
-  if (!opts::raw::DumpHeaders)
-    return Error::success();
-  if (!File.hasPDBInfoStream()) {
-    P.printString("PDB Stream not present");
-    return Error::success();
-  }
-  auto IS = File.getPDBInfoStream();
-  if (!IS)
-    return IS.takeError();
-
-  DictScope D(P, "PDB Stream");
-  P.printNumber("Version", IS->getVersion());
-  P.printHex("Signature", IS->getSignature());
-  P.printNumber("Age", IS->getAge());
-  P.printObject("Guid", IS->getGuid());
-  P.printHex("Features", IS->getFeatures());
-  {
-    DictScope DD(P, "Named Streams");
-    for (const auto &S : IS->getNamedStreams().entries())
-      P.printObject(S.getKey(), S.getValue());
-  }
-  return Error::success();
-}
-
-namespace {
-class RecordBytesVisitor : public TypeVisitorCallbacks {
-public:
-  explicit RecordBytesVisitor(ScopedPrinter &P) : P(P) {}
-
-  Error visitTypeEnd(CVType &Record) override {
-    P.printBinaryBlock("Bytes", Record.content());
-    return Error::success();
-  }
-
-private:
-  ScopedPrinter &P;
-};
-}
-
-Error LLVMOutputStyle::dumpTpiStream(uint32_t StreamIdx) {
-  assert(StreamIdx == StreamTPI || StreamIdx == StreamIPI);
-
-  bool DumpRecordBytes = false;
-  bool DumpRecords = false;
-  bool DumpTpiHash = false;
-  StringRef Label;
-  StringRef VerLabel;
-  if (StreamIdx == StreamTPI) {
-    if (!File.hasPDBTpiStream()) {
-      P.printString("Type Info Stream (TPI) not present");
-      return Error::success();
-    }
-    DumpRecordBytes = opts::raw::DumpTpiRecordBytes;
-    DumpRecords = opts::raw::DumpTpiRecords;
-    DumpTpiHash = opts::raw::DumpTpiHash;
-    Label = "Type Info Stream (TPI)";
-    VerLabel = "TPI Version";
-  } else if (StreamIdx == StreamIPI) {
-    auto InfoS = File.getPDBInfoStream();
-    if (!InfoS)
-      return InfoS.takeError();
-
-    if (!File.hasPDBIpiStream() || !InfoS->containsIdStream())
-      return Error::success();
-    DumpRecordBytes = opts::raw::DumpIpiRecordBytes;
-    DumpRecords = opts::raw::DumpIpiRecords;
-    Label = "Type Info Stream (IPI)";
-    VerLabel = "IPI Version";
-  }
-
-  auto Tpi = (StreamIdx == StreamTPI) ? File.getPDBTpiStream()
-                                      : File.getPDBIpiStream();
-  if (!Tpi)
-    return Tpi.takeError();
-
-  auto ExpectedTypes = initializeTypeDatabase(StreamIdx);
-  if (!ExpectedTypes)
-    return ExpectedTypes.takeError();
-  auto &Types = *ExpectedTypes;
-
-  if (!DumpRecordBytes && !DumpRecords && !DumpTpiHash)
-    return Error::success();
-
-  std::unique_ptr<DictScope> StreamScope;
-  std::unique_ptr<ListScope> RecordScope;
-
-  StreamScope = llvm::make_unique<DictScope>(P, Label);
-  P.printNumber(VerLabel, Tpi->getTpiVersion());
-  P.printNumber("Record count", Tpi->getNumTypeRecords());
-
-  std::vector<std::unique_ptr<TypeVisitorCallbacks>> Visitors;
-
-  // If we're in dump mode, add a dumper with the appropriate detail level.
-  if (DumpRecords) {
-    std::unique_ptr<TypeVisitorCallbacks> Dumper;
-    if (opts::raw::CompactRecords)
-      Dumper = make_unique<CompactTypeDumpVisitor>(Types, &P);
-    else {
-      assert(TpiTypes);
-
-      auto X = make_unique<TypeDumpVisitor>(*TpiTypes, &P, false);
-      if (StreamIdx == StreamIPI)
-        X->setIpiTypes(*IpiTypes);
-      Dumper = std::move(X);
-    }
-    Visitors.push_back(std::move(Dumper));
-  }
-  if (DumpRecordBytes)
-    Visitors.push_back(make_unique<RecordBytesVisitor>(P));
-
-  // We always need to deserialize and add it to the type database.  This is
-  // true if even if we're not dumping anything, because we could need the
-  // type database for the purposes of dumping symbols.
-  TypeVisitorCallbackPipeline Pipeline;
-  for (const auto &V : Visitors)
-    Pipeline.addCallbackToPipeline(*V);
-
-  if (DumpRecords || DumpRecordBytes)
-    RecordScope = llvm::make_unique<ListScope>(P, "Records");
-
-  Optional<TypeIndex> I = Types.getFirst();
-  while (I) {
-    std::unique_ptr<DictScope> OneRecordScope;
-
-    if ((DumpRecords || DumpRecordBytes) && !opts::raw::CompactRecords)
-      OneRecordScope = llvm::make_unique<DictScope>(P, "");
-
-    auto T = Types.getType(*I);
-    if (auto EC = codeview::visitTypeRecord(T, *I, Pipeline))
-      return EC;
-    I = Types.getNext(*I);
-  }
-
-  if (DumpTpiHash) {
-    DictScope DD(P, "Hash");
-    P.printNumber("Number of Hash Buckets", Tpi->getNumHashBuckets());
-    P.printNumber("Hash Key Size", Tpi->getHashKeySize());
-    P.printList("Values", Tpi->getHashValues());
-
-    ListScope LHA(P, "Adjusters");
-    auto ExpectedST = File.getStringTable();
-    if (!ExpectedST)
-      return ExpectedST.takeError();
-    const auto &ST = *ExpectedST;
-    for (const auto &E : Tpi->getHashAdjusters()) {
-      DictScope DHA(P);
-      auto Name = ST.getStringForID(E.first);
-      if (!Name)
-        return Name.takeError();
-
-      P.printString("Type", *Name);
-      P.printHex("TI", E.second);
-    }
-  }
-
-  ListScope L(P, "TypeIndexOffsets");
-  for (const auto &IO : Tpi->getTypeIndexOffsets()) {
-    P.printString(formatv("Index: {0:x}, Offset: {1:N}", IO.Type.getIndex(),
-                          (uint32_t)IO.Offset)
-                      .str());
-  }
-
-  P.flush();
-  return Error::success();
-}
-
-Expected<codeview::LazyRandomTypeCollection &>
-LLVMOutputStyle::initializeTypeDatabase(uint32_t SN) {
-  auto &TypeCollection = (SN == StreamTPI) ? TpiTypes : IpiTypes;
-  auto Tpi =
-      (SN == StreamTPI) ? File.getPDBTpiStream() : File.getPDBIpiStream();
-  if (!Tpi)
-    return Tpi.takeError();
-
-  if (!TypeCollection) {
-    // Initialize the type collection, even if we're not going to dump it.  This
-    // way if some other part of the dumper decides it wants to use some or all
-    // of the records for whatever purposes, it can still access them lazily.
-    auto &Types = Tpi->typeArray();
-    uint32_t Count = Tpi->getNumTypeRecords();
-    auto Offsets = Tpi->getTypeIndexOffsets();
-    TypeCollection =
-        llvm::make_unique<LazyRandomTypeCollection>(Types, Count, Offsets);
-  }
-
-  return *TypeCollection;
-}
-
-Error LLVMOutputStyle::dumpDbiStream() {
-  bool DumpModules = opts::shared::DumpModules ||
-                     opts::shared::DumpModuleSyms ||
-                     opts::shared::DumpModuleFiles ||
-                     !opts::shared::DumpModuleSubsections.empty();
-  if (!opts::raw::DumpHeaders && !DumpModules)
-    return Error::success();
-  if (!File.hasPDBDbiStream()) {
-    P.printString("DBI Stream not present");
-    return Error::success();
-  }
-
-  ExitOnError Err("Error while processing DBI Stream");
-
-  auto DS = File.getPDBDbiStream();
-  if (!DS)
-    return DS.takeError();
-
-  DictScope D(P, "DBI Stream");
-  P.printNumber("Dbi Version", DS->getDbiVersion());
-  P.printNumber("Age", DS->getAge());
-  P.printBoolean("Incremental Linking", DS->isIncrementallyLinked());
-  P.printBoolean("Has CTypes", DS->hasCTypes());
-  P.printBoolean("Is Stripped", DS->isStripped());
-  P.printObject("Machine Type", DS->getMachineType());
-  P.printNumber("Symbol Record Stream Index", DS->getSymRecordStreamIndex());
-  P.printNumber("Public Symbol Stream Index", DS->getPublicSymbolStreamIndex());
-  P.printNumber("Global Symbol Stream Index", DS->getGlobalSymbolStreamIndex());
-
-  uint16_t Major = DS->getBuildMajorVersion();
-  uint16_t Minor = DS->getBuildMinorVersion();
-  P.printVersion("Toolchain Version", Major, Minor);
-
-  std::string DllName;
-  raw_string_ostream DllStream(DllName);
-  DllStream << "mspdb" << Major << Minor << ".dll version";
-  DllStream.flush();
-  P.printVersion(DllName, Major, Minor, DS->getPdbDllVersion());
-
-  if (DumpModules) {
-    ListScope L(P, "Modules");
-    const DbiModuleList &Modules = DS->modules();
-    for (uint32_t I = 0; I < Modules.getModuleCount(); ++I) {
-      const DbiModuleDescriptor &Modi = Modules.getModuleDescriptor(I);
-      DictScope DD(P);
-      P.printString("Name", Modi.getModuleName().str());
-      P.printNumber("Debug Stream Index", Modi.getModuleStreamIndex());
-      P.printString("Object File Name", Modi.getObjFileName().str());
-      P.printNumber("Num Files", Modi.getNumberOfFiles());
-      P.printNumber("Source File Name Idx", Modi.getSourceFileNameIndex());
-      P.printNumber("Pdb File Name Idx", Modi.getPdbFilePathNameIndex());
-      P.printNumber("Line Info Byte Size", Modi.getC11LineInfoByteSize());
-      P.printNumber("C13 Line Info Byte Size", Modi.getC13LineInfoByteSize());
-      P.printNumber("Symbol Byte Size", Modi.getSymbolDebugInfoByteSize());
-      P.printNumber("Type Server Index", Modi.getTypeServerIndex());
-      P.printBoolean("Has EC Info", Modi.hasECInfo());
-      if (opts::shared::DumpModuleFiles) {
-        std::string FileListName = to_string(Modules.getSourceFileCount(I)) +
-                                   " Contributing Source Files";
-        ListScope LL(P, FileListName);
-        for (auto File : Modules.source_files(I))
-          P.printString(File);
-      }
-      bool HasModuleDI = (Modi.getModuleStreamIndex() < File.getNumStreams());
-      bool ShouldDumpSymbols =
-          (opts::shared::DumpModuleSyms || opts::raw::DumpSymRecordBytes);
-      if (HasModuleDI &&
-          (ShouldDumpSymbols || !opts::shared::DumpModuleSubsections.empty())) {
-        auto ModStreamData = MappedBlockStream::createIndexedStream(
-            File.getMsfLayout(), File.getMsfBuffer(),
-            Modi.getModuleStreamIndex(), File.getAllocator());
-
-        ModuleDebugStreamRef ModS(Modi, std::move(ModStreamData));
-        if (auto EC = ModS.reload())
-          return EC;
-
-        auto ExpectedTpi = initializeTypeDatabase(StreamTPI);
-        if (!ExpectedTpi)
-          return ExpectedTpi.takeError();
-        auto &Tpi = *ExpectedTpi;
-        if (ShouldDumpSymbols) {
-
-          ListScope SS(P, "Symbols");
-          codeview::CVSymbolDumper SD(P, Tpi, CodeViewContainer::Pdb, nullptr,
-                                      false);
-          bool HadError = false;
-          for (auto S : ModS.symbols(&HadError)) {
-            DictScope LL(P, "");
-            if (opts::shared::DumpModuleSyms) {
-              if (auto EC = SD.dump(S)) {
-                llvm::consumeError(std::move(EC));
-                HadError = true;
-                break;
-              }
-            }
-            if (opts::raw::DumpSymRecordBytes)
-              P.printBinaryBlock("Bytes", S.content());
-          }
-          if (HadError)
-            return make_error<RawError>(
-                raw_error_code::corrupt_file,
-                "DBI stream contained corrupt symbol record");
-        }
-        if (!opts::shared::DumpModuleSubsections.empty()) {
-          ListScope SS(P, "Subsections");
-          auto &InfoS = Err(File.getPDBInfoStream());
-          LazyRandomTypeCollection *Ipi = nullptr;
-          if (InfoS.containsIdStream())
-            Ipi = &Err(initializeTypeDatabase(StreamIPI));
-          auto ExpectedStrings = File.getStringTable();
-          if (!ExpectedStrings)
-            return joinErrors(
-                make_error<RawError>(raw_error_code::no_stream,
-                                     "Could not get string table!"),
-                ExpectedStrings.takeError());
-
-          C13RawVisitor V(P, Tpi, Ipi);
-          if (auto EC = codeview::visitDebugSubsections(
-                  ModS.subsections(), V, ExpectedStrings->getStringTable()))
-            return EC;
-        }
-      }
-    }
-  }
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpSectionContribs() {
-  if (!opts::raw::DumpSectionContribs)
-    return Error::success();
-  if (!File.hasPDBDbiStream()) {
-    P.printString("DBI Stream not present");
-    return Error::success();
-  }
-
-  auto Dbi = File.getPDBDbiStream();
-  if (!Dbi)
-    return Dbi.takeError();
-
-  ListScope L(P, "Section Contributions");
-  class Visitor : public ISectionContribVisitor {
-  public:
-    Visitor(ScopedPrinter &P, DbiStream &DS) : P(P), DS(DS) {}
-    void visit(const SectionContrib &SC) override {
-      DictScope D(P, "Contribution");
-      P.printNumber("ISect", SC.ISect);
-      P.printNumber("Off", SC.Off);
-      P.printNumber("Size", SC.Size);
-      P.printFlags("Characteristics", SC.Characteristics,
-                   codeview::getImageSectionCharacteristicNames(),
-                   COFF::SectionCharacteristics(0x00F00000));
-      {
-        DictScope DD(P, "Module");
-        P.printNumber("Index", SC.Imod);
-        const DbiModuleList &Modules = DS.modules();
-        if (Modules.getModuleCount() > SC.Imod) {
-          P.printString("Name",
-                        Modules.getModuleDescriptor(SC.Imod).getModuleName());
-        }
-      }
-      P.printNumber("Data CRC", SC.DataCrc);
-      P.printNumber("Reloc CRC", SC.RelocCrc);
-      P.flush();
-    }
-    void visit(const SectionContrib2 &SC) override {
-      visit(SC.Base);
-      P.printNumber("ISect Coff", SC.ISectCoff);
-      P.flush();
-    }
-
-  private:
-    ScopedPrinter &P;
-    DbiStream &DS;
-  };
-  Visitor V(P, *Dbi);
-  Dbi->visitSectionContributions(V);
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpSectionMap() {
-  if (!opts::raw::DumpSectionMap)
-    return Error::success();
-  if (!File.hasPDBDbiStream()) {
-    P.printString("DBI Stream not present");
-    return Error::success();
-  }
-
-  auto Dbi = File.getPDBDbiStream();
-  if (!Dbi)
-    return Dbi.takeError();
-
-  ListScope L(P, "Section Map");
-  for (auto &M : Dbi->getSectionMap()) {
-    DictScope D(P, "Entry");
-    P.printFlags("Flags", M.Flags, getOMFSegMapDescFlagNames());
-    P.printNumber("Ovl", M.Ovl);
-    P.printNumber("Group", M.Group);
-    P.printNumber("Frame", M.Frame);
-    P.printNumber("SecName", M.SecName);
-    P.printNumber("ClassName", M.ClassName);
-    P.printNumber("Offset", M.Offset);
-    P.printNumber("SecByteLength", M.SecByteLength);
-    P.flush();
-  }
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpPublicsStream() {
-  if (!opts::raw::DumpPublics)
-    return Error::success();
-  if (!File.hasPDBPublicsStream()) {
-    P.printString("Publics Stream not present");
-    return Error::success();
-  }
-
-  auto Publics = File.getPDBPublicsStream();
-  if (!Publics)
-    return Publics.takeError();
-  DictScope D(P, "Publics Stream");
-
-  auto Dbi = File.getPDBDbiStream();
-  if (!Dbi)
-    return Dbi.takeError();
-
-  P.printNumber("Stream number", Dbi->getPublicSymbolStreamIndex());
-  P.printNumber("SymHash", Publics->getSymHash());
-  P.printNumber("AddrMap", Publics->getAddrMap());
-  P.printNumber("Number of buckets", Publics->getNumBuckets());
-  P.printList("Hash Buckets", Publics->getHashBuckets());
-  P.printList("Address Map", Publics->getAddressMap());
-  P.printList("Thunk Map", Publics->getThunkMap());
-  P.printList("Section Offsets", Publics->getSectionOffsets(),
-              printSectionOffset);
-  ListScope L(P, "Symbols");
-  auto ExpectedTypes = initializeTypeDatabase(StreamTPI);
-  if (!ExpectedTypes)
-    return ExpectedTypes.takeError();
-  auto &Tpi = *ExpectedTypes;
-
-  codeview::CVSymbolDumper SD(P, Tpi, CodeViewContainer::Pdb, nullptr, false);
-  bool HadError = false;
-  for (auto S : Publics->getSymbols(&HadError)) {
-    DictScope DD(P, "");
-
-    if (auto EC = SD.dump(S)) {
-      HadError = true;
-      break;
-    }
-    if (opts::raw::DumpSymRecordBytes)
-      P.printBinaryBlock("Bytes", S.content());
-  }
-  if (HadError)
-    return make_error<RawError>(
-        raw_error_code::corrupt_file,
-        "Public symbol stream contained corrupt record");
-
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpSectionHeaders() {
-  if (!opts::raw::DumpSectionHeaders)
-    return Error::success();
-  if (!File.hasPDBDbiStream()) {
-    P.printString("DBI Stream not present");
-    return Error::success();
-  }
-
-  auto Dbi = File.getPDBDbiStream();
-  if (!Dbi)
-    return Dbi.takeError();
-
-  ListScope D(P, "Section Headers");
-  for (const object::coff_section &Section : Dbi->getSectionHeaders()) {
-    DictScope DD(P, "");
-
-    // If a name is 8 characters long, there is no NUL character at end.
-    StringRef Name(Section.Name, strnlen(Section.Name, sizeof(Section.Name)));
-    P.printString("Name", Name);
-    P.printNumber("Virtual Size", Section.VirtualSize);
-    P.printNumber("Virtual Address", Section.VirtualAddress);
-    P.printNumber("Size of Raw Data", Section.SizeOfRawData);
-    P.printNumber("File Pointer to Raw Data", Section.PointerToRawData);
-    P.printNumber("File Pointer to Relocations", Section.PointerToRelocations);
-    P.printNumber("File Pointer to Linenumbers", Section.PointerToLinenumbers);
-    P.printNumber("Number of Relocations", Section.NumberOfRelocations);
-    P.printNumber("Number of Linenumbers", Section.NumberOfLinenumbers);
-    P.printFlags("Characteristics", Section.Characteristics,
-                 getImageSectionCharacteristicNames());
-  }
-  return Error::success();
-}
-
-Error LLVMOutputStyle::dumpFpoStream() {
-  if (!opts::raw::DumpFpo)
-    return Error::success();
-  if (!File.hasPDBDbiStream()) {
-    P.printString("DBI Stream not present");
-    return Error::success();
-  }
-
-  auto Dbi = File.getPDBDbiStream();
-  if (!Dbi)
-    return Dbi.takeError();
-
-  ListScope D(P, "New FPO");
-  for (const object::FpoData &Fpo : Dbi->getFpoRecords()) {
-    DictScope DD(P, "");
-    P.printNumber("Offset", Fpo.Offset);
-    P.printNumber("Size", Fpo.Size);
-    P.printNumber("Number of locals", Fpo.NumLocals);
-    P.printNumber("Number of params", Fpo.NumParams);
-    P.printNumber("Size of Prolog", Fpo.getPrologSize());
-    P.printNumber("Number of Saved Registers", Fpo.getNumSavedRegs());
-    P.printBoolean("Has SEH", Fpo.hasSEH());
-    P.printBoolean("Use BP", Fpo.useBP());
-    P.printNumber("Frame Pointer", Fpo.getFP());
-  }
-  return Error::success();
-}
-
-void LLVMOutputStyle::flush() { P.flush(); }

Removed: llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.h?rev=305494&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.h (original)
+++ llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.h (removed)
@@ -1,70 +0,0 @@
-//===- LLVMOutputStyle.h -------------------------------------- *- C++ --*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMPDBDUMP_LLVMOUTPUTSTYLE_H
-#define LLVM_TOOLS_LLVMPDBDUMP_LLVMOUTPUTSTYLE_H
-
-#include "OutputStyle.h"
-
-#include "llvm/ADT/Optional.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/DebugInfo/CodeView/TypeDatabase.h"
-#include "llvm/Support/ScopedPrinter.h"
-
-#include <string>
-
-namespace llvm {
-class BitVector;
-
-namespace codeview {
-class LazyRandomTypeCollection;
-}
-
-namespace pdb {
-class LLVMOutputStyle : public OutputStyle {
-public:
-  LLVMOutputStyle(PDBFile &File);
-
-  Error dump() override;
-
-private:
-  Expected<codeview::LazyRandomTypeCollection &>
-  initializeTypeDatabase(uint32_t SN);
-
-  Error dumpFileHeaders();
-  Error dumpStreamSummary();
-  Error dumpFreePageMap();
-  Error dumpBlockRanges();
-  Error dumpGlobalsStream();
-  Error dumpStreamBytes();
-  Error dumpStreamBlocks();
-  Error dumpStringTable();
-  Error dumpInfoStream();
-  Error dumpTpiStream(uint32_t StreamIdx);
-  Error dumpDbiStream();
-  Error dumpSectionContribs();
-  Error dumpSectionMap();
-  Error dumpPublicsStream();
-  Error dumpSectionHeaders();
-  Error dumpFpoStream();
-
-  void dumpBitVector(StringRef Name, const BitVector &V);
-
-  void flush();
-
-  PDBFile &File;
-  ScopedPrinter P;
-  std::unique_ptr<codeview::LazyRandomTypeCollection> TpiTypes;
-  std::unique_ptr<codeview::LazyRandomTypeCollection> IpiTypes;
-  SmallVector<std::string, 32> StreamPurposes;
-};
-}
-}
-
-#endif

Modified: llvm/trunk/tools/llvm-pdbutil/LinePrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/LinePrinter.cpp?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/LinePrinter.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/LinePrinter.cpp Thu Jun 15 14:34:41 2017
@@ -13,6 +13,7 @@
 
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/DebugInfo/PDB/UDTLayout.h"
+#include "llvm/Support/Format.h"
 #include "llvm/Support/Regex.h"
 
 #include <algorithm>
@@ -60,10 +61,16 @@ LinePrinter::LinePrinter(int Indent, boo
              opts::pretty::IncludeCompilands.end());
 }
 
-void LinePrinter::Indent() { CurrentIndent += IndentSpaces; }
+void LinePrinter::Indent(uint32_t Amount) {
+  if (Amount == 0)
+    Amount = IndentSpaces;
+  CurrentIndent += Amount;
+}
 
-void LinePrinter::Unindent() {
-  CurrentIndent = std::max(0, CurrentIndent - IndentSpaces);
+void LinePrinter::Unindent(uint32_t Amount) {
+  if (Amount == 0)
+    Amount = IndentSpaces;
+  CurrentIndent = std::max<int>(0, CurrentIndent - Amount);
 }
 
 void LinePrinter::NewLine() {
@@ -71,6 +78,13 @@ void LinePrinter::NewLine() {
   OS.indent(CurrentIndent);
 }
 
+void LinePrinter::print(const Twine &T) { OS << T; }
+
+void LinePrinter::printLine(const Twine &T) {
+  NewLine();
+  OS << T;
+}
+
 bool LinePrinter::IsClassExcluded(const ClassLayout &Class) {
   if (IsTypeExcluded(Class.getName(), Class.getSize()))
     return true;
@@ -79,6 +93,19 @@ bool LinePrinter::IsClassExcluded(const
   return false;
 }
 
+void LinePrinter::formatBinary(StringRef Label, ArrayRef<uint8_t> Data,
+                               uint32_t StartOffset) {
+  NewLine();
+  OS << Label << " (";
+  if (!Data.empty()) {
+    OS << "\n";
+    OS << format_bytes_with_ascii(Data, StartOffset, 32, 4,
+                                  CurrentIndent + IndentSpaces, true);
+    NewLine();
+  }
+  OS << ")";
+}
+
 bool LinePrinter::IsTypeExcluded(llvm::StringRef TypeName, uint32_t Size) {
   if (IsItemExcluded(TypeName, IncludeTypeFilters, ExcludeTypeFilters))
     return true;

Modified: llvm/trunk/tools/llvm-pdbutil/LinePrinter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/LinePrinter.h?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/LinePrinter.h (original)
+++ llvm/trunk/tools/llvm-pdbutil/LinePrinter.h Thu Jun 15 14:34:41 2017
@@ -10,10 +10,12 @@
 #ifndef LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H
 #define LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H
 
+#include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/Twine.h"
-#include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/FormatVariadic.h"
 #include "llvm/Support/Regex.h"
+#include "llvm/Support/raw_ostream.h"
 
 #include <list>
 
@@ -28,10 +30,22 @@ class LinePrinter {
 public:
   LinePrinter(int Indent, bool UseColor, raw_ostream &Stream);
 
-  void Indent();
-  void Unindent();
+  void Indent(uint32_t Amount = 0);
+  void Unindent(uint32_t Amount = 0);
   void NewLine();
 
+  void printLine(const Twine &T);
+  void print(const Twine &T);
+  template <typename... Ts> void formatLine(const char *Fmt, Ts &&... Items) {
+    printLine(formatv(Fmt, std::forward<Ts>(Items)...));
+  }
+  template <typename... Ts> void format(const char *Fmt, Ts &&... Items) {
+    print(formatv(Fmt, std::forward<Ts>(Items)...));
+  }
+
+  void formatBinary(StringRef Label, ArrayRef<uint8_t> Data,
+                    uint32_t StartOffset);
+
   bool hasColor() const { return UseColor; }
   raw_ostream &getStream() { return OS; }
   int getIndentLevel() const { return CurrentIndent; }
@@ -63,6 +77,17 @@ private:
   std::list<Regex> IncludeSymbolFilters;
 };
 
+struct AutoIndent {
+  explicit AutoIndent(LinePrinter &L, uint32_t Amount = 0)
+      : L(L), Amount(Amount) {
+    L.Indent(Amount);
+  }
+  ~AutoIndent() { L.Unindent(Amount); }
+
+  LinePrinter &L;
+  uint32_t Amount = 0;
+};
+
 template <class T>
 inline raw_ostream &operator<<(LinePrinter &Printer, const T &Item) {
   Printer.getStream() << Item;

Added: llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp?rev=305495&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp (added)
+++ llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp Thu Jun 15 14:34:41 2017
@@ -0,0 +1,753 @@
+//===- MinimalSymbolDumper.cpp -------------------------------- *- C++ --*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "MinimalSymbolDumper.h"
+
+#include "FormatUtil.h"
+#include "LinePrinter.h"
+
+#include "llvm/DebugInfo/CodeView/CVRecord.h"
+#include "llvm/DebugInfo/CodeView/CodeView.h"
+#include "llvm/DebugInfo/CodeView/Formatters.h"
+#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h"
+#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
+#include "llvm/DebugInfo/CodeView/TypeRecord.h"
+#include "llvm/Support/FormatVariadic.h"
+
+using namespace llvm;
+using namespace llvm::codeview;
+using namespace llvm::pdb;
+
+static StringRef getSymbolKindName(SymbolKind K) {
+  switch (K) {
+#define SYMBOL_RECORD(EnumName, value, name)                                   \
+  case EnumName:                                                               \
+    return #EnumName;
+#include "llvm/DebugInfo/CodeView/CodeViewSymbols.def"
+  default:
+    llvm_unreachable("Unknown symbol kind!");
+  }
+  return "";
+}
+
+static std::string formatLocalSymFlags(uint32_t IndentLevel,
+                                       LocalSymFlags Flags) {
+  std::vector<std::string> Opts;
+  if (Flags == LocalSymFlags::None)
+    return "none";
+
+  PUSH_FLAG(LocalSymFlags, IsParameter, Flags, "param");
+  PUSH_FLAG(LocalSymFlags, IsAddressTaken, Flags, "address is taken");
+  PUSH_FLAG(LocalSymFlags, IsCompilerGenerated, Flags, "compiler generated");
+  PUSH_FLAG(LocalSymFlags, IsAggregate, Flags, "aggregate");
+  PUSH_FLAG(LocalSymFlags, IsAggregated, Flags, "aggregated");
+  PUSH_FLAG(LocalSymFlags, IsAliased, Flags, "aliased");
+  PUSH_FLAG(LocalSymFlags, IsAlias, Flags, "alias");
+  PUSH_FLAG(LocalSymFlags, IsReturnValue, Flags, "return val");
+  PUSH_FLAG(LocalSymFlags, IsOptimizedOut, Flags, "optimized away");
+  PUSH_FLAG(LocalSymFlags, IsEnregisteredGlobal, Flags, "enreg global");
+  PUSH_FLAG(LocalSymFlags, IsEnregisteredStatic, Flags, "enreg static");
+  return typesetItemList(Opts, 4, IndentLevel, " | ");
+}
+
+static std::string formatExportFlags(uint32_t IndentLevel, ExportFlags Flags) {
+  std::vector<std::string> Opts;
+  if (Flags == ExportFlags::None)
+    return "none";
+
+  PUSH_FLAG(ExportFlags, IsConstant, Flags, "constant");
+  PUSH_FLAG(ExportFlags, IsData, Flags, "data");
+  PUSH_FLAG(ExportFlags, IsPrivate, Flags, "private");
+  PUSH_FLAG(ExportFlags, HasNoName, Flags, "no name");
+  PUSH_FLAG(ExportFlags, HasExplicitOrdinal, Flags, "explicit ord");
+  PUSH_FLAG(ExportFlags, IsForwarder, Flags, "forwarder");
+
+  return typesetItemList(Opts, 4, IndentLevel, " | ");
+}
+
+static std::string formatCompileSym2Flags(uint32_t IndentLevel,
+                                          CompileSym2Flags Flags) {
+  std::vector<std::string> Opts;
+  Flags &= ~CompileSym2Flags::SourceLanguageMask;
+  if (Flags == CompileSym2Flags::None)
+    return "none";
+
+  PUSH_FLAG(CompileSym2Flags, EC, Flags, "edit and continue");
+  PUSH_FLAG(CompileSym2Flags, NoDbgInfo, Flags, "no dbg info");
+  PUSH_FLAG(CompileSym2Flags, LTCG, Flags, "ltcg");
+  PUSH_FLAG(CompileSym2Flags, NoDataAlign, Flags, "no data align");
+  PUSH_FLAG(CompileSym2Flags, ManagedPresent, Flags, "has managed code");
+  PUSH_FLAG(CompileSym2Flags, SecurityChecks, Flags, "security checks");
+  PUSH_FLAG(CompileSym2Flags, HotPatch, Flags, "hot patchable");
+  PUSH_FLAG(CompileSym2Flags, CVTCIL, Flags, "cvtcil");
+  PUSH_FLAG(CompileSym2Flags, MSILModule, Flags, "msil module");
+  return typesetItemList(Opts, 4, IndentLevel, " | ");
+}
+
+static std::string formatCompileSym3Flags(uint32_t IndentLevel,
+                                          CompileSym3Flags Flags) {
+  std::vector<std::string> Opts;
+  Flags &= ~CompileSym3Flags::SourceLanguageMask;
+
+  if (Flags == CompileSym3Flags::None)
+    return "none";
+
+  PUSH_FLAG(CompileSym3Flags, EC, Flags, "edit and continue");
+  PUSH_FLAG(CompileSym3Flags, NoDbgInfo, Flags, "no dbg info");
+  PUSH_FLAG(CompileSym3Flags, LTCG, Flags, "ltcg");
+  PUSH_FLAG(CompileSym3Flags, NoDataAlign, Flags, "no data align");
+  PUSH_FLAG(CompileSym3Flags, ManagedPresent, Flags, "has managed code");
+  PUSH_FLAG(CompileSym3Flags, SecurityChecks, Flags, "security checks");
+  PUSH_FLAG(CompileSym3Flags, HotPatch, Flags, "hot patchable");
+  PUSH_FLAG(CompileSym3Flags, CVTCIL, Flags, "cvtcil");
+  PUSH_FLAG(CompileSym3Flags, MSILModule, Flags, "msil module");
+  PUSH_FLAG(CompileSym3Flags, Sdl, Flags, "sdl");
+  PUSH_FLAG(CompileSym3Flags, PGO, Flags, "pgo");
+  PUSH_FLAG(CompileSym3Flags, Exp, Flags, "exp");
+  return typesetItemList(Opts, 4, IndentLevel, " | ");
+}
+
+static std::string formatFrameProcedureOptions(uint32_t IndentLevel,
+                                               FrameProcedureOptions FPO) {
+  std::vector<std::string> Opts;
+  if (FPO == FrameProcedureOptions::None)
+    return "none";
+
+  PUSH_FLAG(FrameProcedureOptions, HasAlloca, FPO, "has alloca");
+  PUSH_FLAG(FrameProcedureOptions, HasSetJmp, FPO, "has setjmp");
+  PUSH_FLAG(FrameProcedureOptions, HasLongJmp, FPO, "has longjmp");
+  PUSH_FLAG(FrameProcedureOptions, HasInlineAssembly, FPO, "has inline asm");
+  PUSH_FLAG(FrameProcedureOptions, HasExceptionHandling, FPO, "has eh");
+  PUSH_FLAG(FrameProcedureOptions, MarkedInline, FPO, "marked inline");
+  PUSH_FLAG(FrameProcedureOptions, HasStructuredExceptionHandling, FPO,
+            "has seh");
+  PUSH_FLAG(FrameProcedureOptions, Naked, FPO, "naked");
+  PUSH_FLAG(FrameProcedureOptions, SecurityChecks, FPO, "secure checks");
+  PUSH_FLAG(FrameProcedureOptions, AsynchronousExceptionHandling, FPO,
+            "has async eh");
+  PUSH_FLAG(FrameProcedureOptions, NoStackOrderingForSecurityChecks, FPO,
+            "no stack order");
+  PUSH_FLAG(FrameProcedureOptions, Inlined, FPO, "inlined");
+  PUSH_FLAG(FrameProcedureOptions, StrictSecurityChecks, FPO,
+            "strict secure checks");
+  PUSH_FLAG(FrameProcedureOptions, SafeBuffers, FPO, "safe buffers");
+  PUSH_FLAG(FrameProcedureOptions, ProfileGuidedOptimization, FPO, "pgo");
+  PUSH_FLAG(FrameProcedureOptions, ValidProfileCounts, FPO,
+            "has profile counts");
+  PUSH_FLAG(FrameProcedureOptions, OptimizedForSpeed, FPO, "opt speed");
+  PUSH_FLAG(FrameProcedureOptions, GuardCfg, FPO, "guard cfg");
+  PUSH_FLAG(FrameProcedureOptions, GuardCfw, FPO, "guard cfw");
+  return typesetItemList(Opts, 4, IndentLevel, " | ");
+}
+
+static std::string formatProcSymFlags(uint32_t IndentLevel,
+                                      ProcSymFlags Flags) {
+  std::vector<std::string> Opts;
+  if (Flags == ProcSymFlags::None)
+    return "none";
+
+  PUSH_FLAG(ProcSymFlags, HasFP, Flags, "has fp");
+  PUSH_FLAG(ProcSymFlags, HasIRET, Flags, "has iret");
+  PUSH_FLAG(ProcSymFlags, HasFRET, Flags, "has fret");
+  PUSH_FLAG(ProcSymFlags, IsNoReturn, Flags, "noreturn");
+  PUSH_FLAG(ProcSymFlags, IsUnreachable, Flags, "unreachable");
+  PUSH_FLAG(ProcSymFlags, HasCustomCallingConv, Flags, "custom calling conv");
+  PUSH_FLAG(ProcSymFlags, IsNoInline, Flags, "noinline");
+  PUSH_FLAG(ProcSymFlags, HasOptimizedDebugInfo, Flags, "opt debuginfo");
+  return typesetItemList(Opts, 4, IndentLevel, " | ");
+}
+
+static std::string formatThunkOrdinal(ThunkOrdinal Ordinal) {
+  switch (Ordinal) {
+    RETURN_CASE(ThunkOrdinal, Standard, "thunk");
+    RETURN_CASE(ThunkOrdinal, ThisAdjustor, "this adjustor");
+    RETURN_CASE(ThunkOrdinal, Vcall, "vcall");
+    RETURN_CASE(ThunkOrdinal, Pcode, "pcode");
+    RETURN_CASE(ThunkOrdinal, UnknownLoad, "unknown load");
+    RETURN_CASE(ThunkOrdinal, TrampIncremental, "tramp incremental");
+    RETURN_CASE(ThunkOrdinal, BranchIsland, "branch island");
+  default:
+    return formatUnknownEnum(Ordinal);
+  }
+}
+
+static std::string formatTrampolineType(TrampolineType Tramp) {
+  switch (Tramp) {
+    RETURN_CASE(TrampolineType, TrampIncremental, "tramp incremental");
+    RETURN_CASE(TrampolineType, BranchIsland, "branch island");
+  default:
+    return formatUnknownEnum(Tramp);
+  }
+}
+
+static std::string formatSourceLanguage(SourceLanguage Lang) {
+  switch (Lang) {
+    RETURN_CASE(SourceLanguage, C, "c");
+    RETURN_CASE(SourceLanguage, Cpp, "c++");
+    RETURN_CASE(SourceLanguage, Fortran, "fortran");
+    RETURN_CASE(SourceLanguage, Masm, "masm");
+    RETURN_CASE(SourceLanguage, Pascal, "pascal");
+    RETURN_CASE(SourceLanguage, Basic, "basic");
+    RETURN_CASE(SourceLanguage, Cobol, "cobol");
+    RETURN_CASE(SourceLanguage, Link, "link");
+    RETURN_CASE(SourceLanguage, Cvtres, "cvtres");
+    RETURN_CASE(SourceLanguage, Cvtpgd, "cvtpgd");
+    RETURN_CASE(SourceLanguage, CSharp, "c#");
+    RETURN_CASE(SourceLanguage, ILAsm, "il asm");
+    RETURN_CASE(SourceLanguage, Java, "java");
+    RETURN_CASE(SourceLanguage, JScript, "javascript");
+    RETURN_CASE(SourceLanguage, MSIL, "msil");
+    RETURN_CASE(SourceLanguage, HLSL, "hlsl");
+  default:
+    return formatUnknownEnum(Lang);
+  }
+}
+
+static std::string formatMachineType(CPUType Cpu) {
+  switch (Cpu) {
+    RETURN_CASE(CPUType, Intel8080, "intel 8080");
+    RETURN_CASE(CPUType, Intel8086, "intel 8086");
+    RETURN_CASE(CPUType, Intel80286, "intel 80286");
+    RETURN_CASE(CPUType, Intel80386, "intel 80386");
+    RETURN_CASE(CPUType, Intel80486, "intel 80486");
+    RETURN_CASE(CPUType, Pentium, "intel pentium");
+    RETURN_CASE(CPUType, PentiumPro, "intel pentium pro");
+    RETURN_CASE(CPUType, Pentium3, "intel pentium 3");
+    RETURN_CASE(CPUType, MIPS, "mips");
+    RETURN_CASE(CPUType, MIPS16, "mips-16");
+    RETURN_CASE(CPUType, MIPS32, "mips-32");
+    RETURN_CASE(CPUType, MIPS64, "mips-64");
+    RETURN_CASE(CPUType, MIPSI, "mips i");
+    RETURN_CASE(CPUType, MIPSII, "mips ii");
+    RETURN_CASE(CPUType, MIPSIII, "mips iii");
+    RETURN_CASE(CPUType, MIPSIV, "mips iv");
+    RETURN_CASE(CPUType, MIPSV, "mips v");
+    RETURN_CASE(CPUType, M68000, "motorola 68000");
+    RETURN_CASE(CPUType, M68010, "motorola 68010");
+    RETURN_CASE(CPUType, M68020, "motorola 68020");
+    RETURN_CASE(CPUType, M68030, "motorola 68030");
+    RETURN_CASE(CPUType, M68040, "motorola 68040");
+    RETURN_CASE(CPUType, Alpha, "alpha");
+    RETURN_CASE(CPUType, Alpha21164, "alpha 21164");
+    RETURN_CASE(CPUType, Alpha21164A, "alpha 21164a");
+    RETURN_CASE(CPUType, Alpha21264, "alpha 21264");
+    RETURN_CASE(CPUType, Alpha21364, "alpha 21364");
+    RETURN_CASE(CPUType, PPC601, "powerpc 601");
+    RETURN_CASE(CPUType, PPC603, "powerpc 603");
+    RETURN_CASE(CPUType, PPC604, "powerpc 604");
+    RETURN_CASE(CPUType, PPC620, "powerpc 620");
+    RETURN_CASE(CPUType, PPCFP, "powerpc fp");
+    RETURN_CASE(CPUType, PPCBE, "powerpc be");
+    RETURN_CASE(CPUType, SH3, "sh3");
+    RETURN_CASE(CPUType, SH3E, "sh3e");
+    RETURN_CASE(CPUType, SH3DSP, "sh3 dsp");
+    RETURN_CASE(CPUType, SH4, "sh4");
+    RETURN_CASE(CPUType, SHMedia, "shmedia");
+    RETURN_CASE(CPUType, ARM3, "arm 3");
+    RETURN_CASE(CPUType, ARM4, "arm 4");
+    RETURN_CASE(CPUType, ARM4T, "arm 4t");
+    RETURN_CASE(CPUType, ARM5, "arm 5");
+    RETURN_CASE(CPUType, ARM5T, "arm 5t");
+    RETURN_CASE(CPUType, ARM6, "arm 6");
+    RETURN_CASE(CPUType, ARM_XMAC, "arm xmac");
+    RETURN_CASE(CPUType, ARM_WMMX, "arm wmmx");
+    RETURN_CASE(CPUType, ARM7, "arm 7");
+    RETURN_CASE(CPUType, Omni, "omni");
+    RETURN_CASE(CPUType, Ia64, "intel itanium ia64");
+    RETURN_CASE(CPUType, Ia64_2, "intel itanium ia64 2");
+    RETURN_CASE(CPUType, CEE, "cee");
+    RETURN_CASE(CPUType, AM33, "am33");
+    RETURN_CASE(CPUType, M32R, "m32r");
+    RETURN_CASE(CPUType, TriCore, "tri-core");
+    RETURN_CASE(CPUType, X64, "intel x86-x64");
+    RETURN_CASE(CPUType, EBC, "ebc");
+    RETURN_CASE(CPUType, Thumb, "thumb");
+    RETURN_CASE(CPUType, ARMNT, "arm nt");
+    RETURN_CASE(CPUType, D3D11_Shader, "d3d11 shader");
+  default:
+    return formatUnknownEnum(Cpu);
+  }
+}
+
+static std::string formatCookieKind(FrameCookieKind Kind) {
+  switch (Kind) {
+    RETURN_CASE(FrameCookieKind, Copy, "copy");
+    RETURN_CASE(FrameCookieKind, XorStackPointer, "xor stack ptr");
+    RETURN_CASE(FrameCookieKind, XorFramePointer, "xor frame ptr");
+    RETURN_CASE(FrameCookieKind, XorR13, "xor rot13");
+  default:
+    return formatUnknownEnum(Kind);
+  }
+}
+
+static std::string formatRegisterId(RegisterId Id) {
+  switch (Id) {
+    RETURN_CASE(RegisterId, VFrame, "vframe");
+    RETURN_CASE(RegisterId, AL, "al");
+    RETURN_CASE(RegisterId, CL, "cl");
+    RETURN_CASE(RegisterId, DL, "dl");
+    RETURN_CASE(RegisterId, BL, "bl");
+    RETURN_CASE(RegisterId, AH, "ah");
+    RETURN_CASE(RegisterId, CH, "ch");
+    RETURN_CASE(RegisterId, DH, "dh");
+    RETURN_CASE(RegisterId, BH, "bh");
+    RETURN_CASE(RegisterId, AX, "ax");
+    RETURN_CASE(RegisterId, CX, "cx");
+    RETURN_CASE(RegisterId, DX, "dx");
+    RETURN_CASE(RegisterId, BX, "bx");
+    RETURN_CASE(RegisterId, SP, "sp");
+    RETURN_CASE(RegisterId, BP, "bp");
+    RETURN_CASE(RegisterId, SI, "si");
+    RETURN_CASE(RegisterId, DI, "di");
+    RETURN_CASE(RegisterId, EAX, "eax");
+    RETURN_CASE(RegisterId, ECX, "ecx");
+    RETURN_CASE(RegisterId, EDX, "edx");
+    RETURN_CASE(RegisterId, EBX, "ebx");
+    RETURN_CASE(RegisterId, ESP, "esp");
+    RETURN_CASE(RegisterId, EBP, "ebp");
+    RETURN_CASE(RegisterId, ESI, "esi");
+    RETURN_CASE(RegisterId, EDI, "edi");
+    RETURN_CASE(RegisterId, ES, "es");
+    RETURN_CASE(RegisterId, CS, "cs");
+    RETURN_CASE(RegisterId, SS, "ss");
+    RETURN_CASE(RegisterId, DS, "ds");
+    RETURN_CASE(RegisterId, FS, "fs");
+    RETURN_CASE(RegisterId, GS, "gs");
+    RETURN_CASE(RegisterId, IP, "ip");
+    RETURN_CASE(RegisterId, RAX, "rax");
+    RETURN_CASE(RegisterId, RBX, "rbx");
+    RETURN_CASE(RegisterId, RCX, "rcx");
+    RETURN_CASE(RegisterId, RDX, "rdx");
+    RETURN_CASE(RegisterId, RSI, "rsi");
+    RETURN_CASE(RegisterId, RDI, "rdi");
+    RETURN_CASE(RegisterId, RBP, "rbp");
+    RETURN_CASE(RegisterId, RSP, "rsp");
+    RETURN_CASE(RegisterId, R8, "r8");
+    RETURN_CASE(RegisterId, R9, "r9");
+    RETURN_CASE(RegisterId, R10, "r10");
+    RETURN_CASE(RegisterId, R11, "r11");
+    RETURN_CASE(RegisterId, R12, "r12");
+    RETURN_CASE(RegisterId, R13, "r13");
+    RETURN_CASE(RegisterId, R14, "r14");
+    RETURN_CASE(RegisterId, R15, "r15");
+  default:
+    return formatUnknownEnum(Id);
+  }
+}
+
+static std::string formatRange(LocalVariableAddrRange Range) {
+  return formatv("[{0},+{1})",
+                 formatSegmentOffset(Range.ISectStart, Range.OffsetStart),
+                 Range.Range)
+      .str();
+}
+
+static std::string formatGaps(uint32_t IndentLevel,
+                              ArrayRef<LocalVariableAddrGap> Gaps) {
+  std::vector<std::string> GapStrs;
+  for (const auto &G : Gaps) {
+    GapStrs.push_back(formatv("({0},{1})", G.GapStartOffset, G.Range).str());
+  }
+  return typesetItemList(GapStrs, 7, IndentLevel, ", ");
+}
+
+Error MinimalSymbolDumper::visitSymbolBegin(codeview::CVSymbol &Record) {
+  // formatLine puts the newline at the beginning, so we use formatLine here
+  // to start a new line, and then individual visit methods use format to
+  // append to the existing line.
+  P.formatLine("- {0} [size = {1}]", getSymbolKindName(Record.Type),
+               Record.length());
+  P.Indent();
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitSymbolEnd(CVSymbol &Record) {
+  P.Unindent();
+  return Error::success();
+}
+
+std::string MinimalSymbolDumper::typeIndex(TypeIndex TI) const {
+  if (TI.isSimple())
+    return formatv("{0}", TI).str();
+  StringRef Name = Types.getTypeName(TI);
+  if (Name.size() > 32) {
+    Name = Name.take_front(32);
+    return formatv("{0} ({1}...)", TI, Name);
+  } else
+    return formatv("{0} ({1})", TI, Name);
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, BlockSym &Block) {
+  P.format(" `{0}`", Block.Name);
+  AutoIndent Indent(P);
+  P.formatLine("parent = {0}, addr = {1}", Block.Parent,
+               formatSegmentOffset(Block.Segment, Block.CodeOffset));
+  P.formatLine("code size = {0}, end = {1}", Block.CodeSize, Block.End);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, Thunk32Sym &Thunk) {
+  P.format(" `{0}`", Thunk.Name);
+  AutoIndent Indent(P);
+  P.formatLine("parent = {0}, addr = {1}", Thunk.Parent,
+               formatSegmentOffset(Thunk.Segment, Thunk.Offset));
+  P.formatLine("kind = {0}, size = {1}, end = {2}, next = {3}",
+               formatThunkOrdinal(Thunk.Thunk), Thunk.Length, Thunk.End,
+               Thunk.Next);
+
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            TrampolineSym &Tramp) {
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, size = {1}, source = {2}, target = {3}",
+               formatTrampolineType(Tramp.Type), Tramp.Size,
+               formatSegmentOffset(Tramp.ThunkSection, Tramp.ThunkOffset),
+               formatSegmentOffset(Tramp.TargetSection, Tramp.ThunkOffset));
+
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            SectionSym &Section) {
+  P.format(" `{0}`", Section.Name);
+  AutoIndent Indent(P);
+  P.formatLine("length = {0}, alignment = {1}, rva = {2}, section # = {3}, "
+               "characteristics = {4}",
+               Section.Length, Section.Alignment, Section.Rva,
+               Section.SectionNumber, Section.Characteristics);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, CoffGroupSym &CG) {
+  P.format(" `{0}`", CG.Name);
+  AutoIndent Indent(P);
+  P.formatLine("length = {0}, addr = {1}, characteristics = {2}", CG.Size,
+               formatSegmentOffset(CG.Segment, CG.Offset), CG.Characteristics);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            BPRelativeSym &BPRel) {
+  P.format(" `{0}`", BPRel.Name);
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, offset = {1}", typeIndex(BPRel.Type), BPRel.Offset);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            BuildInfoSym &BuildInfo) {
+  P.format(" BuildId = `{0}`", BuildInfo.BuildId);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            CallSiteInfoSym &CSI) {
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, addr = {1}", typeIndex(CSI.Type),
+               formatSegmentOffset(CSI.Segment, CSI.CodeOffset));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            EnvBlockSym &EnvBlock) {
+  for (const auto &Entry : EnvBlock.Fields) {
+    P.formatLine("- {0}", Entry);
+  }
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, FileStaticSym &FS) {
+  P.format(" `{0}`", FS.Name);
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, file name offset = {1}, flags = {2}",
+               typeIndex(FS.Index), FS.ModFilenameOffset,
+               formatLocalSymFlags(P.getIndentLevel() + 9, FS.Flags));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, ExportSym &Export) {
+  P.format(" `{0}`", Export.Name);
+  AutoIndent Indent(P);
+  P.formatLine("ordinal = {0}, flags = {1}", Export.Ordinal,
+               formatExportFlags(P.getIndentLevel() + 9, Export.Flags));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            Compile2Sym &Compile2) {
+  AutoIndent Indent(P);
+  SourceLanguage Lang = static_cast<SourceLanguage>(
+      Compile2.Flags & CompileSym2Flags::SourceLanguageMask);
+  P.formatLine("machine = {0}, ver = {1}, language = {2}",
+               formatMachineType(Compile2.Machine), Compile2.Version,
+               formatSourceLanguage(Lang));
+  P.formatLine("frontend = {0}.{1}.{2}, backend = {3}.{4}.{5}",
+               Compile2.VersionFrontendMajor, Compile2.VersionFrontendMinor,
+               Compile2.VersionFrontendBuild, Compile2.VersionBackendMajor,
+               Compile2.VersionBackendMinor, Compile2.VersionBackendBuild);
+  P.formatLine("flags = {0}",
+               formatCompileSym2Flags(P.getIndentLevel() + 9, Compile2.Flags));
+  P.formatLine(
+      "extra strings = {0}",
+      typesetStringList(P.getIndentLevel() + 9 + 2, Compile2.ExtraStrings));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            Compile3Sym &Compile3) {
+  AutoIndent Indent(P);
+  SourceLanguage Lang = static_cast<SourceLanguage>(
+      Compile3.Flags & CompileSym3Flags::SourceLanguageMask);
+  P.formatLine("machine = {0}, Ver = {1}, language = {2}",
+               formatMachineType(Compile3.Machine), Compile3.Version,
+               formatSourceLanguage(Lang));
+  P.formatLine("frontend = {0}.{1}.{2}.{3}, backend = {4}.{5}.{6}.{7}",
+               Compile3.VersionFrontendMajor, Compile3.VersionFrontendMinor,
+               Compile3.VersionFrontendBuild, Compile3.VersionFrontendQFE,
+               Compile3.VersionBackendMajor, Compile3.VersionBackendMinor,
+               Compile3.VersionBackendBuild, Compile3.VersionBackendQFE);
+  P.formatLine("flags = {0}",
+               formatCompileSym3Flags(P.getIndentLevel() + 9, Compile3.Flags));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            ConstantSym &Constant) {
+  P.format(" `{0}`", Constant.Name);
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, value = {1}", typeIndex(Constant.Type),
+               Constant.Value.toString(10));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, DataSym &Data) {
+  P.format(" `{0}`", Data.Name);
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, addr = {1}", typeIndex(Data.Type),
+               formatSegmentOffset(Data.Segment, Data.DataOffset));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(
+    CVSymbol &CVR, DefRangeFramePointerRelFullScopeSym &Def) {
+  P.format(" offset = {0}", Def.Offset);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            DefRangeFramePointerRelSym &Def) {
+  AutoIndent Indent(P);
+  P.formatLine("offset = {0}, range = {1}", Def.Offset, formatRange(Def.Range));
+  P.formatLine("gaps = {2}", Def.Offset,
+               formatGaps(P.getIndentLevel() + 9, Def.Gaps));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            DefRangeRegisterRelSym &Def) {
+  AutoIndent Indent(P);
+  P.formatLine("register = {0}, base ptr = {1}, offset in parent = {2}, has "
+               "spilled udt = {3}",
+               uint16_t(Def.Hdr.Register), int32_t(Def.Hdr.BasePointerOffset),
+               Def.offsetInParent(), Def.hasSpilledUDTMember());
+  P.formatLine("range = {0}, gaps = {1}", formatRange(Def.Range),
+               formatGaps(P.getIndentLevel() + 9, Def.Gaps));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(
+    CVSymbol &CVR, DefRangeRegisterSym &DefRangeRegister) {
+  AutoIndent Indent(P);
+  P.formatLine("register = {0}, may have no name = {1}, range start = "
+               "{2}, length = {3}",
+               uint16_t(DefRangeRegister.Hdr.Register),
+               uint16_t(DefRangeRegister.Hdr.MayHaveNoName),
+               formatSegmentOffset(DefRangeRegister.Range.ISectStart,
+                                   DefRangeRegister.Range.OffsetStart),
+               DefRangeRegister.Range.Range);
+  P.formatLine("gaps = [{0}]",
+               formatGaps(P.getIndentLevel() + 9, DefRangeRegister.Gaps));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            DefRangeSubfieldRegisterSym &Def) {
+  AutoIndent Indent(P);
+  bool NoName = !!(Def.Hdr.MayHaveNoName == 0);
+  P.formatLine("register = {0}, may have no name = {1}, offset in parent = {2}",
+               uint16_t(Def.Hdr.Register), NoName,
+               uint32_t(Def.Hdr.OffsetInParent));
+  P.formatLine("range = {0}, gaps = {1}", formatRange(Def.Range),
+               formatGaps(P.getIndentLevel() + 9, Def.Gaps));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            DefRangeSubfieldSym &Def) {
+  AutoIndent Indent(P);
+  P.formatLine("program = {0}, offset in parent = {1}, range = {2}",
+               Def.Program, Def.OffsetInParent, formatRange(Def.Range));
+  P.formatLine("gaps = {0}", formatGaps(P.getIndentLevel() + 9, Def.Gaps));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, DefRangeSym &Def) {
+  AutoIndent Indent(P);
+  P.formatLine("program = {0}, range = {1}", Def.Program,
+               formatRange(Def.Range));
+  P.formatLine("gaps = {0}", formatGaps(P.getIndentLevel() + 9, Def.Gaps));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, FrameCookieSym &FC) {
+  AutoIndent Indent(P);
+  P.formatLine("code offset = {0}, Register = {1}, kind = {2}, flags = {3}",
+               FC.CodeOffset, FC.Register, formatCookieKind(FC.CookieKind),
+               FC.Flags);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, FrameProcSym &FP) {
+  AutoIndent Indent(P);
+  P.formatLine("size = {0}, padding size = {1}, offset to padding = {2}",
+               FP.TotalFrameBytes, FP.PaddingFrameBytes, FP.OffsetToPadding);
+  P.formatLine("bytes of callee saved registers = {0}, exception handler addr "
+               "= {1}",
+               FP.BytesOfCalleeSavedRegisters,
+               formatSegmentOffset(FP.SectionIdOfExceptionHandler,
+                                   FP.OffsetOfExceptionHandler));
+  P.formatLine("flags = {0}",
+               formatFrameProcedureOptions(P.getIndentLevel() + 9, FP.Flags));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            HeapAllocationSiteSym &HAS) {
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, addr = {1} call size = {2}", typeIndex(HAS.Type),
+               formatSegmentOffset(HAS.Segment, HAS.CodeOffset),
+               HAS.CallInstructionSize);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, InlineSiteSym &IS) {
+  AutoIndent Indent(P);
+  auto Bytes = makeArrayRef(IS.AnnotationData);
+  StringRef Annotations(reinterpret_cast<const char *>(Bytes.begin()),
+                        Bytes.size());
+
+  P.formatLine("inlinee = {0}, parent = {1}, end = {2}", typeIndex(IS.Inlinee),
+               IS.Parent, IS.End);
+  P.formatLine("annotations = {0}", toHex(Annotations));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            RegisterSym &Register) {
+  P.format(" `{0}`", Register.Name);
+  AutoIndent Indent(P);
+  P.formatLine("register = {0}, type = {1}",
+               formatRegisterId(Register.Register), typeIndex(Register.Index));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            PublicSym32 &Public) {
+  P.format(" `{0}`", Public.Name);
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, addr = {1}", typeIndex(Public.Index),
+               formatSegmentOffset(Public.Segment, Public.Offset));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, ProcRefSym &PR) {
+  P.format(" `{0}`", PR.Name);
+  AutoIndent Indent(P);
+  P.formatLine("module = {0}, sum name = {1}, offset = {2}", PR.Module,
+               PR.SumName, PR.SymOffset);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, LabelSym &Label) {
+  P.format(" `{0}` (addr = {1})", Label.Name,
+           formatSegmentOffset(Label.Segment, Label.CodeOffset));
+  AutoIndent Indent(P);
+  P.formatLine("flags = {0}",
+               formatProcSymFlags(P.getIndentLevel() + 9, Label.Flags));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, LocalSym &Local) {
+  P.format(" `{0}`", Local.Name);
+  AutoIndent Indent(P);
+
+  std::string FlagStr =
+      formatLocalSymFlags(P.getIndentLevel() + 9, Local.Flags);
+  P.formatLine("type={0}, flags = {1}", typeIndex(Local.Type), FlagStr);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            ObjNameSym &ObjName) {
+  P.format(" sig={0}, `{1}`", ObjName.Signature, ObjName.Name);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, ProcSym &Proc) {
+  P.format(" `{0}`", Proc.Name);
+  AutoIndent Indent(P);
+  P.formatLine("parent = {0}, addr = {1}, code size = {2}, end = {3}",
+               Proc.Parent, formatSegmentOffset(Proc.Segment, Proc.CodeOffset),
+               Proc.CodeSize, Proc.End);
+  P.formatLine("debug start = {0}, debug end = {1}, flags = {2}", Proc.DbgStart,
+               Proc.DbgEnd,
+               formatProcSymFlags(P.getIndentLevel() + 9, Proc.Flags));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            ScopeEndSym &ScopeEnd) {
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, CallerSym &Caller) {
+  AutoIndent Indent(P);
+  for (const auto &I : Caller.Indices) {
+    P.formatLine("callee: {0}", typeIndex(I));
+  }
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            RegRelativeSym &RegRel) {
+  P.format(" `{0}`", RegRel.Name);
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, register = {1}, offset = {2}",
+               typeIndex(RegRel.Type), formatRegisterId(RegRel.Register),
+               RegRel.Offset);
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
+                                            ThreadLocalDataSym &Data) {
+  P.format(" `{0}`", Data.Name);
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, addr = {1}", typeIndex(Data.Type),
+               formatSegmentOffset(Data.Segment, Data.DataOffset));
+  return Error::success();
+}
+
+Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, UDTSym &UDT) {
+  P.format(" `{0}`", UDT.Name);
+  AutoIndent Indent(P);
+  P.formatLine("original type = {0}", UDT.Type);
+  return Error::success();
+}

Added: llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h?rev=305495&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h (added)
+++ llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h Thu Jun 15 14:34:41 2017
@@ -0,0 +1,49 @@
+//===- MinimalSymbolDumper.h ---------------------------------- *- C++ --*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H
+#define LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_SYMBOL_DUMPER_H
+
+#include "llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h"
+
+namespace llvm {
+namespace codeview {
+class LazyRandomTypeCollection;
+}
+
+namespace pdb {
+class LinePrinter;
+
+class MinimalSymbolDumper : public codeview::SymbolVisitorCallbacks {
+public:
+  MinimalSymbolDumper(LinePrinter &P, bool RecordBytes,
+                      codeview::LazyRandomTypeCollection &Types)
+      : P(P), RecordBytes(RecordBytes), Types(Types) {}
+
+  virtual Error visitSymbolBegin(codeview::CVSymbol &Record);
+  virtual Error visitSymbolEnd(codeview::CVSymbol &Record);
+
+#define SYMBOL_RECORD(EnumName, EnumVal, Name)                                 \
+  virtual Error visitKnownRecord(codeview::CVSymbol &CVR,                      \
+                                 codeview::Name &Record) override;
+#define SYMBOL_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
+#include "llvm/DebugInfo/CodeView/CodeViewSymbols.def"
+
+private:
+  std::string typeIndex(codeview::TypeIndex TI) const;
+
+  uint32_t Width;
+  LinePrinter &P;
+  bool RecordBytes = false;
+  codeview::LazyRandomTypeCollection &Types;
+};
+} // namespace pdb
+} // namespace llvm
+
+#endif
\ No newline at end of file

Added: llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.cpp?rev=305495&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.cpp (added)
+++ llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.cpp Thu Jun 15 14:34:41 2017
@@ -0,0 +1,535 @@
+//===- MinimalTypeDumper.cpp ---------------------------------- *- C++ --*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "MinimalTypeDumper.h"
+
+#include "FormatUtil.h"
+#include "LinePrinter.h"
+
+#include "llvm/DebugInfo/CodeView/CVRecord.h"
+#include "llvm/DebugInfo/CodeView/CVTypeVisitor.h"
+#include "llvm/DebugInfo/CodeView/CodeView.h"
+#include "llvm/DebugInfo/CodeView/Formatters.h"
+#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h"
+#include "llvm/DebugInfo/CodeView/TypeRecord.h"
+#include "llvm/Support/FormatVariadic.h"
+#include "llvm/Support/MathExtras.h"
+
+using namespace llvm;
+using namespace llvm::codeview;
+using namespace llvm::pdb;
+
+static StringRef getLeafTypeName(TypeLeafKind K) {
+  switch (K) {
+#define TYPE_RECORD(EnumName, value, name)                                     \
+  case EnumName:                                                               \
+    return #EnumName;
+#include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
+  default:
+    llvm_unreachable("Unknown type leaf kind!");
+  }
+  return "";
+}
+
+static std::string formatClassOptions(uint32_t IndentLevel,
+                                      ClassOptions Options) {
+  std::vector<std::string> Opts;
+  PUSH_FLAG(ClassOptions, HasConstructorOrDestructor, Options,
+            "has ctor / dtor");
+  PUSH_FLAG(ClassOptions, ContainsNestedClass, Options,
+            "contains nested class");
+  PUSH_FLAG(ClassOptions, HasConversionOperator, Options,
+            "conversion operator");
+  PUSH_FLAG(ClassOptions, ForwardReference, Options, "forward ref");
+  PUSH_FLAG(ClassOptions, HasUniqueName, Options, "has unique name");
+  PUSH_FLAG(ClassOptions, Intrinsic, Options, "intrin");
+  PUSH_FLAG(ClassOptions, Nested, Options, "is nested");
+  PUSH_FLAG(ClassOptions, HasOverloadedOperator, Options,
+            "overloaded operator");
+  PUSH_FLAG(ClassOptions, HasOverloadedAssignmentOperator, Options,
+            "overloaded operator=");
+  PUSH_FLAG(ClassOptions, Packed, Options, "packed");
+  PUSH_FLAG(ClassOptions, Scoped, Options, "scoped");
+  PUSH_FLAG(ClassOptions, Sealed, Options, "sealed");
+
+  return typesetItemList(Opts, 4, IndentLevel, " | ");
+}
+
+static std::string pointerOptions(PointerOptions Options) {
+  std::vector<std::string> Opts;
+  PUSH_FLAG(PointerOptions, Flat32, Options, "flat32");
+  PUSH_FLAG(PointerOptions, Volatile, Options, "volatile");
+  PUSH_FLAG(PointerOptions, Const, Options, "const");
+  PUSH_FLAG(PointerOptions, Unaligned, Options, "unaligned");
+  PUSH_FLAG(PointerOptions, Restrict, Options, "restrict");
+  PUSH_FLAG(PointerOptions, WinRTSmartPointer, Options, "winrt");
+  if (Opts.empty())
+    return "None";
+  return join(Opts, " | ");
+}
+
+static std::string modifierOptions(ModifierOptions Options) {
+  std::vector<std::string> Opts;
+  PUSH_FLAG(ModifierOptions, Const, Options, "const");
+  PUSH_FLAG(ModifierOptions, Volatile, Options, "volatile");
+  PUSH_FLAG(ModifierOptions, Unaligned, Options, "unaligned");
+  if (Opts.empty())
+    return "None";
+  return join(Opts, " | ");
+}
+
+static std::string formatCallingConvention(CallingConvention Convention) {
+  switch (Convention) {
+    RETURN_CASE(CallingConvention, AlphaCall, "alphacall");
+    RETURN_CASE(CallingConvention, AM33Call, "am33call");
+    RETURN_CASE(CallingConvention, ArmCall, "armcall");
+    RETURN_CASE(CallingConvention, ClrCall, "clrcall");
+    RETURN_CASE(CallingConvention, FarC, "far cdecl");
+    RETURN_CASE(CallingConvention, FarFast, "far fastcall");
+    RETURN_CASE(CallingConvention, FarPascal, "far pascal");
+    RETURN_CASE(CallingConvention, FarStdCall, "far stdcall");
+    RETURN_CASE(CallingConvention, FarSysCall, "far syscall");
+    RETURN_CASE(CallingConvention, Generic, "generic");
+    RETURN_CASE(CallingConvention, Inline, "inline");
+    RETURN_CASE(CallingConvention, M32RCall, "m32rcall");
+    RETURN_CASE(CallingConvention, MipsCall, "mipscall");
+    RETURN_CASE(CallingConvention, NearC, "cdecl");
+    RETURN_CASE(CallingConvention, NearFast, "fastcall");
+    RETURN_CASE(CallingConvention, NearPascal, "pascal");
+    RETURN_CASE(CallingConvention, NearStdCall, "stdcall");
+    RETURN_CASE(CallingConvention, NearVector, "vectorcall");
+    RETURN_CASE(CallingConvention, PpcCall, "ppccall");
+    RETURN_CASE(CallingConvention, SH5Call, "sh5call");
+    RETURN_CASE(CallingConvention, ThisCall, "thiscall");
+    RETURN_CASE(CallingConvention, TriCall, "tricall");
+  default:
+    return formatUnknownEnum(Convention);
+  }
+  return "";
+}
+
+static std::string formatPointerMode(PointerMode Mode) {
+  switch (Mode) {
+    RETURN_CASE(PointerMode, LValueReference, "ref");
+    RETURN_CASE(PointerMode, Pointer, "pointer");
+    RETURN_CASE(PointerMode, PointerToDataMember, "data member pointer");
+    RETURN_CASE(PointerMode, PointerToMemberFunction, "member fn pointer");
+    RETURN_CASE(PointerMode, RValueReference, "rvalue ref");
+  default:
+    return formatUnknownEnum(Mode);
+  }
+}
+
+static std::string memberAccess(MemberAccess Access) {
+  switch (Access) {
+    RETURN_CASE(MemberAccess, Private, "private");
+    RETURN_CASE(MemberAccess, Protected, "protected");
+    RETURN_CASE(MemberAccess, Public, "public");
+  default:
+    return formatUnknownEnum(Access);
+  }
+}
+
+static std::string methodKind(MethodKind Kind) {
+  switch (Kind) {
+    RETURN_CASE(MethodKind, Vanilla, "");
+    RETURN_CASE(MethodKind, Virtual, "virtual");
+    RETURN_CASE(MethodKind, Static, "static");
+    RETURN_CASE(MethodKind, Friend, "friend");
+    RETURN_CASE(MethodKind, IntroducingVirtual, "intro virtual");
+    RETURN_CASE(MethodKind, PureVirtual, "pure virtual");
+    RETURN_CASE(MethodKind, PureIntroducingVirtual, "pure intro virtual");
+  default:
+    return formatUnknownEnum(Kind);
+  }
+}
+
+static std::string pointerKind(PointerKind Kind) {
+  switch (Kind) {
+    RETURN_CASE(PointerKind, Near16, "ptr16");
+    RETURN_CASE(PointerKind, Far16, "far ptr16");
+    RETURN_CASE(PointerKind, Huge16, "huge ptr16");
+    RETURN_CASE(PointerKind, BasedOnSegment, "segment based");
+    RETURN_CASE(PointerKind, BasedOnValue, "value based");
+    RETURN_CASE(PointerKind, BasedOnSegmentValue, "segment value based");
+    RETURN_CASE(PointerKind, BasedOnAddress, "address based");
+    RETURN_CASE(PointerKind, BasedOnSegmentAddress, "segment address based");
+    RETURN_CASE(PointerKind, BasedOnType, "type based");
+    RETURN_CASE(PointerKind, BasedOnSelf, "self based");
+    RETURN_CASE(PointerKind, Near32, "ptr32");
+    RETURN_CASE(PointerKind, Far32, "far ptr32");
+    RETURN_CASE(PointerKind, Near64, "ptr64");
+  default:
+    return formatUnknownEnum(Kind);
+  }
+}
+
+static std::string memberAttributes(const MemberAttributes &Attrs) {
+  std::vector<std::string> Opts;
+  std::string Access = memberAccess(Attrs.getAccess());
+  std::string Kind = methodKind(Attrs.getMethodKind());
+  if (!Access.empty())
+    Opts.push_back(Access);
+  if (!Kind.empty())
+    Opts.push_back(Kind);
+  MethodOptions Flags = Attrs.getFlags();
+  PUSH_FLAG(MethodOptions, Pseudo, Flags, "pseudo");
+  PUSH_FLAG(MethodOptions, NoInherit, Flags, "noinherit");
+  PUSH_FLAG(MethodOptions, NoConstruct, Flags, "noconstruct");
+  PUSH_FLAG(MethodOptions, CompilerGenerated, Flags, "compiler-generated");
+  PUSH_FLAG(MethodOptions, Sealed, Flags, "sealed");
+  return join(Opts, " ");
+}
+
+static std::string formatPointerAttrs(const PointerRecord &Record) {
+  PointerMode Mode = Record.getMode();
+  PointerOptions Opts = Record.getOptions();
+  PointerKind Kind = Record.getPointerKind();
+  return formatv("mode = {0}, opts = {1}, kind = {2}", formatPointerMode(Mode),
+                 pointerOptions(Opts), pointerKind(Kind));
+}
+
+static std::string formatFunctionOptions(FunctionOptions Options) {
+  std::vector<std::string> Opts;
+
+  PUSH_FLAG(FunctionOptions, CxxReturnUdt, Options, "returns cxx udt");
+  PUSH_FLAG(FunctionOptions, ConstructorWithVirtualBases, Options,
+            "constructor with virtual bases");
+  PUSH_FLAG(FunctionOptions, Constructor, Options, "constructor");
+  if (Opts.empty())
+    return "None";
+  return join(Opts, " | ");
+}
+
+Error MinimalTypeDumpVisitor::visitTypeBegin(CVType &Record, TypeIndex Index) {
+  // formatLine puts the newline at the beginning, so we use formatLine here
+  // to start a new line, and then individual visit methods use format to
+  // append to the existing line.
+  P.formatLine("{0} | {1} [size = {2}]",
+               fmt_align(Index, AlignStyle::Right, Width),
+               getLeafTypeName(Record.Type), Record.length());
+  P.Indent(Width + 3);
+  return Error::success();
+}
+Error MinimalTypeDumpVisitor::visitTypeEnd(CVType &Record) {
+  P.Unindent(Width + 3);
+  if (RecordBytes) {
+    AutoIndent Indent(P, 9);
+    P.formatBinary("Bytes", Record.RecordData, 0);
+  }
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitMemberBegin(CVMemberRecord &Record) {
+  P.formatLine("- {0}", getLeafTypeName(Record.Kind));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitMemberEnd(CVMemberRecord &Record) {
+  if (RecordBytes) {
+    AutoIndent Indent(P, 2);
+    P.formatBinary("Bytes", Record.Data, 0);
+  }
+  return Error::success();
+}
+
+StringRef MinimalTypeDumpVisitor::getTypeName(TypeIndex TI) const {
+  if (TI.isNoneType())
+    return "";
+  return Types.getTypeName(TI);
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               FieldListRecord &FieldList) {
+  if (auto EC = codeview::visitMemberRecordStream(FieldList.Data, *this))
+    return EC;
+
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               StringIdRecord &String) {
+  P.format(" ID: {0}, String: {1}", String.getId(), String.getString());
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               ArgListRecord &Args) {
+  auto Indices = Args.getIndices();
+  if (Indices.empty())
+    return Error::success();
+
+  auto Max = std::max_element(Indices.begin(), Indices.end());
+  uint32_t W = NumDigits(Max->getIndex()) + 2;
+
+  for (auto I : Indices)
+    P.formatLine("{0}: `{1}`", fmt_align(I, AlignStyle::Right, W),
+                 getTypeName(I));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               StringListRecord &Strings) {
+  auto Indices = Strings.getIndices();
+  if (Indices.empty())
+    return Error::success();
+
+  auto Max = std::max_element(Indices.begin(), Indices.end());
+  uint32_t W = NumDigits(Max->getIndex()) + 2;
+
+  for (auto I : Indices)
+    P.formatLine("{0}: `{1}`", fmt_align(I, AlignStyle::Right, W),
+                 getTypeName(I));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               ClassRecord &Class) {
+  P.formatLine("class name: `{0}`", Class.Name);
+  if (Class.hasUniqueName())
+    P.formatLine("unique name: `{0}`", Class.UniqueName);
+  P.formatLine("vtable: {0}, base list: {1}, field list: {2}",
+               Class.VTableShape, Class.DerivationList, Class.FieldList);
+  P.formatLine("options: {0}",
+               formatClassOptions(P.getIndentLevel(), Class.Options));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               UnionRecord &Union) {
+  P.formatLine("class name: `{0}`", Union.Name);
+  if (Union.hasUniqueName())
+    P.formatLine("unique name: `{0}`", Union.UniqueName);
+  P.formatLine("field list: {0}", Union.FieldList);
+  P.formatLine("options: {0}",
+               formatClassOptions(P.getIndentLevel(), Union.Options));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, EnumRecord &Enum) {
+  P.formatLine("name: `{0}`", Enum.Name);
+  if (Enum.hasUniqueName())
+    P.formatLine("unique name: `{0}`", Enum.UniqueName);
+  P.formatLine("field list: {0}, underlying type: {1}", Enum.FieldList,
+               Enum.UnderlyingType);
+  P.formatLine("options: {0}",
+               formatClassOptions(P.getIndentLevel(), Enum.Options));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, ArrayRecord &AT) {
+  if (AT.Name.empty()) {
+    P.formatLine("size: {0}, index type: {1}, element type: {2}", AT.Size,
+                 AT.IndexType, AT.ElementType);
+  } else {
+    P.formatLine("name: {0}, size: {1}, index type: {2}, element type: {3}",
+                 AT.Name, AT.Size, AT.IndexType, AT.ElementType);
+  }
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               VFTableRecord &VFT) {
+  P.formatLine("offset: {0}, complete class: {1}, overridden vftable: {2}",
+               VFT.VFPtrOffset, VFT.CompleteClass, VFT.OverriddenVFTable);
+  P.formatLine("method names: ");
+  if (!VFT.MethodNames.empty()) {
+    std::string Sep =
+        formatv("\n{0}",
+                fmt_repeat(' ', P.getIndentLevel() + strlen("method names: ")))
+            .str();
+    P.print(join(VFT.MethodNames, Sep));
+  }
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               MemberFuncIdRecord &Id) {
+  P.formatLine("name = {0}, type = {1}, class type = {2}", Id.Name,
+               Id.FunctionType, Id.ClassType);
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               ProcedureRecord &Proc) {
+  P.formatLine("return type = {0}, # args = {1}, param list = {2}",
+               Proc.ReturnType, Proc.ParameterCount, Proc.ArgumentList);
+  P.formatLine("calling conv = {0}, options = {1}",
+               formatCallingConvention(Proc.CallConv),
+               formatFunctionOptions(Proc.Options));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               MemberFunctionRecord &MF) {
+  P.formatLine("return type = {0}, # args = {1}, param list = {2}",
+               MF.ParameterCount, MF.ArgumentList, MF.ReturnType);
+  P.formatLine("class type = {0}, this type = {1}, this adjust = {2}",
+               MF.ClassType, MF.ThisType, MF.ThisPointerAdjustment);
+  P.formatLine("calling conv = {0}, options = {1}",
+               formatCallingConvention(MF.CallConv),
+               formatFunctionOptions(MF.Options));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               FuncIdRecord &Func) {
+  P.formatLine("name = {0}, type = {1}, parent scope = {2}", Func.Name,
+               Func.FunctionType, Func.ParentScope);
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               TypeServer2Record &TS) {
+  P.formatLine("name = {0}, age = {1}, guid = {2}", TS.Name, TS.Age,
+               fmt_guid(TS.Guid));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               PointerRecord &Ptr) {
+  P.formatLine("referent = {0}, {1}", Ptr.ReferentType,
+               formatPointerAttrs(Ptr));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               ModifierRecord &Mod) {
+  P.formatLine("referent = {0}, modifiers = {1}", Mod.ModifiedType,
+               modifierOptions(Mod.Modifiers));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               VFTableShapeRecord &Shape) {
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               UdtModSourceLineRecord &U) {
+  P.formatLine("udt = {0}, mod = {1}, file = {2}, line = {3}", U.UDT, U.Module,
+               U.SourceFile.getIndex(), U.LineNumber);
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               UdtSourceLineRecord &U) {
+  P.formatLine("udt = {0}, file = {1}, line = {2}", U.UDT,
+               U.SourceFile.getIndex(), U.LineNumber);
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               BitFieldRecord &BF) {
+  P.formatLine("type = {0}, bit offset = {1}, # bits = {2}", BF.Type,
+               BF.BitOffset, BF.BitSize);
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(
+    CVType &CVR, MethodOverloadListRecord &Overloads) {
+  for (auto &M : Overloads.Methods)
+    P.formatLine("- Method [type = {0}, vftable offset = {1}, attrs = {2}]",
+                 M.Type, M.VFTableOffset, memberAttributes(M.Attrs));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR,
+                                               BuildInfoRecord &BI) {
+  auto Indices = BI.ArgIndices;
+  if (Indices.empty())
+    return Error::success();
+
+  auto Max = std::max_element(Indices.begin(), Indices.end());
+  uint32_t W = NumDigits(Max->getIndex()) + 2;
+
+  for (auto I : Indices)
+    P.formatLine("{0}: `{1}`", fmt_align(I, AlignStyle::Right, W),
+                 getTypeName(I));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownRecord(CVType &CVR, LabelRecord &R) {
+  std::string Type = (R.Mode == LabelType::Far) ? "far" : "near";
+  P.format(" type = {0}", Type);
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR,
+                                               NestedTypeRecord &Nested) {
+  P.format(" [name = `{0}`, parent = {1}]", Nested.Name, Nested.Type);
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR,
+                                               OneMethodRecord &Method) {
+  P.format(" [name = `{0}`]", Method.Name);
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, vftable offset = {1}, attrs = {2}", Method.Type,
+               Method.VFTableOffset, memberAttributes(Method.Attrs));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR,
+                                               OverloadedMethodRecord &Method) {
+  P.format(" [name = `{0}`, # overloads = {1}, overload list = {2}]",
+           Method.Name, Method.NumOverloads, Method.MethodList);
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR,
+                                               DataMemberRecord &Field) {
+  P.format(" [name = `{0}`, Type = {1}, offset = {2}, attrs = {3}]", Field.Name,
+           Field.Type, Field.FieldOffset, memberAttributes(Field.Attrs));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR,
+                                               StaticDataMemberRecord &Field) {
+  P.format(" [name = `{0}`, type = {1}, attrs = {2}]", Field.Name, Field.Type,
+           memberAttributes(Field.Attrs));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR,
+                                               EnumeratorRecord &Enum) {
+  P.format(" [{0} = {1}]", Enum.Name,
+           Enum.Value.toString(10, Enum.Value.isSigned()));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR,
+                                               BaseClassRecord &Base) {
+  AutoIndent Indent(P);
+  P.formatLine("type = {0}, offset = {1}, attrs = {2}", Base.Type, Base.Offset,
+               memberAttributes(Base.Attrs));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR,
+                                               VirtualBaseClassRecord &Base) {
+  AutoIndent Indent(P);
+  P.formatLine(
+      "base = {0}, vbptr = {1}, vbptr offset = {2}, vtable index = {3}",
+      Base.BaseType, Base.VBPtrType, Base.VBPtrOffset, Base.VTableIndex);
+  P.formatLine("attrs = {0}", memberAttributes(Base.Attrs));
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR,
+                                               ListContinuationRecord &Cont) {
+  P.format(" continuation = {0}", Cont.ContinuationIndex);
+  return Error::success();
+}
+
+Error MinimalTypeDumpVisitor::visitKnownMember(CVMemberRecord &CVR,
+                                               VFPtrRecord &VFP) {
+  P.format(" type = {0}", VFP.Type);
+  return Error::success();
+}

Added: llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.h?rev=305495&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.h (added)
+++ llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.h Thu Jun 15 14:34:41 2017
@@ -0,0 +1,56 @@
+//===- MinimalTypeDumper.h ------------------------------------ *- C++ --*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_TYPE_DUMPER_H
+#define LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_TYPE_DUMPER_H
+
+#include "llvm/DebugInfo/CodeView/TypeVisitorCallbacks.h"
+
+namespace llvm {
+namespace codeview {
+class LazyRandomTypeCollection;
+}
+
+namespace pdb {
+class LinePrinter;
+
+class MinimalTypeDumpVisitor : public codeview::TypeVisitorCallbacks {
+public:
+  MinimalTypeDumpVisitor(LinePrinter &P, uint32_t Width, bool RecordBytes,
+                         codeview::LazyRandomTypeCollection &Types)
+      : P(P), Width(Width), RecordBytes(RecordBytes), Types(Types) {}
+
+  Error visitTypeBegin(codeview::CVType &Record,
+                       codeview::TypeIndex Index) override;
+  Error visitTypeEnd(codeview::CVType &Record) override;
+  Error visitMemberBegin(codeview::CVMemberRecord &Record) override;
+  Error visitMemberEnd(codeview::CVMemberRecord &Record) override;
+
+#define TYPE_RECORD(EnumName, EnumVal, Name)                                   \
+  Error visitKnownRecord(codeview::CVType &CVR,                                \
+                         codeview::Name##Record &Record) override;
+#define MEMBER_RECORD(EnumName, EnumVal, Name)                                 \
+  Error visitKnownMember(codeview::CVMemberRecord &CVR,                        \
+                         codeview::Name##Record &Record) override;
+#define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
+#define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
+#include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
+
+private:
+  StringRef getTypeName(codeview::TypeIndex TI) const;
+
+  uint32_t Width;
+  LinePrinter &P;
+  bool RecordBytes = false;
+  codeview::LazyRandomTypeCollection &Types;
+};
+} // namespace pdb
+} // namespace llvm
+
+#endif

Added: llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.cpp?rev=305495&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.cpp (added)
+++ llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.cpp Thu Jun 15 14:34:41 2017
@@ -0,0 +1,669 @@
+//===- RawOutputStyle.cpp ------------------------------------ *- C++ --*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "RawOutputStyle.h"
+
+#include "CompactTypeDumpVisitor.h"
+#include "FormatUtil.h"
+#include "MinimalSymbolDumper.h"
+#include "MinimalTypeDumper.h"
+#include "StreamUtil.h"
+#include "llvm-pdbutil.h"
+
+#include "llvm/DebugInfo/CodeView/CVSymbolVisitor.h"
+#include "llvm/DebugInfo/CodeView/CVTypeVisitor.h"
+#include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h"
+#include "llvm/DebugInfo/CodeView/DebugCrossExSubsection.h"
+#include "llvm/DebugInfo/CodeView/DebugCrossImpSubsection.h"
+#include "llvm/DebugInfo/CodeView/DebugFrameDataSubsection.h"
+#include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h"
+#include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h"
+#include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h"
+#include "llvm/DebugInfo/CodeView/DebugSubsectionVisitor.h"
+#include "llvm/DebugInfo/CodeView/DebugSymbolsSubsection.h"
+#include "llvm/DebugInfo/CodeView/DebugUnknownSubsection.h"
+#include "llvm/DebugInfo/CodeView/EnumTables.h"
+#include "llvm/DebugInfo/CodeView/Formatters.h"
+#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h"
+#include "llvm/DebugInfo/CodeView/Line.h"
+#include "llvm/DebugInfo/CodeView/SymbolDeserializer.h"
+#include "llvm/DebugInfo/CodeView/SymbolDumper.h"
+#include "llvm/DebugInfo/CodeView/SymbolVisitorCallbackPipeline.h"
+#include "llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h"
+#include "llvm/DebugInfo/CodeView/TypeDumpVisitor.h"
+#include "llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h"
+#include "llvm/DebugInfo/MSF/MappedBlockStream.h"
+#include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h"
+#include "llvm/DebugInfo/PDB/Native/DbiStream.h"
+#include "llvm/DebugInfo/PDB/Native/EnumTables.h"
+#include "llvm/DebugInfo/PDB/Native/GlobalsStream.h"
+#include "llvm/DebugInfo/PDB/Native/ISectionContribVisitor.h"
+#include "llvm/DebugInfo/PDB/Native/InfoStream.h"
+#include "llvm/DebugInfo/PDB/Native/ModuleDebugStream.h"
+#include "llvm/DebugInfo/PDB/Native/PDBFile.h"
+#include "llvm/DebugInfo/PDB/Native/PublicsStream.h"
+#include "llvm/DebugInfo/PDB/Native/RawError.h"
+#include "llvm/DebugInfo/PDB/Native/TpiHashing.h"
+#include "llvm/DebugInfo/PDB/Native/TpiStream.h"
+#include "llvm/DebugInfo/PDB/PDBExtras.h"
+#include "llvm/Object/COFF.h"
+#include "llvm/Support/BinaryStreamReader.h"
+#include "llvm/Support/FormatAdapters.h"
+#include "llvm/Support/FormatVariadic.h"
+
+#include <unordered_map>
+
+using namespace llvm;
+using namespace llvm::codeview;
+using namespace llvm::msf;
+using namespace llvm::pdb;
+
+RawOutputStyle::RawOutputStyle(PDBFile &File)
+    : File(File), P(2, false, outs()) {}
+
+Error RawOutputStyle::dump() {
+  if (opts::raw::DumpSummary) {
+    if (auto EC = dumpFileSummary())
+      return EC;
+    P.NewLine();
+  }
+
+  if (opts::raw::DumpStreams) {
+    if (auto EC = dumpStreamSummary())
+      return EC;
+    P.NewLine();
+  }
+
+  if (opts::raw::DumpBlockRange.hasValue()) {
+    if (auto EC = dumpBlockRanges())
+      return EC;
+    P.NewLine();
+  }
+
+  if (!opts::raw::DumpStreamData.empty()) {
+    if (auto EC = dumpStreamBytes())
+      return EC;
+    P.NewLine();
+  }
+
+  if (opts::raw::DumpStringTable) {
+    if (auto EC = dumpStringTable())
+      return EC;
+    P.NewLine();
+  }
+
+  if (opts::raw::DumpModules) {
+    if (auto EC = dumpModules())
+      return EC;
+  }
+
+  if (opts::raw::DumpTypes) {
+    if (auto EC = dumpTpiStream(StreamTPI))
+      return EC;
+  }
+
+  if (opts::raw::DumpIds) {
+    if (auto EC = dumpTpiStream(StreamIPI))
+      return EC;
+  }
+
+  if (opts::raw::DumpPublics) {
+    if (auto EC = dumpPublics())
+      return EC;
+  }
+
+  if (opts::raw::DumpSymbols) {
+    if (auto EC = dumpModuleSyms())
+      return EC;
+  }
+
+  if (opts::raw::DumpSectionContribs) {
+    if (auto EC = dumpSectionContribs())
+      return EC;
+  }
+
+  if (opts::raw::DumpSectionMap) {
+    if (auto EC = dumpSectionMap())
+      return EC;
+  }
+
+  return Error::success();
+}
+
+static void printHeader(LinePrinter &P, const Twine &S) {
+  P.NewLine();
+  P.formatLine("{0,=60}", S);
+  P.formatLine("{0}", fmt_repeat('=', 60));
+}
+
+Error RawOutputStyle::dumpFileSummary() {
+  printHeader(P, "Summary");
+
+  ExitOnError Err("Invalid PDB Format");
+
+  AutoIndent Indent(P);
+  P.formatLine("Block Size: {0}", File.getBlockSize());
+  P.formatLine("Number of blocks: {0}", File.getBlockCount());
+  P.formatLine("Number of streams: {0}", File.getNumStreams());
+
+  auto &PS = Err(File.getPDBInfoStream());
+  P.formatLine("Signature: {0}", PS.getSignature());
+  P.formatLine("Age: {0}", PS.getAge());
+  P.formatLine("GUID: {0}", fmt_guid(PS.getGuid().Guid));
+  P.formatLine("Features: {0:x+}", static_cast<uint32_t>(PS.getFeatures()));
+  P.formatLine("Has Debug Info: {0}", File.hasPDBDbiStream());
+  P.formatLine("Has Types: {0}", File.hasPDBTpiStream());
+  P.formatLine("Has IDs: {0}", File.hasPDBIpiStream());
+  P.formatLine("Has Globals: {0}", File.hasPDBGlobalsStream());
+  P.formatLine("Has Publics: {0}", File.hasPDBPublicsStream());
+  if (File.hasPDBDbiStream()) {
+    auto &DBI = Err(File.getPDBDbiStream());
+    P.formatLine("Is incrementally linked: {0}", DBI.isIncrementallyLinked());
+    P.formatLine("Has conflicting types: {0}", DBI.hasCTypes());
+    P.formatLine("Is stripped: {0}", DBI.isStripped());
+  }
+
+  return Error::success();
+}
+
+Error RawOutputStyle::dumpStreamSummary() {
+  printHeader(P, "Streams");
+
+  if (StreamPurposes.empty())
+    discoverStreamPurposes(File, StreamPurposes);
+
+  AutoIndent Indent(P);
+  uint32_t StreamCount = File.getNumStreams();
+
+  for (uint16_t StreamIdx = 0; StreamIdx < StreamCount; ++StreamIdx) {
+    P.formatLine(
+        "Stream {0}: [{1}] ({2} bytes)",
+        fmt_align(StreamIdx, AlignStyle::Right, NumDigits(StreamCount)),
+        StreamPurposes[StreamIdx], File.getStreamByteSize(StreamIdx));
+  }
+
+  return Error::success();
+}
+
+Error RawOutputStyle::dumpBlockRanges() {
+  printHeader(P, "MSF Blocks");
+
+  auto &R = *opts::raw::DumpBlockRange;
+  uint32_t Max = R.Max.getValueOr(R.Min);
+
+  AutoIndent Indent(P);
+  if (Max < R.Min)
+    return make_error<StringError>(
+        "Invalid block range specified.  Max < Min",
+        std::make_error_code(std::errc::bad_address));
+  if (Max >= File.getBlockCount())
+    return make_error<StringError>(
+        "Invalid block range specified.  Requested block out of bounds",
+        std::make_error_code(std::errc::bad_address));
+
+  for (uint32_t I = R.Min; I <= Max; ++I) {
+    auto ExpectedData = File.getBlockData(I, File.getBlockSize());
+    if (!ExpectedData)
+      return ExpectedData.takeError();
+    std::string Label = formatv("Block {0}", I).str();
+    P.formatBinary(Label, *ExpectedData, 0);
+  }
+
+  return Error::success();
+}
+
+static Error parseStreamSpec(StringRef Str, uint32_t &SI, uint32_t &Offset,
+                             uint32_t &Size) {
+  if (Str.consumeInteger(0, SI))
+    return make_error<RawError>(raw_error_code::invalid_format,
+                                "Invalid Stream Specification");
+  if (Str.consume_front(":")) {
+    if (Str.consumeInteger(0, Offset))
+      return make_error<RawError>(raw_error_code::invalid_format,
+                                  "Invalid Stream Specification");
+  }
+  if (Str.consume_front("@")) {
+    if (Str.consumeInteger(0, Size))
+      return make_error<RawError>(raw_error_code::invalid_format,
+                                  "Invalid Stream Specification");
+  }
+  if (!Str.empty())
+    return make_error<RawError>(raw_error_code::invalid_format,
+                                "Invalid Stream Specification");
+  return Error::success();
+}
+
+Error RawOutputStyle::dumpStreamBytes() {
+  if (StreamPurposes.empty())
+    discoverStreamPurposes(File, StreamPurposes);
+
+  printHeader(P, "Stream Data");
+  ExitOnError Err("Unexpected error reading stream data");
+
+  for (auto &Str : opts::raw::DumpStreamData) {
+    uint32_t SI = 0;
+    uint32_t Begin = 0;
+    uint32_t Size = 0;
+    uint32_t End = 0;
+
+    if (auto EC = parseStreamSpec(Str, SI, Begin, Size))
+      return EC;
+
+    AutoIndent Indent(P);
+    if (SI >= File.getNumStreams()) {
+      P.formatLine("Stream {0}: Not present", SI);
+      continue;
+    }
+
+    auto S = MappedBlockStream::createIndexedStream(
+        File.getMsfLayout(), File.getMsfBuffer(), SI, File.getAllocator());
+    if (!S) {
+      P.NewLine();
+      P.formatLine("Stream {0}: Not present", SI);
+      continue;
+    }
+
+    if (Size == 0)
+      End = S->getLength();
+    else
+      End = std::min(Begin + Size, S->getLength());
+
+    P.formatLine("Stream {0} ({1:N} bytes): {2}", SI, S->getLength(),
+                 StreamPurposes[SI]);
+    AutoIndent Indent2(P);
+
+    BinaryStreamReader R(*S);
+    ArrayRef<uint8_t> StreamData;
+    Err(R.readBytes(StreamData, S->getLength()));
+    Size = End - Begin;
+    StreamData = StreamData.slice(Begin, Size);
+    P.formatBinary("Data", StreamData, Begin);
+  }
+  return Error::success();
+}
+
+Error RawOutputStyle::dumpModules() {
+  printHeader(P, "Modules");
+
+  AutoIndent Indent(P);
+  if (!File.hasPDBDbiStream()) {
+    P.formatLine("DBI Stream not present");
+    return Error::success();
+  }
+
+  ExitOnError Err("Unexpected error processing symbols");
+
+  auto &Stream = Err(File.getPDBDbiStream());
+
+  const DbiModuleList &Modules = Stream.modules();
+  uint32_t Count = Modules.getModuleCount();
+  uint32_t Digits = NumDigits(Count);
+  for (uint32_t I = 0; I < Count; ++I) {
+    auto Modi = Modules.getModuleDescriptor(I);
+    P.formatLine("Mod {0:4} | Name: `{1}`: ",
+                 fmt_align(I, AlignStyle::Right, Digits), Modi.getModuleName());
+    P.formatLine("           Obj: `{0}`: ", Modi.getObjFileName());
+    P.formatLine("           debug stream: {0}, # files: {1}, has ec info: {2}",
+                 Modi.getModuleStreamIndex(), Modi.getNumberOfFiles(),
+                 Modi.hasECInfo());
+    if (opts::raw::DumpModuleFiles) {
+      P.formatLine("           contributing source files:");
+      for (const auto &F : Modules.source_files(I)) {
+        P.formatLine("           - {0}", F);
+      }
+    }
+  }
+  return Error::success();
+}
+Error RawOutputStyle::dumpStringTable() {
+  printHeader(P, "String Table");
+
+  AutoIndent Indent(P);
+  auto IS = File.getStringTable();
+  if (!IS) {
+    P.formatLine("Not present in file");
+    consumeError(IS.takeError());
+    return Error::success();
+  }
+
+  if (IS->name_ids().empty()) {
+    P.formatLine("Empty");
+    return Error::success();
+  }
+
+  auto MaxID = std::max_element(IS->name_ids().begin(), IS->name_ids().end());
+  uint32_t Digits = NumDigits(*MaxID);
+
+  P.formatLine("{0} | {1}", fmt_align("ID", AlignStyle::Right, Digits),
+               "String");
+
+  std::vector<uint32_t> SortedIDs(IS->name_ids().begin(), IS->name_ids().end());
+  std::sort(SortedIDs.begin(), SortedIDs.end());
+  for (uint32_t I : SortedIDs) {
+    auto ES = IS->getStringForID(I);
+    llvm::SmallString<32> Str;
+    if (!ES) {
+      consumeError(ES.takeError());
+      Str = "Error reading string";
+    } else if (!ES->empty()) {
+      Str.append("'");
+      Str.append(*ES);
+      Str.append("'");
+    }
+
+    if (!Str.empty())
+      P.formatLine("{0} | {1}", fmt_align(I, AlignStyle::Right, Digits), Str);
+  }
+  return Error::success();
+}
+
+Error RawOutputStyle::dumpTpiStream(uint32_t StreamIdx) {
+  assert(StreamIdx == StreamTPI || StreamIdx == StreamIPI);
+
+  bool Present = false;
+  bool DumpBytes = false;
+  if (StreamIdx == StreamTPI) {
+    printHeader(P, "Types (TPI Stream)");
+    Present = File.hasPDBTpiStream();
+    DumpBytes = opts::raw::DumpTypeData;
+  } else if (StreamIdx == StreamIPI) {
+    printHeader(P, "Types (IPI Stream)");
+    Present = File.hasPDBIpiStream();
+    DumpBytes = opts::raw::DumpIdData;
+  }
+
+  AutoIndent Indent(P);
+  if (!Present) {
+    P.formatLine("Stream not present");
+    return Error::success();
+  }
+
+  ExitOnError Err("Unexpected error processing types");
+
+  auto &Stream = Err((StreamIdx == StreamTPI) ? File.getPDBTpiStream()
+                                              : File.getPDBIpiStream());
+
+  auto &Types = Err(initializeTypeDatabase(StreamIdx));
+
+  P.formatLine("Showing {0:N} records", Stream.getNumTypeRecords());
+  uint32_t Width =
+      NumDigits(TypeIndex::FirstNonSimpleIndex + Stream.getNumTypeRecords());
+
+  MinimalTypeDumpVisitor V(P, Width + 2, DumpBytes, Types);
+
+  Optional<TypeIndex> I = Types.getFirst();
+  if (auto EC = codeview::visitTypeStream(Types, V)) {
+    P.formatLine("An error occurred dumping type records: {0}",
+                 toString(std::move(EC)));
+  }
+  return Error::success();
+}
+
+Expected<codeview::LazyRandomTypeCollection &>
+RawOutputStyle::initializeTypeDatabase(uint32_t SN) {
+  auto &TypeCollection = (SN == StreamTPI) ? TpiTypes : IpiTypes;
+  auto Tpi =
+      (SN == StreamTPI) ? File.getPDBTpiStream() : File.getPDBIpiStream();
+  if (!Tpi)
+    return Tpi.takeError();
+
+  if (!TypeCollection) {
+    auto &Types = Tpi->typeArray();
+    uint32_t Count = Tpi->getNumTypeRecords();
+    auto Offsets = Tpi->getTypeIndexOffsets();
+    TypeCollection =
+        llvm::make_unique<LazyRandomTypeCollection>(Types, Count, Offsets);
+  }
+
+  return *TypeCollection;
+}
+
+Error RawOutputStyle::dumpModuleSyms() {
+  printHeader(P, "Symbols");
+
+  AutoIndent Indent(P);
+  if (!File.hasPDBDbiStream()) {
+    P.formatLine("DBI Stream not present");
+    return Error::success();
+  }
+
+  ExitOnError Err("Unexpected error processing symbols");
+
+  auto &Stream = Err(File.getPDBDbiStream());
+
+  auto &Types = Err(initializeTypeDatabase(StreamTPI));
+
+  const DbiModuleList &Modules = Stream.modules();
+  uint32_t Count = Modules.getModuleCount();
+  uint32_t Digits = NumDigits(Count);
+  for (uint32_t I = 0; I < Count; ++I) {
+    auto Modi = Modules.getModuleDescriptor(I);
+    P.formatLine("Mod {0:4} | `{1}`: ", fmt_align(I, AlignStyle::Right, Digits),
+                 Modi.getModuleName());
+    uint16_t ModiStream = Modi.getModuleStreamIndex();
+    if (ModiStream == kInvalidStreamIndex) {
+      P.formatLine("           <symbols not present>");
+      continue;
+    }
+    auto ModStreamData = MappedBlockStream::createIndexedStream(
+        File.getMsfLayout(), File.getMsfBuffer(), ModiStream,
+        File.getAllocator());
+
+    ModuleDebugStreamRef ModS(Modi, std::move(ModStreamData));
+    if (auto EC = ModS.reload()) {
+      P.formatLine("Error loading module stream {0}.  {1}", I,
+                   toString(std::move(EC)));
+      continue;
+    }
+
+    SymbolVisitorCallbackPipeline Pipeline;
+    SymbolDeserializer Deserializer(nullptr, CodeViewContainer::Pdb);
+    MinimalSymbolDumper Dumper(P, opts::raw::DumpSymRecordBytes, Types);
+
+    Pipeline.addCallbackToPipeline(Deserializer);
+    Pipeline.addCallbackToPipeline(Dumper);
+    CVSymbolVisitor Visitor(Pipeline);
+    if (auto EC = Visitor.visitSymbolStream(ModS.getSymbolArray())) {
+      P.formatLine("Error while processing symbol records.  {0}",
+                   toString(std::move(EC)));
+      continue;
+    }
+  }
+  return Error::success();
+}
+
+Error RawOutputStyle::dumpPublics() {
+  printHeader(P, "Public Symbols");
+
+  AutoIndent Indent(P);
+  if (!File.hasPDBPublicsStream()) {
+    P.formatLine("Publics stream not present");
+    return Error::success();
+  }
+
+  ExitOnError Err("Error dumping publics stream");
+
+  auto &Types = Err(initializeTypeDatabase(StreamTPI));
+  auto &Publics = Err(File.getPDBPublicsStream());
+  SymbolVisitorCallbackPipeline Pipeline;
+  SymbolDeserializer Deserializer(nullptr, CodeViewContainer::Pdb);
+  MinimalSymbolDumper Dumper(P, opts::raw::DumpSymRecordBytes, Types);
+
+  Pipeline.addCallbackToPipeline(Deserializer);
+  Pipeline.addCallbackToPipeline(Dumper);
+  CVSymbolVisitor Visitor(Pipeline);
+  auto ExpectedSymbols = Publics.getSymbolArray();
+  if (!ExpectedSymbols) {
+    P.formatLine("Could not read public symbol record stream");
+    return Error::success();
+  }
+
+  if (auto EC = Visitor.visitSymbolStream(*ExpectedSymbols))
+    P.formatLine("Error while processing public symbol records.  {0}",
+                 toString(std::move(EC)));
+
+  return Error::success();
+}
+
+static std::string formatSectionCharacteristics(uint32_t IndentLevel,
+                                                uint32_t C) {
+  using SC = COFF::SectionCharacteristics;
+  std::vector<std::string> Opts;
+  if (C == COFF::SC_Invalid)
+    return "invalid";
+  if (C == 0)
+    return "none";
+
+  PUSH_FLAG(SC, IMAGE_SCN_TYPE_NOLOAD, C, "IMAGE_SCN_TYPE_NOLOAD");
+  PUSH_FLAG(SC, IMAGE_SCN_TYPE_NO_PAD, C, "IMAGE_SCN_TYPE_NO_PAD");
+  PUSH_FLAG(SC, IMAGE_SCN_CNT_CODE, C, "IMAGE_SCN_CNT_CODE");
+  PUSH_FLAG(SC, IMAGE_SCN_CNT_INITIALIZED_DATA, C,
+            "IMAGE_SCN_CNT_INITIALIZED_DATA");
+  PUSH_FLAG(SC, IMAGE_SCN_CNT_UNINITIALIZED_DATA, C,
+            "IMAGE_SCN_CNT_UNINITIALIZED_DATA");
+  PUSH_FLAG(SC, IMAGE_SCN_LNK_OTHER, C, "IMAGE_SCN_LNK_OTHER");
+  PUSH_FLAG(SC, IMAGE_SCN_LNK_INFO, C, "IMAGE_SCN_LNK_INFO");
+  PUSH_FLAG(SC, IMAGE_SCN_LNK_REMOVE, C, "IMAGE_SCN_LNK_REMOVE");
+  PUSH_FLAG(SC, IMAGE_SCN_LNK_COMDAT, C, "IMAGE_SCN_LNK_COMDAT");
+  PUSH_FLAG(SC, IMAGE_SCN_GPREL, C, "IMAGE_SCN_GPREL");
+  PUSH_FLAG(SC, IMAGE_SCN_MEM_PURGEABLE, C, "IMAGE_SCN_MEM_PURGEABLE");
+  PUSH_FLAG(SC, IMAGE_SCN_MEM_16BIT, C, "IMAGE_SCN_MEM_16BIT");
+  PUSH_FLAG(SC, IMAGE_SCN_MEM_LOCKED, C, "IMAGE_SCN_MEM_LOCKED");
+  PUSH_FLAG(SC, IMAGE_SCN_MEM_PRELOAD, C, "IMAGE_SCN_MEM_PRELOAD");
+  PUSH_FLAG(SC, IMAGE_SCN_GPREL, C, "IMAGE_SCN_GPREL");
+  PUSH_FLAG(SC, IMAGE_SCN_GPREL, C, "IMAGE_SCN_GPREL");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_1BYTES, C,
+                   "IMAGE_SCN_ALIGN_1BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_2BYTES, C,
+                   "IMAGE_SCN_ALIGN_2BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_4BYTES, C,
+                   "IMAGE_SCN_ALIGN_4BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_8BYTES, C,
+                   "IMAGE_SCN_ALIGN_8BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_16BYTES, C,
+                   "IMAGE_SCN_ALIGN_16BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_32BYTES, C,
+                   "IMAGE_SCN_ALIGN_32BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_64BYTES, C,
+                   "IMAGE_SCN_ALIGN_64BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_128BYTES, C,
+                   "IMAGE_SCN_ALIGN_128BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_256BYTES, C,
+                   "IMAGE_SCN_ALIGN_256BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_512BYTES, C,
+                   "IMAGE_SCN_ALIGN_512BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_1024BYTES, C,
+                   "IMAGE_SCN_ALIGN_1024BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_2048BYTES, C,
+                   "IMAGE_SCN_ALIGN_2048BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_4096BYTES, C,
+                   "IMAGE_SCN_ALIGN_4096BYTES");
+  PUSH_MASKED_FLAG(SC, 0xF00000, IMAGE_SCN_ALIGN_8192BYTES, C,
+                   "IMAGE_SCN_ALIGN_8192BYTES");
+  PUSH_FLAG(SC, IMAGE_SCN_LNK_NRELOC_OVFL, C, "IMAGE_SCN_LNK_NRELOC_OVFL");
+  PUSH_FLAG(SC, IMAGE_SCN_MEM_DISCARDABLE, C, "IMAGE_SCN_MEM_DISCARDABLE");
+  PUSH_FLAG(SC, IMAGE_SCN_MEM_NOT_CACHED, C, "IMAGE_SCN_MEM_NOT_CACHED");
+  PUSH_FLAG(SC, IMAGE_SCN_MEM_NOT_PAGED, C, "IMAGE_SCN_MEM_NOT_PAGED");
+  PUSH_FLAG(SC, IMAGE_SCN_MEM_SHARED, C, "IMAGE_SCN_MEM_SHARED");
+  PUSH_FLAG(SC, IMAGE_SCN_MEM_EXECUTE, C, "IMAGE_SCN_MEM_EXECUTE");
+  PUSH_FLAG(SC, IMAGE_SCN_MEM_READ, C, "IMAGE_SCN_MEM_READ");
+  PUSH_FLAG(SC, IMAGE_SCN_MEM_WRITE, C, "IMAGE_SCN_MEM_WRITE");
+  return typesetItemList(Opts, 3, IndentLevel, " | ");
+}
+
+static std::string formatSegMapDescriptorFlag(uint32_t IndentLevel,
+                                              OMFSegDescFlags Flags) {
+  std::vector<std::string> Opts;
+  if (Flags == OMFSegDescFlags::None)
+    return "none";
+
+  PUSH_FLAG(OMFSegDescFlags, Read, Flags, "read");
+  PUSH_FLAG(OMFSegDescFlags, Write, Flags, "write");
+  PUSH_FLAG(OMFSegDescFlags, Execute, Flags, "execute");
+  PUSH_FLAG(OMFSegDescFlags, AddressIs32Bit, Flags, "32 bit addr");
+  PUSH_FLAG(OMFSegDescFlags, IsSelector, Flags, "selector");
+  PUSH_FLAG(OMFSegDescFlags, IsAbsoluteAddress, Flags, "absolute addr");
+  PUSH_FLAG(OMFSegDescFlags, IsGroup, Flags, "group");
+  return typesetItemList(Opts, 4, IndentLevel, " | ");
+}
+
+Error RawOutputStyle::dumpSectionContribs() {
+  printHeader(P, "Section Contributions");
+  ExitOnError Err("Error dumping publics stream");
+
+  AutoIndent Indent(P);
+  if (!File.hasPDBDbiStream()) {
+    P.formatLine(
+        "Section contribs require a DBI Stream, which could not be loaded");
+    return Error::success();
+  }
+
+  auto &Dbi = Err(File.getPDBDbiStream());
+
+  class Visitor : public ISectionContribVisitor {
+  public:
+    Visitor(LinePrinter &P, DbiStream &DS) : P(P), DS(DS) {}
+    void visit(const SectionContrib &SC) override {
+      P.formatLine(
+          "SC  | mod = {2}, {0}, size = {1}, data crc = {3}, reloc crc = {4}",
+          formatSegmentOffset(SC.ISect, SC.Off), SC.Size, SC.Imod, SC.DataCrc,
+          SC.RelocCrc);
+      P.formatLine("      {0}",
+                   formatSectionCharacteristics(P.getIndentLevel() + 6,
+                                                SC.Characteristics));
+    }
+    void visit(const SectionContrib2 &SC) override {
+      P.formatLine("SC2 | mod = {2}, {0}, size = {1}, data crc = {3}, reloc "
+                   "crc = {4}, coff section = {5}",
+                   formatSegmentOffset(SC.Base.ISect, SC.Base.Off),
+                   SC.Base.Size, SC.Base.Imod, SC.Base.DataCrc,
+                   SC.Base.RelocCrc, SC.ISectCoff);
+      P.formatLine("      {0}",
+                   formatSectionCharacteristics(P.getIndentLevel() + 6,
+                                                SC.Base.Characteristics));
+    }
+
+  private:
+    LinePrinter &P;
+    DbiStream &DS;
+  };
+
+  Visitor V(P, Dbi);
+  Dbi.visitSectionContributions(V);
+  return Error::success();
+}
+
+Error RawOutputStyle::dumpSectionMap() {
+  printHeader(P, "Section Map");
+  ExitOnError Err("Error dumping section map");
+
+  AutoIndent Indent(P);
+  if (!File.hasPDBDbiStream()) {
+    P.formatLine("Dumping the section map requires a DBI Stream, which could "
+                 "not be loaded");
+    return Error::success();
+  }
+
+  auto &Dbi = Err(File.getPDBDbiStream());
+
+  uint32_t I = 0;
+  for (auto &M : Dbi.getSectionMap()) {
+    P.formatLine(
+        "Section {0:4} | ovl = {0}, group = {1}, frame = {2}, name = {3}", I,
+        M.Ovl, M.Group, M.Frame, M.SecName);
+    P.formatLine("               class = {0}, offset = {1}, size = {2}",
+                 M.ClassName, M.Offset, M.SecByteLength);
+    P.formatLine("               flags = {0}",
+                 formatSegMapDescriptorFlag(
+                     P.getIndentLevel() + 13,
+                     static_cast<OMFSegDescFlags>(uint16_t(M.Flags))));
+    ++I;
+  }
+  return Error::success();
+}

Added: llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.h?rev=305495&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.h (added)
+++ llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.h Thu Jun 15 14:34:41 2017
@@ -0,0 +1,61 @@
+//===- RawOutputStyle.h -------------------------------------- *- C++ --*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TOOLS_LLVMPDBDUMP_RAWOUTPUTSTYLE_H
+#define LLVM_TOOLS_LLVMPDBDUMP_RAWOUTPUTSTYLE_H
+
+#include "LinePrinter.h"
+#include "OutputStyle.h"
+
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/DebugInfo/CodeView/TypeDatabase.h"
+
+#include <string>
+
+namespace llvm {
+class BitVector;
+
+namespace codeview {
+class LazyRandomTypeCollection;
+}
+
+namespace pdb {
+class RawOutputStyle : public OutputStyle {
+public:
+  RawOutputStyle(PDBFile &File);
+
+  Error dump() override;
+
+private:
+  Expected<codeview::LazyRandomTypeCollection &>
+  initializeTypeDatabase(uint32_t SN);
+
+  Error dumpFileSummary();
+  Error dumpStreamSummary();
+  Error dumpBlockRanges();
+  Error dumpStreamBytes();
+  Error dumpStringTable();
+  Error dumpTpiStream(uint32_t StreamIdx);
+  Error dumpModules();
+  Error dumpModuleSyms();
+  Error dumpPublics();
+  Error dumpSectionContribs();
+  Error dumpSectionMap();
+
+  PDBFile &File;
+  LinePrinter P;
+  std::unique_ptr<codeview::LazyRandomTypeCollection> TpiTypes;
+  std::unique_ptr<codeview::LazyRandomTypeCollection> IpiTypes;
+  SmallVector<std::string, 32> StreamPurposes;
+};
+} // namespace pdb
+} // namespace llvm
+
+#endif

Modified: llvm/trunk/tools/llvm-pdbutil/YAMLOutputStyle.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/YAMLOutputStyle.cpp?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/YAMLOutputStyle.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/YAMLOutputStyle.cpp Thu Jun 15 14:34:41 2017
@@ -32,6 +32,13 @@ using namespace llvm;
 using namespace llvm::codeview;
 using namespace llvm::pdb;
 
+static bool checkModuleSubsection(opts::ModuleSubsection MS) {
+  return any_of(opts::pdb2yaml::DumpModuleSubsections,
+                [=](opts::ModuleSubsection M) {
+                  return M == MS || M == opts::ModuleSubsection::All;
+                });
+}
+
 YAMLOutputStyle::YAMLOutputStyle(PDBFile &File)
     : File(File), Out(outs()), Obj(File.getAllocator()) {
   Out.setWriteDefaultValues(!opts::pdb2yaml::Minimal);
@@ -93,8 +100,8 @@ Error YAMLOutputStyle::dumpFileHeaders()
 }
 
 Error YAMLOutputStyle::dumpStringTable() {
-  bool RequiresStringTable = opts::shared::DumpModuleFiles ||
-                             !opts::shared::DumpModuleSubsections.empty();
+  bool RequiresStringTable = opts::pdb2yaml::DumpModuleFiles ||
+                             !opts::pdb2yaml::DumpModuleSubsections.empty();
   bool RequestedStringTable = opts::pdb2yaml::StringTable;
   if (!RequiresStringTable && !RequestedStringTable)
     return Error::success();
@@ -201,7 +208,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
   Obj.DbiStream->PdbDllRbld = DS.getPdbDllRbld();
   Obj.DbiStream->PdbDllVersion = DS.getPdbDllVersion();
   Obj.DbiStream->VerHeader = DS.getDbiVersion();
-  if (opts::shared::DumpModules) {
+  if (opts::pdb2yaml::DumpModules) {
     const auto &Modules = DS.modules();
     for (uint32_t I = 0; I < Modules.getModuleCount(); ++I) {
       DbiModuleDescriptor MI = Modules.getModuleDescriptor(I);
@@ -211,7 +218,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
 
       DMI.Mod = MI.getModuleName();
       DMI.Obj = MI.getObjFileName();
-      if (opts::shared::DumpModuleFiles) {
+      if (opts::pdb2yaml::DumpModuleFiles) {
         auto Files = Modules.source_files(I);
         DMI.SourceFiles.assign(Files.begin(), Files.end());
       }
@@ -231,7 +238,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
       auto ExpectedST = File.getStringTable();
       if (!ExpectedST)
         return ExpectedST.takeError();
-      if (!opts::shared::DumpModuleSubsections.empty() &&
+      if (!opts::pdb2yaml::DumpModuleSubsections.empty() &&
           ModS.hasDebugSubsections()) {
         auto ExpectedChecksums = ModS.findChecksumsSubsection();
         if (!ExpectedChecksums)
@@ -242,7 +249,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
 
         for (const auto &SS : ModS.subsections()) {
           opts::ModuleSubsection OptionKind = convertSubsectionKind(SS.kind());
-          if (!opts::checkModuleSubsection(OptionKind))
+          if (!checkModuleSubsection(OptionKind))
             continue;
 
           auto Converted =
@@ -253,7 +260,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
         }
       }
 
-      if (opts::shared::DumpModuleSyms) {
+      if (opts::pdb2yaml::DumpModuleSyms) {
         DMI.Modi.emplace();
 
         DMI.Modi->Signature = ModS.signature();

Modified: llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp Thu Jun 15 14:34:41 2017
@@ -15,7 +15,6 @@
 
 #include "Analyze.h"
 #include "Diff.h"
-#include "LLVMOutputStyle.h"
 #include "LinePrinter.h"
 #include "OutputStyle.h"
 #include "PrettyCompilandDumper.h"
@@ -23,6 +22,7 @@
 #include "PrettyFunctionDumper.h"
 #include "PrettyTypeDumper.h"
 #include "PrettyVariableDumper.h"
+#include "RawOutputStyle.h"
 #include "YAMLOutputStyle.h"
 
 #include "llvm/ADT/ArrayRef.h"
@@ -266,6 +266,8 @@ cl::list<std::string> InputFilenames(cl:
                                      cl::OneOrMore, cl::sub(DiffSubcommand));
 }
 
+cl::OptionCategory FileOptions("Module & File Options");
+
 namespace raw {
 
 cl::OptionCategory MsfOptions("MSF Container Options");
@@ -274,18 +276,11 @@ cl::OptionCategory SymbolOptions("Symbol
 cl::OptionCategory MiscOptions("Miscellaneous Options");
 
 // MSF OPTIONS
-cl::opt<bool> DumpHeaders("headers", cl::desc("dump PDB headers"),
+cl::opt<bool> DumpSummary("summary", cl::desc("dump file summary"),
+                          cl::cat(MsfOptions), cl::sub(RawSubcommand));
+cl::opt<bool> DumpStreams("streams",
+                          cl::desc("dump summary of the PDB streams"),
                           cl::cat(MsfOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpStreamBlocks("stream-blocks",
-                               cl::desc("dump PDB stream blocks"),
-                               cl::cat(MsfOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpStreamSummary("stream-summary",
-                                cl::desc("dump summary of the PDB streams"),
-                                cl::cat(MsfOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpPageStats(
-    "page-stats",
-    cl::desc("dump allocation stats of the pages in the MSF file"),
-    cl::cat(MsfOptions), cl::sub(RawSubcommand));
 cl::opt<std::string>
     DumpBlockRangeOpt("block-data", cl::value_desc("start[-end]"),
                       cl::desc("Dump binary data from specified range."),
@@ -299,40 +294,45 @@ cl::list<std::string>
                    cl::cat(MsfOptions), cl::sub(RawSubcommand));
 
 // TYPE OPTIONS
-cl::opt<bool>
-    CompactRecords("compact-records",
-                   cl::desc("Dump type and symbol records with less detail"),
-                   cl::cat(TypeOptions), cl::sub(RawSubcommand));
-
-cl::opt<bool>
-    DumpTpiRecords("tpi-records",
-                   cl::desc("dump CodeView type records from TPI stream"),
-                   cl::cat(TypeOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpTpiRecordBytes(
-    "tpi-record-bytes",
+cl::opt<bool> DumpTypes("types",
+                        cl::desc("dump CodeView type records from TPI stream"),
+                        cl::cat(TypeOptions), cl::sub(RawSubcommand));
+cl::opt<bool> DumpTypeData(
+    "type-data",
     cl::desc("dump CodeView type record raw bytes from TPI stream"),
     cl::cat(TypeOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpTpiHash("tpi-hash", cl::desc("dump CodeView TPI hash stream"),
-                          cl::cat(TypeOptions), cl::sub(RawSubcommand));
+
+cl::opt<bool> DumpTypeHashes("type-hash",
+                             cl::desc("dump CodeView TPI hash stream"),
+                             cl::cat(TypeOptions), cl::sub(RawSubcommand));
+
+cl::opt<bool> DumpIds("ids",
+                      cl::desc("dump CodeView type records from IPI stream"),
+                      cl::cat(TypeOptions), cl::sub(RawSubcommand));
 cl::opt<bool>
-    DumpIpiRecords("ipi-records",
-                   cl::desc("dump CodeView type records from IPI stream"),
-                   cl::cat(TypeOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpIpiRecordBytes(
-    "ipi-record-bytes",
-    cl::desc("dump CodeView type record raw bytes from IPI stream"),
-    cl::cat(TypeOptions), cl::sub(RawSubcommand));
+    DumpIdData("id-data",
+               cl::desc("dump CodeView type record raw bytes from IPI stream"),
+               cl::cat(TypeOptions), cl::sub(RawSubcommand));
 
 // SYMBOL OPTIONS
-cl::opt<bool> DumpGlobals("globals", cl::desc("dump globals stream data"),
-                          cl::cat(SymbolOptions), cl::sub(RawSubcommand));
 cl::opt<bool> DumpPublics("publics", cl::desc("dump Publics stream data"),
                           cl::cat(SymbolOptions), cl::sub(RawSubcommand));
+cl::opt<bool> DumpSymbols("symbols", cl::desc("dump module symbols"),
+                          cl::cat(SymbolOptions), cl::sub(RawSubcommand));
+
 cl::opt<bool>
-    DumpSymRecordBytes("sym-record-bytes",
+    DumpSymRecordBytes("sym-data",
                        cl::desc("dump CodeView symbol record raw bytes"),
                        cl::cat(SymbolOptions), cl::sub(RawSubcommand));
 
+// MODULE & FILE OPTIONS
+cl::opt<bool> DumpModules("modules", cl::desc("dump compiland information"),
+                          cl::cat(FileOptions), cl::sub(RawSubcommand));
+cl::opt<bool> DumpModuleFiles(
+    "files",
+    cl::desc("for each module dumped, dump the contributing source files"),
+    cl::cat(FileOptions), cl::sub(RawSubcommand));
+
 // MISCELLANEOUS OPTIONS
 cl::opt<bool> DumpStringTable("string-table", cl::desc("dump PDB String Table"),
                               cl::cat(MiscOptions), cl::sub(RawSubcommand));
@@ -342,11 +342,6 @@ cl::opt<bool> DumpSectionContribs("secti
                                   cl::cat(MiscOptions), cl::sub(RawSubcommand));
 cl::opt<bool> DumpSectionMap("section-map", cl::desc("dump section map"),
                              cl::cat(MiscOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpSectionHeaders("section-headers",
-                                 cl::desc("dump section headers"),
-                                 cl::cat(MiscOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpFpo("fpo", cl::desc("dump FPO records"), cl::cat(MiscOptions),
-                      cl::sub(RawSubcommand));
 
 cl::opt<bool> RawAll("all", cl::desc("Implies most other options."),
                      cl::cat(MiscOptions), cl::sub(RawSubcommand));
@@ -404,20 +399,11 @@ cl::opt<bool> IpiStream("ipi-stream",
                         cl::desc("Dump the IPI Stream (Stream 5)"),
                         cl::sub(PdbToYamlSubcommand), cl::init(false));
 
-cl::list<std::string> InputFilename(cl::Positional,
-                                    cl::desc("<input PDB file>"), cl::Required,
-                                    cl::sub(PdbToYamlSubcommand));
-}
-
-namespace shared {
-cl::OptionCategory FileOptions("Module & File Options");
-
 // MODULE & FILE OPTIONS
 cl::opt<bool> DumpModules("modules", cl::desc("dump compiland information"),
-                          cl::cat(FileOptions), cl::sub(RawSubcommand),
-                          cl::sub(PdbToYamlSubcommand));
+                          cl::cat(FileOptions), cl::sub(PdbToYamlSubcommand));
 cl::opt<bool> DumpModuleFiles("module-files", cl::desc("dump file information"),
-                              cl::cat(FileOptions), cl::sub(RawSubcommand),
+                              cl::cat(FileOptions),
                               cl::sub(PdbToYamlSubcommand));
 cl::list<ModuleSubsection> DumpModuleSubsections(
     "subsections", cl::ZeroOrMore, cl::CommaSeparated,
@@ -448,11 +434,15 @@ cl::list<ModuleSubsection> DumpModuleSub
         clEnumValN(ModuleSubsection::Unknown, "unknown",
                    "Any subsection not covered by another option"),
         clEnumValN(ModuleSubsection::All, "all", "All known subsections")),
-    cl::cat(FileOptions), cl::sub(RawSubcommand), cl::sub(PdbToYamlSubcommand));
+    cl::cat(FileOptions), cl::sub(PdbToYamlSubcommand));
 cl::opt<bool> DumpModuleSyms("module-syms", cl::desc("dump module symbols"),
-                             cl::cat(FileOptions), cl::sub(RawSubcommand),
+                             cl::cat(FileOptions),
                              cl::sub(PdbToYamlSubcommand));
-} // namespace shared
+
+cl::list<std::string> InputFilename(cl::Positional,
+                                    cl::desc("<input PDB file>"), cl::Required,
+                                    cl::sub(PdbToYamlSubcommand));
+} // namespace pdb2yaml
 
 namespace analyze {
 cl::opt<bool> StringTable("hash-collisions", cl::desc("Find hash collisions"),
@@ -474,13 +464,6 @@ cl::opt<std::string>
 
 static ExitOnError ExitOnErr;
 
-bool opts::checkModuleSubsection(opts::ModuleSubsection MS) {
-  return any_of(opts::shared::DumpModuleSubsections,
-                [=](opts::ModuleSubsection M) {
-                  return M == MS || M == opts::ModuleSubsection::All;
-                });
-}
-
 static void yamlToPdb(StringRef Path) {
   BumpPtrAllocator Allocator;
   ErrorOr<std::unique_ptr<MemoryBuffer>> ErrorOrBuffer =
@@ -611,7 +594,7 @@ static void dumpRaw(StringRef Path) {
   std::unique_ptr<IPDBSession> Session;
   auto &File = loadPDB(Path, Session);
 
-  auto O = llvm::make_unique<LLVMOutputStyle>(File);
+  auto O = llvm::make_unique<RawOutputStyle>(File);
 
   ExitOnErr(O->dump());
 }
@@ -904,49 +887,21 @@ int main(int argc_, const char *argv_[])
     }
   }
 
-  if ((opts::RawSubcommand && opts::raw::RawAll) ||
-      (opts::PdbToYamlSubcommand && opts::pdb2yaml::All)) {
-    opts::shared::DumpModules = true;
-    opts::shared::DumpModuleFiles = true;
-    opts::shared::DumpModuleSyms = true;
-    opts::shared::DumpModuleSubsections.push_back(opts::ModuleSubsection::All);
-    if (llvm::is_contained(opts::shared::DumpModuleSubsections,
-                           opts::ModuleSubsection::All)) {
-      opts::shared::DumpModuleSubsections.reset();
-      opts::shared::DumpModuleSubsections.push_back(
-          opts::ModuleSubsection::All);
-    }
-  }
-
-  if (opts::shared::DumpModuleSyms || opts::shared::DumpModuleFiles)
-    opts::shared::DumpModules = true;
-
-  if (opts::shared::DumpModules)
-    opts::pdb2yaml::DbiStream = true;
-
   if (opts::RawSubcommand) {
     if (opts::raw::RawAll) {
-      opts::raw::DumpHeaders = true;
-      opts::raw::DumpGlobals = true;
+      opts::raw::DumpIds = true;
       opts::raw::DumpPublics = true;
-      opts::raw::DumpSectionHeaders = true;
-      opts::raw::DumpStreamSummary = true;
-      opts::raw::DumpPageStats = true;
-      opts::raw::DumpStreamBlocks = true;
-      opts::raw::DumpTpiRecords = true;
-      opts::raw::DumpTpiHash = true;
-      opts::raw::DumpIpiRecords = true;
-      opts::raw::DumpSectionMap = true;
       opts::raw::DumpSectionContribs = true;
-      opts::raw::DumpFpo = true;
+      opts::raw::DumpSectionMap = true;
+      opts::raw::DumpStreams = true;
       opts::raw::DumpStringTable = true;
-    }
-
-    if (opts::raw::CompactRecords &&
-        (opts::raw::DumpTpiRecordBytes || opts::raw::DumpIpiRecordBytes)) {
-      errs() << "-compact-records is incompatible with -tpi-record-bytes and "
-                "-ipi-record-bytes.\n";
-      exit(1);
+      opts::raw::DumpSummary = true;
+      opts::raw::DumpSymbols = true;
+      opts::raw::DumpIds = true;
+      opts::raw::DumpTypes = true;
+      opts::raw::DumpTypeHashes = true;
+      opts::raw::DumpModules = true;
+      opts::raw::DumpModuleFiles = true;
     }
   }
   if (opts::PdbToYamlSubcommand) {
@@ -958,7 +913,24 @@ int main(int argc_, const char *argv_[])
       opts::pdb2yaml::DbiStream = true;
       opts::pdb2yaml::TpiStream = true;
       opts::pdb2yaml::IpiStream = true;
+      opts::pdb2yaml::DumpModules = true;
+      opts::pdb2yaml::DumpModuleFiles = true;
+      opts::pdb2yaml::DumpModuleSyms = true;
+      opts::pdb2yaml::DumpModuleSubsections.push_back(
+          opts::ModuleSubsection::All);
+      if (llvm::is_contained(opts::pdb2yaml::DumpModuleSubsections,
+                             opts::ModuleSubsection::All)) {
+        opts::pdb2yaml::DumpModuleSubsections.reset();
+        opts::pdb2yaml::DumpModuleSubsections.push_back(
+            opts::ModuleSubsection::All);
+      }
     }
+
+    if (opts::pdb2yaml::DumpModuleSyms || opts::pdb2yaml::DumpModuleFiles)
+      opts::pdb2yaml::DumpModules = true;
+
+    if (opts::pdb2yaml::DumpModules)
+      opts::pdb2yaml::DbiStream = true;
   }
 
   llvm::sys::InitializeCOMRAII COM(llvm::sys::COMThreadingMode::MultiThreaded);

Modified: llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.h?rev=305495&r1=305494&r2=305495&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.h (original)
+++ llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.h Thu Jun 15 14:34:41 2017
@@ -27,6 +27,8 @@ uint32_t getTypeLength(const PDBSymbolDa
 
 namespace opts {
 
+enum class DumpLevel { None, Basic, Verbose };
+
 enum class ModuleSubsection {
   Unknown,
   Lines,
@@ -41,15 +43,6 @@ enum class ModuleSubsection {
   All
 };
 
-bool checkModuleSubsection(ModuleSubsection Kind);
-
-template <typename... Ts>
-bool checkModuleSubsection(ModuleSubsection K1, ModuleSubsection K2,
-                           Ts &&... Rest) {
-  return checkModuleSubsection(K1) ||
-         checkModuleSubsection(K2, std::forward<Ts>(Rest)...);
-}
-
 namespace pretty {
 
 enum class ClassDefinitionFormat { None, Layout, All };
@@ -105,27 +98,24 @@ struct BlockRange {
   llvm::Optional<uint32_t> Max;
 };
 
+extern llvm::cl::opt<bool> DumpSummary;
+extern llvm::cl::opt<bool> DumpStreams;
 extern llvm::Optional<BlockRange> DumpBlockRange;
 extern llvm::cl::list<std::string> DumpStreamData;
-
-extern llvm::cl::opt<bool> CompactRecords;
-extern llvm::cl::opt<bool> DumpGlobals;
-extern llvm::cl::opt<bool> DumpHeaders;
-extern llvm::cl::opt<bool> DumpStreamBlocks;
-extern llvm::cl::opt<bool> DumpStreamSummary;
-extern llvm::cl::opt<bool> DumpPageStats;
-extern llvm::cl::opt<bool> DumpTpiHash;
-extern llvm::cl::opt<bool> DumpTpiRecordBytes;
-extern llvm::cl::opt<bool> DumpTpiRecords;
-extern llvm::cl::opt<bool> DumpIpiRecords;
-extern llvm::cl::opt<bool> DumpIpiRecordBytes;
+extern llvm::cl::opt<bool> DumpStringTable;
+extern llvm::cl::opt<bool> DumpTypes;
+extern llvm::cl::opt<bool> DumpTypeData;
+extern llvm::cl::opt<bool> DumpTypeHashes;
+extern llvm::cl::opt<bool> DumpIds;
+extern llvm::cl::opt<bool> DumpIdData;
+extern llvm::cl::opt<bool> DumpSymbols;
+extern llvm::cl::opt<bool> DumpSymRecordBytes;
 extern llvm::cl::opt<bool> DumpPublics;
 extern llvm::cl::opt<bool> DumpSectionContribs;
 extern llvm::cl::opt<bool> DumpSectionMap;
-extern llvm::cl::opt<bool> DumpSymRecordBytes;
-extern llvm::cl::opt<bool> DumpSectionHeaders;
-extern llvm::cl::opt<bool> DumpFpo;
-extern llvm::cl::opt<bool> DumpStringTable;
+extern llvm::cl::opt<bool> DumpModules;
+extern llvm::cl::opt<bool> DumpModuleFiles;
+extern llvm::cl::opt<bool> RawAll;
 }
 
 namespace diff {
@@ -144,14 +134,11 @@ extern llvm::cl::opt<bool> DbiStream;
 extern llvm::cl::opt<bool> TpiStream;
 extern llvm::cl::opt<bool> IpiStream;
 extern llvm::cl::list<std::string> InputFilename;
-}
-
-namespace shared {
 extern llvm::cl::opt<bool> DumpModules;
 extern llvm::cl::opt<bool> DumpModuleFiles;
 extern llvm::cl::list<ModuleSubsection> DumpModuleSubsections;
 extern llvm::cl::opt<bool> DumpModuleSyms;
-} // namespace shared
+} // namespace pdb2yaml
 }
 
 #endif




More information about the llvm-commits mailing list