[llvm] r228755 - Rewrite llvm-pdbdump in terms of LLVMDebugInfoPDB.

Zachary Turner zturner at google.com
Tue Feb 10 14:43:26 PST 2015


Author: zturner
Date: Tue Feb 10 16:43:25 2015
New Revision: 228755

URL: http://llvm.org/viewvc/llvm-project?rev=228755&view=rev
Log:
Rewrite llvm-pdbdump in terms of LLVMDebugInfoPDB.

This makes llvm-pdbdump available on all platforms, although it
will currently fail to create a dumper if there is no PDB reader
implementation for the current platform.

It implements dumping of compilands and children, which is less
information than was previously available, but it has to be
rewritten from scratch using the new set of interfaces, so the
rest of the functionality will be added back in subsequent commits.

Added:
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBExtras.h
    llvm/trunk/lib/DebugInfo/PDB/IPDBSourceFile.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBExtras.cpp
    llvm/trunk/tools/llvm-pdbdump/Makefile
Removed:
    llvm/trunk/tools/llvm-pdbdump/COMExtras.h
    llvm/trunk/tools/llvm-pdbdump/DIAExtras.cpp
    llvm/trunk/tools/llvm-pdbdump/DIAExtras.h
    llvm/trunk/tools/llvm-pdbdump/DIASymbol.cpp
    llvm/trunk/tools/llvm-pdbdump/DIASymbol.h
    llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h
Modified:
    llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h
    llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIASession.h
    llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h
    llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h
    llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSourceFile.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbol.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolData.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolExe.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h
    llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt
    llvm/trunk/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp
    llvm/trunk/lib/DebugInfo/PDB/DIA/DIASession.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBInterfaceAnchors.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbol.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolAnnotation.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolBlock.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompiland.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandDetails.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandEnv.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCustom.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolData.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolExe.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFunc.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFuncDebugEnd.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFuncDebugStart.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolLabel.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolPublicSymbol.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolThunk.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeArray.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeBaseClass.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeBuiltin.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeCustom.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeDimension.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeEnum.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFriend.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFunctionArg.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFunctionSig.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeManaged.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypePointer.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeTypedef.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeUDT.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeVTable.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeVTableShape.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolUnknown.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBSymbolUsingNamespace.cpp
    llvm/trunk/tools/CMakeLists.txt
    llvm/trunk/tools/Makefile
    llvm/trunk/tools/llvm-pdbdump/CMakeLists.txt
    llvm/trunk/tools/llvm-pdbdump/LLVMBuild.txt
    llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
    llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h Tue Feb 10 16:43:25 2015
