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

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 15 13:55:51 PDT 2017


Author: zturner
Date: Thu Jun 15 15:55:51 2017
New Revision: 305505

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

This reverts commit 83ea17ebf2106859a51fbc2a86031b44d33696ad.

This is failing due to some strange template problems, so reverting
until it can be straightened out.

Added:
    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
Removed:
    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
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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h Thu Jun 15 15:55:51 2017
@@ -418,8 +418,6 @@ 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,
@@ -434,8 +432,6 @@ 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,
@@ -452,7 +448,6 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/Formatters.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/Formatters.h Thu Jun 15 15:55:51 2017
@@ -12,10 +12,7 @@
 
 #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 {
@@ -38,20 +35,6 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h Thu Jun 15 15:55:51 2017
@@ -363,7 +363,7 @@ public:
       : SymbolRecord(SymbolRecordKind::PublicSym32),
         RecordOffset(RecordOffset) {}
 
-  TypeIndex Index;
+  uint32_t Index;
   uint32_t Offset;
   uint16_t Segment;
   StringRef Name;
@@ -379,7 +379,7 @@ public:
       : SymbolRecord(SymbolRecordKind::RegisterSym),
         RecordOffset(RecordOffset) {}
 
-  TypeIndex Index;
+  uint32_t Index;
   RegisterId Register;
   StringRef Name;
 
@@ -679,7 +679,7 @@ public:
       : SymbolRecord(SymbolRecordKind::FileStaticSym),
         RecordOffset(RecordOffset) {}
 
-  TypeIndex Index;
+  uint32_t Index;
   uint32_t ModFilenameOffset;
   LocalSymFlags Flags;
   StringRef Name;
@@ -814,7 +814,7 @@ public:
 
   uint32_t CodeOffset;
   uint16_t Register;
-  FrameCookieKind CookieKind;
+  uint8_t CookieKind;
   uint8_t Flags;
 
   uint32_t RecordOffset;
@@ -871,7 +871,7 @@ public:
 
   uint32_t Offset;
   TypeIndex Type;
-  RegisterId Register;
+  uint16_t 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/TypeIndex.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/TypeIndex.h Thu Jun 15 15:55:51 2017
@@ -248,8 +248,6 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/ModuleDebugStream.h Thu Jun 15 15:55:51 2017
@@ -40,10 +40,6 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Native/PublicsStream.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/PublicsStream.h Thu Jun 15 15:55:51 2017
@@ -35,7 +35,6 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Native/RawConstants.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/RawConstants.h Thu Jun 15 15:55:51 2017
@@ -98,19 +98,15 @@ 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.
-  LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ IsGroup)
+  IsGroup = 1 << 10           // If set, descriptor represents a group.
 };
 
-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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/Native/SymbolStream.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/Native/SymbolStream.h Thu Jun 15 15:55:51 2017
@@ -27,10 +27,6 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/BinaryStreamArray.h (original)
+++ llvm/trunk/include/llvm/Support/BinaryStreamArray.h Thu Jun 15 15:55:51 2017
@@ -290,12 +290,6 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/FormatProviders.h (original)
+++ llvm/trunk/include/llvm/Support/FormatProviders.h Thu Jun 15 15:55:51 2017
@@ -19,7 +19,6 @@
 #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"
 
@@ -151,19 +150,6 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp Thu Jun 15 15:55:51 2017
@@ -212,7 +212,7 @@ Error CVSymbolDumperImpl::visitKnownReco
 Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR,
                                            FileStaticSym &FileStatic) {
   DictScope S(W, "FileStatic");
-  printTypeIndex("Index", FileStatic.Index);
+  W.printNumber("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");
-  printTypeIndex("Type", Register.Index);
+  W.printNumber("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");
-  printTypeIndex("Type", Public.Index);
+  W.printNumber("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.printEnum("Register", uint16_t(RegRel.Register), getRegisterNames());
+  W.printHex("Register", RegRel.Register);
   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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp Thu Jun 15 15:55:51 2017
@@ -307,7 +307,7 @@ Error SymbolRecordMapping::visitKnownRec
 
   error(IO.mapInteger(FrameCookie.CodeOffset));
   error(IO.mapInteger(FrameCookie.Register));
-  error(IO.mapEnum(FrameCookie.CookieKind));
+  error(IO.mapInteger(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.mapEnum(RegRel.Register));
+  error(IO.mapInteger(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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/TypeDatabase.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/TypeDatabase.cpp Thu Jun 15 15:55:51 2017
@@ -12,6 +12,59 @@
 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);
@@ -50,8 +103,22 @@ StringRef TypeDatabase::saveTypeName(Str
 }
 
 StringRef TypeDatabase::getTypeName(TypeIndex Index) const {
-  if (Index.isNoneType() || Index.isSimple())
-    return TypeIndex::simpleTypeName(Index);
+  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 (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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/TypeIndex.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/TypeIndex.cpp Thu Jun 15 15:55:51 2017
@@ -15,88 +15,11 @@
 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()) {
-    if (TI.isSimple())
-      TypeName = TypeIndex::simpleTypeName(TI);
-    else
-      TypeName = Types.getTypeName(TI);
-  }
-
+  if (!TI.isNoneType())
+    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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/Native/PublicsStream.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/Native/PublicsStream.cpp Thu Jun 15 15:55:51 2017
@@ -130,13 +130,4 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp (original)
+++ llvm/trunk/lib/ObjectYAML/CodeViewYAMLSymbols.cpp Thu Jun 15 15:55:51 2017
@@ -35,7 +35,6 @@ 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)
@@ -150,15 +149,6 @@ 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 {

Added: 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=305505&view=auto
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdb-yaml-types.test (added)
+++ llvm/trunk/test/DebugInfo/PDB/pdb-yaml-types.test Thu Jun 15 15:55:51 2017
@@ -0,0 +1,74 @@
+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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-debug-subsections.test Thu Jun 15 15:55:51 2017
@@ -1,5 +1,6 @@
 ; 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
@@ -60,7 +61,150 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test Thu Jun 15 15:55:51 2017
@@ -1,1093 +1,2901 @@
+; 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 -summary -modules -files \
+; RUN: llvm-pdbutil raw -headers -modules -module-files \
 ; RUN:              %p/Inputs/big-read.pdb | FileCheck -check-prefix=BIG %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
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+; RUN: not llvm-pdbutil raw -headers %p/Inputs/bad-block-size.pdb 2>&1 | FileCheck -check-prefix=BAD-BLOCK-SIZE %s
 
+; 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=305505&r1=305504&r2=305505&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 15:55:51 2017
@@ -1,51 +1,65 @@
 ; 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 -types %t.3.pdb | FileCheck -check-prefix=TPI-TYPES %s
-; RUN: llvm-pdbutil raw -ids %t.3.pdb | FileCheck -check-prefix=IPI-TYPES %s
+; 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
 
-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
+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

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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-mergeids.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-mergeids.test Thu Jun 15 15:55:51 2017
@@ -1,24 +1,31 @@
 ; 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 -ids %t.3.pdb | FileCheck -check-prefix=MERGED %s
-; RUN: llvm-pdbutil raw -types %t.3.pdb | FileCheck -check-prefix=TPI-EMPTY %s
+; 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
 
 
-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
+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
 
-TPI-EMPTY:                     Types (TPI Stream)
-TPI-EMPTY-NEXT: ============================================================
-TPI-EMPTY-NEXT:   Showing 0 records
+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

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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-mergetypes.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-mergetypes.test Thu Jun 15 15:55:51 2017
@@ -1,36 +1,24 @@
-+; 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
+; 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**

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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-blocks.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-blocks.test Thu Jun 15 15:55:51 2017
@@ -1,29 +1,35 @@
-; 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.
+; 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.

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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-stream.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-raw-stream.test Thu Jun 15 15:55:51 2017
@@ -1,28 +1,23 @@
-; 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
+; 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.

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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-readwrite.test Thu Jun 15 15:55:51 2017
@@ -3,33 +3,48 @@ 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 -summary -string-table -types %p/Inputs/empty.pdb | FileCheck %s
-RUN: llvm-pdbutil raw -summary -string-table -types %t.2 | FileCheck %s
+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
 
-
-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
+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: }

Added: 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=305505&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbdump/raw-stream-data.test (added)
+++ llvm/trunk/test/tools/llvm-pdbdump/raw-stream-data.test Thu Jun 15 15:55:51 2017
@@ -0,0 +1,47 @@
+; 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/CMakeLists.txt (original)
+++ llvm/trunk/tools/llvm-pdbutil/CMakeLists.txt Thu Jun 15 15:55:51 2017
@@ -12,10 +12,8 @@ add_llvm_tool(llvm-pdbutil
   CompactTypeDumpVisitor.cpp
   Diff.cpp
   llvm-pdbutil.cpp
-  FormatUtil.cpp
   LinePrinter.cpp
-  MinimalSymbolDumper.cpp
-  MinimalTypeDumper.cpp
+  LLVMOutputStyle.cpp
   PdbYaml.cpp
   PrettyBuiltinDumper.cpp
   PrettyClassDefinitionDumper.cpp
@@ -27,7 +25,6 @@ add_llvm_tool(llvm-pdbutil
   PrettyTypeDumper.cpp
   PrettyTypedefDumper.cpp
   PrettyVariableDumper.cpp
-  RawOutputStyle.cpp
   StreamUtil.cpp
   YAMLOutputStyle.cpp
   )

Removed: llvm/trunk/tools/llvm-pdbutil/FormatUtil.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/FormatUtil.cpp?rev=305504&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/FormatUtil.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/FormatUtil.cpp (removed)
@@ -1,49 +0,0 @@
-//===- 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);
-}

Removed: llvm/trunk/tools/llvm-pdbutil/FormatUtil.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/FormatUtil.h?rev=305504&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/FormatUtil.h (original)
+++ llvm/trunk/tools/llvm-pdbutil/FormatUtil.h (removed)
@@ -1,92 +0,0 @@
-//===- 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<typename 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

Added: llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.cpp?rev=305505&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.cpp (added)
+++ llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.cpp Thu Jun 15 15:55:51 2017
@@ -0,0 +1,1198 @@
+//===- 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(); }

Added: llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.h?rev=305505&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.h (added)
+++ llvm/trunk/tools/llvm-pdbutil/LLVMOutputStyle.h Thu Jun 15 15:55:51 2017
@@ -0,0 +1,70 @@
+//===- 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/LinePrinter.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/LinePrinter.cpp Thu Jun 15 15:55:51 2017
@@ -13,7 +13,6 @@
 
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/DebugInfo/PDB/UDTLayout.h"
-#include "llvm/Support/Format.h"
 #include "llvm/Support/Regex.h"
 
 #include <algorithm>
@@ -61,16 +60,10 @@ LinePrinter::LinePrinter(int Indent, boo
              opts::pretty::IncludeCompilands.end());
 }
 
-void LinePrinter::Indent(uint32_t Amount) {
-  if (Amount == 0)
-    Amount = IndentSpaces;
-  CurrentIndent += Amount;
-}
+void LinePrinter::Indent() { CurrentIndent += IndentSpaces; }
 
-void LinePrinter::Unindent(uint32_t Amount) {
-  if (Amount == 0)
-    Amount = IndentSpaces;
-  CurrentIndent = std::max<int>(0, CurrentIndent - Amount);
+void LinePrinter::Unindent() {
+  CurrentIndent = std::max(0, CurrentIndent - IndentSpaces);
 }
 
 void LinePrinter::NewLine() {
@@ -78,13 +71,6 @@ 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;
@@ -93,19 +79,6 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/LinePrinter.h (original)
+++ llvm/trunk/tools/llvm-pdbutil/LinePrinter.h Thu Jun 15 15:55:51 2017
@@ -10,12 +10,10 @@
 #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/FormatVariadic.h"
-#include "llvm/Support/Regex.h"
 #include "llvm/Support/raw_ostream.h"
+#include "llvm/Support/Regex.h"
 
 #include <list>
 
@@ -30,22 +28,10 @@ class LinePrinter {
 public:
   LinePrinter(int Indent, bool UseColor, raw_ostream &Stream);
 
-  void Indent(uint32_t Amount = 0);
-  void Unindent(uint32_t Amount = 0);
+  void Indent();
+  void Unindent();
   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; }
@@ -77,17 +63,6 @@ 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;

Removed: llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp?rev=305504&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp (removed)
@@ -1,749 +0,0 @@
-//===- 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");
-  }
-  return formatUnknownEnum(Ordinal);
-}
-
-static std::string formatTrampolineType(TrampolineType Tramp) {
-  switch (Tramp) {
-    RETURN_CASE(TrampolineType, TrampIncremental, "tramp incremental");
-    RETURN_CASE(TrampolineType, BranchIsland, "branch island");
-  }
-  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, VB, "vb");
-    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");
-  }
-  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");
-  }
-  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");
-  }
-  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();
-}