@@ -19,8 +19,12 @@ class DIARawSymbol : public IPDBRawSymbo
 public:
   DIARawSymbol(const DIASession &PDBSession, CComPtr<IDiaSymbol> DiaSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
+  CComPtr<IDiaSymbol> getDiaSymbol() const { return Symbol; }
+
+  std::unique_ptr<IPDBEnumSymbols>
+  DIARawSymbol::findChildren(PDB_SymType Type) const override;
   std::unique_ptr<IPDBEnumSymbols>
   findChildren(PDB_SymType Type, StringRef Name,
                PDB_NameSearchFlags Flags) const override;
@@ -54,7 +58,7 @@ public:
   uint32_t getLiveRangeStartAddressOffset() const override;
   uint32_t getLiveRangeStartAddressSection() const override;
   uint32_t getLiveRangeStartRelativeVirtualAddress() const override;
-  uint32_t getLocalBasePointerRegisterId() const override;
+  PDB_RegisterId getLocalBasePointerRegisterId() const override;
   uint32_t getLowerBoundId() const override;
   uint32_t getMemorySpaceKind() const override;
   std::string getName() const override;
@@ -69,7 +73,7 @@ public:
   uint32_t getOffsetInUdt() const override;
   PDB_Cpu getPlatform() const override;
   uint32_t getRank() const override;
-  uint32_t getRegisterId() const override;
+  PDB_RegisterId getRegisterId() const override;
   uint32_t getRegisterType() const override;
   uint32_t getRelativeVirtualAddress() const override;
   uint32_t getSamplerSlot() const override;
@@ -129,6 +133,7 @@ public:
   bool hasInlAsm() const override;
   bool hasInlineAttribute() const override;
   bool hasInterruptReturn() const override;
+  bool hasFramePointer() const override;
   bool hasLongJump() const override;
   bool hasManagedCode() const override;
   bool hasNestedTypes() const override;

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIASession.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIASession.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIASession.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIASession.h Tue Feb 10 16:43:25 2015
@@ -25,6 +25,10 @@ public:
   void setLoadAddress(uint64_t Address) override;
   std::unique_ptr<PDBSymbolExe> getGlobalScope() const override;
   std::unique_ptr<PDBSymbol> getSymbolById(uint32_t SymbolId) const override;
+
+  std::unique_ptr<IPDBEnumSourceFiles> getAllSourceFiles() const override;
+  std::unique_ptr<IPDBEnumSourceFiles> getSourceFilesForCompiland(
+      const PDBSymbolCompiland &Compiland) const override;
   std::unique_ptr<IPDBSourceFile>
   getSourceFileById(uint32_t FileId) const override;
 

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h Tue Feb 10 16:43:25 2015
@@ -29,7 +29,10 @@ class IPDBRawSymbol {
 public:
   virtual ~IPDBRawSymbol();
 
-  virtual void dump(llvm::raw_ostream &OS) const = 0;
+  virtual void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const = 0;
+
+  virtual std::unique_ptr<IPDBEnumSymbols>
+  findChildren(PDB_SymType Type) const = 0;
 
   virtual std::unique_ptr<IPDBEnumSymbols>
   findChildren(PDB_SymType Type, StringRef Name,
@@ -64,7 +67,7 @@ public:
   virtual uint32_t getLiveRangeStartAddressOffset() const = 0;
   virtual uint32_t getLiveRangeStartAddressSection() const = 0;
   virtual uint32_t getLiveRangeStartRelativeVirtualAddress() const = 0;
-  virtual uint32_t getLocalBasePointerRegisterId() const = 0;
+  virtual PDB_RegisterId getLocalBasePointerRegisterId() const = 0;
   virtual uint32_t getLowerBoundId() const = 0;
   virtual uint32_t getMemorySpaceKind() const = 0;
   virtual std::string getName() const = 0;
@@ -79,7 +82,7 @@ public:
   virtual uint32_t getOffsetInUdt() const = 0;
   virtual PDB_Cpu getPlatform() const = 0;
   virtual uint32_t getRank() const = 0;
-  virtual uint32_t getRegisterId() const = 0;
+  virtual PDB_RegisterId getRegisterId() const = 0;
   virtual uint32_t getRegisterType() const = 0;
   virtual uint32_t getRelativeVirtualAddress() const = 0;
   virtual uint32_t getSamplerSlot() const = 0;
@@ -136,6 +139,7 @@ public:
   virtual bool hasDebugInfo() const = 0;
   virtual bool hasEH() const = 0;
   virtual bool hasEHa() const = 0;
+  virtual bool hasFramePointer() const = 0;
   virtual bool hasInlAsm() const = 0;
   virtual bool hasInlineAttribute() const = 0;
   virtual bool hasInterruptReturn() const = 0;

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSession.h Tue Feb 10 16:43:25 2015
@@ -16,6 +16,7 @@
 
 namespace llvm {
 
+class PDBSymbolCompiland;
 class PDBSymbolExe;
 
 /// IPDBSession defines an interface used to provide a context for querying
@@ -28,6 +29,10 @@ public:
   virtual void setLoadAddress(uint64_t Address) = 0;
   virtual std::unique_ptr<PDBSymbolExe> getGlobalScope() const = 0;
   virtual std::unique_ptr<PDBSymbol> getSymbolById(uint32_t SymbolId) const = 0;
+
+  virtual std::unique_ptr<IPDBEnumSourceFiles> getAllSourceFiles() const = 0;
+  virtual std::unique_ptr<IPDBEnumSourceFiles>
+  getSourceFilesForCompiland(const PDBSymbolCompiland &Compiland) const = 0;
   virtual std::unique_ptr<IPDBSourceFile>
   getSourceFileById(uint32_t FileId) const = 0;
 

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSourceFile.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSourceFile.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSourceFile.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBSourceFile.h Tue Feb 10 16:43:25 2015
@@ -17,12 +17,16 @@
 
 namespace llvm {
 
+class raw_ostream;
+
 /// IPDBSourceFile defines an interface used to represent source files whose
 /// information are stored in the PDB.
 class IPDBSourceFile {
 public:
   virtual ~IPDBSourceFile();
 
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const;
+
   virtual std::string getFileName() const = 0;
   virtual uint32_t getUniqueId() const = 0;
   virtual std::string getChecksum() const = 0;

Added: llvm/trunk/include/llvm/DebugInfo/PDB/PDBExtras.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBExtras.h?rev=228755&view=auto
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBExtras.h (added)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBExtras.h Tue Feb 10 16:43:25 2015
@@ -0,0 +1,39 @@
+//===- PDBExtras.h - helper functions and classes for PDBs -------*- C++-*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_DEBUGINFO_PDB_PDBEXTRAS_H
+#define LLVM_DEBUGINFO_PDB_PDBEXTRAS_H
+
+#include <unordered_map>
+
+#include "PDBTypes.h"
+
+#include "llvm/Support/raw_ostream.h"
+
+namespace llvm {
+typedef std::unordered_map<PDB_SymType, int> TagStats;
+
+struct stream_indent {
+  stream_indent(int IndentWidth) : Width(IndentWidth) {}
+  int Width;
+};
+raw_ostream &operator<<(raw_ostream &OS, const stream_indent &Indent);
+
+raw_ostream &operator<<(raw_ostream &OS, const PDB_RegisterId &Reg);
+raw_ostream &operator<<(raw_ostream &OS, const PDB_LocType &Loc);
+raw_ostream &operator<<(raw_ostream &OS, const PDB_ThunkOrdinal &Thunk);
+raw_ostream &operator<<(raw_ostream &OS, const PDB_Checksum &Checksum);
+raw_ostream &operator<<(raw_ostream &OS, const PDB_Lang &Lang);
+raw_ostream &operator<<(raw_ostream &OS, const PDB_SymType &Tag);
+raw_ostream &operator<<(raw_ostream &OS, const PDB_UniqueId &Id);
+raw_ostream &operator<<(raw_ostream &OS, const VersionInfo &Version);
+raw_ostream &operator<<(raw_ostream &OS, const TagStats &Stats);
+}
+
+#endif

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbol.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbol.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbol.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbol.h Tue Feb 10 16:43:25 2015
@@ -11,11 +11,13 @@
 #define LLVM_DEBUGINFO_PDB_IPDBSYMBOL_H
 
 #include <memory>
+#include <unordered_map>
 
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Casting.h"
 
 #include "IPDBRawSymbol.h"
+#include "PDBExtras.h"
 #include "PDBTypes.h"
 
 #define FORWARD_SYMBOL_METHOD(MethodName)                                      \
@@ -48,10 +50,12 @@ public:
   /// call dump() on the underlying RawSymbol, which allows us to discover
   /// unknown properties, but individual implementations of PDBSymbol may
   /// override the behavior to only dump known fields.
-  virtual void dump(llvm::raw_ostream &OS) const;
+  virtual void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const = 0;
+  void defaultDump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const;
 
   PDB_SymType getSymTag() const;
 
+  std::unique_ptr<IPDBEnumSymbols> findChildren(PDB_SymType Type) const;
   std::unique_ptr<IPDBEnumSymbols>
   findChildren(PDB_SymType Type, StringRef Name,
                PDB_NameSearchFlags Flags) const;
@@ -61,7 +65,12 @@ public:
                                                      uint32_t RVA) const;
   std::unique_ptr<IPDBEnumSymbols> findInlineFramesByRVA(uint32_t RVA) const;
 
+  const IPDBRawSymbol &getRawSymbol() const { return *RawSymbol; }
+  IPDBRawSymbol &getRawSymbol() { return *RawSymbol; }
+
 protected:
+  std::unique_ptr<IPDBEnumSymbols> getChildStats(TagStats &Stats) const;
+
   const IPDBSession &Session;
   const std::unique_ptr<IPDBRawSymbol> RawSymbol;
 };

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolAnnotation.h Tue Feb 10 16:43:25 2015
@@ -23,7 +23,7 @@ public:
   PDBSymbolAnnotation(const IPDBSession &PDBSession,
                       std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getAddressOffset)
   FORWARD_SYMBOL_METHOD(getAddressSection)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolBlock.h Tue Feb 10 16:43:25 2015
@@ -23,7 +23,7 @@ public:
   PDBSymbolBlock(const IPDBSession &PDBSession,
                  std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getAddressOffset)
   FORWARD_SYMBOL_METHOD(getAddressSection)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompiland.h Tue Feb 10 16:43:25 2015
@@ -23,7 +23,7 @@ public:
   PDBSymbolCompiland(const IPDBSession &PDBSession,
                      std::unique_ptr<IPDBRawSymbol> CompilandSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(isEditAndContinueEnabled)
   FORWARD_SYMBOL_METHOD(getLexicalParentId)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolCompilandDetails(const IPDBSession &PDBSession,
                             std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   void getFrontEndVersion(VersionInfo &Version) const {
     RawSymbol->getFrontEndVersion(Version);

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolCompilandEnv(const IPDBSession &PDBSession,
                         std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getLexicalParentId)
   FORWARD_SYMBOL_METHOD(getName)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolCustom.h Tue Feb 10 16:43:25 2015
@@ -27,7 +27,7 @@ public:
   PDBSymbolCustom(const IPDBSession &PDBSession,
                   std::unique_ptr<IPDBRawSymbol> CustomSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   void getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes);
   FORWARD_SYMBOL_METHOD(getSymIndexId)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolData.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolData.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolData.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolData.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolData(const IPDBSession &PDBSession,
                 std::unique_ptr<IPDBRawSymbol> DataSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getAccess)
   FORWARD_SYMBOL_METHOD(getAddressOffset)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolExe.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolExe.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolExe.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolExe.h Tue Feb 10 16:43:25 2015
@@ -24,7 +24,7 @@ public:
   PDBSymbolExe(const IPDBSession &PDBSession,
                std::unique_ptr<IPDBRawSymbol> ExeSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getAge)
   FORWARD_SYMBOL_METHOD(getGuid)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolFunc(const IPDBSession &PDBSession,
                 std::unique_ptr<IPDBRawSymbol> FuncSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getAccess)
   FORWARD_SYMBOL_METHOD(getAddressOffset)
@@ -46,8 +46,10 @@ public:
   FORWARD_SYMBOL_METHOD(isStatic)
   FORWARD_SYMBOL_METHOD(getLength)
   FORWARD_SYMBOL_METHOD(getLexicalParentId)
+  FORWARD_SYMBOL_METHOD(getLocalBasePointerRegisterId)
   FORWARD_SYMBOL_METHOD(getLocationType)
   FORWARD_SYMBOL_METHOD(getName)
+  FORWARD_SYMBOL_METHOD(hasFramePointer)
   FORWARD_SYMBOL_METHOD(hasNoInlineAttribute)
   FORWARD_SYMBOL_METHOD(hasNoReturnAttribute)
   FORWARD_SYMBOL_METHOD(isUnreached)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolFuncDebugEnd(const IPDBSession &PDBSession,
                         std::unique_ptr<IPDBRawSymbol> FuncDebugEndSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getAddressOffset)
   FORWARD_SYMBOL_METHOD(getAddressSection)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolFuncDebugStart(const IPDBSession &PDBSession,
                           std::unique_ptr<IPDBRawSymbol> FuncDebugStartSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getAddressOffset)
   FORWARD_SYMBOL_METHOD(getAddressSection)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolLabel.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolLabel(const IPDBSession &PDBSession,
                  std::unique_ptr<IPDBRawSymbol> LabelSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getAddressOffset)
   FORWARD_SYMBOL_METHOD(getAddressSection)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolPublicSymbol.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolPublicSymbol(const IPDBSession &PDBSession,
                         std::unique_ptr<IPDBRawSymbol> PublicSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getAddressOffset)
   FORWARD_SYMBOL_METHOD(getAddressSection)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolThunk.h Tue Feb 10 16:43:25 2015
@@ -24,7 +24,7 @@ public:
   PDBSymbolThunk(const IPDBSession &PDBSession,
                  std::unique_ptr<IPDBRawSymbol> ThunkSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getAccess)
   FORWARD_SYMBOL_METHOD(getAddressOffset)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeArray.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeArray(const IPDBSession &PDBSession,
                      std::unique_ptr<IPDBRawSymbol> ArrayTypeSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getArrayIndexTypeId)
   FORWARD_SYMBOL_METHOD(isConstType)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBaseClass.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeBaseClass(const IPDBSession &PDBSession,
                          std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getAccess)
   FORWARD_SYMBOL_METHOD(getClassParentId)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeBuiltin.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeBuiltin(const IPDBSession &PDBSession,
                        std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getBuiltinType)
   FORWARD_SYMBOL_METHOD(isConstType)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeCustom.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeCustom(const IPDBSession &PDBSession,
                       std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getOemId)
   FORWARD_SYMBOL_METHOD(getOemSymbolId)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeDimension.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeDimension(const IPDBSession &PDBSession,
                          std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getLowerBoundId)
   FORWARD_SYMBOL_METHOD(getUpperBoundId)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeEnum(const IPDBSession &PDBSession,
                     std::unique_ptr<IPDBRawSymbol> EnumTypeSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getBuiltinType)
   FORWARD_SYMBOL_METHOD(getClassParentId)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFriend.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeFriend(const IPDBSession &PDBSession,
                       std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getClassParentId)
   FORWARD_SYMBOL_METHOD(getName)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionArg.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeFunctionArg(const IPDBSession &PDBSession,
                            std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getClassParentId)
   FORWARD_SYMBOL_METHOD(getLexicalParentId)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeFunctionSig.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeFunctionSig(const IPDBSession &PDBSession,
                            std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getCallingConvention)
   FORWARD_SYMBOL_METHOD(getClassParentId)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeManaged.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeManaged(const IPDBSession &PDBSession,
                        std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getName)
   FORWARD_SYMBOL_METHOD(getSymIndexId)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypePointer.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypePointer(const IPDBSession &PDBSession,
                        std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(isConstType)
   FORWARD_SYMBOL_METHOD(getLength)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeTypedef(const IPDBSession &PDBSession,
                        std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getBuiltinType)
   FORWARD_SYMBOL_METHOD(getClassParentId)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeUDT(const IPDBSession &PDBSession,
                    std::unique_ptr<IPDBRawSymbol> UDTSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getClassParentId)
   FORWARD_SYMBOL_METHOD(hasConstructor)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTable.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeVTable(const IPDBSession &PDBSession,
                       std::unique_ptr<IPDBRawSymbol> VtblSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getClassParentId)
   FORWARD_SYMBOL_METHOD(isConstType)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolTypeVTableShape.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolTypeVTableShape(const IPDBSession &PDBSession,
                            std::unique_ptr<IPDBRawSymbol> VtblShapeSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(isConstType)
   FORWARD_SYMBOL_METHOD(getCount)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUnknown.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolUnknown(const IPDBSession &PDBSession,
                    std::unique_ptr<IPDBRawSymbol> UnknownSymbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   static bool classof(const PDBSymbol *S) {
     return (S->getSymTag() == PDB_SymType::None ||

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBSymbolUsingNamespace.h Tue Feb 10 16:43:25 2015
@@ -22,7 +22,7 @@ public:
   PDBSymbolUsingNamespace(const IPDBSession &PDBSession,
                           std::unique_ptr<IPDBRawSymbol> Symbol);
 
-  void dump(llvm::raw_ostream &OS) const override;
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override;
 
   FORWARD_SYMBOL_METHOD(getLexicalParentId)
   FORWARD_SYMBOL_METHOD(getName)

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h Tue Feb 10 16:43:25 2015
@@ -11,6 +11,7 @@
 #define LLVM_DEBUGINFO_PDB_PDBTYPES_H
 
 #include <stdint.h>
+#include <functional>
 #include "llvm/Config/llvm-config.h"
 
 namespace llvm {
@@ -68,6 +69,12 @@ enum class PDB_ReaderType {
   DIA = 0,
 };
 
+enum class PDB_DumpLevel {
+  Compact,
+  Normal,
+  Detailed,
+};
+
 /// Defines a 128-bit unique identifier.  This maps to a GUID on Windows, but
 /// is abstracted here for the purposes of non-Windows platforms that don't have
 /// the GUID structure defined.
@@ -365,6 +372,58 @@ enum class PDB_BuiltinType {
   HResult = 31
 };
 
+enum class PDB_RegisterId {
+  Unknown = 0,
+  VFrame = 30006,
+  AL = 1,
+  CL = 2,
+  DL = 3,
+  BL = 4,
+  AH = 5,
+  CH = 6,
+  DH = 7,
+  BH = 8,
+  AX = 9,
+  CX = 10,
+  DX = 11,
+  BX = 12,
+  SP = 13,
+  BP = 14,
+  SI = 15,
+  DI = 16,
+  EAX = 17,
+  ECX = 18,
+  EDX = 19,
+  EBX = 20,
+  ESP = 21,
+  EBP = 22,
+  ESI = 23,
+  EDI = 24,
+  ES = 25,
+  CS = 26,
+  SS = 27,
+  DS = 28,
+  FS = 29,
+  GS = 30,
+  IP = 31,
+  RAX = 328,
+  RBX = 329,
+  RCX = 330,
+  RDX = 331,
+  RSI = 332,
+  RDI = 333,
+  RBP = 334,
+  RSP = 335,
+  R8 = 336,
+  R9 = 337,
+  R10 = 338,
+  R11 = 339,
+  R12 = 340,
+  R13 = 341,
+  R14 = 342,
+  R15 = 343,
+};
+
 enum class PDB_MemberAccess { Private = 1, Protected = 2, Public = 3 };
 
 struct VersionInfo {
@@ -376,4 +435,15 @@ struct VersionInfo {
 
 } // namespace llvm
 
+namespace std {
+template <> struct hash<llvm::PDB_SymType> {
+  typedef llvm::PDB_SymType argument_type;
+  typedef std::size_t result_type;
+
+  result_type operator()(const argument_type &Arg) const {
+    return std::hash<int>()(static_cast<int>(Arg));
+  }
+};
+}
+
 #endif

Modified: llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt (original)
+++ llvm/trunk/lib/DebugInfo/PDB/CMakeLists.txt Tue Feb 10 16:43:25 2015
@@ -30,7 +30,9 @@ endif()
 list(APPEND LIBPDB_ADDITIONAL_HEADER_DIRS "../../../include/llvm/DebugInfo/PDB")
 
 add_llvm_library(LLVMDebugInfoPDB
+  IPDBSourceFile.cpp
   PDB.cpp
+  PDBExtras.cpp
   PDBInterfaceAnchors.cpp
   PDBSymbol.cpp
   PDBSymbolAnnotation.cpp

Modified: llvm/trunk/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp Tue Feb 10 16:43:25 2015
@@ -7,6 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "llvm/DebugInfo/PDB/PDBExtras.h"
 #include "llvm/DebugInfo/PDB/DIA/DIAEnumSymbols.h"
 #include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h"
 #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
@@ -54,13 +55,228 @@ PrivateGetDIAValue(IDiaSymbol *Symbol,
   ::memcpy(&IdResult, &Result, sizeof(GUID));
   return IdResult;
 }
+
+template <typename ArgType>
+void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
+                  IDiaSymbol *Symbol,
+                  HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
+  ArgType Value;
+  if (S_OK == (Symbol->*Method)(&Value)) {
+    OS.indent(Indent);
+    OS << Name << ": " << Value << "\n";
+  }
+}
+
+void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
+                  IDiaSymbol *Symbol,
+                  HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
+  BSTR Value = nullptr;
+  if (S_OK != (Symbol->*Method)(&Value))
+    return;
+  const char *Bytes = reinterpret_cast<const char *>(Value);
+  ArrayRef<char> ByteArray(Bytes, ::SysStringByteLen(Value));
+  std::string Result;
+  if (llvm::convertUTF16ToUTF8String(ByteArray, Result)) {
+    OS.indent(Indent);
+    OS << Name << ": " << Result << "\n";
+  }
+  ::SysFreeString(Value);
+}
+}
+
+namespace llvm {
+raw_ostream &operator<<(raw_ostream &OS, const GUID &Guid) {
+  const PDB_UniqueId *Id = reinterpret_cast<const PDB_UniqueId *>(&Guid);
+  OS << *Id;
+  return OS;
+}
 }
 
 DIARawSymbol::DIARawSymbol(const DIASession &PDBSession,
                            CComPtr<IDiaSymbol> DiaSymbol)
     : Session(PDBSession), Symbol(DiaSymbol) {}
 
-void DIARawSymbol::dump(llvm::raw_ostream &OS) const {}
+#define RAW_METHOD_DUMP(Stream, Method)                                        \
+  DumpDIAValue(Stream, Indent, StringRef(#Method), Symbol, &IDiaSymbol::Method);
+
+void DIARawSymbol::dump(raw_ostream &OS, int Indent,
+                        PDB_DumpLevel Level) const {
+  RAW_METHOD_DUMP(OS, get_access)
+  RAW_METHOD_DUMP(OS, get_addressOffset)
+  RAW_METHOD_DUMP(OS, get_addressSection)
+  RAW_METHOD_DUMP(OS, get_age)
+  RAW_METHOD_DUMP(OS, get_arrayIndexTypeId)
+  RAW_METHOD_DUMP(OS, get_backEndMajor)
+  RAW_METHOD_DUMP(OS, get_backEndMinor)
+  RAW_METHOD_DUMP(OS, get_backEndBuild)
+  RAW_METHOD_DUMP(OS, get_backEndQFE)
+  RAW_METHOD_DUMP(OS, get_baseDataOffset)
+  RAW_METHOD_DUMP(OS, get_baseDataSlot)
+  RAW_METHOD_DUMP(OS, get_baseSymbolId)
+  RAW_METHOD_DUMP(OS, get_builtInKind)
+  RAW_METHOD_DUMP(OS, get_bitPosition)
+  RAW_METHOD_DUMP(OS, get_callingConvention)
+  RAW_METHOD_DUMP(OS, get_classParentId)
+  RAW_METHOD_DUMP(OS, get_compilerName)
+  RAW_METHOD_DUMP(OS, get_count)
+  RAW_METHOD_DUMP(OS, get_countLiveRanges)
+  RAW_METHOD_DUMP(OS, get_frontEndMajor)
+  RAW_METHOD_DUMP(OS, get_frontEndMinor)
+  RAW_METHOD_DUMP(OS, get_frontEndBuild)
+  RAW_METHOD_DUMP(OS, get_frontEndQFE)
+  RAW_METHOD_DUMP(OS, get_count)
+  RAW_METHOD_DUMP(OS, get_lexicalParentId)
+  RAW_METHOD_DUMP(OS, get_libraryName)
+  RAW_METHOD_DUMP(OS, get_liveRangeStartAddressOffset)
+  RAW_METHOD_DUMP(OS, get_liveRangeStartAddressSection)
+  RAW_METHOD_DUMP(OS, get_liveRangeStartRelativeVirtualAddress)
+  RAW_METHOD_DUMP(OS, get_localBasePointerRegisterId)
+  RAW_METHOD_DUMP(OS, get_lowerBoundId)
+  RAW_METHOD_DUMP(OS, get_memorySpaceKind)
+  RAW_METHOD_DUMP(OS, get_name)
+  RAW_METHOD_DUMP(OS, get_numberOfAcceleratorPointerTags)
+  RAW_METHOD_DUMP(OS, get_numberOfColumns)
+  RAW_METHOD_DUMP(OS, get_numberOfModifiers)
+  RAW_METHOD_DUMP(OS, get_numberOfRegisterIndices)
+  RAW_METHOD_DUMP(OS, get_numberOfRows)
+  RAW_METHOD_DUMP(OS, get_objectFileName)
+  RAW_METHOD_DUMP(OS, get_oemId)
+  RAW_METHOD_DUMP(OS, get_oemSymbolId)
+  RAW_METHOD_DUMP(OS, get_offsetInUdt)
+  RAW_METHOD_DUMP(OS, get_platform)
+  RAW_METHOD_DUMP(OS, get_rank)
+  RAW_METHOD_DUMP(OS, get_registerId)
+  RAW_METHOD_DUMP(OS, get_registerType)
+  RAW_METHOD_DUMP(OS, get_relativeVirtualAddress)
+  RAW_METHOD_DUMP(OS, get_samplerSlot)
+  RAW_METHOD_DUMP(OS, get_signature)
+  RAW_METHOD_DUMP(OS, get_sizeInUdt)
+  RAW_METHOD_DUMP(OS, get_slot)
+  RAW_METHOD_DUMP(OS, get_sourceFileName)
+  RAW_METHOD_DUMP(OS, get_stride)
+  RAW_METHOD_DUMP(OS, get_subTypeId)
+  RAW_METHOD_DUMP(OS, get_symbolsFileName)
+  RAW_METHOD_DUMP(OS, get_symIndexId)
+  RAW_METHOD_DUMP(OS, get_targetOffset)
+  RAW_METHOD_DUMP(OS, get_targetRelativeVirtualAddress)
+  RAW_METHOD_DUMP(OS, get_targetVirtualAddress)
+  RAW_METHOD_DUMP(OS, get_targetSection)
+  RAW_METHOD_DUMP(OS, get_textureSlot)
+  RAW_METHOD_DUMP(OS, get_timeStamp)
+  RAW_METHOD_DUMP(OS, get_token)
+  RAW_METHOD_DUMP(OS, get_typeId)
+  RAW_METHOD_DUMP(OS, get_uavSlot)
+  RAW_METHOD_DUMP(OS, get_undecoratedName)
+  RAW_METHOD_DUMP(OS, get_unmodifiedTypeId)
+  RAW_METHOD_DUMP(OS, get_upperBoundId)
+  RAW_METHOD_DUMP(OS, get_virtualBaseDispIndex)
+  RAW_METHOD_DUMP(OS, get_virtualBaseOffset)
+  RAW_METHOD_DUMP(OS, get_virtualTableShapeId)
+  RAW_METHOD_DUMP(OS, get_dataKind)
+  RAW_METHOD_DUMP(OS, get_symTag)
+  RAW_METHOD_DUMP(OS, get_guid)
+  RAW_METHOD_DUMP(OS, get_offset)
+  RAW_METHOD_DUMP(OS, get_thisAdjust)
+  RAW_METHOD_DUMP(OS, get_virtualBasePointerOffset)
+  RAW_METHOD_DUMP(OS, get_locationType)
+  RAW_METHOD_DUMP(OS, get_machineType)
+  RAW_METHOD_DUMP(OS, get_thunkOrdinal)
+  RAW_METHOD_DUMP(OS, get_length)
+  RAW_METHOD_DUMP(OS, get_liveRangeLength)
+  RAW_METHOD_DUMP(OS, get_virtualAddress)
+  RAW_METHOD_DUMP(OS, get_udtKind)
+  RAW_METHOD_DUMP(OS, get_constructor)
+  RAW_METHOD_DUMP(OS, get_customCallingConvention)
+  RAW_METHOD_DUMP(OS, get_farReturn)
+  RAW_METHOD_DUMP(OS, get_code)
+  RAW_METHOD_DUMP(OS, get_compilerGenerated)
+  RAW_METHOD_DUMP(OS, get_constType)
+  RAW_METHOD_DUMP(OS, get_editAndContinueEnabled)
+  RAW_METHOD_DUMP(OS, get_function)
+  RAW_METHOD_DUMP(OS, get_stride)
+  RAW_METHOD_DUMP(OS, get_noStackOrdering)
+  RAW_METHOD_DUMP(OS, get_hasAlloca)
+  RAW_METHOD_DUMP(OS, get_hasAssignmentOperator)
+  RAW_METHOD_DUMP(OS, get_isCTypes)
+  RAW_METHOD_DUMP(OS, get_hasCastOperator)
+  RAW_METHOD_DUMP(OS, get_hasDebugInfo)
+  RAW_METHOD_DUMP(OS, get_hasEH)
+  RAW_METHOD_DUMP(OS, get_hasEHa)
+  RAW_METHOD_DUMP(OS, get_hasInlAsm)
+  RAW_METHOD_DUMP(OS, get_framePointerPresent)
+  RAW_METHOD_DUMP(OS, get_inlSpec)
+  RAW_METHOD_DUMP(OS, get_interruptReturn)
+  RAW_METHOD_DUMP(OS, get_hasLongJump)
+  RAW_METHOD_DUMP(OS, get_hasManagedCode)
+  RAW_METHOD_DUMP(OS, get_hasNestedTypes)
+  RAW_METHOD_DUMP(OS, get_noInline)
+  RAW_METHOD_DUMP(OS, get_noReturn)
+  RAW_METHOD_DUMP(OS, get_optimizedCodeDebugInfo)
+  RAW_METHOD_DUMP(OS, get_overloadedOperator)
+  RAW_METHOD_DUMP(OS, get_hasSEH)
+  RAW_METHOD_DUMP(OS, get_hasSecurityChecks)
+  RAW_METHOD_DUMP(OS, get_hasSetJump)
+  RAW_METHOD_DUMP(OS, get_strictGSCheck)
+  RAW_METHOD_DUMP(OS, get_isAcceleratorGroupSharedLocal)
+  RAW_METHOD_DUMP(OS, get_isAcceleratorPointerTagLiveRange)
+  RAW_METHOD_DUMP(OS, get_isAcceleratorStubFunction)
+  RAW_METHOD_DUMP(OS, get_isAggregated)
+  RAW_METHOD_DUMP(OS, get_intro)
+  RAW_METHOD_DUMP(OS, get_isCVTCIL)
+  RAW_METHOD_DUMP(OS, get_isConstructorVirtualBase)
+  RAW_METHOD_DUMP(OS, get_isCxxReturnUdt)
+  RAW_METHOD_DUMP(OS, get_isDataAligned)
+  RAW_METHOD_DUMP(OS, get_isHLSLData)
+  RAW_METHOD_DUMP(OS, get_isHotpatchable)
+  RAW_METHOD_DUMP(OS, get_indirectVirtualBaseClass)
+  RAW_METHOD_DUMP(OS, get_isInterfaceUdt)
+  RAW_METHOD_DUMP(OS, get_intrinsic)
+  RAW_METHOD_DUMP(OS, get_isLTCG)
+  RAW_METHOD_DUMP(OS, get_isLocationControlFlowDependent)
+  RAW_METHOD_DUMP(OS, get_isMSILNetmodule)
+  RAW_METHOD_DUMP(OS, get_isMatrixRowMajor)
+  RAW_METHOD_DUMP(OS, get_managed)
+  RAW_METHOD_DUMP(OS, get_msil)
+  RAW_METHOD_DUMP(OS, get_isMultipleInheritance)
+  RAW_METHOD_DUMP(OS, get_isNaked)
+  RAW_METHOD_DUMP(OS, get_nested)
+  RAW_METHOD_DUMP(OS, get_isOptimizedAway)
+  RAW_METHOD_DUMP(OS, get_packed)
+  RAW_METHOD_DUMP(OS, get_isPointerBasedOnSymbolValue)
+  RAW_METHOD_DUMP(OS, get_isPointerToDataMember)
+  RAW_METHOD_DUMP(OS, get_isPointerToMemberFunction)
+  RAW_METHOD_DUMP(OS, get_pure)
+  RAW_METHOD_DUMP(OS, get_RValueReference)
+  RAW_METHOD_DUMP(OS, get_isRefUdt)
+  RAW_METHOD_DUMP(OS, get_reference)
+  RAW_METHOD_DUMP(OS, get_restrictedType)
+  RAW_METHOD_DUMP(OS, get_isReturnValue)
+  RAW_METHOD_DUMP(OS, get_isSafeBuffers)
+  RAW_METHOD_DUMP(OS, get_scoped)
+  RAW_METHOD_DUMP(OS, get_isSdl)
+  RAW_METHOD_DUMP(OS, get_isSingleInheritance)
+  RAW_METHOD_DUMP(OS, get_isSplitted)
+  RAW_METHOD_DUMP(OS, get_isStatic)
+  RAW_METHOD_DUMP(OS, get_isStripped)
+  RAW_METHOD_DUMP(OS, get_unalignedType)
+  RAW_METHOD_DUMP(OS, get_notReached)
+  RAW_METHOD_DUMP(OS, get_isValueUdt)
+  RAW_METHOD_DUMP(OS, get_virtual)
+  RAW_METHOD_DUMP(OS, get_virtualBaseClass)
+  RAW_METHOD_DUMP(OS, get_isVirtualInheritance)
+  RAW_METHOD_DUMP(OS, get_volatileType)
+}
+
+std::unique_ptr<IPDBEnumSymbols>
+DIARawSymbol::findChildren(PDB_SymType Type) const {
+  enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
+
+  CComPtr<IDiaEnumSymbols> DiaEnumerator;
+  if (S_OK != Symbol->findChildren(EnumVal, nullptr, nsNone, &DiaEnumerator))
+    return nullptr;
+
+  return std::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
+}
 
 std::unique_ptr<IPDBEnumSymbols>
 DIARawSymbol::findChildren(PDB_SymType Type, StringRef Name,
@@ -198,7 +414,7 @@ void DIARawSymbol::getFrontEndVersion(Ve
 }
 
 PDB_Lang DIARawSymbol::getLanguage() const {
-  return PrivateGetDIAValue<DWORD, PDB_Lang>(Symbol, &IDiaSymbol::get_count);
+  return PrivateGetDIAValue<DWORD, PDB_Lang>(Symbol, &IDiaSymbol::get_language);
 }
 
 uint32_t DIARawSymbol::getLexicalParentId() const {
@@ -224,9 +440,9 @@ uint32_t DIARawSymbol::getLiveRangeStart
       Symbol, &IDiaSymbol::get_liveRangeStartRelativeVirtualAddress);
 }
 
-uint32_t DIARawSymbol::getLocalBasePointerRegisterId() const {
-  return PrivateGetDIAValue(Symbol,
-                            &IDiaSymbol::get_localBasePointerRegisterId);
+PDB_RegisterId DIARawSymbol::getLocalBasePointerRegisterId() const {
+  return PrivateGetDIAValue<DWORD, PDB_RegisterId>(
+      Symbol, &IDiaSymbol::get_localBasePointerRegisterId);
 }
 
 uint32_t DIARawSymbol::getLowerBoundId() const {
@@ -286,8 +502,9 @@ uint32_t DIARawSymbol::getRank() const {
   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_rank);
 }
 
-uint32_t DIARawSymbol::getRegisterId() const {
-  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_registerId);
+PDB_RegisterId DIARawSymbol::getRegisterId() const {
+  return PrivateGetDIAValue<DWORD, PDB_RegisterId>(Symbol,
+                                                   &IDiaSymbol::get_registerId);
 }
 
 uint32_t DIARawSymbol::getRegisterType() const {
@@ -486,7 +703,7 @@ bool DIARawSymbol::isFunction() const {
 }
 
 bool DIARawSymbol::getAddressTaken() const {
-  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_stride);
+  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressTaken);
 }
 
 bool DIARawSymbol::getNoStackOrdering() const {
@@ -533,6 +750,10 @@ bool DIARawSymbol::hasInterruptReturn()
   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_interruptReturn);
 }
 
+bool DIARawSymbol::hasFramePointer() const {
+  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_framePointerPresent);
+}
+
 bool DIARawSymbol::hasLongJump() const {
   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasLongJump);
 }

Modified: llvm/trunk/lib/DebugInfo/PDB/DIA/DIASession.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/DIA/DIASession.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/DIA/DIASession.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/DIA/DIASession.cpp Tue Feb 10 16:43:25 2015
@@ -7,11 +7,14 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"
+#include "llvm/DebugInfo/PDB/PDBSymbolExe.h"
+
 #include "llvm/DebugInfo/PDB/DIA/DIAEnumDebugStreams.h"
+#include "llvm/DebugInfo/PDB/DIA/DIAEnumSourceFiles.h"
 #include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h"
 #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
 #include "llvm/DebugInfo/PDB/DIA/DIASourceFile.h"
-#include "llvm/DebugInfo/PDB/PDBSymbolExe.h"
 #include "llvm/Support/ConvertUTF.h"
 
 using namespace llvm;
@@ -75,6 +78,27 @@ std::unique_ptr<PDBSymbol> DIASession::g
   return PDBSymbol::create(*this, std::move(RawSymbol));
 }
 
+std::unique_ptr<IPDBEnumSourceFiles> DIASession::getAllSourceFiles() const {
+  CComPtr<IDiaEnumSourceFiles> Files;
+  if (S_OK != Session->findFile(nullptr, nullptr, nsNone, &Files))
+    return nullptr;
+
+  return std::make_unique<DIAEnumSourceFiles>(*this, Files);
+}
+
+std::unique_ptr<IPDBEnumSourceFiles> DIASession::getSourceFilesForCompiland(
+    const PDBSymbolCompiland &Compiland) const {
+  CComPtr<IDiaEnumSourceFiles> Files;
+
+  const DIARawSymbol &RawSymbol =
+      static_cast<const DIARawSymbol &>(Compiland.getRawSymbol());
+  if (S_OK !=
+      Session->findFile(RawSymbol.getDiaSymbol(), nullptr, nsNone, &Files))
+    return nullptr;
+
+  return std::make_unique<DIAEnumSourceFiles>(*this, Files);
+}
+
 std::unique_ptr<IPDBSourceFile>
 DIASession::getSourceFileById(uint32_t FileId) const {
   CComPtr<IDiaSourceFile> LocatedFile;

Added: llvm/trunk/lib/DebugInfo/PDB/IPDBSourceFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/IPDBSourceFile.cpp?rev=228755&view=auto
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/IPDBSourceFile.cpp (added)
+++ llvm/trunk/lib/DebugInfo/PDB/IPDBSourceFile.cpp Tue Feb 10 16:43:25 2015
@@ -0,0 +1,34 @@
+//===- IPDBSourceFile.cpp - base interface for a PDB source file *- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/DebugInfo/PDB/IPDBSourceFile.h"
+#include "llvm/DebugInfo/PDB/PDBExtras.h"
+#include "llvm/Support/Format.h"
+#include "llvm/Support/raw_ostream.h"
+
+using namespace llvm;
+
+IPDBSourceFile::~IPDBSourceFile() {}
+
+void IPDBSourceFile::dump(raw_ostream &OS, int Indent,
+                          PDB_DumpLevel Level) const {
+  if (Level == PDB_DumpLevel::Compact) {
+    OS.indent(Indent);
+    PDB_Checksum ChecksumType = getChecksumType();
+    OS << "[";
+    if (ChecksumType != PDB_Checksum::None) {
+      OS << ChecksumType << ": ";
+      std::string Checksum = getChecksum();
+      for (uint8_t c : Checksum)
+        OS << format_hex_no_prefix(c, 2, true);
+    } else
+      OS << "No checksum";
+    OS << "] " << getFileName() << "\n";
+  }
+}

Added: llvm/trunk/lib/DebugInfo/PDB/PDBExtras.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBExtras.cpp?rev=228755&view=auto
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBExtras.cpp (added)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBExtras.cpp Tue Feb 10 16:43:25 2015
@@ -0,0 +1,219 @@
+//===- PDBExtras.cpp - helper functions and classes for PDBs -----*- C++-*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/DebugInfo/PDB/PDBExtras.h"
+#include "llvm/ADT/ArrayRef.h"
+
+using namespace llvm;
+
+#define CASE_OUTPUT_ENUM_CLASS_STR(Class, Value, Str, Stream)                  \
+  case Class::Value:                                                           \
+    Stream << Str;                                                             \
+    break;
+
+#define CASE_OUTPUT_ENUM_CLASS_NAME(Class, Value, Stream)                      \
+  CASE_OUTPUT_ENUM_CLASS_STR(Class, Value, #Value, Stream)
+
+raw_ostream &llvm::operator<<(raw_ostream &OS, const stream_indent &Indent) {
+  OS.indent(Indent.Width);
+  return OS;
+}
+
+raw_ostream &llvm::operator<<(raw_ostream &OS, const PDB_RegisterId &Reg) {
+  switch (Reg) {
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, AL, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, CL, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, DL, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, BL, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, AH, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, CH, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, DH, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, BH, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, AX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, CX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, DX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, BX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, SP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, BP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, SI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, DI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, EAX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, ECX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, EDX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, EBX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, ESP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, EBP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, ESI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, EDI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, ES, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, CS, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, SS, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, DS, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, FS, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, GS, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, IP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, RAX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, RBX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, RCX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, RDX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, RSI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, RDI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, RBP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, RSP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, R8, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, R9, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, R10, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, R11, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, R12, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, R13, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, R14, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_RegisterId, R15, OS)
+  default:
+    OS << "Unknown";
+  }
+  return OS;
+}
+
+raw_ostream &llvm::operator<<(raw_ostream &OS, const PDB_LocType &Loc) {
+  switch (Loc) {
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_LocType, Static, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_LocType, TLS, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_LocType, RegRel, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_LocType, ThisRel, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_LocType, Enregistered, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_LocType, BitField, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_LocType, Slot, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_LocType, IlRel, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_LocType, MetaData, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_LocType, Constant, OS)
+  default:
+    OS << "Unknown";
+  }
+  return OS;
+}
+
+raw_ostream &llvm::operator<<(raw_ostream &OS, const PDB_ThunkOrdinal &Thunk) {
+  switch (Thunk) {
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_ThunkOrdinal, BranchIsland, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_ThunkOrdinal, Pcode, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_ThunkOrdinal, Standard, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_ThunkOrdinal, ThisAdjustor, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_ThunkOrdinal, TrampIncremental, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_ThunkOrdinal, UnknownLoad, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_ThunkOrdinal, Vcall, OS)
+  default:
+    OS << "Unknown";
+  }
+  return OS;
+}
+
+raw_ostream &llvm::operator<<(raw_ostream &OS, const PDB_Checksum &Checksum) {
+  switch (Checksum) {
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Checksum, None, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Checksum, MD5, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Checksum, SHA1, OS)
+  default:
+    OS << "Unknown";
+  }
+  return OS;
+}
+
+raw_ostream &llvm::operator<<(raw_ostream &OS, const PDB_Lang &Lang) {
+  switch (Lang) {
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, C, OS)
+    CASE_OUTPUT_ENUM_CLASS_STR(PDB_Lang, Cpp, "C++", OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Fortran, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Masm, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Pascal, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Basic, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Cobol, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Link, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Cvtres, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Cvtpgd, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, CSharp, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, VB, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, ILAsm, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, Java, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, JScript, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, MSIL, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_Lang, HLSL, OS)
+  default:
+    OS << "Unknown";
+  }
+  return OS;
+}
+
+raw_ostream &llvm::operator<<(raw_ostream &OS, const PDB_SymType &Tag) {
+  switch (Tag) {
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Exe, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Compiland, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, CompilandDetails, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, CompilandEnv, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Function, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Block, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Data, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Annotation, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Label, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, PublicSymbol, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, UDT, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Enum, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, FunctionSig, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, PointerType, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, ArrayType, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, BuiltinType, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Typedef, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, BaseClass, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Friend, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, FunctionArg, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, FuncDebugStart, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, FuncDebugEnd, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, UsingNamespace, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, VTableShape, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, VTable, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Custom, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Thunk, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, CustomType, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, ManagedType, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(PDB_SymType, Dimension, OS)
+  default:
+    OS << "Unknown";
+  }
+  return OS;
+}
+
+raw_ostream &llvm::operator<<(raw_ostream &OS, const PDB_UniqueId &Id) {
+  static const char *Lookup = "0123456789ABCDEF";
+
+  static_assert(sizeof(PDB_UniqueId) == 16, "Expected 16-byte GUID");
+  ArrayRef<uint8_t> GuidBytes(reinterpret_cast<const uint8_t*>(&Id), 16);
+  OS << "{";
+  for (int i=0; i < 16;) {
+    uint8_t Byte = GuidBytes[i];
+    uint8_t HighNibble = (Byte >> 4) & 0xF;
+    uint8_t LowNibble = Byte & 0xF;
+    OS << Lookup[HighNibble] << Lookup[LowNibble];
+    ++i;
+    if (i>=4 && i<=10 && i%2==0)
+      OS << "-";
+  }
+  OS << "}";
+  return OS;
+}
+
+raw_ostream &llvm::operator<<(raw_ostream &OS, const VersionInfo &Version) {
+  OS << Version.Major << "." << Version.Minor << "." << Version.Build;
+  return OS;
+}
+
+raw_ostream &llvm::operator<<(raw_ostream &OS, const TagStats &Stats) {
+  for (auto Tag : Stats) {
+    OS << Tag.first << ":" << Tag.second << " ";
+  }
+  return OS;
+}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBInterfaceAnchors.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBInterfaceAnchors.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBInterfaceAnchors.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBInterfaceAnchors.cpp Tue Feb 10 16:43:25 2015
@@ -25,6 +25,4 @@ IPDBDataStream::~IPDBDataStream() {}
 
 IPDBRawSymbol::~IPDBRawSymbol() {}
 
-IPDBSourceFile::~IPDBSourceFile() {}
-
 IPDBLineNumber::~IPDBLineNumber() {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbol.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbol.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbol.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbol.cpp Tue Feb 10 16:43:25 2015
@@ -98,10 +98,17 @@ PDBSymbol::create(const IPDBSession &PDB
   }
 }
 
-void PDBSymbol::dump(llvm::raw_ostream &OS) const { RawSymbol->dump(OS); }
+void PDBSymbol::defaultDump(raw_ostream &OS, int Indent,
+                            PDB_DumpLevel Level) const {
+  RawSymbol->dump(OS, Indent, Level);
+}
 
 PDB_SymType PDBSymbol::getSymTag() const { return RawSymbol->getSymTag(); }
 
+std::unique_ptr<IPDBEnumSymbols> PDBSymbol::findChildren(PDB_SymType Type) const {
+  return RawSymbol->findChildren(Type);
+}
+
 std::unique_ptr<IPDBEnumSymbols>
 PDBSymbol::findChildren(PDB_SymType Type, StringRef Name,
                         PDB_NameSearchFlags Flags) const {
@@ -118,3 +125,14 @@ std::unique_ptr<IPDBEnumSymbols>
 PDBSymbol::findInlineFramesByRVA(uint32_t RVA) const {
   return RawSymbol->findInlineFramesByRVA(RVA);
 }
+
+std::unique_ptr<IPDBEnumSymbols>
+PDBSymbol::getChildStats(TagStats &Stats) const {
+  std::unique_ptr<IPDBEnumSymbols> Result(findChildren(PDB_SymType::None));
+  Stats.clear();
+  while (auto Child = Result->getNext()) {
+    ++Stats[Child->getSymTag()];
+  }
+  Result->reset();
+  return Result;
+}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolAnnotation.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolAnnotation.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolAnnotation.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolAnnotation.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolAnnotation::PDBSymbolAnnotation
                                          std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolAnnotation::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolAnnotation::dump(raw_ostream &OS, int Indent,
+                               PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolBlock.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolBlock.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolBlock.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolBlock.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolBlock::PDBSymbolBlock(const IPD
                                std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolBlock::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolBlock::dump(raw_ostream &OS, int Indent,
+                          PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompiland.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompiland.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompiland.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompiland.cpp Tue Feb 10 16:43:25 2015
@@ -8,11 +8,16 @@
 //===----------------------------------------------------------------------===//
 
 #include <utility>
+#include <vector>
 
 #include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
+#include "llvm/DebugInfo/PDB/IPDBSession.h"
+#include "llvm/DebugInfo/PDB/IPDBSourceFile.h"
+#include "llvm/DebugInfo/PDB/PDBExtras.h"
 #include "llvm/DebugInfo/PDB/PDBSymbol.h"
 #include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"
 #include "llvm/DebugInfo/PDB/PDBSymbolCompilandDetails.h"
+#include "llvm/DebugInfo/PDB/PDBSymbolCompilandEnv.h"
 #include "llvm/Support/raw_ostream.h"
 
 using namespace llvm;
@@ -21,5 +26,73 @@ PDBSymbolCompiland::PDBSymbolCompiland(c
                                        std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolCompiland::dump(llvm::raw_ostream &OS) const {
+void PDBSymbolCompiland::dump(raw_ostream &OS, int Indent,
+                              PDB_DumpLevel Level) const {
+  std::string Name = getName();
+  OS << "---- [IDX: " << getSymIndexId() << "] Compiland: " << Name
+     << " ----\n";
+
+  std::string Source = getSourceFileName();
+  std::string Library = getLibraryName();
+  if (!Source.empty())
+    OS << stream_indent(Indent + 2) << "Source: " << this->getSourceFileName()
+       << "\n";
+  if (!Library.empty())
+    OS << stream_indent(Indent + 2) << "Library: " << this->getLibraryName()
+       << "\n";
+
+  TagStats Stats;
+  auto ChildrenEnum = getChildStats(Stats);
+  OS << stream_indent(Indent + 2) << "Children: " << Stats << "\n";
+  if (Level >= PDB_DumpLevel::Normal) {
+    while (auto Child = ChildrenEnum->getNext()) {
+      if (llvm::isa<PDBSymbolCompilandDetails>(*Child))
+        continue;
+      if (llvm::isa<PDBSymbolCompilandEnv>(*Child))
+        continue;
+      Child->dump(OS, Indent + 4, PDB_DumpLevel::Compact);
+    }
+  }
+
+  std::unique_ptr<IPDBEnumSymbols> DetailsEnum(
+      findChildren(PDB_SymType::CompilandDetails));
+  if (auto DetailsPtr = DetailsEnum->getNext()) {
+    const auto *CD = dyn_cast<PDBSymbolCompilandDetails>(DetailsPtr.get());
+    assert(CD && "We only asked for compilands, but got something else!");
+    VersionInfo FE;
+    VersionInfo BE;
+    CD->getFrontEndVersion(FE);
+    CD->getBackEndVersion(BE);
+    OS << stream_indent(Indent + 2) << "Compiler: " << CD->getCompilerName()
+       << "\n";
+    OS << stream_indent(Indent + 2) << "Version: " << FE << ", " << BE << "\n";
+
+    OS << stream_indent(Indent + 2) << "Lang: " << CD->getLanguage() << "\n";
+    OS << stream_indent(Indent + 2) << "Attributes: ";
+    if (CD->hasDebugInfo())
+      OS << "DebugInfo ";
+    if (CD->isDataAligned())
+      OS << "DataAligned ";
+    if (CD->isLTCG())
+      OS << "LTCG ";
+    if (CD->hasSecurityChecks())
+      OS << "SecurityChecks ";
+    if (CD->isHotpatchable())
+      OS << "HotPatchable";
+
+    OS << "\n";
+    auto Files(Session.getSourceFilesForCompiland(*this));
+    if (Level >= PDB_DumpLevel::Detailed) {
+      OS << stream_indent(Indent + 2) << Files->getChildCount()
+         << " source files:\n";
+      while (auto File = Files->getNext())
+        File->dump(OS, Indent + 4, PDB_DumpLevel::Compact);
+    } else {
+      OS << stream_indent(Indent + 2) << Files->getChildCount()
+         << " source files\n";
+    }
+  }
+  uint32_t Count = DetailsEnum->getChildCount();
+  if (Count > 1)
+    OS << stream_indent(Indent + 2) << "(" << Count - 1 << " more omitted)\n";
 }

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandDetails.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandDetails.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandDetails.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandDetails.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolCompilandDetails::PDBSymbolComp
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolCompilandDetails::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolCompilandDetails::dump(raw_ostream &OS, int Indent,
+                                     PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandEnv.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandEnv.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandEnv.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCompilandEnv.cpp Tue Feb 10 16:43:25 2015
@@ -24,4 +24,5 @@ std::string PDBSymbolCompilandEnv::getVa
   return std::string();
 }
 
-void PDBSymbolCompilandEnv::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolCompilandEnv::dump(raw_ostream &OS, int Indent,
+                                 PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCustom.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCustom.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCustom.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolCustom.cpp Tue Feb 10 16:43:25 2015
@@ -23,4 +23,5 @@ void PDBSymbolCustom::getDataBytes(llvm:
   RawSymbol->getDataBytes(bytes);
 }
 
-void PDBSymbolCustom::dump(llvm::raw_ostream &OS) const {}
\ No newline at end of file
+void PDBSymbolCustom::dump(raw_ostream &OS, int Indent,
+                           PDB_DumpLevel Level) const {}
\ No newline at end of file

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolData.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolData.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolData.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolData.cpp Tue Feb 10 16:43:25 2015
@@ -8,12 +8,59 @@
 //===----------------------------------------------------------------------===//
 
 #include <utility>
+#include "llvm/DebugInfo/PDB/PDBExtras.h"
 #include "llvm/DebugInfo/PDB/PDBSymbolData.h"
 
+#include "llvm/Support/Format.h"
+
 using namespace llvm;
 
 PDBSymbolData::PDBSymbolData(const IPDBSession &PDBSession,
                              std::unique_ptr<IPDBRawSymbol> DataSymbol)
     : PDBSymbol(PDBSession, std::move(DataSymbol)) {}
 
-void PDBSymbolData::dump(llvm::raw_ostream &OS) const {}
\ No newline at end of file
+void PDBSymbolData::dump(raw_ostream &OS, int Indent,
+                         PDB_DumpLevel Level) const {
+  OS.indent(Indent);
+  if (Level == PDB_DumpLevel::Compact) {
+    PDB_LocType Loc = getLocationType();
+    OS << Loc << " data [";
+    switch (Loc) {
+    case PDB_LocType::Static:
+      OS << format_hex(getRelativeVirtualAddress(), 10);
+      break;
+    case PDB_LocType::TLS:
+      OS << getAddressSection() << ":" << format_hex(getAddressOffset(), 10);
+      break;
+    case PDB_LocType::RegRel:
+      OS << getRegisterId() << " + " << getOffset() << "]";
+      break;
+    case PDB_LocType::ThisRel:
+      OS << "this + " << getOffset() << "]";
+      break;
+    case PDB_LocType::Enregistered:
+      OS << getRegisterId() << "]";
+      break;
+    case PDB_LocType::BitField: {
+      uint32_t Offset = getOffset();
+      uint32_t BitPos = getBitPosition();
+      uint32_t Length = getLength();
+      uint32_t StartBits = 8 - BitPos;
+      uint32_t MiddleBytes = (Length - StartBits) / 8;
+      uint32_t EndBits = Length - StartBits - MiddleBytes * 8;
+      OS << format_hex(Offset, 10) << ":" << BitPos;
+      OS << " - " << format_hex(Offset + MiddleBytes, 10) << ":" << EndBits;
+      break;
+    }
+    case PDB_LocType::Slot:
+      OS << getSlot();
+    case PDB_LocType::IlRel:
+    case PDB_LocType::MetaData:
+    case PDB_LocType::Constant:
+    default:
+      OS << "???";
+    }
+    OS << "] ";
+  }
+  OS << getName() << "\n";
+}
\ No newline at end of file

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolExe.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolExe.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolExe.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolExe.cpp Tue Feb 10 16:43:25 2015
@@ -9,6 +9,8 @@
 
 #include <utility>
 
+#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
+#include "llvm/DebugInfo/PDB/PDBExtras.h"
 #include "llvm/DebugInfo/PDB/PDBSymbol.h"
 #include "llvm/DebugInfo/PDB/PDBSymbolExe.h"
 #include "llvm/Support/ConvertUTF.h"
@@ -21,5 +23,28 @@ PDBSymbolExe::PDBSymbolExe(const IPDBSes
                            std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolExe::dump(llvm::raw_ostream &OS) const {
+void PDBSymbolExe::dump(raw_ostream &OS, int Indent,
+                        PDB_DumpLevel Level) const {
+  std::string FileName(getSymbolsFileName());
+
+  OS << "Summary for " << FileName << "\n";
+
+  TagStats Stats;
+  auto ChildrenEnum = getChildStats(Stats);
+  OS << stream_indent(Indent + 2) << "Children: " << Stats << "\n";
+
+  uint64_t FileSize = 0;
+  if (!llvm::sys::fs::file_size(FileName, FileSize))
+    OS << "  Size: " << FileSize << " bytes\n";
+  else
+    OS << "  Size: (Unable to obtain file size)\n";
+  PDB_UniqueId Guid = getGuid();
+  OS << "  Guid: " << Guid << "\n";
+  OS << "  Age: " << getAge() << "\n";
+  OS << "  Attributes: ";
+  if (hasCTypes())
+    OS << "HasCTypes ";
+  if (hasPrivateSymbols())
+    OS << "HasPrivateSymbols ";
+  OS << "\n";
 }

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFunc.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFunc.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFunc.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFunc.cpp Tue Feb 10 16:43:25 2015
@@ -9,13 +9,55 @@
 
 #include <utility>
 
+#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
 #include "llvm/DebugInfo/PDB/PDBSymbol.h"
 #include "llvm/DebugInfo/PDB/PDBSymbolFunc.h"
+#include "llvm/DebugInfo/PDB/PDBSymbolFuncDebugEnd.h"
+#include "llvm/DebugInfo/PDB/PDBSymbolFuncDebugStart.h"
 
-using namespace llvm;
+#include "llvm/Support/Format.h"
 
+using namespace llvm;
 PDBSymbolFunc::PDBSymbolFunc(const IPDBSession &PDBSession,
                              std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolFunc::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolFunc::dump(raw_ostream &OS, int Indent,
+                         PDB_DumpLevel Level) const {
+  bool doFullDump = false;
+  if (Level == PDB_DumpLevel::Compact) {
+    uint32_t FuncStart = getRelativeVirtualAddress();
+    uint32_t FuncEnd = FuncStart + getLength();
+    auto DebugEndSymbol = findChildren(PDB_SymType::FuncDebugEnd);
+    OS << stream_indent(Indent);
+    OS << "[" << format_hex(FuncStart, 8);
+    if (auto DebugStartEnum = findChildren(PDB_SymType::FuncDebugStart)) {
+      if (auto StartSym = DebugStartEnum->getNext()) {
+        auto DebugStart = dyn_cast<PDBSymbolFuncDebugStart>(StartSym.get());
+        OS << "+" << DebugStart->getRelativeVirtualAddress() - FuncStart;
+      }
+    }
+    OS << " - " << format_hex(FuncEnd, 8);
+    if (auto DebugEndEnum = findChildren(PDB_SymType::FuncDebugEnd)) {
+      if (auto DebugEndSym = DebugEndEnum->getNext()) {
+        auto DebugEnd = dyn_cast<PDBSymbolFuncDebugEnd>(DebugEndSym.get());
+        OS << "-" << FuncEnd - DebugEnd->getRelativeVirtualAddress();
+      }
+    }
+    OS << "] ";
+    PDB_RegisterId Reg = getLocalBasePointerRegisterId();
+    if (Reg == PDB_RegisterId::VFrame)
+      OS << "(VFrame)";
+    else if (hasFramePointer()) {
+      if (Reg == PDB_RegisterId::EBP)
+        OS << "(EBP)";
+      else
+        OS << "(" << (int)Reg << ")";
+    } else {
+      OS << "(FPO)";
+      doFullDump = true;
+    }
+    OS << " " << getName() << "\n";
+  }
+  OS.flush();
+}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFuncDebugEnd.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFuncDebugEnd.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFuncDebugEnd.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFuncDebugEnd.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolFuncDebugEnd::PDBSymbolFuncDebu
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolFuncDebugEnd::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolFuncDebugEnd::dump(raw_ostream &OS, int Indent,
+                                 PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFuncDebugStart.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFuncDebugStart.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFuncDebugStart.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolFuncDebugStart.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolFuncDebugStart::PDBSymbolFuncDe
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolFuncDebugStart::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolFuncDebugStart::dump(raw_ostream &OS, int Indent,
+                                   PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolLabel.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolLabel.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolLabel.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolLabel.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolLabel::PDBSymbolLabel(const IPD
                                std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolLabel::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolLabel::dump(raw_ostream &OS, int Indent,
+                          PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolPublicSymbol.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolPublicSymbol.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolPublicSymbol.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolPublicSymbol.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolPublicSymbol::PDBSymbolPublicSy
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolPublicSymbol::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolPublicSymbol::dump(raw_ostream &OS, int Indent,
+                                 PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolThunk.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolThunk.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolThunk.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolThunk.cpp Tue Feb 10 16:43:25 2015
@@ -12,10 +12,27 @@
 #include "llvm/DebugInfo/PDB/PDBSymbol.h"
 #include "llvm/DebugInfo/PDB/PDBSymbolThunk.h"
 
+#include "llvm/Support/Format.h"
+
 using namespace llvm;
 
 PDBSymbolThunk::PDBSymbolThunk(const IPDBSession &PDBSession,
                                std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolThunk::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolThunk::dump(raw_ostream &OS, int Indent,
+                          PDB_DumpLevel Level) const {
+  if (Level == PDB_DumpLevel::Compact) {
+    OS.indent(Indent);
+    PDB_ThunkOrdinal Ordinal = getThunkOrdinal();
+    OS << "THUNK[" << Ordinal << "] ";
+    OS << "[" << format_hex(getRelativeVirtualAddress(), 10);
+    if (Ordinal == PDB_ThunkOrdinal::TrampIncremental)
+      OS << " -> " << format_hex(getTargetRelativeVirtualAddress(), 10);
+    OS << "] ";
+    std::string Name = getName();
+    if (!Name.empty())
+      OS << Name;
+    OS << "\n";
+  }
+}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeArray.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeArray.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeArray.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeArray.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeArray::PDBSymbolTypeArray(c
                                        std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeArray::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeArray::dump(raw_ostream &OS, int Indent,
+                              PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeBaseClass.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeBaseClass.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeBaseClass.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeBaseClass.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeBaseClass::PDBSymbolTypeBas
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeBaseClass::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeBaseClass::dump(raw_ostream &OS, int Indent,
+                                  PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeBuiltin.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeBuiltin.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeBuiltin.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeBuiltin.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeBuiltin::PDBSymbolTypeBuilt
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeBuiltin::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeBuiltin::dump(raw_ostream &OS, int Indent,
+                                PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeCustom.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeCustom.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeCustom.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeCustom.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeCustom::PDBSymbolTypeCustom
                                          std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeCustom::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeCustom::dump(raw_ostream &OS, int Indent,
+                               PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeDimension.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeDimension.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeDimension.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeDimension.cpp Tue Feb 10 16:43:25 2015
@@ -19,4 +19,5 @@ PDBSymbolTypeDimension::PDBSymbolTypeDim
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeDimension::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeDimension::dump(raw_ostream &OS, int Indent,
+                                  PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeEnum.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeEnum.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeEnum.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeEnum.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeEnum::PDBSymbolTypeEnum(con
                                      std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeEnum::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeEnum::dump(raw_ostream &OS, int Indent,
+                             PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFriend.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFriend.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFriend.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFriend.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeFriend::PDBSymbolTypeFriend
                                          std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeFriend::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeFriend::dump(raw_ostream &OS, int Indent,
+                               PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFunctionArg.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFunctionArg.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFunctionArg.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFunctionArg.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeFunctionArg::PDBSymbolTypeF
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeFunctionArg::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeFunctionArg::dump(raw_ostream &OS, int Indent,
+                                    PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFunctionSig.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFunctionSig.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFunctionSig.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeFunctionSig.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeFunctionSig::PDBSymbolTypeF
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeFunctionSig::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeFunctionSig::dump(raw_ostream &OS, int Indent,
+                                    PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeManaged.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeManaged.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeManaged.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeManaged.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeManaged::PDBSymbolTypeManag
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeManaged::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeManaged::dump(raw_ostream &OS, int Indent,
+                                PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypePointer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypePointer.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypePointer.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypePointer.cpp Tue Feb 10 16:43:25 2015
@@ -19,4 +19,5 @@ PDBSymbolTypePointer::PDBSymbolTypePoint
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypePointer::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypePointer::dump(raw_ostream &OS, int Indent,
+                                PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeTypedef.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeTypedef.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeTypedef.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeTypedef.cpp Tue Feb 10 16:43:25 2015
@@ -10,13 +10,24 @@
 
 #include <utility>
 
+#include "llvm/DebugInfo/PDB/IPDBSession.h"
 #include "llvm/DebugInfo/PDB/PDBSymbol.h"
 #include "llvm/DebugInfo/PDB/PDBSymbolTypeTypedef.h"
-
+#include "llvm/DebugInfo/PDB/PDBSymbolTypeUDT.h"
 using namespace llvm;
 
 PDBSymbolTypeTypedef::PDBSymbolTypeTypedef(
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeTypedef::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeTypedef::dump(raw_ostream &OS, int Indent,
+                                PDB_DumpLevel Level) const {
+  OS.indent(Indent);
+  OS << "typedef:" << getName() << " -> ";
+  std::string TargetTypeName;
+  auto TypeSymbol = Session.getSymbolById(getTypeId());
+  if (PDBSymbolTypeUDT *UDT = dyn_cast<PDBSymbolTypeUDT>(TypeSymbol.get())) {
+    TargetTypeName = UDT->getName();
+  }
+  OS << TargetTypeName << "\n";
+}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeUDT.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeUDT.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeUDT.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeUDT.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeUDT::PDBSymbolTypeUDT(const
                                    std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeUDT::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeUDT::dump(raw_ostream &OS, int Indent,
+                            PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeVTable.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeVTable.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeVTable.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeVTable.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeVTable::PDBSymbolTypeVTable
                                          std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeVTable::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeVTable::dump(raw_ostream &OS, int Indent,
+                               PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeVTableShape.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeVTableShape.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeVTableShape.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolTypeVTableShape.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolTypeVTableShape::PDBSymbolTypeV
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolTypeVTableShape::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolTypeVTableShape::dump(raw_ostream &OS, int Indent,
+                                    PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolUnknown.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolUnknown.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolUnknown.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolUnknown.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolUnknown::PDBSymbolUnknown(const
                                    std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolUnknown::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolUnknown::dump(raw_ostream &OS, int Indent,
+                            PDB_DumpLevel Level) const {}

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBSymbolUsingNamespace.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBSymbolUsingNamespace.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBSymbolUsingNamespace.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBSymbolUsingNamespace.cpp Tue Feb 10 16:43:25 2015
@@ -18,4 +18,5 @@ PDBSymbolUsingNamespace::PDBSymbolUsingN
     const IPDBSession &PDBSession, std::unique_ptr<IPDBRawSymbol> Symbol)
     : PDBSymbol(PDBSession, std::move(Symbol)) {}
 
-void PDBSymbolUsingNamespace::dump(llvm::raw_ostream &OS) const {}
+void PDBSymbolUsingNamespace::dump(raw_ostream &OS, int Indent,
+                                   PDB_DumpLevel Level) const {}

Modified: llvm/trunk/tools/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/CMakeLists.txt?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/tools/CMakeLists.txt (original)
+++ llvm/trunk/tools/CMakeLists.txt Tue Feb 10 16:43:25 2015
@@ -61,14 +61,7 @@ add_llvm_tool_subdirectory(yaml2obj)
 
 add_llvm_tool_subdirectory(llvm-go)
 
-if(MSVC AND NOT(MSVC_VERSION LESS 1800))
-  # Certain aspects of llvm-pdbdump require language support only present in
-  # MSVC 2013 and higher.  Since this is strictly a utility, and since we hope
-  # to drop support for MSVC 2012 soon, don't build this for MSVC < 2013.
-  add_llvm_tool_subdirectory(llvm-pdbdump)
-else()
-  ignore_llvm_tool_subdirectory(llvm-pdbdump)
-endif()
+add_llvm_tool_subdirectory(llvm-pdbdump)
 
 if(NOT CYGWIN AND LLVM_ENABLE_PIC)
   add_llvm_tool_subdirectory(lto)

Modified: llvm/trunk/tools/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/Makefile?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/tools/Makefile (original)
+++ llvm/trunk/tools/Makefile Tue Feb 10 16:43:25 2015
@@ -33,7 +33,7 @@ PARALLEL_DIRS := opt llvm-as llvm-dis ll
                  macho-dump llvm-objdump llvm-readobj llvm-rtdyld \
                  llvm-dwarfdump llvm-cov llvm-size llvm-stress llvm-mcmarkup \
                  llvm-profdata llvm-symbolizer obj2yaml yaml2obj llvm-c-test \
-                 llvm-vtabledump verify-uselistorder dsymutil
+                 llvm-vtabledump verify-uselistorder dsymutil llvm-pdbdump
 
 # If Intel JIT Events support is configured, build an extra tool to test it.
 ifeq ($(USE_INTEL_JITEVENTS), 1)

Modified: llvm/trunk/tools/llvm-pdbdump/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/CMakeLists.txt?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/CMakeLists.txt (original)
+++ llvm/trunk/tools/llvm-pdbdump/CMakeLists.txt Tue Feb 10 16:43:25 2015
@@ -1,28 +1,8 @@
-set(MSVC_DIA_SDK_DIR "$ENV{VSINSTALLDIR}DIA SDK")
+set(LLVM_LINK_COMPONENTS
+  Support
+  DebugInfoPDB
+  )
 
-# Due to a bug in MSVC 2013's installation software, it is possible
-# for MSVC 2013 to write the DIA SDK into the Visual Studio 2012
-# install directory.  If this happens, the installation is corrupt
-# and there's nothing we can do.  It happens with enough frequency
-# though that we should handle it.  We do so by simply checking that
-# the DIA SDK folder exists.  Should this happen you will need to
-# uninstall VS 2012 and then re-install VS 2013.
-if (IS_DIRECTORY ${MSVC_DIA_SDK_DIR})
-  set(LLVM_LINK_COMPONENTS
-    Support
-    )
-
-  include_directories(${MSVC_DIA_SDK_DIR}/include)
-  if (CMAKE_SIZEOF_VOID_P EQUAL 8)
-    link_directories(${MSVC_DIA_SDK_DIR}/lib/amd64)
-  else()
-    link_directories(${MSVC_DIA_SDK_DIR}/lib)
-  endif()
-
-  add_llvm_tool(llvm-pdbdump
-    llvm-pdbdump.cpp
-    DIAExtras.cpp
-    DIASymbol.cpp
-    )
-  target_link_libraries(llvm-pdbdump diaguids)
-endif()
+add_llvm_tool(llvm-pdbdump
+  llvm-pdbdump.cpp
+  )

Removed: llvm/trunk/tools/llvm-pdbdump/COMExtras.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/COMExtras.h?rev=228754&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/COMExtras.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/COMExtras.h (removed)
@@ -1,295 +0,0 @@
-//===- COMExtras.h - Helper files for COM operations -------------*- 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_LLVM_PDBDUMP_COMEXTRAS_H
-#define LLVM_TOOLS_LLVM_PDBDUMP_COMEXTRAS_H
-
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/Support/ConvertUTF.h"
-
-#include <tuple>
-
-namespace llvm {
-
-template <typename F> struct function_traits;
-
-#if LLVM_HAS_VARIADIC_TEMPLATES
-template <typename R, typename... Args>
-struct function_traits<R (*)(Args...)> : public function_traits<R(Args...)> {};
-
-template <typename C, typename R, typename... Args>
-struct function_traits<R (__stdcall C::*)(Args...)> {
-  using args_tuple = std::tuple<Args...>;
-};
-#else
-
-// For the sake of COM, we only need a 3 argument version and a 5 argument
-// version. We could provide 1, 2, 4, and other length of argument lists if
-// this were intended to be more generic.  Alternatively, this will "just work"
-// if VS2012 support is dropped and we can use the variadic template case
-// exclusively.
-template <typename C, typename R, typename A1, typename A2, typename A3>
-struct function_traits<R (__stdcall C::*)(A1, A2, A3)> {
-  typedef std::tuple<A1, A2, A3> args_tuple;
-};
-
-template <typename C, typename R, typename A1, typename A2, typename A3,
-          typename A4, typename A5>
-struct function_traits<R (__stdcall C::*)(A1, A2, A3, A4, A5)> {
-  typedef std::tuple<A1, A2, A3, A4, A5> args_tuple;
-};
-#endif
-
-template <class FuncTraits, std::size_t arg> struct function_arg {
-  // Writing function_arg as a separate class that accesses the tuple from
-  // function_traits is necessary due to what appears to be a bug in MSVC.
-  // If you write a nested class inside function_traits like this:
-  // template<std::size_t ArgIndex>
-  // struct Argument
-  // {
-  //   typedef typename
-  //     std::tuple_element<ArgIndex, std::tuple<Args...>>::type type;
-  // };
-  // MSVC encounters a parsing error.
-  typedef
-      typename std::tuple_element<arg, typename FuncTraits::args_tuple>::type
-          type;
-};
-
-template <class T> struct remove_double_pointer {};
-template <class T> struct remove_double_pointer<T **> { typedef T type; };
-
-namespace sys {
-namespace windows {
-
-/// A helper class for allowing the use of COM enumerators in range-based
-/// for loops.
-///
-/// A common idiom in the COM world is to have an enumerator interface, say
-/// IMyEnumerator.  It's responsible for enumerating over some child data type,
-/// say IChildType.  You do the enumeration by calling IMyEnumerator::Next()
-/// one of whose arguments will be an IChildType**.  Eventually Next() fails,
-/// indicating that there are no more items.
-///
-/// com_iterator represents a single point-in-time of this iteration.  It is
-/// used by ComEnumerator to support iterating in this fashion via range-based
-/// for loops and other common C++ paradigms.
-template <class EnumeratorType, std::size_t ArgIndex> class com_iterator {
-  using FunctionTraits = function_traits<decltype(&EnumeratorType::Next)>;
-  typedef typename function_arg<FunctionTraits, ArgIndex>::type FuncArgType;
-  // FuncArgType is now something like ISomeCOMInterface **.  Remove both
-  // pointers, so we can make a CComPtr<T> out of it.
-  typedef typename remove_double_pointer<FuncArgType>::type EnumDataType;
-
-  CComPtr<EnumeratorType> EnumeratorObject;
-  CComPtr<EnumDataType> CurrentItem;
-
-public:
-  typedef CComPtr<EnumDataType> value_type;
-  typedef std::ptrdiff_t difference_type;
-  typedef value_type *pointer_type;
-  typedef value_type &reference_type;
-  typedef std::forward_iterator_tag iterator_category;
-
-  explicit com_iterator(CComPtr<EnumeratorType> Enumerator,
-                        CComPtr<EnumDataType> Current)
-      : EnumeratorObject(Enumerator), CurrentItem(Current) {}
-  com_iterator() {}
-
-  com_iterator &operator++() {
-    // EnumeratorObject->Next() expects CurrentItem to be NULL.
-    CurrentItem.Release();
-    ULONG Count = 0;
-    HRESULT hr = EnumeratorObject->Next(1, &CurrentItem, &Count);
-    if (FAILED(hr) || Count == 0)
-      *this = com_iterator();
-
-    return *this;
-  }
-
-  value_type operator*() { return CurrentItem; }
-
-  bool operator==(const com_iterator &other) const {
-    return (EnumeratorObject == other.EnumeratorObject) &&
-           (CurrentItem == other.CurrentItem);
-  }
-
-  bool operator!=(const com_iterator &other) const { return !(*this == other); }
-
-  com_iterator &operator=(const com_iterator &other) {
-    EnumeratorObject = other.EnumeratorObject;
-    CurrentItem = other.CurrentItem;
-    return *this;
-  }
-};
-
-/// ComEnumerator implements the interfaced required for C++ to allow its use
-/// in range-based for loops.  In particular, a begin() and end() method.
-/// These methods simply construct and return an appropriate ComIterator
-/// instance.
-template <class EnumeratorType, std::size_t ArgIndex> class com_enumerator {
-  typedef function_traits<decltype(&EnumeratorType::Next)> FunctionTraits;
-  typedef typename function_arg<FunctionTraits, ArgIndex>::type FuncArgType;
-  typedef typename remove_double_pointer<FuncArgType>::type EnumDataType;
-
-  CComPtr<EnumeratorType> EnumeratorObject;
-
-public:
-  com_enumerator(CComPtr<EnumeratorType> Enumerator)
-      : EnumeratorObject(Enumerator) {}
-
-  com_iterator<EnumeratorType, ArgIndex> begin() {
-    if (!EnumeratorObject)
-      return end();
-
-    EnumeratorObject->Reset();
-    ULONG Count = 0;
-    CComPtr<EnumDataType> FirstItem;
-    HRESULT hr = EnumeratorObject->Next(1, &FirstItem, &Count);
-    return (FAILED(hr) || Count == 0) ? end()
-                                      : com_iterator<EnumeratorType, ArgIndex>(
-                                            EnumeratorObject, FirstItem);
-  }
-
-  com_iterator<EnumeratorType, ArgIndex> end() {
-    return com_iterator<EnumeratorType, ArgIndex>();
-  }
-};
-
-/// A helper class for allowing the use of COM record enumerators in range-
-/// based for loops.
-///
-/// A record enumerator is almost the same as a regular enumerator, except
-/// that it returns raw byte-data instead of interfaces to other COM objects.
-/// As a result, the enumerator's Next() method has a slightly different
-/// signature, and an iterator dereferences to an ArrayRef instead of a
-/// CComPtr.
-template <class EnumeratorType> class com_data_record_iterator {
-public:
-  typedef llvm::ArrayRef<uint8_t> value_type;
-  typedef std::ptrdiff_t difference_type;
-  typedef value_type *pointer_type;
-  typedef value_type &reference_type;
-  typedef std::forward_iterator_tag iterator_category;
-
-  explicit com_data_record_iterator(CComPtr<EnumeratorType> enumerator)
-      : Enumerator(enumerator), CurrentRecord(0) {
-    // Make sure we start at the beginning.  If there are no records,
-    // immediately set ourselves equal to end().
-    if (enumerator)
-      enumerator->Reset();
-
-    if (!ReadNextRecord())
-      *this = com_data_record_iterator();
-  }
-  com_data_record_iterator() {}
-
-  com_data_record_iterator &operator++() {
-    ++CurrentRecord;
-    // If we can't read any more records, either because there are no more
-    // or because we encountered an error, we should compare equal to end.
-    if (!ReadNextRecord())
-      *this = com_data_record_iterator();
-    return *this;
-  }
-
-  value_type operator*() {
-    return llvm::ArrayRef<uint8_t>(RecordData.begin(), RecordData.end());
-  }
-
-  bool operator==(const com_data_record_iterator &other) const {
-    return (Enumerator == other.Enumerator) &&
-           (CurrentRecord == other.CurrentRecord);
-  }
-
-  bool operator!=(const com_data_record_iterator &other) const {
-    return !(*this == other);
-  }
-
-private:
-  bool ReadNextRecord() {
-    RecordData.clear();
-    ULONG Count = 0;
-    DWORD RequiredBufferSize;
-    HRESULT hr = Enumerator->Next(1, 0, &RequiredBufferSize, nullptr, &Count);
-    if (hr == S_OK) {
-      RecordData.resize(RequiredBufferSize);
-      DWORD BytesRead = 0;
-      hr = Enumerator->Next(1, RequiredBufferSize, &BytesRead,
-                            RecordData.data(), &Count);
-    }
-    if (hr != S_OK)
-      RecordData.clear();
-    return (hr == S_OK);
-  }
-
-  CComPtr<EnumeratorType> Enumerator;
-  uint32_t CurrentRecord;
-  llvm::SmallVector<uint8_t, 32> RecordData;
-};
-
-/// Similar to ComEnumerator, com_data_record_enumerator implements the range
-/// interface for ComDataRecordIterators.
-template <class EnumeratorType> class com_data_record_enumerator {
-public:
-  com_data_record_enumerator(CComPtr<EnumeratorType> enumerator)
-      : Enumerator(enumerator) {}
-
-  com_data_record_iterator<EnumeratorType> begin() {
-    return com_data_record_iterator<EnumeratorType>(Enumerator);
-  }
-
-  com_data_record_iterator<EnumeratorType> end() {
-    LONG NumElts = 0;
-    HRESULT hr = Enumerator->get_Count(&NumElts);
-    return (FAILED(hr)) ? com_data_record_iterator<EnumeratorType>(Enumerator)
-                        : com_data_record_iterator<EnumeratorType>();
-  }
-
-private:
-  CComPtr<EnumeratorType> Enumerator;
-};
-
-/// com_enumerator is a simple helper function to allow the enumerator
-/// class's type to be inferred automatically.
-/// This allows you to write simply:
-///   for (auto item : com_enumerator(MyEnumerator)) {
-///   }
-template <class EnumeratorType>
-com_enumerator<EnumeratorType, 1>
-make_com_enumerator(CComPtr<EnumeratorType> Enumerator) {
-  return com_enumerator<EnumeratorType, 1>(Enumerator);
-}
-
-/// com_data_record_enumerator is a simple helper function to allow the
-/// enumerator class's type to be inferred automatically.
-/// This allows you to write simply:
-///   for (auto item : com_data_record_enumerator(MyEnumerator)) {
-///   }
-//=============================================================================
-template <class EnumeratorType>
-com_data_record_enumerator<EnumeratorType>
-make_com_data_record_enumerator(CComPtr<EnumeratorType> Enumerator) {
-  return com_data_record_enumerator<EnumeratorType>(Enumerator);
-}
-
-inline bool BSTRToUTF8(BSTR String16, std::string &String8) {
-  UINT ByteLength = ::SysStringByteLen(String16);
-  char *Bytes = reinterpret_cast<char *>(String16);
-  String8.clear();
-  return llvm::convertUTF16ToUTF8String(ArrayRef<char>(Bytes, ByteLength),
-                                        String8);
-}
-
-} // namespace windows
-} // namespace sys
-} // namespace llvm
-
-#endif

Removed: llvm/trunk/tools/llvm-pdbdump/DIAExtras.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/DIAExtras.cpp?rev=228754&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/DIAExtras.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/DIAExtras.cpp (removed)
@@ -1,189 +0,0 @@
-//===- DIAExtras.cpp - Helper classes and functions for DIA C++ ---------*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-#include "llvm/Support/Format.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include "llvm-pdbdump.h"
-#include "DIAExtras.h"
-
-using namespace llvm;
-using namespace llvm::sys::windows;
-
-#define PRINT_ENUM_VALUE_CASE(Value, Name)                                     \
-  case Value:                                                                  \
-    outs() << Name;                                                            \
-    break;
-
-raw_ostream &llvm::operator<<(raw_ostream &Stream, DiaSymTagEnum SymTag) {
-  switch (SymTag) {
-    PRINT_ENUM_VALUE_CASE(SymTagNull, "Null")
-    PRINT_ENUM_VALUE_CASE(SymTagExe, "Exe")
-    PRINT_ENUM_VALUE_CASE(SymTagCompiland, "Compiland")
-    PRINT_ENUM_VALUE_CASE(SymTagCompilandDetails, "CompilandDetails")
-    PRINT_ENUM_VALUE_CASE(SymTagCompilandEnv, "CompilandEnv")
-    PRINT_ENUM_VALUE_CASE(SymTagFunction, "Function")
-    PRINT_ENUM_VALUE_CASE(SymTagBlock, "Block")
-    PRINT_ENUM_VALUE_CASE(SymTagData, "Data")
-    PRINT_ENUM_VALUE_CASE(SymTagAnnotation, "Annotation")
-    PRINT_ENUM_VALUE_CASE(SymTagLabel, "Label")
-    PRINT_ENUM_VALUE_CASE(SymTagPublicSymbol, "PublicSymbol")
-    PRINT_ENUM_VALUE_CASE(SymTagUDT, "UDT")
-    PRINT_ENUM_VALUE_CASE(SymTagEnum, "Enum")
-    PRINT_ENUM_VALUE_CASE(SymTagFunctionType, "FunctionType")
-    PRINT_ENUM_VALUE_CASE(SymTagPointerType, "PointerType")
-    PRINT_ENUM_VALUE_CASE(SymTagArrayType, "ArrayType")
-    PRINT_ENUM_VALUE_CASE(SymTagBaseType, "BaseType")
-    PRINT_ENUM_VALUE_CASE(SymTagTypedef, "Typedef")
-    PRINT_ENUM_VALUE_CASE(SymTagBaseClass, "BaseClass")
-    PRINT_ENUM_VALUE_CASE(SymTagFriend, "Friend")
-    PRINT_ENUM_VALUE_CASE(SymTagFunctionArgType, "FunctionArgType")
-    PRINT_ENUM_VALUE_CASE(SymTagFuncDebugStart, "FuncDebugStart")
-    PRINT_ENUM_VALUE_CASE(SymTagFuncDebugEnd, "FuncDebugEnd")
-    PRINT_ENUM_VALUE_CASE(SymTagUsingNamespace, "UsingNamespace")
-    PRINT_ENUM_VALUE_CASE(SymTagVTableShape, "VTableShape")
-    PRINT_ENUM_VALUE_CASE(SymTagVTable, "VTable")
-    PRINT_ENUM_VALUE_CASE(SymTagCustom, "Custom")
-    PRINT_ENUM_VALUE_CASE(SymTagThunk, "Thunk")
-    PRINT_ENUM_VALUE_CASE(SymTagCustomType, "CustomType")
-    PRINT_ENUM_VALUE_CASE(SymTagManagedType, "ManagedType")
-    PRINT_ENUM_VALUE_CASE(SymTagDimension, "Dimension")
-    PRINT_ENUM_VALUE_CASE(SymTagCallSite, "CallSite")
-    PRINT_ENUM_VALUE_CASE(SymTagInlineSite, "InlineSite")
-    PRINT_ENUM_VALUE_CASE(SymTagBaseInterface, "BaseInterface")
-    PRINT_ENUM_VALUE_CASE(SymTagVectorType, "VectorType")
-    PRINT_ENUM_VALUE_CASE(SymTagMatrixType, "MatrixType")
-    PRINT_ENUM_VALUE_CASE(SymTagHLSLType, "HLSLType")
-#if (_MSC_FULL_VER >= 180031101)
-    PRINT_ENUM_VALUE_CASE(SymTagCaller, "Caller")
-    PRINT_ENUM_VALUE_CASE(SymTagCallee, "Callee")
-#endif
-    PRINT_ENUM_VALUE_CASE(SymTagMax, "Max")
-  }
-  outs() << " {" << (DWORD)SymTag << "}";
-  return Stream;
-}
-
-raw_ostream &llvm::operator<<(raw_ostream &Stream, CV_CPU_TYPE_e CpuType) {
-  switch (CpuType) {
-    PRINT_ENUM_VALUE_CASE(CV_CFL_8080, "8080")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_8086, "8086")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_80286, "80286")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_80386, "80386")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_80486, "80486")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_PENTIUM, "Pentium")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_PENTIUMPRO, "Pentium Pro")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_PENTIUMIII, "Pentium III")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_MIPS, "MIPS")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_MIPS16, "MIPS 16")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_MIPS32, "MIPS 32")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_MIPS64, "MIPS 64")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_MIPSI, "MIPS I")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_MIPSII, "MIPS II")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_MIPSIII, "MIPS III")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_MIPSIV, "MIPS IV")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_MIPSV, "MIPS V")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_M68000, "M68000")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_M68010, "M68010")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_M68020, "M68020")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_M68030, "M68030")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_M68040, "M68040")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ALPHA, "Alpha")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ALPHA_21164, "Alpha 21164")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ALPHA_21164A, "Alpha 21164A")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ALPHA_21264, "Alpha 21264")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ALPHA_21364, "21364")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_PPC601, "PowerPC 601")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_PPC603, "PowerPC 603")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_PPC604, "PowerPC 604")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_PPC620, "PowerPC 620")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_PPCFP, "PowerPC FP")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_PPCBE, "PowerPC BE")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_SH3, "SH3")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_SH3E, "SH3-E")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_SH3DSP, "SH3-DSP")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_SH4, "SH4")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_SHMEDIA, "SH Media")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ARM3, "ARM 3")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ARM4, "ARM 4")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ARM4T, "ARM 4T")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ARM5, "ARM 5")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ARM5T, "ARM 5T")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ARM6, "ARM 6")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ARM_XMAC, "ARM XMAC")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ARM_WMMX, "ARM WMMX")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ARM7, "ARM 7")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_OMNI, "Omni")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_IA64, "IA64")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_IA64_2, "IA64-2")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_CEE, "CEE")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_AM33, "AM33")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_M32R, "M32R")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_TRICORE, "TriCore")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_X64, "X64")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_EBC, "EBC")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_THUMB, "Thumb")
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ARMNT, "ARM NT")
-#if (_MSC_FULL_VER >= 180031101)
-    PRINT_ENUM_VALUE_CASE(CV_CFL_ARM64, "ARM 64")
-#endif
-    PRINT_ENUM_VALUE_CASE(CV_CFL_D3D11_SHADER, "D3D11 Shader")
-  }
-  outs() << " {" << llvm::format_hex((DWORD)CpuType, 2, true) << "}";
-  return Stream;
-}
-
-raw_ostream &llvm::operator<<(raw_ostream &Stream,
-                              MachineTypeEnum MachineType) {
-  switch (MachineType) {
-    PRINT_ENUM_VALUE_CASE(MachineTypeUnknown, "Unknown")
-    PRINT_ENUM_VALUE_CASE(MachineTypeX86, "x86")
-    PRINT_ENUM_VALUE_CASE(MachineTypeR3000, "R3000")
-    PRINT_ENUM_VALUE_CASE(MachineTypeR4000, "R4000")
-    PRINT_ENUM_VALUE_CASE(MachineTypeR10000, "R10000")
-    PRINT_ENUM_VALUE_CASE(MachineTypeWCEMIPSv2, "WCE MIPSv2")
-    PRINT_ENUM_VALUE_CASE(MachineTypeAlpha, "Alpha")
-    PRINT_ENUM_VALUE_CASE(MachineTypeSH3, "SH3")
-    PRINT_ENUM_VALUE_CASE(MachineTypeSH3DSP, "SH3-DSP")
-    PRINT_ENUM_VALUE_CASE(MachineTypeSH3E, "SH3-E")
-    PRINT_ENUM_VALUE_CASE(MachineTypeSH4, "SH4")
-    PRINT_ENUM_VALUE_CASE(MachineTypeSH5, "SH5")
-    PRINT_ENUM_VALUE_CASE(MachineTypeArm, "ARM")
-    PRINT_ENUM_VALUE_CASE(MachineTypeThumb, "Thumb")
-    PRINT_ENUM_VALUE_CASE(MachineTypeArmNT, "ARM NT")
-    PRINT_ENUM_VALUE_CASE(MachineTypeAM33, "AM33")
-    PRINT_ENUM_VALUE_CASE(MachineTypePowerPC, "PowerPC")
-    PRINT_ENUM_VALUE_CASE(MachineTypePowerPCFP, "PowerPC FP")
-    PRINT_ENUM_VALUE_CASE(MachineTypeIa64, "IA 64")
-    PRINT_ENUM_VALUE_CASE(MachineTypeMips16, "MIPS 16")
-    PRINT_ENUM_VALUE_CASE(MachineTypeAlpha64, "Alpha 64")
-    PRINT_ENUM_VALUE_CASE(MachineTypeMipsFpu, "FPU")
-    PRINT_ENUM_VALUE_CASE(MachineTypeMipsFpu16, "FPU 16")
-    PRINT_ENUM_VALUE_CASE(MachineTypeTriCore, "TriCore")
-    PRINT_ENUM_VALUE_CASE(MachineTypeCEF, "CEF")
-    PRINT_ENUM_VALUE_CASE(MachineTypeEBC, "EBC")
-    PRINT_ENUM_VALUE_CASE(MachineTypeAmd64, "x64")
-    PRINT_ENUM_VALUE_CASE(MachineTypeM32R, "M32R")
-    PRINT_ENUM_VALUE_CASE(MachineTypeCEE, "CEE")
-  }
-  outs() << " {" << llvm::format_hex((DWORD)MachineType, 2, true) << "}";
-  return Stream;
-}
-
-raw_ostream &llvm::operator<<(raw_ostream &Stream, HashAlgorithm Algorithm) {
-  switch (Algorithm) {
-    PRINT_ENUM_VALUE_CASE(HashNone, "None")
-    PRINT_ENUM_VALUE_CASE(HashMD5, "MD5")
-    PRINT_ENUM_VALUE_CASE(HashSHA1, "SHA-1")
-  default:
-    outs() << "(Unknown)";
-    break;
-  }
-  outs() << " {" << (DWORD)Algorithm << "}";
-  return Stream;
-}