Removed: llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h?rev=305504&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h (original)
+++ llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h (removed)
@@ -1,47 +0,0 @@
-//===- 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), Types(Types) {}
-
-  Error visitSymbolBegin(codeview::CVSymbol &Record) override;
-  Error visitSymbolEnd(codeview::CVSymbol &Record) override;
-
-#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;
-
-  LinePrinter &P;
-  codeview::LazyRandomTypeCollection &Types;
-};
-} // namespace pdb
-} // namespace llvm
-
-#endif
\ No newline at end of file

Removed: llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.cpp?rev=305504&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.cpp (removed)
@@ -1,532 +0,0 @@
-//===- 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, NearSysCall, "near syscall");
-    RETURN_CASE(CallingConvention, NearVector, "vectorcall");
-    RETURN_CASE(CallingConvention, PpcCall, "ppccall");
-    RETURN_CASE(CallingConvention, SHCall, "shcall");
-    RETURN_CASE(CallingConvention, SH5Call, "sh5call");
-    RETURN_CASE(CallingConvention, ThisCall, "thiscall");
-    RETURN_CASE(CallingConvention, TriCall, "tricall");
-  }
-  return formatUnknownEnum(Convention);
-}
-
-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");
-  }
-  return formatUnknownEnum(Mode);
-}
-
-static std::string memberAccess(MemberAccess Access) {
-  switch (Access) {
-    RETURN_CASE(MemberAccess, None, "");
-    RETURN_CASE(MemberAccess, Private, "private");
-    RETURN_CASE(MemberAccess, Protected, "protected");
-    RETURN_CASE(MemberAccess, Public, "public");
-  }
-  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");
-  }
-  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");
-  }
-  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();
-}