Removed: llvm/trunk/tools/llvm-pdbdump/DIAExtras.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/DIAExtras.h?rev=228754&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/DIAExtras.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/DIAExtras.h (removed)
@@ -1,131 +0,0 @@
-//===- DIAExtras.h - Helper classes and functions for accessing DIA C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Defines helper types, classes, and functions for working with DIA.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMPDBDUMP_DIAEXTRAS_H
-#define LLVM_TOOLS_LLVMPDBDUMP_DIAEXTRAS_H
-
-#include "llvm/ADT/SmallString.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include "COMExtras.h"
-
-namespace llvm {
-namespace sys {
-namespace windows {
-
-typedef llvm::SmallString<16> DIAString;
-
-template <class T> class DIAResult {
-public:
-  DIAResult() : IsValid(false) {}
-  DIAResult(const T &ResultValue) : Result(ResultValue), IsValid(true) {}
-
-  bool hasValue() const { return IsValid; }
-  T value() const { return Result; }
-
-  void dump(StringRef Name, unsigned IndentLevel) const {
-    if (!hasValue())
-      return;
-    outs().indent(IndentLevel);
-    outs() << Name << ": " << value() << "\n";
-  }
-
-private:
-  T Result;
-  bool IsValid;
-};
-
-template <>
-void DIAResult<BOOL>::dump(StringRef Name, unsigned IndentLevel) const {
-  if (!hasValue())
-    return;
-  outs().indent(IndentLevel);
-  outs() << Name << ": " << (value() ? "true" : "false") << "\n";
-}
-
-template <>
-void DIAResult<GUID>::dump(StringRef Name, unsigned IndentLevel) const {
-  if (!hasValue())
-    return;
-  std::string Guid8;
-  CComBSTR GuidBSTR(value());
-  BSTRToUTF8(GuidBSTR.m_str, Guid8);
-
-  outs().indent(IndentLevel);
-  outs() << Name << ": " << Guid8 << "\n";
-}
-
-// MSDN documents the IDiaSymbol::get_machineType method as returning a value
-// from the CV_CPU_TYPE_e enumeration.  This documentation is wrong, however,
-// and this method actually returns a value from the IMAGE_FILE_xxx set of
-// defines from winnt.h.  These correspond to the platform magic number in
-// the COFF file.  This enumeration is built from the set of values in winnt.h
-enum MachineTypeEnum {
-  MachineTypeUnknown = IMAGE_FILE_MACHINE_UNKNOWN,
-  MachineTypeX86 = IMAGE_FILE_MACHINE_I386,
-  MachineTypeR3000 = IMAGE_FILE_MACHINE_R3000,
-  MachineTypeR4000 = IMAGE_FILE_MACHINE_R4000,
-  MachineTypeR10000 = IMAGE_FILE_MACHINE_R10000,
-  MachineTypeWCEMIPSv2 = IMAGE_FILE_MACHINE_WCEMIPSV2,
-  MachineTypeAlpha = IMAGE_FILE_MACHINE_ALPHA,
-  MachineTypeSH3 = IMAGE_FILE_MACHINE_SH3,
-  MachineTypeSH3DSP = IMAGE_FILE_MACHINE_SH3DSP,
-  MachineTypeSH3E = IMAGE_FILE_MACHINE_SH3E,
-  MachineTypeSH4 = IMAGE_FILE_MACHINE_SH4,
-  MachineTypeSH5 = IMAGE_FILE_MACHINE_SH5,
-  MachineTypeArm = IMAGE_FILE_MACHINE_ARM,
-  MachineTypeThumb = IMAGE_FILE_MACHINE_THUMB,
-  MachineTypeArmNT = IMAGE_FILE_MACHINE_ARMNT,
-  MachineTypeAM33 = IMAGE_FILE_MACHINE_AM33,
-  MachineTypePowerPC = IMAGE_FILE_MACHINE_POWERPC,
-  MachineTypePowerPCFP = IMAGE_FILE_MACHINE_POWERPCFP,
-  MachineTypeIa64 = IMAGE_FILE_MACHINE_IA64,
-  MachineTypeMips16 = IMAGE_FILE_MACHINE_MIPS16,
-  MachineTypeAlpha64 = IMAGE_FILE_MACHINE_ALPHA64,
-  MachineTypeMipsFpu = IMAGE_FILE_MACHINE_MIPSFPU,
-  MachineTypeMipsFpu16 = IMAGE_FILE_MACHINE_MIPSFPU16,
-  MachineTypeTriCore = IMAGE_FILE_MACHINE_TRICORE,
-  MachineTypeCEF = IMAGE_FILE_MACHINE_CEF,
-  MachineTypeEBC = IMAGE_FILE_MACHINE_EBC,
-  MachineTypeAmd64 = IMAGE_FILE_MACHINE_AMD64,
-  MachineTypeM32R = IMAGE_FILE_MACHINE_M32R,
-  MachineTypeCEE = IMAGE_FILE_MACHINE_CEE,
-};
-
-enum HashAlgorithm { HashNone = 0, HashMD5 = 1, HashSHA1 = 2 };
-
-// SymTagEnum has the unfortunate property that it is not only the name of
-// the enum, but also the name of one of the values of the enum.  So that we
-// don't have to always type "enum SymTagEnum", we typedef this to a different
-// name so that we can refer to it more easily.
-typedef enum SymTagEnum DiaSymTagEnum;
-
-typedef CComPtr<IDiaSymbol> DiaSymbolPtr;
-
-} // namespace windows
-} // namespace sys
-} // namespace llvm
-
-namespace llvm {
-class raw_ostream;
-
-raw_ostream &operator<<(raw_ostream &Stream,
-                        llvm::sys::windows::DiaSymTagEnum SymTag);
-raw_ostream &operator<<(raw_ostream &Stream, CV_CPU_TYPE_e CpuType);
-raw_ostream &operator<<(raw_ostream &Stream,
-                        llvm::sys::windows::MachineTypeEnum CpuType);
-raw_ostream &operator<<(raw_ostream &Stream,
-                        llvm::sys::windows::HashAlgorithm Algorithm);
-}
-
-#endif