Removed: llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.h?rev=305504&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.h (original)
+++ llvm/trunk/tools/llvm-pdbutil/MinimalTypeDumper.h (removed)
@@ -1,56 +0,0 @@
-//===- 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;
-
-  LinePrinter &P;
-  uint32_t Width;
-  bool RecordBytes = false;
-  codeview::LazyRandomTypeCollection &Types;
-};
-} // namespace pdb
-} // namespace llvm
-
-#endif

Removed: llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.cpp?rev=305504&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.cpp (removed)
@@ -1,668 +0,0 @@
-//===- 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) : P(P) {}
-    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;
-  };
-
-  Visitor V(P);
-  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();
-}

Removed: llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.h?rev=305504&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.h (original)
+++ llvm/trunk/tools/llvm-pdbutil/RawOutputStyle.h (removed)
@@ -1,61 +0,0 @@
-//===- 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/YAMLOutputStyle.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/YAMLOutputStyle.cpp Thu Jun 15 15:55:51 2017
@@ -32,13 +32,6 @@ 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);
@@ -100,8 +93,8 @@ Error YAMLOutputStyle::dumpFileHeaders()
 }
 
 Error YAMLOutputStyle::dumpStringTable() {
-  bool RequiresStringTable = opts::pdb2yaml::DumpModuleFiles ||
-                             !opts::pdb2yaml::DumpModuleSubsections.empty();
+  bool RequiresStringTable = opts::shared::DumpModuleFiles ||
+                             !opts::shared::DumpModuleSubsections.empty();
   bool RequestedStringTable = opts::pdb2yaml::StringTable;
   if (!RequiresStringTable && !RequestedStringTable)
     return Error::success();
@@ -208,7 +201,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
   Obj.DbiStream->PdbDllRbld = DS.getPdbDllRbld();
   Obj.DbiStream->PdbDllVersion = DS.getPdbDllVersion();
   Obj.DbiStream->VerHeader = DS.getDbiVersion();
-  if (opts::pdb2yaml::DumpModules) {
+  if (opts::shared::DumpModules) {
     const auto &Modules = DS.modules();
     for (uint32_t I = 0; I < Modules.getModuleCount(); ++I) {
       DbiModuleDescriptor MI = Modules.getModuleDescriptor(I);
@@ -218,7 +211,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
 
       DMI.Mod = MI.getModuleName();
       DMI.Obj = MI.getObjFileName();
-      if (opts::pdb2yaml::DumpModuleFiles) {
+      if (opts::shared::DumpModuleFiles) {
         auto Files = Modules.source_files(I);
         DMI.SourceFiles.assign(Files.begin(), Files.end());
       }
@@ -238,7 +231,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
       auto ExpectedST = File.getStringTable();
       if (!ExpectedST)
         return ExpectedST.takeError();
-      if (!opts::pdb2yaml::DumpModuleSubsections.empty() &&
+      if (!opts::shared::DumpModuleSubsections.empty() &&
           ModS.hasDebugSubsections()) {
         auto ExpectedChecksums = ModS.findChecksumsSubsection();
         if (!ExpectedChecksums)
@@ -249,7 +242,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
 
         for (const auto &SS : ModS.subsections()) {
           opts::ModuleSubsection OptionKind = convertSubsectionKind(SS.kind());
-          if (!checkModuleSubsection(OptionKind))
+          if (!opts::checkModuleSubsection(OptionKind))
             continue;
 
           auto Converted =
@@ -260,7 +253,7 @@ Error YAMLOutputStyle::dumpDbiStream() {
         }
       }
 
-      if (opts::pdb2yaml::DumpModuleSyms) {
+      if (opts::shared::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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp (original)
+++ llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.cpp Thu Jun 15 15:55:51 2017
@@ -15,6 +15,7 @@
 
 #include "Analyze.h"
 #include "Diff.h"
+#include "LLVMOutputStyle.h"
 #include "LinePrinter.h"
 #include "OutputStyle.h"
 #include "PrettyCompilandDumper.h"
@@ -22,7 +23,6 @@
 #include "PrettyFunctionDumper.h"
 #include "PrettyTypeDumper.h"
 #include "PrettyVariableDumper.h"
-#include "RawOutputStyle.h"
 #include "YAMLOutputStyle.h"
 
 #include "llvm/ADT/ArrayRef.h"
@@ -266,8 +266,6 @@ 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");
@@ -276,11 +274,18 @@ cl::OptionCategory SymbolOptions("Symbol
 cl::OptionCategory MiscOptions("Miscellaneous Options");
 
 // MSF OPTIONS
-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::opt<bool> DumpHeaders("headers", cl::desc("dump PDB headers"),
                           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."),
@@ -294,45 +299,40 @@ cl::list<std::string>
                    cl::cat(MsfOptions), cl::sub(RawSubcommand));
 
 // TYPE OPTIONS
-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::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::desc("dump CodeView type record raw bytes from TPI 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> DumpTpiHash("tpi-hash", cl::desc("dump CodeView TPI hash stream"),
+                          cl::cat(TypeOptions), cl::sub(RawSubcommand));
 cl::opt<bool>
-    DumpIdData("id-data",
-               cl::desc("dump CodeView type record raw bytes from IPI stream"),
-               cl::cat(TypeOptions), cl::sub(RawSubcommand));
+    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));
 
 // SYMBOL OPTIONS
-cl::opt<bool> DumpPublics("publics", cl::desc("dump Publics stream data"),
+cl::opt<bool> DumpGlobals("globals", cl::desc("dump globals stream data"),
                           cl::cat(SymbolOptions), cl::sub(RawSubcommand));
-cl::opt<bool> DumpSymbols("symbols", cl::desc("dump module symbols"),
+cl::opt<bool> DumpPublics("publics", cl::desc("dump Publics stream data"),
                           cl::cat(SymbolOptions), cl::sub(RawSubcommand));
-
 cl::opt<bool>
-    DumpSymRecordBytes("sym-data",
+    DumpSymRecordBytes("sym-record-bytes",
                        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,6 +342,11 @@ 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));
@@ -399,11 +404,20 @@ 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(PdbToYamlSubcommand));
+                          cl::cat(FileOptions), cl::sub(RawSubcommand),
+                          cl::sub(PdbToYamlSubcommand));
 cl::opt<bool> DumpModuleFiles("module-files", cl::desc("dump file information"),
-                              cl::cat(FileOptions),
+                              cl::cat(FileOptions), cl::sub(RawSubcommand),
                               cl::sub(PdbToYamlSubcommand));
 cl::list<ModuleSubsection> DumpModuleSubsections(
     "subsections", cl::ZeroOrMore, cl::CommaSeparated,
@@ -434,15 +448,11 @@ 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(PdbToYamlSubcommand));
+    cl::cat(FileOptions), cl::sub(RawSubcommand), cl::sub(PdbToYamlSubcommand));
 cl::opt<bool> DumpModuleSyms("module-syms", cl::desc("dump module symbols"),
-                             cl::cat(FileOptions),
+                             cl::cat(FileOptions), cl::sub(RawSubcommand),
                              cl::sub(PdbToYamlSubcommand));
-
-cl::list<std::string> InputFilename(cl::Positional,
-                                    cl::desc("<input PDB file>"), cl::Required,
-                                    cl::sub(PdbToYamlSubcommand));
-} // namespace pdb2yaml
+} // namespace shared
 
 namespace analyze {
 cl::opt<bool> StringTable("hash-collisions", cl::desc("Find hash collisions"),
@@ -464,6 +474,13 @@ 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 =
@@ -594,7 +611,7 @@ static void dumpRaw(StringRef Path) {
   std::unique_ptr<IPDBSession> Session;
   auto &File = loadPDB(Path, Session);
 
-  auto O = llvm::make_unique<RawOutputStyle>(File);
+  auto O = llvm::make_unique<LLVMOutputStyle>(File);
 
   ExitOnErr(O->dump());
 }
@@ -887,21 +904,49 @@ 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::DumpIds = true;
+      opts::raw::DumpHeaders = true;
+      opts::raw::DumpGlobals = true;
       opts::raw::DumpPublics = true;
-      opts::raw::DumpSectionContribs = 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::DumpStreams = true;
+      opts::raw::DumpSectionContribs = true;
+      opts::raw::DumpFpo = true;
       opts::raw::DumpStringTable = true;
-      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::raw::CompactRecords &&
+        (opts::raw::DumpTpiRecordBytes || opts::raw::DumpIpiRecordBytes)) {
+      errs() << "-compact-records is incompatible with -tpi-record-bytes and "
+                "-ipi-record-bytes.\n";
+      exit(1);
     }
   }
   if (opts::PdbToYamlSubcommand) {
@@ -913,24 +958,7 @@ 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=305505&r1=305504&r2=305505&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.h (original)
+++ llvm/trunk/tools/llvm-pdbutil/llvm-pdbutil.h Thu Jun 15 15:55:51 2017
@@ -27,8 +27,6 @@ uint32_t getTypeLength(const PDBSymbolDa
 
 namespace opts {
 
-enum class DumpLevel { None, Basic, Verbose };
-
 enum class ModuleSubsection {
   Unknown,
   Lines,
@@ -43,6 +41,15 @@ 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 };
@@ -98,24 +105,27 @@ 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> 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> 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> DumpPublics;
 extern llvm::cl::opt<bool> DumpSectionContribs;
 extern llvm::cl::opt<bool> DumpSectionMap;
-extern llvm::cl::opt<bool> DumpModules;
-extern llvm::cl::opt<bool> DumpModuleFiles;
-extern llvm::cl::opt<bool> RawAll;
+extern llvm::cl::opt<bool> DumpSymRecordBytes;
+extern llvm::cl::opt<bool> DumpSectionHeaders;
+extern llvm::cl::opt<bool> DumpFpo;
+extern llvm::cl::opt<bool> DumpStringTable;
 }
 
 namespace diff {
@@ -134,11 +144,14 @@ 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 pdb2yaml
+} // namespace shared
 }
 
 #endif




More information about the llvm-commits mailing list