Removed: llvm/trunk/tools/llvm-pdbdump/DIASymbol.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/DIASymbol.cpp?rev=228754&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/DIASymbol.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/DIASymbol.cpp (removed)
@@ -1,968 +0,0 @@
-//===- DIASymbol.cpp - Dump debug info from a PDB file ----------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm-pdbdump.h"
-#include "DIASymbol.h"
-
-using namespace llvm::sys::windows;
-
-DIASymbol::DIASymbol(IDiaSymbol *DiaSymbol) : Symbol(DiaSymbol) {
-  Symbol->AddRef();
-}
-
-DIASymbol::~DIASymbol() { Symbol->Release(); }
-
-void DIASymbol::fullDump(int IndentLevel) {
-  getLexicalParent().dump("Lexical parent", IndentLevel);
-  getClassParent().dump("Class parent", IndentLevel);
-  getType().dump("Type", IndentLevel);
-  getArrayIndexType().dump("Array index type", IndentLevel);
-  getVirtualTableShape().dump("Vtable shape", IndentLevel);
-  getLowerBound().dump("Lower bound", IndentLevel);
-  getUpperBound().dump("Upper bound", IndentLevel);
-  getObjectPointerType().dump("Object pointer type", IndentLevel);
-  getContainer().dump("Container", IndentLevel);
-  getVirtualBaseTableType().dump("Virtual base table type", IndentLevel);
-  getUnmodifiedType().dump("Unmodified type", IndentLevel);
-  getSubType().dump("Sub type", IndentLevel);
-  getBaseSymbol().dump("Base symbol", IndentLevel);
-
-#if (_MSC_FULL_VER >= 180031101)
-  // These methods are only available on VS 2013 SP4 and higher.
-  isPGO().dump("Is PGO", IndentLevel);
-  hasValidPGOCounts().dump("Has valid PGO counts", IndentLevel);
-  isOptimizedForSpeed().dump("Is optimized for speed", IndentLevel);
-  getPGOEntryCount().dump("PGO entry count", IndentLevel);
-  getPGOEdgeCount().dump("PGO edge count", IndentLevel);
-  getPGODynamicInstructionCount().dump("PGO dynamic instruction count",
-                                       IndentLevel);
-  getStaticSize().dump("Static size", IndentLevel);
-  getFinalLiveStaticSize().dump("Final live static size", IndentLevel);
-  getPhaseName().dump("Phase name", IndentLevel);
-  hasControlFlowCheck().dump("Has control flow check", IndentLevel);
-#endif
-
-  getAccess().dump("Access", IndentLevel);
-  getAddressOffset().dump("Address Offset", IndentLevel);
-  getAddressSection().dump("Address Section", IndentLevel);
-  getAddressTaken().dump("Address Taken", IndentLevel);
-  getAge().dump("Age", IndentLevel);
-  getArrayIndexTypeId().dump("Array Index Type Id", IndentLevel);
-  getBackEndMajor().dump("Back End Major", IndentLevel);
-  getBackEndMinor().dump("Back End Minor", IndentLevel);
-  getBackEndBuild().dump("Back End Build", IndentLevel);
-  getBaseDataOffset().dump("Base Data Offset", IndentLevel);
-  getBaseDataSlot().dump("Base Data Slot", IndentLevel);
-  getBaseSymbolId().dump("Base Symbol Id", IndentLevel);
-  getBaseType().dump("Base Type", IndentLevel);
-  getBitPosition().dump("Bit Position", IndentLevel);
-  getBuiltInKind().dump("Built In Kind", IndentLevel);
-  getCallingConvention().dump("Calling Convention", IndentLevel);
-  getClassParentId().dump("Class Parent Id", IndentLevel);
-  isCode().dump("Code", IndentLevel);
-  isCompilerGenerated().dump("Compiler Generated", IndentLevel);
-  getCompilerName().dump("Compiler Name", IndentLevel);
-  hasConstructor().dump("Constructor", IndentLevel);
-  isConstType().dump("Const Type", IndentLevel);
-  getCount().dump("Count", IndentLevel);
-  getCountLiveRanges().dump("Count Live Ranges", IndentLevel);
-  hasCustomCallingConvention().dump("Custom Calling Convention", IndentLevel);
-  getDataKind().dump("Data Kind", IndentLevel);
-  isEditAndContinueEnabled().dump("Edit and Continue Enabled", IndentLevel);
-  hasFarReturn().dump("Far Return", IndentLevel);
-  getFrontEndMajor().dump("Front End Major", IndentLevel);
-  getFrontEndMinor().dump("Front End Minor", IndentLevel);
-  getFrontEndBuild().dump("Front End Build", IndentLevel);
-  isFunction().dump("Function", IndentLevel);
-  getGuid().dump("GUID", IndentLevel);
-  hasAlloca().dump("Has Alloca", IndentLevel);
-  hasAssignmentOperator().dump("Has Assignment Operator", IndentLevel);
-  hasCastOperator().dump("Has Cast Operator", IndentLevel);
-  hasDebugInfo().dump("Has Debug Info", IndentLevel);
-  hasEH().dump("Has EH", IndentLevel);
-  hasEHa().dump("Has EHa", IndentLevel);
-  hasInlAsm().dump("Has Inline Asm", IndentLevel);
-  hasLongJump().dump("Has longjmp", IndentLevel);
-  hasManagedCode().dump("Has Managed Code", IndentLevel);
-  hasNestedTypes().dump("Has Nested Types", IndentLevel);
-  hasSecurityChecks().dump("Has Security Checks", IndentLevel);
-  hasSEH().dump("Has SEH", IndentLevel);
-  hasSetJump().dump("Has setjmp", IndentLevel);
-  isIndirectVirtualBaseClass().dump("Is indirect virtual base", IndentLevel);
-  hasInlineAttribute().dump("Has inline declspec", IndentLevel);
-  hasInterruptReturn().dump("Has interrupt return", IndentLevel);
-  isBaseVirtualFunction().dump("Is base virtual function", IndentLevel);
-  isAcceleratorGroupSharedLocal().dump("Is Accelerator Group Shared Local",
-                                       IndentLevel);
-  isAcceleratorPointerTagLiveRange().dump(
-      "Is Accelerator Pointer Tag Live Range", IndentLevel);
-  isAcceleratorStubFunction().dump("Is Accelerator Stub Function", IndentLevel);
-  isAggregated().dump("Is aggregated", IndentLevel);
-  hasCTypes().dump("Has C types", IndentLevel);
-  isCVTCIL().dump("Was converted from MSIL", IndentLevel);
-  isDataAligned().dump("Is data aligned", IndentLevel);
-  isHLSLData().dump("Is HLSL data", IndentLevel);
-  isHotpatchable().dump("Is hot-patchable", IndentLevel);
-  isLTCG().dump("Is LTCG", IndentLevel);
-  isMatrixRowMajor().dump("Is matrix row major", IndentLevel);
-  isMSILNetmodule().dump("Is MSIL .netmodule", IndentLevel);
-  isMultipleInheritance().dump("Is multiple inheritance", IndentLevel);
-  isNaked().dump("Is naked", IndentLevel);
-  isOptimizedAway().dump("Is optimized away", IndentLevel);
-  isPointerBasedOnSymbolValue().dump("Is pointer based on symbol value",
-                                     IndentLevel);
-  isPointerToDataMember().dump("Is pointer to data member", IndentLevel);
-  isPointerToMemberFunction().dump("Is pointer to member function",
-                                   IndentLevel);
-  isReturnValue().dump("Is return value", IndentLevel);
-  isSdl().dump("Is SDL", IndentLevel);
-  isSingleInheritance().dump("Is single inheritance", IndentLevel);
-  isSplitted().dump("Is splitted", IndentLevel);
-  isStatic().dump("Is staic", IndentLevel);
-  isStripped().dump("Is stripped", IndentLevel);
-  isVirtualInheritance().dump("Is virtual inheritance", IndentLevel);
-  getLanguage().dump("Language", IndentLevel);
-  getLength().dump("Length", IndentLevel);
-  getLexicalParentId().dump("Lexical parent id", IndentLevel);
-  getLibraryName().dump("Library name", IndentLevel);
-  getLiveRangeLength().dump("Live range length", IndentLevel);
-  getLiveRangeStartAddressSection().dump("Live range start address section",
-                                         IndentLevel);
-  getLiveRangeStartAddressOffset().dump("Live range start address offset",
-                                        IndentLevel);
-  getLiveRangeStartRelativeVirtualAddress().dump("Live range start address RVA",
-                                                 IndentLevel);
-  getLocationType().dump("Location type", IndentLevel);
-  getLowerBoundId().dump("Lower bound id", IndentLevel);
-  getMachineType().dump("Machine type", IndentLevel);
-  isManagedRef().dump("Managed", IndentLevel);
-  getMemorySpaceKind().dump("Memory space kind", IndentLevel);
-  isMsilRef().dump("MSIL", IndentLevel);
-  getName().dump("Name", IndentLevel);
-  isNested().dump("Nested", IndentLevel);
-  hasNoInlineAttribute().dump("Has noinline declspec", IndentLevel);
-  hasNoReturnAttribute().dump("Has noreturn declspec", IndentLevel);
-  getNoStackOrdering().dump("No stack ordering", IndentLevel);
-  isUnreached().dump("Not reached", IndentLevel);
-  getNumberOfAcceleratorPointerTags().dump("Number of accelerator pointer tags",
-                                           IndentLevel);
-  getNumberOfModifiers().dump("Number of modifiers", IndentLevel);
-  getNumberOfRegisterIndices().dump("Number of register indices", IndentLevel);
-  getNumberOfRows().dump("Number of rows", IndentLevel);
-  getNumberOfColumns().dump("Number of columns", IndentLevel);
-  getObjectFileName().dump("Object file name", IndentLevel);
-  getOemSymbolId().dump("OEM symbol id", IndentLevel);
-  getOffset().dump("Offset", IndentLevel);
-  hasOptimizedCodeDebugInfo().dump("Optimized code debug info", IndentLevel);
-  hasOverloadedOperator().dump("Overloaded operator", IndentLevel);
-  isPacked().dump("Packed", IndentLevel);
-  getPlatform().dump("Platform", IndentLevel);
-  isPureVirtual().dump("Pure", IndentLevel);
-  getRank().dump("Rank", IndentLevel);
-  isReference().dump("Reference", IndentLevel);
-  getRegisterId().dump("Register ID", IndentLevel);
-  getRegisterType().dump("Register type", IndentLevel);
-  getRelativeVirtualAddress().dump("RVA", IndentLevel);
-  isRestrictedType().dump("Restricted type", IndentLevel);
-  getSamplerSlot().dump("Sampler slot", IndentLevel);
-  isScoped().dump("Scoped", IndentLevel);
-  getSignature().dump("Signature", IndentLevel);
-  getSizeInUdt().dump("Size in UDT", IndentLevel);
-  getSlot().dump("Slot", IndentLevel);
-  getSourceFileName().dump("Source file name", IndentLevel);
-  getStride().dump("Stride", IndentLevel);
-  getSubTypeId().dump("Sub type ID", IndentLevel);
-  getSymbolsFileName().dump("File name", IndentLevel);
-  getSymIndexId().dump("Sym index ID", IndentLevel);
-  getSymTag().dump("Sym tag", IndentLevel);
-  getTargetOffset().dump("Target offset", IndentLevel);
-  getTargetRelativeVirtualAddress().dump("Target RVA", IndentLevel);
-  getTargetSection().dump("Target section", IndentLevel);
-  getTargetVirtualAddress().dump("Target virtual address", IndentLevel);
-  getTextureSlot().dump("Texture slot", IndentLevel);
-  getThisAdjust().dump("This adjust", IndentLevel);
-  getThunkOrdinal().dump("Thunk ordinal", IndentLevel);
-  getTimeStamp().dump("Time stamp", IndentLevel);
-  getToken().dump("Token", IndentLevel);
-  getUavSlot().dump("UAV slot", IndentLevel);
-  getUdtKind().dump("UDT kind", IndentLevel);
-  isUnalignedType().dump("Unaligned type", IndentLevel);
-  getUndecoratedName().dump("Undecorated name", IndentLevel);
-  getUnmodifiedTypeId().dump("Unmodified type id", IndentLevel);
-  getUpperBoundId().dump("Upper bound id", IndentLevel);
-  isVirtual().dump("Virtual", IndentLevel);
-  getVirtualAddress().dump("Virtual address", IndentLevel);
-  isVirtualBaseClass().dump("Virtual base class", IndentLevel);
-  getVirtualBaseDispIndex().dump("Virtual base disp index", IndentLevel);
-  getVirtualBaseOffset().dump("Virtual base offset", IndentLevel);
-  getVirtualBasePointerOffset().dump("Virtual base pointer offset",
-                                     IndentLevel);
-  getVirtualTableShapeId().dump("Vtable shape ID", IndentLevel);
-  isVolatileType().dump("Volatile type", IndentLevel);
-}
-
-#if (_MSC_FULL_VER >= 180031101)
-DIAResult<BOOL> DIASymbol::isPGO() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isPGO);
-}
-
-DIAResult<BOOL> DIASymbol::hasValidPGOCounts() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasValidPGOCounts);
-}
-
-DIAResult<BOOL> DIASymbol::isOptimizedForSpeed() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isOptimizedForSpeed);
-}
-
-DIAResult<DWORD> DIASymbol::getPGOEntryCount() {
-  return InternalGetDIAValue(&IDiaSymbol::get_PGOEntryCount);
-}
-
-DIAResult<DWORD> DIASymbol::getPGOEdgeCount() {
-  return InternalGetDIAValue(&IDiaSymbol::get_PGOEdgeCount);
-}
-
-DIAResult<ULONGLONG> DIASymbol::getPGODynamicInstructionCount() {
-  return InternalGetDIAValue(&IDiaSymbol::get_PGODynamicInstructionCount);
-}
-
-DIAResult<DWORD> DIASymbol::getStaticSize() {
-  return InternalGetDIAValue(&IDiaSymbol::get_staticSize);
-}
-
-DIAResult<DWORD> DIASymbol::getFinalLiveStaticSize() {
-  return InternalGetDIAValue(&IDiaSymbol::get_finalLiveStaticSize);
-}
-
-DIAResult<DIAString> DIASymbol::getPhaseName() {
-  return InternalGetDIAStringValue(&IDiaSymbol::get_phaseName);
-}
-
-DIAResult<BOOL> DIASymbol::hasControlFlowCheck() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasControlFlowCheck);
-}
-#endif
-
-DIAResult<DiaSymbolPtr> DIASymbol::getClassParent() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_classParent);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getType() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(&IDiaSymbol::get_type);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getArrayIndexType() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_arrayIndexType);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getVirtualTableShape() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_virtualTableShape);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getLowerBound() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_lowerBound);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getUpperBound() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_upperBound);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getObjectPointerType() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_objectPointerType);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getContainer() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_container);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getVirtualBaseTableType() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_virtualBaseTableType);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getUnmodifiedType() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_unmodifiedType);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getSubType() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_subType);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getBaseSymbol() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_baseSymbol);
-}
-
-DIAResult<DWORD> DIASymbol::getAccess() {
-  return InternalGetDIAValue(&IDiaSymbol::get_access);
-}
-
-DIAResult<DWORD> DIASymbol::getAddressOffset() {
-  return InternalGetDIAValue(&IDiaSymbol::get_addressOffset);
-}
-
-DIAResult<DWORD> DIASymbol::getAddressSection() {
-  return InternalGetDIAValue(&IDiaSymbol::get_addressSection);
-}
-
-DIAResult<BOOL> DIASymbol::getAddressTaken() {
-  return InternalGetDIAValue(&IDiaSymbol::get_addressTaken);
-}
-
-DIAResult<DWORD> DIASymbol::getAge() {
-  return InternalGetDIAValue(&IDiaSymbol::get_age);
-}
-
-DIAResult<DWORD> DIASymbol::getArrayIndexTypeId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_arrayIndexTypeId);
-}
-
-DIAResult<DWORD> DIASymbol::getBackEndMajor() {
-  return InternalGetDIAValue(&IDiaSymbol::get_backEndMajor);
-}
-
-DIAResult<DWORD> DIASymbol::getBackEndMinor() {
-
-  return InternalGetDIAValue(&IDiaSymbol::get_backEndMinor);
-}
-
-DIAResult<DWORD> DIASymbol::getBackEndBuild() {
-  return InternalGetDIAValue(&IDiaSymbol::get_backEndBuild);
-}
-
-DIAResult<DWORD> DIASymbol::getBackEndQFE() {
-  return InternalGetDIAValue(&IDiaSymbol::get_backEndQFE);
-}
-
-DIAResult<DWORD> DIASymbol::getBaseDataOffset() {
-  return InternalGetDIAValue(&IDiaSymbol::get_baseDataOffset);
-}
-
-DIAResult<DWORD> DIASymbol::getBaseDataSlot() {
-  return InternalGetDIAValue(&IDiaSymbol::get_baseDataSlot);
-}
-
-DIAResult<DWORD> DIASymbol::getBaseSymbolId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_baseSymbolId);
-}
-
-DIAResult<DWORD> DIASymbol::getBaseType() {
-  return InternalGetDIAValue(&IDiaSymbol::get_baseType);
-}
-
-DIAResult<DWORD> DIASymbol::getBitPosition() {
-  return InternalGetDIAValue(&IDiaSymbol::get_bitPosition);
-}
-
-DIAResult<DWORD> DIASymbol::getBuiltInKind() {
-  return InternalGetDIAValue(&IDiaSymbol::get_builtInKind);
-}
-
-DIAResult<CV_call_e> DIASymbol::getCallingConvention() {
-  return InternalGetDIAValue<DWORD, CV_call_e>(
-      &IDiaSymbol::get_callingConvention);
-}
-
-DIAResult<DWORD> DIASymbol::getClassParentId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_classParentId);
-}
-
-DIAResult<BOOL> DIASymbol::isCode() {
-  return InternalGetDIAValue(&IDiaSymbol::get_code);
-}
-
-DIAResult<BOOL> DIASymbol::isCompilerGenerated() {
-  return InternalGetDIAValue(&IDiaSymbol::get_compilerGenerated);
-}
-
-DIAResult<DIAString> DIASymbol::getCompilerName() {
-  return InternalGetDIAStringValue(&IDiaSymbol::get_compilerName);
-}
-
-DIAResult<BOOL> DIASymbol::hasConstructor() {
-  return InternalGetDIAValue(&IDiaSymbol::get_constructor);
-}
-
-DIAResult<BOOL> DIASymbol::isConstType() {
-  return InternalGetDIAValue(&IDiaSymbol::get_constType);
-}
-
-DIAResult<DWORD> DIASymbol::getCount() {
-  return InternalGetDIAValue(&IDiaSymbol::get_count);
-}
-
-DIAResult<DWORD> DIASymbol::getCountLiveRanges() {
-  return InternalGetDIAValue(&IDiaSymbol::get_countLiveRanges);
-}
-
-DIAResult<BOOL> DIASymbol::hasCustomCallingConvention() {
-  return InternalGetDIAValue(&IDiaSymbol::get_customCallingConvention);
-}
-
-DIAResult<DataKind> DIASymbol::getDataKind() {
-  return InternalGetDIAValue<DWORD, DataKind>(&IDiaSymbol::get_dataKind);
-}
-
-DIAResult<BOOL> DIASymbol::isEditAndContinueEnabled() {
-  return InternalGetDIAValue(&IDiaSymbol::get_editAndContinueEnabled);
-}
-
-DIAResult<BOOL> DIASymbol::hasFarReturn() {
-  return InternalGetDIAValue(&IDiaSymbol::get_farReturn);
-}
-
-DIAResult<DWORD> DIASymbol::getFrontEndMajor() {
-  return InternalGetDIAValue(&IDiaSymbol::get_frontEndMajor);
-}
-
-DIAResult<DWORD> DIASymbol::getFrontEndMinor() {
-  return InternalGetDIAValue(&IDiaSymbol::get_frontEndMinor);
-}
-
-DIAResult<DWORD> DIASymbol::getFrontEndBuild() {
-  return InternalGetDIAValue(&IDiaSymbol::get_frontEndBuild);
-}
-
-DIAResult<DWORD> DIASymbol::getFrontEndQFE() {
-  return InternalGetDIAValue(&IDiaSymbol::get_frontEndQFE);
-}
-
-DIAResult<BOOL> DIASymbol::isFunction() {
-  return InternalGetDIAValue(&IDiaSymbol::get_function);
-}
-
-DIAResult<GUID> DIASymbol::getGuid() {
-  return InternalGetDIAValue(&IDiaSymbol::get_guid);
-}
-
-DIAResult<BOOL> DIASymbol::hasAlloca() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasAlloca);
-}
-
-DIAResult<BOOL> DIASymbol::hasAssignmentOperator() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasAssignmentOperator);
-}
-
-DIAResult<BOOL> DIASymbol::hasCastOperator() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasCastOperator);
-}
-
-DIAResult<BOOL> DIASymbol::hasDebugInfo() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasDebugInfo);
-}
-
-DIAResult<BOOL> DIASymbol::hasEH() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasEH);
-}
-
-DIAResult<BOOL> DIASymbol::hasEHa() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasEHa);
-}
-
-DIAResult<BOOL> DIASymbol::hasInlAsm() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasInlAsm);
-}
-
-DIAResult<BOOL> DIASymbol::hasLongJump() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasLongJump);
-}
-
-DIAResult<BOOL> DIASymbol::hasManagedCode() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasManagedCode);
-}
-
-DIAResult<BOOL> DIASymbol::hasNestedTypes() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasNestedTypes);
-}
-
-DIAResult<BOOL> DIASymbol::hasSecurityChecks() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasSecurityChecks);
-}
-
-DIAResult<BOOL> DIASymbol::hasSEH() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasSEH);
-}
-
-DIAResult<BOOL> DIASymbol::hasSetJump() {
-  return InternalGetDIAValue(&IDiaSymbol::get_hasSetJump);
-}
-
-DIAResult<BOOL> DIASymbol::isIndirectVirtualBaseClass() {
-  return InternalGetDIAValue(&IDiaSymbol::get_indirectVirtualBaseClass);
-}
-
-DIAResult<BOOL> DIASymbol::hasInlineAttribute() {
-  return InternalGetDIAValue(&IDiaSymbol::get_inlSpec);
-}
-
-DIAResult<BOOL> DIASymbol::hasInterruptReturn() {
-  return InternalGetDIAValue(&IDiaSymbol::get_interruptReturn);
-}
-
-DIAResult<BOOL> DIASymbol::isBaseVirtualFunction() {
-  return InternalGetDIAValue(&IDiaSymbol::get_intro);
-}
-
-DIAResult<BOOL> DIASymbol::isIntrinsic() {
-  return InternalGetDIAValue(&IDiaSymbol::get_intrinsic);
-}
-
-DIAResult<BOOL> DIASymbol::isAcceleratorGroupSharedLocal() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isAcceleratorGroupSharedLocal);
-}
-
-DIAResult<BOOL> DIASymbol::isAcceleratorPointerTagLiveRange() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isAcceleratorPointerTagLiveRange);
-}
-
-DIAResult<BOOL> DIASymbol::isAcceleratorStubFunction() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isAcceleratorStubFunction);
-}
-
-DIAResult<BOOL> DIASymbol::isAggregated() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isAggregated);
-}
-
-DIAResult<BOOL> DIASymbol::isConstructorVirtualBase() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isConstructorVirtualBase);
-}
-
-DIAResult<BOOL> DIASymbol::hasStrictGSCheck() {
-  return InternalGetDIAValue(&IDiaSymbol::get_strictGSCheck);
-}
-
-DIAResult<BOOL> DIASymbol::isLocationControlFlowDependent() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isLocationControlFlowDependent);
-}
-
-DIAResult<BOOL> DIASymbol::hasCTypes() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isCTypes);
-}
-
-DIAResult<BOOL> DIASymbol::isCVTCIL() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isCVTCIL);
-}
-
-DIAResult<BOOL> DIASymbol::isDataAligned() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isDataAligned);
-}
-
-DIAResult<BOOL> DIASymbol::isHLSLData() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isHLSLData);
-}
-
-DIAResult<BOOL> DIASymbol::isHotpatchable() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isHotpatchable);
-}
-
-DIAResult<BOOL> DIASymbol::isLTCG() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isLTCG);
-}
-
-DIAResult<BOOL> DIASymbol::isMatrixRowMajor() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isMatrixRowMajor);
-}
-
-DIAResult<BOOL> DIASymbol::isMSILNetmodule() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isMSILNetmodule);
-}
-
-DIAResult<BOOL> DIASymbol::isMultipleInheritance() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isMultipleInheritance);
-}
-
-DIAResult<BOOL> DIASymbol::isNaked() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isNaked);
-}
-
-DIAResult<BOOL> DIASymbol::isOptimizedAway() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isOptimizedAway);
-}
-
-DIAResult<BOOL> DIASymbol::isPointerBasedOnSymbolValue() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isPointerBasedOnSymbolValue);
-}
-
-DIAResult<BOOL> DIASymbol::isPointerToDataMember() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isPointerToDataMember);
-}
-
-DIAResult<BOOL> DIASymbol::isPointerToMemberFunction() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isPointerToMemberFunction);
-}
-
-DIAResult<BOOL> DIASymbol::isReturnValue() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isReturnValue);
-}
-
-DIAResult<BOOL> DIASymbol::isSdl() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isSdl);
-}
-
-DIAResult<BOOL> DIASymbol::isSingleInheritance() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isSingleInheritance);
-}
-
-DIAResult<BOOL> DIASymbol::isSplitted() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isSplitted);
-}
-
-DIAResult<BOOL> DIASymbol::isStatic() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isStatic);
-}
-
-DIAResult<BOOL> DIASymbol::isStripped() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isStripped);
-}
-
-DIAResult<BOOL> DIASymbol::isVirtualInheritance() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isVirtualInheritance);
-}
-
-DIAResult<CV_CFL_LANG> DIASymbol::getLanguage() {
-  return InternalGetDIAValue<DWORD, CV_CFL_LANG>(&IDiaSymbol::get_language);
-}
-
-DIAResult<BOOL> DIASymbol::isSafeBuffers() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isSafeBuffers);
-}
-
-DIAResult<ULONGLONG> DIASymbol::getLength() {
-  return InternalGetDIAValue(&IDiaSymbol::get_length);
-}
-
-DIAResult<DWORD> DIASymbol::getLexicalParentId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_lexicalParentId);
-}
-
-DIAResult<DiaSymbolPtr> DIASymbol::getLexicalParent() {
-  return InternalGetDIAValue<IDiaSymbol *, DiaSymbolPtr>(
-      &IDiaSymbol::get_lexicalParent);
-}
-
-DIAResult<DWORD> DIASymbol::getLocalBasePointerRegisterId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_localBasePointerRegisterId);
-}
-
-DIAResult<DIAString> DIASymbol::getLibraryName() {
-  return InternalGetDIAStringValue(&IDiaSymbol::get_libraryName);
-}
-
-DIAResult<ULONGLONG> DIASymbol::getLiveRangeLength() {
-  return InternalGetDIAValue(&IDiaSymbol::get_liveRangeLength);
-}
-
-DIAResult<DWORD> DIASymbol::getLiveRangeStartAddressSection() {
-  return InternalGetDIAValue(&IDiaSymbol::get_liveRangeStartAddressSection);
-}
-
-DIAResult<DWORD> DIASymbol::getLiveRangeStartAddressOffset() {
-  return InternalGetDIAValue(&IDiaSymbol::get_liveRangeStartAddressOffset);
-}
-
-DIAResult<DWORD> DIASymbol::getLiveRangeStartRelativeVirtualAddress() {
-  return InternalGetDIAValue(
-      &IDiaSymbol::get_liveRangeStartRelativeVirtualAddress);
-}
-
-DIAResult<LocationType> DIASymbol::getLocationType() {
-  return InternalGetDIAValue<DWORD, LocationType>(
-      &IDiaSymbol::get_locationType);
-}
-
-DIAResult<DWORD> DIASymbol::getLowerBoundId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_lowerBoundId);
-}
-
-DIAResult<MachineTypeEnum> DIASymbol::getMachineType() {
-  return InternalGetDIAValue<DWORD, MachineTypeEnum>(
-      &IDiaSymbol::get_machineType);
-}
-
-DIAResult<BOOL> DIASymbol::isManagedRef() {
-  return InternalGetDIAValue(&IDiaSymbol::get_managed);
-}
-
-DIAResult<DWORD> DIASymbol::getMemorySpaceKind() {
-  return InternalGetDIAValue(&IDiaSymbol::get_memorySpaceKind);
-}
-
-DIAResult<BOOL> DIASymbol::isMsilRef() {
-  return InternalGetDIAValue(&IDiaSymbol::get_msil);
-}
-
-DIAResult<DIAString> DIASymbol::getName() {
-  return InternalGetDIAStringValue(&IDiaSymbol::get_name);
-}
-
-DIAResult<BOOL> DIASymbol::isNested() {
-  return InternalGetDIAValue(&IDiaSymbol::get_nested);
-}
-
-DIAResult<BOOL> DIASymbol::hasNoInlineAttribute() {
-  return InternalGetDIAValue(&IDiaSymbol::get_noInline);
-}
-
-DIAResult<BOOL> DIASymbol::hasNoReturnAttribute() {
-  return InternalGetDIAValue(&IDiaSymbol::get_noReturn);
-}
-
-DIAResult<BOOL> DIASymbol::getNoStackOrdering() {
-  return InternalGetDIAValue(&IDiaSymbol::get_noStackOrdering);
-}
-
-DIAResult<BOOL> DIASymbol::isUnreached() {
-  return InternalGetDIAValue(&IDiaSymbol::get_notReached);
-}
-
-DIAResult<DWORD> DIASymbol::getNumberOfAcceleratorPointerTags() {
-  return InternalGetDIAValue(&IDiaSymbol::get_numberOfAcceleratorPointerTags);
-}
-
-DIAResult<DWORD> DIASymbol::getNumberOfModifiers() {
-  return InternalGetDIAValue(&IDiaSymbol::get_numberOfModifiers);
-}
-
-DIAResult<DWORD> DIASymbol::getNumberOfRegisterIndices() {
-  return InternalGetDIAValue(&IDiaSymbol::get_numberOfRegisterIndices);
-}
-
-DIAResult<DWORD> DIASymbol::getNumberOfRows() {
-  return InternalGetDIAValue(&IDiaSymbol::get_numberOfRows);
-}
-
-DIAResult<DWORD> DIASymbol::getNumberOfColumns() {
-  return InternalGetDIAValue(&IDiaSymbol::get_numberOfColumns);
-}
-
-DIAResult<DIAString> DIASymbol::getObjectFileName() {
-  return InternalGetDIAStringValue(&IDiaSymbol::get_objectFileName);
-}
-
-DIAResult<DWORD> DIASymbol::getOemSymbolId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_oemSymbolId);
-}
-
-DIAResult<LONG> DIASymbol::getOffset() {
-  return InternalGetDIAValue(&IDiaSymbol::get_offset);
-}
-
-DIAResult<DWORD> DIASymbol::getOffsetInUdt() {
-  return InternalGetDIAValue(&IDiaSymbol::get_offsetInUdt);
-}
-
-DIAResult<BOOL> DIASymbol::hasOptimizedCodeDebugInfo() {
-  return InternalGetDIAValue(&IDiaSymbol::get_optimizedCodeDebugInfo);
-}
-
-DIAResult<BOOL> DIASymbol::hasOverloadedOperator() {
-  return InternalGetDIAValue(&IDiaSymbol::get_overloadedOperator);
-}
-
-DIAResult<BOOL> DIASymbol::isPacked() {
-  return InternalGetDIAValue(&IDiaSymbol::get_packed);
-}
-
-DIAResult<CV_CPU_TYPE_e> DIASymbol::getPlatform() {
-  return InternalGetDIAValue<DWORD, CV_CPU_TYPE_e>(&IDiaSymbol::get_platform);
-}
-
-DIAResult<BOOL> DIASymbol::isPureVirtual() {
-  return InternalGetDIAValue(&IDiaSymbol::get_pure);
-}
-
-DIAResult<DWORD> DIASymbol::getRank() {
-  return InternalGetDIAValue(&IDiaSymbol::get_rank);
-}
-
-DIAResult<BOOL> DIASymbol::isReference() {
-  return InternalGetDIAValue(&IDiaSymbol::get_reference);
-}
-
-DIAResult<BOOL> DIASymbol::isRValueReference() {
-  return InternalGetDIAValue(&IDiaSymbol::get_RValueReference);
-}
-
-DIAResult<DWORD> DIASymbol::getRegisterId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_registerId);
-}
-
-DIAResult<DWORD> DIASymbol::getRegisterType() {
-  return InternalGetDIAValue(&IDiaSymbol::get_registerType);
-}
-
-DIAResult<DWORD> DIASymbol::getRelativeVirtualAddress() {
-  return InternalGetDIAValue(&IDiaSymbol::get_relativeVirtualAddress);
-}
-
-DIAResult<BOOL> DIASymbol::isRestrictedType() {
-  return InternalGetDIAValue(&IDiaSymbol::get_restrictedType);
-}
-
-DIAResult<DWORD> DIASymbol::getSamplerSlot() {
-  return InternalGetDIAValue(&IDiaSymbol::get_samplerSlot);
-}
-
-DIAResult<BOOL> DIASymbol::isScoped() {
-  return InternalGetDIAValue(&IDiaSymbol::get_scoped);
-}
-
-DIAResult<BOOL> DIASymbol::isRefUdt() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isRefUdt);
-}
-
-DIAResult<BOOL> DIASymbol::isValueUdt() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isValueUdt);
-}
-
-DIAResult<BOOL> DIASymbol::isInterfaceUdt() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isInterfaceUdt);
-}
-
-DIAResult<BOOL> DIASymbol::isCxxReturnUdt() {
-  return InternalGetDIAValue(&IDiaSymbol::get_isCxxReturnUdt);
-}
-
-DIAResult<DWORD> DIASymbol::getSignature() {
-  return InternalGetDIAValue(&IDiaSymbol::get_signature);
-}
-
-DIAResult<DWORD> DIASymbol::getSizeInUdt() {
-  return InternalGetDIAValue(&IDiaSymbol::get_sizeInUdt);
-}
-
-DIAResult<DWORD> DIASymbol::getSlot() {
-  return InternalGetDIAValue(&IDiaSymbol::get_slot);
-}
-
-DIAResult<DIAString> DIASymbol::getSourceFileName() {
-  return InternalGetDIAStringValue(&IDiaSymbol::get_sourceFileName);
-}
-
-DIAResult<DWORD> DIASymbol::getStride() {
-  return InternalGetDIAValue(&IDiaSymbol::get_stride);
-}
-
-DIAResult<DWORD> DIASymbol::getSubTypeId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_subTypeId);
-}
-
-DIAResult<DIAString> DIASymbol::getSymbolsFileName() {
-  return InternalGetDIAStringValue(&IDiaSymbol::get_symbolsFileName);
-}
-
-DIAResult<DWORD> DIASymbol::getSymIndexId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_symIndexId);
-}
-
-DIAResult<DiaSymTagEnum> DIASymbol::getSymTag() {
-  return InternalGetDIAValue<DWORD, DiaSymTagEnum>(&IDiaSymbol::get_symTag);
-}
-
-DIAResult<DWORD> DIASymbol::getTargetOffset() {
-  return InternalGetDIAValue(&IDiaSymbol::get_targetOffset);
-}
-
-DIAResult<DWORD> DIASymbol::getTargetRelativeVirtualAddress() {
-  return InternalGetDIAValue(&IDiaSymbol::get_targetRelativeVirtualAddress);
-}
-
-DIAResult<DWORD> DIASymbol::getTargetSection() {
-  return InternalGetDIAValue(&IDiaSymbol::get_targetSection);
-}
-
-DIAResult<ULONGLONG> DIASymbol::getTargetVirtualAddress() {
-  return InternalGetDIAValue(&IDiaSymbol::get_targetVirtualAddress);
-}
-
-DIAResult<DWORD> DIASymbol::getTextureSlot() {
-  return InternalGetDIAValue(&IDiaSymbol::get_textureSlot);
-}
-
-DIAResult<LONG> DIASymbol::getThisAdjust() {
-  return InternalGetDIAValue(&IDiaSymbol::get_thisAdjust);
-}
-
-DIAResult<THUNK_ORDINAL> DIASymbol::getThunkOrdinal() {
-  return InternalGetDIAValue<DWORD, THUNK_ORDINAL>(
-      &IDiaSymbol::get_thunkOrdinal);
-}
-
-DIAResult<DWORD> DIASymbol::getTimeStamp() {
-  return InternalGetDIAValue(&IDiaSymbol::get_timeStamp);
-}
-
-DIAResult<DWORD> DIASymbol::getToken() {
-  return InternalGetDIAValue(&IDiaSymbol::get_token);
-}
-
-DIAResult<DWORD> DIASymbol::getUavSlot() {
-  return InternalGetDIAValue(&IDiaSymbol::get_uavSlot);
-}
-
-DIAResult<UdtKind> DIASymbol::getUdtKind() {
-  return InternalGetDIAValue<DWORD, UdtKind>(&IDiaSymbol::get_udtKind);
-}
-
-DIAResult<BOOL> DIASymbol::isUnalignedType() {
-  return InternalGetDIAValue(&IDiaSymbol::get_unalignedType);
-}
-
-DIAResult<DIAString> DIASymbol::getUndecoratedName() {
-  return InternalGetDIAStringValue(&IDiaSymbol::get_undecoratedName);
-}
-
-DIAResult<DWORD> DIASymbol::getUnmodifiedTypeId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_unmodifiedTypeId);
-}
-
-DIAResult<DWORD> DIASymbol::getUpperBoundId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_upperBoundId);
-}
-
-DIAResult<BOOL> DIASymbol::isVirtual() {
-  return InternalGetDIAValue(&IDiaSymbol::get_virtual);
-}
-
-DIAResult<ULONGLONG> DIASymbol::getVirtualAddress() {
-  return InternalGetDIAValue(&IDiaSymbol::get_virtualAddress);
-}
-
-DIAResult<BOOL> DIASymbol::isVirtualBaseClass() {
-  return InternalGetDIAValue(&IDiaSymbol::get_virtualBaseClass);
-}
-
-DIAResult<DWORD> DIASymbol::getVirtualBaseDispIndex() {
-  return InternalGetDIAValue(&IDiaSymbol::get_virtualBaseDispIndex);
-}
-
-DIAResult<DWORD> DIASymbol::getVirtualBaseOffset() {
-  return InternalGetDIAValue(&IDiaSymbol::get_virtualBaseOffset);
-}
-
-DIAResult<LONG> DIASymbol::getVirtualBasePointerOffset() {
-  return InternalGetDIAValue(&IDiaSymbol::get_virtualBasePointerOffset);
-}
-
-DIAResult<DWORD> DIASymbol::getVirtualTableShapeId() {
-  return InternalGetDIAValue(&IDiaSymbol::get_virtualTableShapeId);
-}
-
-DIAResult<BOOL> DIASymbol::isVolatileType() {
-  return InternalGetDIAValue(&IDiaSymbol::get_volatileType);
-}

Removed: llvm/trunk/tools/llvm-pdbdump/DIASymbol.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/DIASymbol.h?rev=228754&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/DIASymbol.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/DIASymbol.h (removed)
@@ -1,282 +0,0 @@
-//===- DIASymbol.h - Dump debug info from a PDB file ------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Provides a wrapper around the IDiaSymbol interface.  IDiaSymbol is used to
-// represent any kind of symbol from functions, to compilands, to source files.
-// It provides a monolithic interface of close to 200 operations, and the set
-// of operations that are valid depends on the type of the symbol.  Since it is
-// not clearly documented which set of operations is valid for which type of
-// symbol, the best way of figuring it out is to dump every method for every
-// symbol, and see which methods return errors.  This wrapper provides a clean
-// way of doing this without involving needing to embed lots of unsightly
-// HRESULT checking at every callsite.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMPDBDUMP_DIASYMBOL_H
-#define LLVM_TOOLS_LLVMPDBDUMP_DIASYMBOL_H
-
-#include "DIAExtras.h"
-#include "llvm/ADT/SmallString.h"
-
-namespace llvm {
-namespace sys {
-namespace windows {
-
-class DIASymbol {
-public:
-  DIASymbol(IDiaSymbol *DiaSymbol);
-  ~DIASymbol();
-
-  /// Dumps the value of every property (if it exists) with a default name.
-  /// This is useful for understanding what symbol types support what methods
-  /// during development time.
-  void fullDump(int IndentLevel);
-
-// TODO: The following methods are present on IDiaSymbol but do not yet have
-// wrapper methods.
-//
-// HRESULT get_value(VARIANT *pRetVal) = 0;
-// HRESULT get_undecoratedNameEx(DWORD undecorateOptions, BSTR *name) = 0;
-// HRESULT getSrcLineOnTypeDefn(IDiaLineNumber **ppResult) = 0;
-// HRESULT get_dataBytes(DWORD cbData, DWORD *pcbData, BYTE *pbData) = 0;
-// HRESULT get_types(DWORD cTypes, DWORD *pcTypes, IDiaSymbol **pTypes) = 0;
-// HRESULT get_typeIds(DWORD cTypeIds, DWORD *pcTypeIds, DWORD *pdwTypeIds) = 0;
-// HRESULT get_numericProperties(DWORD cnt, DWORD *pcnt,
-//                               DWORD *pProperties) = 0;
-// HRESULT get_modifierValues(DWORD cnt, DWORD *pcnt, WORD *pModifiers) = 0;
-// HRESULT get_acceleratorPointerTags(DWORD cnt, DWORD *pcnt, DWORD
-//                                    *pPointerTags) = 0;
-// HRESULT get_hfaFloat(BOOL *pRetVal) = 0;
-// HRESULT get_hfaDouble(BOOL *pRetVal) = 0;
-// HRESULT get_paramBasePointerRegisterId(DWORD *pRetVal) = 0;
-// HRESULT get_isWinRTPointer(BOOL *pRetVal) = 0;
-
-#if (_MSC_FULL_VER >= 180031101)
-  // These methods are only available on VS 2013 SP 4 and higher.
-  DIAResult<BOOL> isPGO();
-  DIAResult<BOOL> hasValidPGOCounts();
-  DIAResult<BOOL> isOptimizedForSpeed();
-  DIAResult<DWORD> getPGOEntryCount();
-  DIAResult<DWORD> getPGOEdgeCount();
-  DIAResult<ULONGLONG> getPGODynamicInstructionCount();
-  DIAResult<DWORD> getStaticSize();
-  DIAResult<DWORD> getFinalLiveStaticSize();
-  DIAResult<DIAString> getPhaseName();
-  DIAResult<BOOL> hasControlFlowCheck();
-#endif
-
-  DIAResult<DiaSymbolPtr> getLexicalParent();
-  DIAResult<DiaSymbolPtr> getClassParent();
-  DIAResult<DiaSymbolPtr> getType();
-  DIAResult<DiaSymbolPtr> getArrayIndexType();
-  DIAResult<DiaSymbolPtr> getVirtualTableShape();
-  DIAResult<DiaSymbolPtr> getLowerBound();
-  DIAResult<DiaSymbolPtr> getUpperBound();
-  DIAResult<DiaSymbolPtr> getObjectPointerType();
-  DIAResult<DiaSymbolPtr> getContainer();
-  DIAResult<DiaSymbolPtr> getVirtualBaseTableType();
-  DIAResult<DiaSymbolPtr> getUnmodifiedType();
-  DIAResult<DiaSymbolPtr> getSubType();
-  DIAResult<DiaSymbolPtr> getBaseSymbol();
-
-  DIAResult<DWORD> getAccess();
-  DIAResult<DWORD> getAddressOffset();
-  DIAResult<DWORD> getAddressSection();
-  DIAResult<DWORD> getAge();
-  DIAResult<DWORD> getArrayIndexTypeId();
-  DIAResult<DWORD> getBackEndBuild();
-  DIAResult<DWORD> getBackEndMajor();
-  DIAResult<DWORD> getBackEndMinor();
-  DIAResult<DWORD> getBackEndQFE();
-  DIAResult<DWORD> getBaseDataOffset();
-  DIAResult<DWORD> getBaseDataSlot();
-  DIAResult<DWORD> getBaseSymbolId();
-  DIAResult<DWORD> getBaseType();
-  DIAResult<DWORD> getBitPosition();
-  DIAResult<DWORD> getBuiltInKind();
-  DIAResult<CV_call_e> getCallingConvention();
-  DIAResult<DWORD> getClassParentId();
-  DIAResult<DIAString> getCompilerName();
-  DIAResult<DWORD> getCount();
-  DIAResult<DWORD> getCountLiveRanges();
-  DIAResult<DWORD> getFrontEndBuild();
-  DIAResult<DWORD> getFrontEndMajor();
-  DIAResult<DWORD> getFrontEndMinor();
-  DIAResult<DWORD> getFrontEndQFE();
-  DIAResult<CV_CFL_LANG> getLanguage();
-  DIAResult<DWORD> getLexicalParentId();
-  DIAResult<DIAString> getLibraryName();
-  DIAResult<DWORD> getLiveRangeStartAddressOffset();
-  DIAResult<DWORD> getLiveRangeStartAddressSection();
-  DIAResult<DWORD> getLiveRangeStartRelativeVirtualAddress();
-  DIAResult<DWORD> getLocalBasePointerRegisterId();
-  DIAResult<DWORD> getLowerBoundId();
-  DIAResult<DWORD> getMemorySpaceKind();
-  DIAResult<DIAString> getName();
-  DIAResult<DWORD> getNumberOfAcceleratorPointerTags();
-  DIAResult<DWORD> getNumberOfColumns();
-  DIAResult<DWORD> getNumberOfModifiers();
-  DIAResult<DWORD> getNumberOfRegisterIndices();
-  DIAResult<DWORD> getNumberOfRows();
-  DIAResult<DIAString> getObjectFileName();
-  DIAResult<DWORD> getOemSymbolId();
-  DIAResult<DWORD> getOffsetInUdt();
-  DIAResult<CV_CPU_TYPE_e> getPlatform();
-  DIAResult<DWORD> getRank();
-  DIAResult<DWORD> getRegisterId();
-  DIAResult<DWORD> getRegisterType();
-  DIAResult<DWORD> getRelativeVirtualAddress();
-  DIAResult<DWORD> getSamplerSlot();
-  DIAResult<DWORD> getSignature();
-  DIAResult<DWORD> getSizeInUdt();
-  DIAResult<DWORD> getSlot();
-  DIAResult<DIAString> getSourceFileName();
-  DIAResult<DWORD> getStride();
-  DIAResult<DWORD> getSubTypeId();
-  DIAResult<DIAString> getSymbolsFileName();
-  DIAResult<DWORD> getSymIndexId();
-  DIAResult<DWORD> getTargetOffset();
-  DIAResult<DWORD> getTargetRelativeVirtualAddress();
-  DIAResult<DWORD> getTargetSection();
-  DIAResult<DWORD> getTextureSlot();
-  DIAResult<DWORD> getTimeStamp();
-  DIAResult<DWORD> getToken();
-  DIAResult<DWORD> getUavSlot();
-  DIAResult<DIAString> getUndecoratedName();
-  DIAResult<DWORD> getUnmodifiedTypeId();
-  DIAResult<DWORD> getUpperBoundId();
-  DIAResult<DWORD> getVirtualBaseDispIndex();
-  DIAResult<DWORD> getVirtualBaseOffset();
-  DIAResult<DWORD> getVirtualTableShapeId();
-  DIAResult<DataKind> getDataKind();
-  DIAResult<DiaSymTagEnum> getSymTag();
-  DIAResult<GUID> getGuid();
-  DIAResult<LONG> getOffset();
-  DIAResult<LONG> getThisAdjust();
-  DIAResult<LONG> getVirtualBasePointerOffset();
-  DIAResult<LocationType> getLocationType();
-  DIAResult<MachineTypeEnum> getMachineType();
-  DIAResult<THUNK_ORDINAL> getThunkOrdinal();
-  DIAResult<ULONGLONG> getLength();
-  DIAResult<ULONGLONG> getLiveRangeLength();
-  DIAResult<ULONGLONG> getTargetVirtualAddress();
-  DIAResult<ULONGLONG> getVirtualAddress();
-  DIAResult<UdtKind> getUdtKind();
-  DIAResult<BOOL> hasConstructor();
-  DIAResult<BOOL> hasCustomCallingConvention();
-  DIAResult<BOOL> hasFarReturn();
-  DIAResult<BOOL> isCode();
-  DIAResult<BOOL> isCompilerGenerated();
-  DIAResult<BOOL> isConstType();
-  DIAResult<BOOL> isEditAndContinueEnabled();
-  DIAResult<BOOL> isFunction();
-  DIAResult<BOOL> getAddressTaken();
-  DIAResult<BOOL> getNoStackOrdering();
-  DIAResult<BOOL> hasAlloca();
-  DIAResult<BOOL> hasAssignmentOperator();
-  DIAResult<BOOL> hasCTypes();
-  DIAResult<BOOL> hasCastOperator();
-  DIAResult<BOOL> hasDebugInfo();
-  DIAResult<BOOL> hasEH();
-  DIAResult<BOOL> hasEHa();
-  DIAResult<BOOL> hasInlAsm();
-  DIAResult<BOOL> hasInlineAttribute();
-  DIAResult<BOOL> hasInterruptReturn();
-  DIAResult<BOOL> hasLongJump();
-  DIAResult<BOOL> hasManagedCode();
-  DIAResult<BOOL> hasNestedTypes();
-  DIAResult<BOOL> hasNoInlineAttribute();
-  DIAResult<BOOL> hasNoReturnAttribute();
-  DIAResult<BOOL> hasOptimizedCodeDebugInfo();
-  DIAResult<BOOL> hasOverloadedOperator();
-  DIAResult<BOOL> hasSEH();
-  DIAResult<BOOL> hasSecurityChecks();
-  DIAResult<BOOL> hasSetJump();
-  DIAResult<BOOL> hasStrictGSCheck();
-  DIAResult<BOOL> isAcceleratorGroupSharedLocal();
-  DIAResult<BOOL> isAcceleratorPointerTagLiveRange();
-  DIAResult<BOOL> isAcceleratorStubFunction();
-  DIAResult<BOOL> isAggregated();
-  DIAResult<BOOL> isBaseVirtualFunction();
-  DIAResult<BOOL> isCVTCIL();
-  DIAResult<BOOL> isConstructorVirtualBase();
-  DIAResult<BOOL> isCxxReturnUdt();
-  DIAResult<BOOL> isDataAligned();
-  DIAResult<BOOL> isHLSLData();
-  DIAResult<BOOL> isHotpatchable();
-  DIAResult<BOOL> isIndirectVirtualBaseClass();
-  DIAResult<BOOL> isInterfaceUdt();
-  DIAResult<BOOL> isIntrinsic();
-  DIAResult<BOOL> isLTCG();
-  DIAResult<BOOL> isLocationControlFlowDependent();
-  DIAResult<BOOL> isMSILNetmodule();
-  DIAResult<BOOL> isManagedRef();
-  DIAResult<BOOL> isMatrixRowMajor();
-  DIAResult<BOOL> isMsilRef();
-  DIAResult<BOOL> isMultipleInheritance();
-  DIAResult<BOOL> isNaked();
-  DIAResult<BOOL> isNested();
-  DIAResult<BOOL> isOptimizedAway();
-  DIAResult<BOOL> isPacked();
-  DIAResult<BOOL> isPointerBasedOnSymbolValue();
-  DIAResult<BOOL> isPointerToDataMember();
-  DIAResult<BOOL> isPointerToMemberFunction();
-  DIAResult<BOOL> isPureVirtual();
-  DIAResult<BOOL> isRValueReference();
-  DIAResult<BOOL> isRefUdt();
-  DIAResult<BOOL> isReference();
-  DIAResult<BOOL> isRestrictedType();
-  DIAResult<BOOL> isReturnValue();
-  DIAResult<BOOL> isSafeBuffers();
-  DIAResult<BOOL> isScoped();
-  DIAResult<BOOL> isSdl();
-  DIAResult<BOOL> isSingleInheritance();
-  DIAResult<BOOL> isSplitted();
-  DIAResult<BOOL> isStatic();
-  DIAResult<BOOL> isStripped();
-  DIAResult<BOOL> isUnalignedType();
-  DIAResult<BOOL> isUnreached();
-  DIAResult<BOOL> isValueUdt();
-  DIAResult<BOOL> isVirtual();
-  DIAResult<BOOL> isVirtualBaseClass();
-  DIAResult<BOOL> isVirtualInheritance();
-  DIAResult<BOOL> isVolatileType();
-
-private:
-  template <class T, class U = T>
-  DIAResult<U>
-  InternalGetDIAValue(HRESULT (__stdcall IDiaSymbol::*Method)(T *)) {
-    T Value;
-    if (S_OK == (Symbol->*Method)(&Value))
-      return DIAResult<U>(U(Value));
-    else
-      return DIAResult<U>();
-  }
-
-  DIAResult<DIAString>
-  InternalGetDIAStringValue(HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
-    BSTR String16;
-    if (S_OK == (Symbol->*Method)(&String16)) {
-      std::string String8;
-      llvm::sys::windows::BSTRToUTF8(String16, String8);
-      SysFreeString(String16);
-      return DIAResult<DIAString>(DIAString(String8));
-    } else
-      return DIAResult<DIAString>();
-  }
-
-  IDiaSymbol *Symbol;
-};
-
-} // namespace windows
-} // namespace sys
-} // namespace llvm
-
-#endif

Modified: llvm/trunk/tools/llvm-pdbdump/LLVMBuild.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/LLVMBuild.txt?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/LLVMBuild.txt (original)
+++ llvm/trunk/tools/llvm-pdbdump/LLVMBuild.txt Tue Feb 10 16:43:25 2015
@@ -19,5 +19,5 @@
 type = Tool
 name = llvm-pdbdump
 parent = Tools
-required_libraries = 
+required_libraries = DebugInfoPDB
 

Added: llvm/trunk/tools/llvm-pdbdump/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/Makefile?rev=228755&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/Makefile (added)
+++ llvm/trunk/tools/llvm-pdbdump/Makefile Tue Feb 10 16:43:25 2015
@@ -0,0 +1,17 @@
+##===- tools/llvm-pdbdump/Makefile -------------------------*- Makefile -*-===##
+#
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+#
+##===----------------------------------------------------------------------===##
+
+LEVEL := ../..
+TOOLNAME := llvm-pdbdump
+LINK_COMPONENTS := DebugInfoPDB Object
+
+# This tool has no plugins, optimize startup time.
+TOOL_NO_EXPORTS := 1
+
+include $(LEVEL)/Makefile.common

Modified: llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.cpp Tue Feb 10 16:43:25 2015
@@ -15,6 +15,12 @@
 
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/StringExtras.h"
+#include "llvm/DebugInfo/PDB/PDB.h"
+#include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
+#include "llvm/DebugInfo/PDB/IPDBSession.h"
+#include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
+#include "llvm/DebugInfo/PDB/PDBSymbolExe.h"
+#include "llvm/DebugInfo/PDB/PDBSymbolCompiland.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ConvertUTF.h"
 #include "llvm/Support/Format.h"
@@ -24,335 +30,46 @@
 #include "llvm/Support/PrettyStackTrace.h"
 #include "llvm/Support/Signals.h"
 
-#include "llvm-pdbdump.h"
-#include "COMExtras.h"
-#include "DIAExtras.h"
-#include "DIASymbol.h"
+#include <Windows.h>
 
 using namespace llvm;
-using namespace llvm::sys::windows;
 
 namespace opts {
 cl::list<std::string> InputFilenames(cl::Positional,
                                      cl::desc("<input PDB files>"),
                                      cl::OneOrMore);
 
-cl::opt<bool> Streams("streams", cl::desc("Display data stream information"));
-cl::alias StreamsShort("x", cl::desc("Alias for --streams"),
-                       cl::aliasopt(Streams));
-
-cl::opt<bool> StreamData("stream-data",
-                         cl::desc("Dumps stream record data as bytes"));
-cl::alias StreamDataShort("X", cl::desc("Alias for --stream-data"),
-                          cl::aliasopt(StreamData));
-
-cl::opt<bool> Tables("tables",
-                     cl::desc("Display summary information for all of the "
-                              "debug tables in the input file"));
-cl::alias TablesShort("t", cl::desc("Alias for --tables"),
-                      cl::aliasopt(Tables));
-
-cl::opt<bool> SourceFiles("source-files",
-                          cl::desc("Display a list of the source files "
-                                   "contained in the PDB"));
-cl::alias SourceFilesShort("f", cl::desc("Alias for --source-files"),
-                           cl::aliasopt(SourceFiles));
-
 cl::opt<bool> Compilands("compilands",
                          cl::desc("Display a list of compilands (e.g. object "
-                                  "files) and their source file composition"));
+                                  "files) and symbols for each one."));
 cl::alias CompilandsShort("c", cl::desc("Alias for --compilands"),
                           cl::aliasopt(Compilands));
-
-cl::opt<bool> Symbols("symbols", cl::desc("Display symbols"));
-cl::alias SymbolsShort("s", cl::desc("Alias for --symbols"),
-                       cl::aliasopt(Symbols));
-
-cl::opt<bool> SymbolDetails("symbol-details",
-                            cl::desc("Display symbol details"));
-cl::alias SymbolDetailsShort("S", cl::desc("Alias for --symbol-details"),
-                             cl::aliasopt(SymbolDetails));
-}
-
-template <typename TableType>
-static HRESULT getDIATable(IDiaSession *Session, TableType **Table) {
-  CComPtr<IDiaEnumTables> EnumTables = nullptr;
-  HRESULT Error = S_OK;
-  if (FAILED(Error = Session->getEnumTables(&EnumTables)))
-    return Error;
-
-  for (auto CurTable : make_com_enumerator(EnumTables)) {
-    TableType *ResultTable = nullptr;
-    if (FAILED(CurTable->QueryInterface(
-            __uuidof(TableType), reinterpret_cast<void **>(&ResultTable))))
-      continue;
-
-    *Table = ResultTable;
-    return S_OK;
-  }
-  return E_FAIL;
-}
-
-static void dumpBasicFileInfo(StringRef Path, IDiaSession *Session) {
-  CComPtr<IDiaSymbol> GlobalScope;
-  HRESULT hr = Session->get_globalScope(&GlobalScope);
-  DIASymbol GlobalScopeSymbol(GlobalScope);
-  if (S_OK == hr)
-    GlobalScopeSymbol.getSymbolsFileName().dump("File", 0);
-  else
-    outs() << "File: " << Path << "\n";
-  HANDLE FileHandle = ::CreateFile(
-      Path.data(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, nullptr,
-      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
-  LARGE_INTEGER FileSize;
-  if (INVALID_HANDLE_VALUE != FileHandle) {
-    outs().indent(2);
-    if (::GetFileSizeEx(FileHandle, &FileSize))
-      outs() << "Size: " << FileSize.QuadPart << " bytes\n";
-    else
-      outs() << "Size: (Unable to obtain file size)\n";
-    FILETIME ModifiedTime;
-    outs().indent(2);
-    if (::GetFileTime(FileHandle, nullptr, nullptr, &ModifiedTime)) {
-      ULARGE_INTEGER TimeInteger;
-      TimeInteger.LowPart = ModifiedTime.dwLowDateTime;
-      TimeInteger.HighPart = ModifiedTime.dwHighDateTime;
-      llvm::sys::TimeValue Time;
-      Time.fromWin32Time(TimeInteger.QuadPart);
-      outs() << "Timestamp: " << Time.str() << "\n";
-    } else {
-      outs() << "Timestamp: (Unable to obtain time stamp)\n";
-    }
-    ::CloseHandle(FileHandle);
-  }
-
-  if (S_OK == hr)
-    GlobalScopeSymbol.fullDump(2);
-  outs() << "\n";
-  outs().flush();
 }
 
-static void dumpDataStreams(IDiaSession *Session) {
-  CComPtr<IDiaEnumDebugStreams> DebugStreams = nullptr;
-  if (FAILED(Session->getEnumDebugStreams(&DebugStreams)))
-    return;
-
-  LONG Count = 0;
-  if (FAILED(DebugStreams->get_Count(&Count)))
+static void dumpInput(StringRef Path) {
+  std::unique_ptr<IPDBSession> Session(
+      llvm::createPDBReader(PDB_ReaderType::DIA, Path));
+  if (!Session) {
+    outs() << "Unable to create PDB reader.  Check that a valid implementation";
+    outs() << " is available for your platform.";
     return;
-  outs() << "Data Streams [count=" << Count << "]\n";
-
-  std::string Name8;
-
-  for (auto Stream : make_com_enumerator(DebugStreams)) {
-    BSTR Name16;
-    if (FAILED(Stream->get_name(&Name16)))
-      continue;
-    if (BSTRToUTF8(Name16, Name8))
-      outs() << "  " << Name8;
-    ::SysFreeString(Name16);
-    if (FAILED(Stream->get_Count(&Count))) {
-      outs() << "\n";
-      continue;
-    }
-
-    outs() << " [" << Count << " records]\n";
-    if (opts::StreamData) {
-      int RecordIndex = 0;
-      for (auto StreamRecord : make_com_data_record_enumerator(Stream)) {
-        outs() << "    Record " << RecordIndex << " [" << StreamRecord.size()
-               << " bytes]";
-        for (uint8_t byte : StreamRecord) {
-          outs() << " " << llvm::format_hex_no_prefix(byte, 2, true);
-        }
-        outs() << "\n";
-        ++RecordIndex;
-      }
-    }
   }
-  outs() << "\n";
-  outs().flush();
-}
-
-static void dumpDebugTables(IDiaSession *Session) {
-  CComPtr<IDiaEnumTables> EnumTables = nullptr;
-  if (SUCCEEDED(Session->getEnumTables(&EnumTables))) {
-    LONG Count = 0;
-    if (FAILED(EnumTables->get_Count(&Count)))
-      return;
-
-    outs() << "Debug Tables [count=" << Count << "]\n";
 
-    std::string Name8;
-    for (auto Table : make_com_enumerator(EnumTables)) {
-      BSTR Name16;
-      if (FAILED(Table->get_name(&Name16)))
-        continue;
-      if (BSTRToUTF8(Name16, Name8))
-        outs() << "  " << Name8;
-      ::SysFreeString(Name16);
-      if (SUCCEEDED(Table->get_Count(&Count))) {
-        outs() << " [" << Count << " items]\n";
-      } else
-        outs() << "\n";
-    }
-  }
-  outs() << "\n";
-  outs().flush();
-}
-
-static void dumpSourceFiles(IDiaSession *Session) {
-  CComPtr<IDiaEnumSourceFiles> EnumSourceFileList;
-  if (FAILED(getDIATable(Session, &EnumSourceFileList)))
-    return;
-
-  LONG SourceFileCount = 0;
-  EnumSourceFileList->get_Count(&SourceFileCount);
-
-  outs() << "Dumping source files [" << SourceFileCount << " files]\n";
-  for (auto SourceFile : make_com_enumerator(EnumSourceFileList)) {
-    CComBSTR SourceFileName;
-    if (S_OK != SourceFile->get_fileName(&SourceFileName))
-      continue;
-    outs().indent(2);
-    std::string SourceFileName8;
-    BSTRToUTF8(SourceFileName, SourceFileName8);
-    outs() << SourceFileName8 << "\n";
-  }
-  outs() << "\n";
+  auto GlobalScope(Session->getGlobalScope());
+  GlobalScope->dump(outs(), 0, PDB_DumpLevel::Normal);
   outs().flush();
-}
-
-static void dumpCompilands(IDiaSession *Session) {
-  CComPtr<IDiaEnumSourceFiles> EnumSourceFileList;
-  if (FAILED(getDIATable(Session, &EnumSourceFileList)))
-    return;
-
-  LONG SourceFileCount = 0;
-  EnumSourceFileList->get_Count(&SourceFileCount);
-
-  CComPtr<IDiaSymbol> GlobalScope;
-  HRESULT hr = Session->get_globalScope(&GlobalScope);
-  DIASymbol GlobalScopeSymbol(GlobalScope);
-  if (S_OK != hr)
-    return;
-
-  CComPtr<IDiaEnumSymbols> EnumCompilands;
-  if (S_OK !=
-      GlobalScope->findChildren(SymTagCompiland, nullptr, nsNone,
-                                &EnumCompilands))
-    return;
-
-  LONG CompilandCount = 0;
-  EnumCompilands->get_Count(&CompilandCount);
-  outs() << "Dumping compilands [" << CompilandCount
-         << " compilands containing " << SourceFileCount << " source files]\n";
-
-  for (auto Compiland : make_com_enumerator(EnumCompilands)) {
-    DIASymbol CompilandSymbol(Compiland);
-    outs().indent(2);
-    outs() << CompilandSymbol.getName().value() << "\n";
 
-    CComPtr<IDiaEnumSourceFiles> EnumFiles;
-    if (S_OK != Session->findFile(Compiland, nullptr, nsNone, &EnumFiles))
-      continue;
-
-    for (auto SourceFile : make_com_enumerator(EnumFiles)) {
-      DWORD ChecksumType = 0;
-      DWORD ChecksumSize = 0;
-      std::vector<uint8_t> Checksum;
-      outs().indent(4);
-      SourceFile->get_checksumType(&ChecksumType);
-      if (S_OK == SourceFile->get_checksum(0, &ChecksumSize, nullptr)) {
-        Checksum.resize(ChecksumSize);
-        if (S_OK ==
-            SourceFile->get_checksum(ChecksumSize, &ChecksumSize,
-                                     &Checksum[0])) {
-          outs() << "[" << ((ChecksumType == HashMD5) ? "MD5  " : "SHA-1")
-                 << ": ";
-          for (auto byte : Checksum)
-            outs() << format_hex_no_prefix(byte, 2, true);
-          outs() << "] ";
-        }
+  if (opts::Compilands) {
+    auto Compilands = GlobalScope->findChildren(PDB_SymType::Compiland);
+    if (Compilands) {
+      while (auto Compiland = Compilands->getNext()) {
+        Compiland->dump(outs(), 0, PDB_DumpLevel::Normal);
       }
-      CComBSTR SourceFileName;
-      if (S_OK != SourceFile->get_fileName(&SourceFileName))
-        continue;
-
-      std::string SourceFileName8;
-      BSTRToUTF8(SourceFileName, SourceFileName8);
-      outs() << SourceFileName8 << "\n";
     }
   }
-
-  outs() << "\n";
   outs().flush();
 }
 
-static void dumpSymbols(IDiaSession *Session) {
-  CComPtr<IDiaEnumSymbols> EnumSymbols;
-  if (FAILED(getDIATable(Session, &EnumSymbols)))
-    return;
-
-  LONG SymbolCount = 0;
-  EnumSymbols->get_Count(&SymbolCount);
-
-  outs() << "Dumping symbols [" << SymbolCount << " symbols]\n";
-  int UnnamedSymbolCount = 0;
-  for (auto Symbol : make_com_enumerator(EnumSymbols)) {
-    DIASymbol SymbolSymbol(Symbol);
-    DIAResult<DIAString> SymbolName = SymbolSymbol.getName();
-    if (!SymbolName.hasValue() || SymbolName.value().empty()) {
-      ++UnnamedSymbolCount;
-      outs() << "  (Unnamed symbol)\n";
-    } else {
-      outs() << "  " << SymbolSymbol.getName().value() << "\n";
-    }
-    if (opts::SymbolDetails)
-      SymbolSymbol.fullDump(4);
-  }
-  outs() << "(Found " << UnnamedSymbolCount << " unnamed symbols)\n";
-  outs().flush();
-}
-
-static void dumpInput(StringRef Path) {
-  SmallVector<UTF16, 128> Path16String;
-  llvm::convertUTF8ToUTF16String(Path, Path16String);
-  wchar_t *Path16 = reinterpret_cast<wchar_t *>(Path16String.data());
-  CComPtr<IDiaDataSource> source;
-  HRESULT hr =
-      ::CoCreateInstance(CLSID_DiaSource, nullptr, CLSCTX_INPROC_SERVER,
-                         __uuidof(IDiaDataSource), (void **)&source);
-  if (FAILED(hr))
-    return;
-  if (FAILED(source->loadDataFromPdb(Path16)))
-    return;
-  CComPtr<IDiaSession> Session;
-  if (FAILED(source->openSession(&Session)))
-    return;
-
-  dumpBasicFileInfo(Path, Session);
-  if (opts::Streams || opts::StreamData) {
-    dumpDataStreams(Session);
-  }
-
-  if (opts::Tables) {
-    dumpDebugTables(Session);
-  }
-
-  if (opts::SourceFiles) {
-    dumpSourceFiles(Session);
-  }
-
-  if (opts::Compilands) {
-    dumpCompilands(Session);
-  }
-
-  if (opts::Symbols || opts::SymbolDetails) {
-    dumpSymbols(Session);
-  }
-}
-
 int main(int argc_, const char *argv_[]) {
   // Print a stack trace if we signal out.
   sys::PrintStackTraceOnErrorSignal();

Removed: llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h?rev=228754&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h (original)
+++ llvm/trunk/tools/llvm-pdbdump/llvm-pdbdump.h (removed)
@@ -1,32 +0,0 @@
-//===- llvm-pdbdump.h - Common includes for llvm-pdbdump --------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-// Common defines and header includes for all llvm-pdbdump.  The definitions
-// here configure the necessary #defines and include system headers in the
-// proper order for using DIA.
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H
-#define LLVM_TOOLS_LLVMPDBDUMP_LLVMPDBDUMP_H
-
-#define NTDDI_VERSION NTDDI_VISTA
-#define _WIN32_WINNT _WIN32_WINNT_VISTA
-#define WINVER _WIN32_WINNT_VISTA
-#ifndef NOMINMAX
-#define NOMINMAX
-#endif
-
-// atlbase.h has to come before windows.h
-#include <atlbase.h>
-#include <windows.h>
-
-// DIA headers must come after windows headers.
-#include <cvconst.h>
-#include <dia2.h>
-
-#endif
\ No newline at end of file

Modified: llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp?rev=228755&r1=228754&r2=228755&view=diff
==============================================================================
--- llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp (original)
+++ llvm/trunk/unittests/DebugInfo/PDB/PDBApiTest.cpp Tue Feb 10 16:43:25 2015
@@ -7,7 +7,6 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include <type_traits>
 #include <unordered_map>
 
 #include "llvm/DebugInfo/PDB/IPDBEnumChildren.h"
@@ -51,16 +50,6 @@
 #include "gtest/gtest.h"
 using namespace llvm;
 
-namespace std {
-  template<>
-  struct hash<PDB_SymType> {
-  public:
-    std::size_t operator()(PDB_SymType Symbol) const {
-      return std::hash<int>()(static_cast<int>(Symbol));
-    }
-  };
-}
-
 namespace {
 
 #define MOCK_SYMBOL_ACCESSOR(Func)                                             \
@@ -82,18 +71,27 @@ class MockSession : public IPDBSession {
   getSourceFileById(uint32_t SymbolId) const override {
     return nullptr;
   }
-  std::unique_ptr<IPDBEnumDataStreams> getDebugStreams() const override {
+  std::unique_ptr<IPDBEnumSourceFiles> getAllSourceFiles() const override {
+    return nullptr;
+  }
+  std::unique_ptr<IPDBEnumSourceFiles> getSourceFilesForCompiland(
+      const PDBSymbolCompiland &Compiland) const override {
     return nullptr;
   }
 };
 
 class MockRawSymbol : public IPDBRawSymbol {
 public:
-  MockRawSymbol(PDB_SymType SymType) : Type(SymType) {}
+  MockRawSymbol(const IPDBSession &PDBSession, PDB_SymType SymType)
+      : Session(PDBSession), Type(SymType) {}
 
-  void dump(llvm::raw_ostream &OS) const override {}
+  void dump(raw_ostream &OS, int Indent, PDB_DumpLevel Level) const override {}
 
   std::unique_ptr<IPDBEnumSymbols>
+  findChildren(PDB_SymType Type) const override {
+    return nullptr;
+  }
+  std::unique_ptr<IPDBEnumSymbols>
   findChildren(PDB_SymType Type, StringRef Name,
                PDB_NameSearchFlags Flags) const override {
     return nullptr;
@@ -206,6 +204,7 @@ public:
   MOCK_SYMBOL_ACCESSOR(hasDebugInfo)
   MOCK_SYMBOL_ACCESSOR(hasEH)
   MOCK_SYMBOL_ACCESSOR(hasEHa)
+  MOCK_SYMBOL_ACCESSOR(hasFramePointer)
   MOCK_SYMBOL_ACCESSOR(hasInlAsm)
   MOCK_SYMBOL_ACCESSOR(hasInlineAttribute)
   MOCK_SYMBOL_ACCESSOR(hasInterruptReturn)
@@ -270,6 +269,7 @@ public:
   MOCK_SYMBOL_ACCESSOR(isVolatileType)
 
 private:
+  const IPDBSession &Session;
   PDB_SymType Type;
 };
 
@@ -334,7 +334,7 @@ private:
   std::unique_ptr<IPDBSession> Session;
 
   void InsertItemWithTag(PDB_SymType Tag) {
-    auto RawSymbol = std::unique_ptr<IPDBRawSymbol>(new MockRawSymbol(Tag));
+    auto RawSymbol = std::make_unique<MockRawSymbol>(*Session, Tag);
     auto Symbol = PDBSymbol::create(*Session, std::move(RawSymbol));
     SymbolMap.insert(std::make_pair(Tag, std::move(Symbol)));
   }





More information about the llvm-commits mailing list