[llvm] r270628 - [codeview] Add support for new type records.

Zachary Turner via llvm-commits llvm-commits at lists.llvm.org
Tue May 24 15:58:47 PDT 2016


Author: zturner
Date: Tue May 24 17:58:46 2016
New Revision: 270628

URL: http://llvm.org/viewvc/llvm-project?rev=270628&view=rev
Log:
[codeview] Add support for new type records.

This adds support for parsing and dumping the following
symbol types:

S_LPROCREF
S_ENVBLOCK
S_COMPILE2
S_REGISTER
S_COFFGROUP
S_SECTION
S_THUNK32
S_TRAMPOLINE

As of this patch, the test PDB files no longer have any unknown
symbol types.

Modified:
    llvm/trunk/include/llvm/DebugInfo/CodeView/CVSymbolTypes.def
    llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h
    llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h
    llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h
    llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h
    llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBExtras.h
    llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h
    llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp
    llvm/trunk/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp
    llvm/trunk/lib/DebugInfo/PDB/PDBExtras.cpp
    llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test
    llvm/trunk/tools/llvm-pdbdump/CompilandDumper.cpp

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/CVSymbolTypes.def
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/CVSymbolTypes.def?rev=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/CVSymbolTypes.def (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/CVSymbolTypes.def Tue May 24 17:58:46 2016
@@ -126,13 +126,10 @@ CV_SYMBOL(S_UNAMESPACE_ST , 0x1029)
 CV_SYMBOL(S_ST_MAX        , 0x1100)
 
 
-CV_SYMBOL(S_THUNK32       , 0x1102)
 CV_SYMBOL(S_WITH32        , 0x1104)
-CV_SYMBOL(S_REGISTER      , 0x1106)
 CV_SYMBOL(S_MANYREG       , 0x110a)
 CV_SYMBOL(S_LPROCMIPS     , 0x1114)
 CV_SYMBOL(S_GPROCMIPS     , 0x1115)
-CV_SYMBOL(S_COMPILE2      , 0x1116)
 CV_SYMBOL(S_MANYREG2      , 0x1117)
 CV_SYMBOL(S_LPROCIA64     , 0x1118)
 CV_SYMBOL(S_GPROCIA64     , 0x1119)
@@ -148,12 +145,10 @@ CV_SYMBOL(S_MANREGREL     , 0x1122)
 CV_SYMBOL(S_MANMANYREG2   , 0x1123)
 CV_SYMBOL(S_UNAMESPACE    , 0x1124)
 CV_SYMBOL(S_DATAREF       , 0x1126)
-CV_SYMBOL(S_LPROCREF      , 0x1127)
 CV_SYMBOL(S_ANNOTATIONREF , 0x1128)
 CV_SYMBOL(S_TOKENREF      , 0x1129)
 CV_SYMBOL(S_GMANPROC      , 0x112a)
 CV_SYMBOL(S_LMANPROC      , 0x112b)
-CV_SYMBOL(S_TRAMPOLINE    , 0x112c)
 CV_SYMBOL(S_ATTR_FRAMEREL , 0x112e)
 CV_SYMBOL(S_ATTR_REGISTER , 0x112f)
 CV_SYMBOL(S_ATTR_REGREL   , 0x1130)
@@ -164,11 +159,8 @@ CV_SYMBOL(S_SEPCODE       , 0x1132)
 CV_SYMBOL(S_LOCAL_2005    , 0x1133)
 CV_SYMBOL(S_DEFRANGE_2005 , 0x1134)
 CV_SYMBOL(S_DEFRANGE2_2005, 0x1135)
-CV_SYMBOL(S_SECTION       , 0x1136)
-CV_SYMBOL(S_COFFGROUP     , 0x1137)
 CV_SYMBOL(S_EXPORT        , 0x1138)
 CV_SYMBOL(S_DISCARDED     , 0x113b)
-CV_SYMBOL(S_ENVBLOCK      , 0x113d)
 
 // Current symbol types for most procedures as of this writing.
 CV_SYMBOL(S_LPROCMIPS_ID   , 0x1148)
@@ -179,7 +171,6 @@ CV_SYMBOL(S_GPROCIA64_ID   , 0x114b)
 CV_SYMBOL(S_DEFRANGE_HLSL  , 0x1150)
 CV_SYMBOL(S_GDATA_HLSL     , 0x1151)
 CV_SYMBOL(S_LDATA_HLSL     , 0x1152)
-CV_SYMBOL(S_FILESTATIC     , 0x1153)
 CV_SYMBOL(S_LOCAL_DPC_GROUPSHARED, 0x1154)
 CV_SYMBOL(S_DEFRANGE_DPC_PTR_TAG, 0x1157)
 CV_SYMBOL(S_DPC_SYM_TAG_MAP, 0x1158)
@@ -199,6 +190,11 @@ SYMBOL_RECORD(S_END					 , 0x0006, Scope
 SYMBOL_RECORD_ALIAS(S_INLINESITE_END , 0x114e, InlineSiteEnd, ScopeEndSym)
 SYMBOL_RECORD_ALIAS(S_PROC_ID_END    , 0x114f, ProcEnd, ScopeEndSym) 
 
+SYMBOL_RECORD(S_THUNK32       , 0x1102, Thunk32Sym)
+SYMBOL_RECORD(S_TRAMPOLINE    , 0x112c, TrampolineSym)
+SYMBOL_RECORD(S_SECTION       , 0x1136, SectionSym)
+SYMBOL_RECORD(S_COFFGROUP     , 0x1137, CoffGroupSym)
+
 SYMBOL_RECORD(S_LPROC32       , 0x110f, ProcSym)
 SYMBOL_RECORD_ALIAS(S_GPROC32       , 0x1110, GlobalProcSym, ProcSym)
 SYMBOL_RECORD_ALIAS(S_LPROC32_ID     , 0x1146, ProcIdSym, ProcSym)
@@ -206,8 +202,14 @@ SYMBOL_RECORD_ALIAS(S_GPROC32_ID     , 0
 SYMBOL_RECORD_ALIAS(S_LPROC32_DPC    , 0x1155, DPCProcSym, ProcSym)
 SYMBOL_RECORD_ALIAS(S_LPROC32_DPC_ID , 0x1156, DPCProcIdSym, ProcSym)
 
+SYMBOL_RECORD(S_REGISTER      , 0x1106, RegisterSym)
 SYMBOL_RECORD(S_PUB32         , 0x110e, PublicSym32)
+
 SYMBOL_RECORD(S_PROCREF       , 0x1125, ProcRefSym)
+SYMBOL_RECORD_ALIAS(S_LPROCREF, 0x1127, LocalProcRef, ProcRefSym)
+
+
+SYMBOL_RECORD(S_ENVBLOCK      , 0x113d, EnvBlockSym)
 
 SYMBOL_RECORD(S_INLINESITE     , 0x114d, InlineSiteSym)
 SYMBOL_RECORD(S_LOCAL         , 0x113e, LocalSym)
@@ -221,9 +223,11 @@ SYMBOL_RECORD(S_DEFRANGE_REGISTER_REL, 0
 SYMBOL_RECORD(S_BLOCK32       , 0x1103, BlockSym)
 SYMBOL_RECORD(S_LABEL32       , 0x1105, LabelSym)
 SYMBOL_RECORD(S_OBJNAME       , 0x1101, ObjNameSym)
+SYMBOL_RECORD(S_COMPILE2      , 0x1116, Compile2Sym)
 SYMBOL_RECORD(S_COMPILE3      , 0x113c, Compile3Sym)
 SYMBOL_RECORD(S_FRAMEPROC     , 0x1012, FrameProcSym)
 SYMBOL_RECORD(S_CALLSITEINFO  , 0x1139, CallSiteInfoSym)
+SYMBOL_RECORD(S_FILESTATIC     , 0x1153, FileStaticSym)
 SYMBOL_RECORD(S_HEAPALLOCSITE  , 0x115e, HeapAllocationSiteSym)
 SYMBOL_RECORD(S_FRAMECOOKIE   , 0x113a, FrameCookieSym)
 

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h?rev=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/CodeView.h Tue May 24 17:58:46 2016
@@ -405,8 +405,21 @@ enum class ProcSymFlags : uint8_t {
 };
 CV_DEFINE_ENUM_CLASS_FLAGS_OPERATORS(ProcSymFlags)
 
+/// Corresponds to COMPILESYM2::Flags bitfield.
+enum class CompileSym2Flags : uint32_t {
+  EC = 1 << 8,
+  NoDbgInfo = 1 << 9,
+  LTCG = 1 << 10,
+  NoDataAlign = 1 << 11,
+  ManagedPresent = 1 << 12,
+  SecurityChecks = 1 << 13,
+  HotPatch = 1 << 14,
+  CVTCIL = 1 << 15,
+  MSILModule = 1 << 16,
+};
+
 /// Corresponds to COMPILESYM3::Flags bitfield.
-enum CompileSym3Flags : uint32_t {
+enum class CompileSym3Flags : uint32_t {
   EC = 1 << 8,
   NoDbgInfo = 1 << 9,
   LTCG = 1 << 10,
@@ -446,6 +459,72 @@ enum class FrameCookieKind : uint32_t {
   XorFramePointer,
   XorR13,
 };
+
+// Corresponds to CV_HREG_e enum.
+enum class RegisterId : uint16_t {
+  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,
+};
+
+/// These values correspond to the THUNK_ORDINAL enumeration.
+enum class ThunkOrdinal {
+  Standard,
+  ThisAdjustor,
+  Vcall,
+  Pcode,
+  UnknownLoad,
+  TrampIncremental,
+  BranchIsland
+};
+
+enum class TrampolineType { TrampIncremental, BranchIsland };
 }
 }
 

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h?rev=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/RecordSerialization.h Tue May 24 17:58:46 2016
@@ -131,6 +131,25 @@ template <typename T> struct serialize_v
   std::vector<T> &Item;
 };
 
+struct serialize_null_term_string_array_impl {
+  serialize_null_term_string_array_impl(std::vector<StringRef> &Item)
+      : Item(Item) {}
+
+  std::error_code deserialize(ArrayRef<uint8_t> &Data) const {
+    StringRef Field;
+    // Stop when we run out of bytes or we hit record padding bytes.
+    while (Data.front() != 0) {
+      if (auto EC = consume(Data, Field))
+        return EC;
+      Item.push_back(Field);
+    }
+    Data = Data.drop_front(1);
+    return std::error_code();
+  }
+
+  std::vector<StringRef> &Item;
+};
+
 template <typename T> struct serialize_arrayref_tail_impl {
   serialize_arrayref_tail_impl(ArrayRef<T> &Item) : Item(Item) {}
 
@@ -158,6 +177,11 @@ serialize_array_impl<T, U> serialize_arr
   return serialize_array_impl<T, U>(Item, Func);
 }
 
+inline serialize_null_term_string_array_impl
+serialize_null_term_string_array(std::vector<StringRef> &Item) {
+  return serialize_null_term_string_array_impl(Item);
+}
+
 template <typename T>
 serialize_vector_tail_impl<T> serialize_array_tail(std::vector<T> &Item) {
   return serialize_vector_tail_impl<T>(Item);
@@ -186,6 +210,10 @@ template <typename T> serialize_numeric_
 // This is an array that exhausts the remainder of the input buffer.
 #define CV_ARRAY_FIELD_TAIL(I) serialize_array_tail(I)
 
+// This is an array that consumes null terminated strings until a double null
+// is encountered.
+#define CV_STRING_ARRAY_NULL_TERM(I) serialize_null_term_string_array(I)
+
 #define CV_NUMERIC_FIELD(I) serialize_numeric(I)
 
 template <typename T, typename U>
@@ -200,6 +228,12 @@ std::error_code consume(ArrayRef<uint8_t
   return Item.deserialize(Data);
 }
 
+inline std::error_code
+consume(ArrayRef<uint8_t> &Data,
+        const serialize_null_term_string_array_impl &Item) {
+  return Item.deserialize(Data);
+}
+
 template <typename T>
 std::error_code consume(ArrayRef<uint8_t> &Data,
                         const serialize_vector_tail_impl<T> &Item) {

Modified: llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h?rev=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/CodeView/SymbolRecord.h Tue May 24 17:58:46 2016
@@ -79,6 +79,139 @@ public:
   StringRef Name;
 };
 
+// S_THUNK32
+class Thunk32Sym : public SymbolRecord {
+public:
+  struct Hdr {
+    ulittle32_t Parent;
+    ulittle32_t End;
+    ulittle32_t Next;
+    ulittle32_t Off;
+    ulittle16_t Seg;
+    ulittle16_t Len;
+    uint8_t Ord; // ThunkOrdinal enumeration
+                 // Name: The null-terminated name follows.
+                 // Variant portion of thunk
+  };
+
+  Thunk32Sym(SymbolRecordKind Kind, uint32_t RecordOffset, const Hdr *H,
+             StringRef Name, ArrayRef<uint8_t> VariantData)
+      : SymbolRecord(Kind), RecordOffset(RecordOffset), Header(*H), Name(Name),
+        VariantData(VariantData) {}
+
+  static ErrorOr<Thunk32Sym> deserialize(SymbolRecordKind Kind,
+                                         uint32_t RecordOffset,
+                                         ArrayRef<uint8_t> &Data) {
+    const Hdr *H = nullptr;
+    StringRef Name;
+    ArrayRef<uint8_t> VariantData;
+
+    CV_DESERIALIZE(Data, H, Name, CV_ARRAY_FIELD_TAIL(VariantData));
+
+    return Thunk32Sym(Kind, RecordOffset, H, Name, VariantData);
+  }
+
+  uint32_t RecordOffset;
+  Hdr Header;
+  StringRef Name;
+  ArrayRef<uint8_t> VariantData;
+};
+
+// S_TRAMPOLINE
+class TrampolineSym : public SymbolRecord {
+public:
+  struct Hdr {
+    ulittle16_t Type; // TrampolineType enum
+    ulittle16_t Size;
+    ulittle32_t ThunkOff;
+    ulittle32_t TargetOff;
+    ulittle16_t ThunkSection;
+    ulittle16_t TargetSection;
+  };
+
+  TrampolineSym(SymbolRecordKind Kind, uint32_t RecordOffset, const Hdr *H)
+      : SymbolRecord(Kind), RecordOffset(RecordOffset), Header(*H) {}
+
+  static ErrorOr<TrampolineSym> deserialize(SymbolRecordKind Kind,
+                                            uint32_t RecordOffset,
+                                            ArrayRef<uint8_t> &Data) {
+    const Hdr *H = nullptr;
+
+    CV_DESERIALIZE(Data, H);
+
+    return TrampolineSym(Kind, RecordOffset, H);
+  }
+
+  uint32_t RecordOffset;
+  Hdr Header;
+};
+
+// S_SECTION
+class SectionSym : public SymbolRecord {
+public:
+  struct Hdr {
+    ulittle16_t SectionNumber;
+    uint8_t Alignment;
+    uint8_t Reserved; // Must be 0
+    ulittle32_t Rva;
+    ulittle32_t Length;
+    ulittle32_t Characteristics;
+    // Name: The null-terminated name follows.
+  };
+
+  SectionSym(SymbolRecordKind Kind, uint32_t RecordOffset, const Hdr *H,
+             StringRef Name)
+      : SymbolRecord(Kind), RecordOffset(RecordOffset), Header(*H), Name(Name) {
+  }
+
+  static ErrorOr<SectionSym> deserialize(SymbolRecordKind Kind,
+                                         uint32_t RecordOffset,
+                                         ArrayRef<uint8_t> &Data) {
+    const Hdr *H = nullptr;
+    StringRef Name;
+
+    CV_DESERIALIZE(Data, H, Name);
+
+    return SectionSym(Kind, RecordOffset, H, Name);
+  }
+
+  uint32_t RecordOffset;
+  Hdr Header;
+  StringRef Name;
+};
+
+// S_COFFGROUP
+class CoffGroupSym : public SymbolRecord {
+public:
+  struct Hdr {
+    ulittle32_t Size;
+    ulittle32_t Characteristics;
+    ulittle32_t Offset;
+    ulittle16_t Segment;
+    // Name: The null-terminated name follows.
+  };
+
+  CoffGroupSym(SymbolRecordKind Kind, uint32_t RecordOffset, const Hdr *H,
+               StringRef Name)
+      : SymbolRecord(Kind), RecordOffset(RecordOffset), Header(*H), Name(Name) {
+  }
+
+  static ErrorOr<CoffGroupSym> deserialize(SymbolRecordKind Kind,
+                                           uint32_t RecordOffset,
+                                           ArrayRef<uint8_t> &Data) {
+    const Hdr *H = nullptr;
+    StringRef Name;
+
+    CV_DESERIALIZE(Data, H, Name);
+
+    return CoffGroupSym(Kind, RecordOffset, H, Name);
+  }
+
+  uint32_t RecordOffset;
+  Hdr Header;
+  StringRef Name;
+};
+
 class ScopeEndSym : public SymbolRecord {
 public:
   ScopeEndSym(SymbolRecordKind Kind, uint32_t RecordOffset)
@@ -95,7 +228,7 @@ public:
 class CallerSym : public SymbolRecord {
 public:
   struct Hdr {
-    uint32_t Count;
+    ulittle32_t Count;
   };
 
   CallerSym(SymbolRecordKind Kind, uint32_t RecordOffset, const Hdr *Header,
@@ -363,7 +496,35 @@ public:
   StringRef Name;
 };
 
-// S_PROCREF
+// S_REGISTER
+class RegisterSym : public SymbolRecord {
+public:
+  struct Hdr {
+    ulittle32_t Index;    // Type index or Metadata token
+    ulittle16_t Register; // RegisterId enumeration
+    // Name: The null-terminated name follows.
+  };
+
+  RegisterSym(uint32_t RecordOffset, const Hdr *H, StringRef Name)
+      : SymbolRecord(SymbolRecordKind::RegisterSym), RecordOffset(RecordOffset),
+        Header(*H), Name(Name) {}
+
+  static ErrorOr<RegisterSym> deserialize(SymbolRecordKind Kind,
+                                          uint32_t RecordOffset,
+                                          ArrayRef<uint8_t> &Data) {
+    const Hdr *H = nullptr;
+    StringRef Name;
+    CV_DESERIALIZE(Data, H, Name);
+
+    return RegisterSym(RecordOffset, H, Name);
+  }
+
+  uint32_t RecordOffset;
+  Hdr Header;
+  StringRef Name;
+};
+
+// S_PROCREF, S_LPROCREF
 class ProcRefSym : public SymbolRecord {
 public:
   struct Hdr {
@@ -794,13 +955,106 @@ public:
   StringRef Name;
 };
 
+// S_ENVBLOCK
+class EnvBlockSym : public SymbolRecord {
+public:
+  struct Hdr {
+    uint8_t Reserved;
+    // Sequence of zero terminated strings.
+  };
+
+  EnvBlockSym(uint32_t RecordOffset, const Hdr *H,
+              const std::vector<StringRef> &Fields)
+      : SymbolRecord(SymbolRecordKind::EnvBlockSym), RecordOffset(RecordOffset),
+        Header(*H), Fields(Fields) {}
+
+  static ErrorOr<EnvBlockSym> deserialize(SymbolRecordKind Kind,
+                                          uint32_t RecordOffset,
+                                          ArrayRef<uint8_t> &Data) {
+    const Hdr *H = nullptr;
+    std::vector<StringRef> Fields;
+    CV_DESERIALIZE(Data, H, CV_STRING_ARRAY_NULL_TERM(Fields));
+
+    return EnvBlockSym(RecordOffset, H, Fields);
+  }
+
+  uint32_t RecordOffset;
+  Hdr Header;
+  std::vector<StringRef> Fields;
+};
+
+// S_FILESTATIC
+class FileStaticSym : public SymbolRecord {
+public:
+  struct Hdr {
+    ulittle32_t Index;             // Type Index
+    ulittle32_t ModFilenameOffset; // Index of mod filename in string table
+    ulittle16_t Flags;             // LocalSymFlags enum
+                                   // Name: The null-terminated name follows.
+  };
+
+  FileStaticSym(uint32_t RecordOffset, const Hdr *H, StringRef Name)
+      : SymbolRecord(SymbolRecordKind::FileStaticSym),
+        RecordOffset(RecordOffset), Header(*H), Name(Name) {}
+
+  static ErrorOr<FileStaticSym> deserialize(SymbolRecordKind Kind,
+                                            uint32_t RecordOffset,
+                                            ArrayRef<uint8_t> &Data) {
+    const Hdr *H = nullptr;
+    StringRef Name;
+    CV_DESERIALIZE(Data, H, Name);
+
+    return FileStaticSym(RecordOffset, H, Name);
+  }
+
+  uint32_t RecordOffset;
+  Hdr Header;
+  StringRef Name;
+};
+
+// S_COMPILE2
+class Compile2Sym : public SymbolRecord {
+public:
+  struct Hdr {
+    ulittle32_t flags; // CompileSym2Flags enum
+    uint8_t getLanguage() const { return flags & 0xFF; }
+    unsigned short Machine; // CPUType enum
+    unsigned short VersionFrontendMajor;
+    unsigned short VersionFrontendMinor;
+    unsigned short VersionFrontendBuild;
+    unsigned short VersionBackendMajor;
+    unsigned short VersionBackendMinor;
+    unsigned short VersionBackendBuild;
+    // Version: The null-terminated version string follows.
+    // Optional block of zero terminated strings terminated with a double zero.
+  };
+
+  Compile2Sym(uint32_t RecordOffset, const Hdr *H, StringRef Version)
+      : SymbolRecord(SymbolRecordKind::Compile2Sym), RecordOffset(RecordOffset),
+        Header(*H), Version(Version) {}
+
+  static ErrorOr<Compile2Sym> deserialize(SymbolRecordKind Kind,
+                                          uint32_t RecordOffset,
+                                          ArrayRef<uint8_t> &Data) {
+    const Hdr *H = nullptr;
+    StringRef Version;
+    CV_DESERIALIZE(Data, H, Version);
+
+    return Compile2Sym(RecordOffset, H, Version);
+  }
+
+  uint32_t RecordOffset;
+  Hdr Header;
+  StringRef Version;
+};
+
 // S_COMPILE3
 class Compile3Sym : public SymbolRecord {
 public:
   struct Hdr {
     ulittle32_t flags; // CompileSym3Flags enum
     uint8_t getLanguage() const { return flags & 0xff; }
-    ulittle16_t Machine; // CPUType
+    ulittle16_t Machine; // CPUType enum
     ulittle16_t VersionFrontendMajor;
     ulittle16_t VersionFrontendMinor;
     ulittle16_t VersionFrontendBuild;

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=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/DIA/DIARawSymbol.h Tue May 24 17:58:46 2016
@@ -59,7 +59,7 @@ public:
   uint32_t getLiveRangeStartAddressOffset() const override;
   uint32_t getLiveRangeStartAddressSection() const override;
   uint32_t getLiveRangeStartRelativeVirtualAddress() const override;
-  PDB_RegisterId getLocalBasePointerRegisterId() const override;
+  codeview::RegisterId getLocalBasePointerRegisterId() const override;
   uint32_t getLowerBoundId() const override;
   uint32_t getMemorySpaceKind() const override;
   std::string getName() const override;
@@ -74,7 +74,7 @@ public:
   uint32_t getOffsetInUdt() const override;
   PDB_Cpu getPlatform() const override;
   uint32_t getRank() const override;
-  PDB_RegisterId getRegisterId() const override;
+  codeview::RegisterId getRegisterId() const override;
   uint32_t getRegisterType() const override;
   uint32_t getRelativeVirtualAddress() const override;
   uint32_t getSamplerSlot() const override;
@@ -110,7 +110,7 @@ public:
   int32_t getVirtualBasePointerOffset() const override;
   PDB_LocType getLocationType() const override;
   PDB_Machine getMachineType() const override;
-  PDB_ThunkOrdinal getThunkOrdinal() const override;
+  codeview::ThunkOrdinal getThunkOrdinal() const override;
   uint64_t getLength() const override;
   uint64_t getLiveRangeLength() const override;
   uint64_t getVirtualAddress() 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=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h Tue May 24 17:58:46 2016
@@ -13,6 +13,7 @@
 #include "PDBTypes.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/DebugInfo/CodeView/CodeView.h"
 #include <memory>
 
 namespace llvm {
@@ -67,7 +68,7 @@ public:
   virtual uint32_t getLiveRangeStartAddressOffset() const = 0;
   virtual uint32_t getLiveRangeStartAddressSection() const = 0;
   virtual uint32_t getLiveRangeStartRelativeVirtualAddress() const = 0;
-  virtual PDB_RegisterId getLocalBasePointerRegisterId() const = 0;
+  virtual codeview::RegisterId getLocalBasePointerRegisterId() const = 0;
   virtual uint32_t getLowerBoundId() const = 0;
   virtual uint32_t getMemorySpaceKind() const = 0;
   virtual std::string getName() const = 0;
@@ -82,7 +83,7 @@ public:
   virtual uint32_t getOffsetInUdt() const = 0;
   virtual PDB_Cpu getPlatform() const = 0;
   virtual uint32_t getRank() const = 0;
-  virtual PDB_RegisterId getRegisterId() const = 0;
+  virtual codeview::RegisterId getRegisterId() const = 0;
   virtual uint32_t getRegisterType() const = 0;
   virtual uint32_t getRelativeVirtualAddress() const = 0;
   virtual uint32_t getSamplerSlot() const = 0;
@@ -118,7 +119,7 @@ public:
   virtual int32_t getVirtualBasePointerOffset() const = 0;
   virtual PDB_LocType getLocationType() const = 0;
   virtual PDB_Machine getMachineType() const = 0;
-  virtual PDB_ThunkOrdinal getThunkOrdinal() const = 0;
+  virtual codeview::ThunkOrdinal getThunkOrdinal() const = 0;
   virtual uint64_t getLength() const = 0;
   virtual uint64_t getLiveRangeLength() const = 0;
   virtual uint64_t getVirtualAddress() const = 0;

Modified: llvm/trunk/include/llvm/DebugInfo/PDB/PDBExtras.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/PDB/PDBExtras.h?rev=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBExtras.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBExtras.h Tue May 24 17:58:46 2016
@@ -11,6 +11,7 @@
 #define LLVM_DEBUGINFO_PDB_PDBEXTRAS_H
 
 #include "PDBTypes.h"
+#include "llvm/DebugInfo/CodeView/CodeView.h"
 #include "llvm/Support/raw_ostream.h"
 #include <unordered_map>
 
@@ -22,9 +23,9 @@ typedef std::unordered_map<PDB_SymType,
 raw_ostream &operator<<(raw_ostream &OS, const PDB_VariantType &Value);
 raw_ostream &operator<<(raw_ostream &OS, const PDB_CallingConv &Conv);
 raw_ostream &operator<<(raw_ostream &OS, const PDB_DataKind &Data);
-raw_ostream &operator<<(raw_ostream &OS, const PDB_RegisterId &Reg);
+raw_ostream &operator<<(raw_ostream &OS, const codeview::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 codeview::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);

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=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h (original)
+++ llvm/trunk/include/llvm/DebugInfo/PDB/PDBTypes.h Tue May 24 17:58:46 2016
@@ -217,18 +217,6 @@ enum class PDB_LocType {
   Max
 };
 
-/// These values correspond to the THUNK_ORDINAL enumeration, and are documented
-/// here: https://msdn.microsoft.com/en-us/library/dh0k8hft.aspx
-enum class PDB_ThunkOrdinal {
-  Standard,
-  ThisAdjustor,
-  Vcall,
-  Pcode,
-  UnknownLoad,
-  TrampIncremental,
-  BranchIsland
-};
-
 /// These values correspond to the UdtKind enumeration, and are documented
 /// here: https://msdn.microsoft.com/en-us/library/wcstk66t.aspx
 enum class PDB_UdtType { Struct, Class, Union, Interface };
@@ -264,58 +252,6 @@ 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 {

Modified: llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp?rev=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp (original)
+++ llvm/trunk/lib/DebugInfo/CodeView/SymbolDumper.cpp Tue May 24 17:58:46 2016
@@ -34,6 +34,58 @@ namespace {
 #define CV_ENUM_ENT(ns, enum)                                                  \
   { #enum, ns::enum }
 
+static const EnumEntry<uint16_t> RegisterNames[] = {
+    CV_ENUM_CLASS_ENT(RegisterId, Unknown),
+    CV_ENUM_CLASS_ENT(RegisterId, VFrame),
+    CV_ENUM_CLASS_ENT(RegisterId, AL),
+    CV_ENUM_CLASS_ENT(RegisterId, CL),
+    CV_ENUM_CLASS_ENT(RegisterId, DL),
+    CV_ENUM_CLASS_ENT(RegisterId, BL),
+    CV_ENUM_CLASS_ENT(RegisterId, AH),
+    CV_ENUM_CLASS_ENT(RegisterId, CH),
+    CV_ENUM_CLASS_ENT(RegisterId, DH),
+    CV_ENUM_CLASS_ENT(RegisterId, BH),
+    CV_ENUM_CLASS_ENT(RegisterId, AX),
+    CV_ENUM_CLASS_ENT(RegisterId, CX),
+    CV_ENUM_CLASS_ENT(RegisterId, DX),
+    CV_ENUM_CLASS_ENT(RegisterId, BX),
+    CV_ENUM_CLASS_ENT(RegisterId, SP),
+    CV_ENUM_CLASS_ENT(RegisterId, BP),
+    CV_ENUM_CLASS_ENT(RegisterId, SI),
+    CV_ENUM_CLASS_ENT(RegisterId, DI),
+    CV_ENUM_CLASS_ENT(RegisterId, EAX),
+    CV_ENUM_CLASS_ENT(RegisterId, ECX),
+    CV_ENUM_CLASS_ENT(RegisterId, EDX),
+    CV_ENUM_CLASS_ENT(RegisterId, EBX),
+    CV_ENUM_CLASS_ENT(RegisterId, ESP),
+    CV_ENUM_CLASS_ENT(RegisterId, EBP),
+    CV_ENUM_CLASS_ENT(RegisterId, ESI),
+    CV_ENUM_CLASS_ENT(RegisterId, EDI),
+    CV_ENUM_CLASS_ENT(RegisterId, ES),
+    CV_ENUM_CLASS_ENT(RegisterId, CS),
+    CV_ENUM_CLASS_ENT(RegisterId, SS),
+    CV_ENUM_CLASS_ENT(RegisterId, DS),
+    CV_ENUM_CLASS_ENT(RegisterId, FS),
+    CV_ENUM_CLASS_ENT(RegisterId, GS),
+    CV_ENUM_CLASS_ENT(RegisterId, IP),
+    CV_ENUM_CLASS_ENT(RegisterId, RAX),
+    CV_ENUM_CLASS_ENT(RegisterId, RBX),
+    CV_ENUM_CLASS_ENT(RegisterId, RCX),
+    CV_ENUM_CLASS_ENT(RegisterId, RDX),
+    CV_ENUM_CLASS_ENT(RegisterId, RSI),
+    CV_ENUM_CLASS_ENT(RegisterId, RDI),
+    CV_ENUM_CLASS_ENT(RegisterId, RBP),
+    CV_ENUM_CLASS_ENT(RegisterId, RSP),
+    CV_ENUM_CLASS_ENT(RegisterId, R8),
+    CV_ENUM_CLASS_ENT(RegisterId, R9),
+    CV_ENUM_CLASS_ENT(RegisterId, R10),
+    CV_ENUM_CLASS_ENT(RegisterId, R11),
+    CV_ENUM_CLASS_ENT(RegisterId, R12),
+    CV_ENUM_CLASS_ENT(RegisterId, R13),
+    CV_ENUM_CLASS_ENT(RegisterId, R14),
+    CV_ENUM_CLASS_ENT(RegisterId, R15),
+};
+
 static const EnumEntry<uint8_t> ProcSymFlagNames[] = {
     CV_ENUM_CLASS_ENT(ProcSymFlags, HasFP),
     CV_ENUM_CLASS_ENT(ProcSymFlags, HasIRET),
@@ -78,6 +130,18 @@ static const EnumEntry<codeview::SourceL
     CV_ENUM_ENT(SourceLanguage, HLSL),
 };
 
+static const EnumEntry<uint32_t> CompileSym2FlagNames[] = {
+    CV_ENUM_CLASS_ENT(CompileSym2Flags, EC),
+    CV_ENUM_CLASS_ENT(CompileSym2Flags, NoDbgInfo),
+    CV_ENUM_CLASS_ENT(CompileSym2Flags, LTCG),
+    CV_ENUM_CLASS_ENT(CompileSym2Flags, NoDataAlign),
+    CV_ENUM_CLASS_ENT(CompileSym2Flags, ManagedPresent),
+    CV_ENUM_CLASS_ENT(CompileSym2Flags, SecurityChecks),
+    CV_ENUM_CLASS_ENT(CompileSym2Flags, HotPatch),
+    CV_ENUM_CLASS_ENT(CompileSym2Flags, CVTCIL),
+    CV_ENUM_CLASS_ENT(CompileSym2Flags, MSILModule),
+};
+
 static const EnumEntry<uint32_t> CompileSym3FlagNames[] = {
     CV_ENUM_CLASS_ENT(CompileSym3Flags, EC),
     CV_ENUM_CLASS_ENT(CompileSym3Flags, NoDbgInfo),
@@ -177,6 +241,21 @@ static const EnumEntry<uint32_t> FramePr
     CV_ENUM_CLASS_ENT(FrameProcedureOptions, GuardCfw),
 };
 
+static const EnumEntry<uint8_t> ThunkOrdinalNames[] = {
+    CV_ENUM_CLASS_ENT(ThunkOrdinal, Standard),
+    CV_ENUM_CLASS_ENT(ThunkOrdinal, ThisAdjustor),
+    CV_ENUM_CLASS_ENT(ThunkOrdinal, Vcall),
+    CV_ENUM_CLASS_ENT(ThunkOrdinal, Pcode),
+    CV_ENUM_CLASS_ENT(ThunkOrdinal, UnknownLoad),
+    CV_ENUM_CLASS_ENT(ThunkOrdinal, TrampIncremental),
+    CV_ENUM_CLASS_ENT(ThunkOrdinal, BranchIsland),
+};
+
+static const EnumEntry<uint16_t> TrampolineNames[] = {
+    CV_ENUM_CLASS_ENT(TrampolineType, TrampIncremental),
+    CV_ENUM_CLASS_ENT(TrampolineType, BranchIsland),
+};
+
 /// Use this private dumper implementation to keep implementation details about
 /// the visitor out of SymbolDumper.h.
 class CVSymbolDumperImpl : public CVSymbolVisitor<CVSymbolDumperImpl> {
@@ -254,6 +333,49 @@ void CVSymbolDumperImpl::visitBlockSym(S
   W.printString("LinkageName", LinkageName);
 }
 
+void CVSymbolDumperImpl::visitThunk32Sym(SymbolKind Kind, Thunk32Sym &Thunk) {
+  DictScope S(W, "Thunk32");
+  W.printNumber("Parent", Thunk.Header.Parent);
+  W.printNumber("End", Thunk.Header.End);
+  W.printNumber("Next", Thunk.Header.Next);
+  W.printNumber("Off", Thunk.Header.Off);
+  W.printNumber("Seg", Thunk.Header.Seg);
+  W.printNumber("Len", Thunk.Header.Len);
+  W.printEnum("Ordinal", Thunk.Header.Ord, makeArrayRef(ThunkOrdinalNames));
+}
+
+void CVSymbolDumperImpl::visitTrampolineSym(SymbolKind Kind,
+                                            TrampolineSym &Tramp) {
+  DictScope S(W, "Trampoline");
+  W.printEnum("Type", Tramp.Header.Type, makeArrayRef(TrampolineNames));
+  W.printNumber("Size", Tramp.Header.Size);
+  W.printNumber("ThunkOff", Tramp.Header.ThunkOff);
+  W.printNumber("TargetOff", Tramp.Header.TargetOff);
+  W.printNumber("ThunkSection", Tramp.Header.ThunkSection);
+  W.printNumber("TargetSection", Tramp.Header.TargetSection);
+}
+
+void CVSymbolDumperImpl::visitSectionSym(SymbolKind Kind, SectionSym &Section) {
+  DictScope S(W, "Section");
+  W.printNumber("SectionNumber", Section.Header.SectionNumber);
+  W.printNumber("Alignment", Section.Header.Alignment);
+  W.printNumber("Reserved", Section.Header.Reserved);
+  W.printNumber("Rva", Section.Header.Rva);
+  W.printNumber("Length", Section.Header.Length);
+  W.printHex("Characteristics", Section.Header.Characteristics);
+  W.printString("Name", Section.Name);
+}
+
+void CVSymbolDumperImpl::visitCoffGroupSym(SymbolKind Kind,
+                                           CoffGroupSym &CoffGroup) {
+  DictScope S(W, "COFF Group");
+  W.printNumber("Size", CoffGroup.Header.Size);
+  W.printHex("Characteristics", CoffGroup.Header.Characteristics);
+  W.printNumber("Offset", CoffGroup.Header.Offset);
+  W.printNumber("Segment", CoffGroup.Header.Segment);
+  W.printString("Name", CoffGroup.Name);
+}
+
 void CVSymbolDumperImpl::visitBPRelativeSym(SymbolKind Kind,
                                             BPRelativeSym &BPRel) {
   DictScope S(W, "BPRelativeSym");
@@ -287,9 +409,59 @@ void CVSymbolDumperImpl::visitCallSiteIn
     W.printString("LinkageName", LinkageName);
 }
 
+void CVSymbolDumperImpl::visitEnvBlockSym(SymbolKind Kind,
+                                          EnvBlockSym &EnvBlock) {
+  DictScope S(W, "EnvBlock");
+
+  W.printNumber("Reserved", EnvBlock.Header.Reserved);
+  ListScope L(W, "Entries");
+  for (auto Entry : EnvBlock.Fields) {
+    W.printString(Entry);
+  }
+}
+
+void CVSymbolDumperImpl::visitFileStaticSym(SymbolKind Kind,
+                                            FileStaticSym &FileStatic) {
+  DictScope S(W, "FileStatic");
+  W.printNumber("Index", FileStatic.Header.Index);
+  W.printNumber("ModFilenameOffset", FileStatic.Header.ModFilenameOffset);
+  W.printFlags("Flags", uint16_t(FileStatic.Header.Flags),
+               makeArrayRef(LocalFlags));
+  W.printString("Name", FileStatic.Name);
+}
+
+void CVSymbolDumperImpl::visitCompile2Sym(SymbolKind Kind,
+                                          Compile2Sym &Compile2) {
+  DictScope S(W, "CompilerFlags2");
+
+  W.printEnum("Language", Compile2.Header.getLanguage(),
+              makeArrayRef(SourceLanguages));
+  W.printFlags("Flags", Compile2.Header.flags & ~0xff,
+               makeArrayRef(CompileSym2FlagNames));
+  W.printEnum("Machine", unsigned(Compile2.Header.Machine),
+              makeArrayRef(CPUTypeNames));
+  std::string FrontendVersion;
+  {
+    raw_string_ostream Out(FrontendVersion);
+    Out << Compile2.Header.VersionFrontendMajor << '.'
+        << Compile2.Header.VersionFrontendMinor << '.'
+        << Compile2.Header.VersionFrontendBuild;
+  }
+  std::string BackendVersion;
+  {
+    raw_string_ostream Out(BackendVersion);
+    Out << Compile2.Header.VersionBackendMajor << '.'
+        << Compile2.Header.VersionBackendMinor << '.'
+        << Compile2.Header.VersionBackendBuild;
+  }
+  W.printString("FrontendVersion", FrontendVersion);
+  W.printString("BackendVersion", BackendVersion);
+  W.printString("VersionName", Compile2.Version);
+}
+
 void CVSymbolDumperImpl::visitCompile3Sym(SymbolKind Kind,
                                           Compile3Sym &Compile3) {
-  DictScope S(W, "CompilerFlags");
+  DictScope S(W, "CompilerFlags3");
 
   W.printEnum("Language", Compile3.Header.getLanguage(),
               makeArrayRef(SourceLanguages));
@@ -537,6 +709,15 @@ void CVSymbolDumperImpl::visitInlineSite
   }
 }
 
+void CVSymbolDumperImpl::visitRegisterSym(SymbolKind Kind,
+                                          RegisterSym &Register) {
+  DictScope S(W, "RegisterSym");
+  W.printNumber("Type", Register.Header.Index);
+  W.printEnum("Seg", uint16_t(Register.Header.Register),
+              makeArrayRef(RegisterNames));
+  W.printString("Name", Register.Name);
+}
+
 void CVSymbolDumperImpl::visitPublicSym32(SymbolKind Kind,
                                           PublicSym32 &Public) {
   DictScope S(W, "PublicSym");

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=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/DIA/DIARawSymbol.cpp Tue May 24 17:58:46 2016
@@ -534,8 +534,8 @@ uint32_t DIARawSymbol::getLiveRangeStart
       Symbol, &IDiaSymbol::get_liveRangeStartRelativeVirtualAddress);
 }
 
-PDB_RegisterId DIARawSymbol::getLocalBasePointerRegisterId() const {
-  return PrivateGetDIAValue<DWORD, PDB_RegisterId>(
+codeview::RegisterId DIARawSymbol::getLocalBasePointerRegisterId() const {
+  return PrivateGetDIAValue<DWORD, codeview::RegisterId>(
       Symbol, &IDiaSymbol::get_localBasePointerRegisterId);
 }
 
@@ -596,9 +596,9 @@ uint32_t DIARawSymbol::getRank() const {
   return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_rank);
 }
 
-PDB_RegisterId DIARawSymbol::getRegisterId() const {
-  return PrivateGetDIAValue<DWORD, PDB_RegisterId>(Symbol,
-                                                   &IDiaSymbol::get_registerId);
+codeview::RegisterId DIARawSymbol::getRegisterId() const {
+  return PrivateGetDIAValue<DWORD, codeview::RegisterId>(
+      Symbol, &IDiaSymbol::get_registerId);
 }
 
 uint32_t DIARawSymbol::getRegisterType() const {
@@ -751,8 +751,8 @@ PDB_Machine DIARawSymbol::getMachineType
                                                 &IDiaSymbol::get_machineType);
 }
 
-PDB_ThunkOrdinal DIARawSymbol::getThunkOrdinal() const {
-  return PrivateGetDIAValue<DWORD, PDB_ThunkOrdinal>(
+codeview::ThunkOrdinal DIARawSymbol::getThunkOrdinal() const {
+  return PrivateGetDIAValue<DWORD, codeview::ThunkOrdinal>(
       Symbol, &IDiaSymbol::get_thunkOrdinal);
 }
 

Modified: llvm/trunk/lib/DebugInfo/PDB/PDBExtras.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/PDB/PDBExtras.cpp?rev=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/lib/DebugInfo/PDB/PDBExtras.cpp (original)
+++ llvm/trunk/lib/DebugInfo/PDB/PDBExtras.cpp Tue May 24 17:58:46 2016
@@ -90,55 +90,56 @@ raw_ostream &llvm::pdb::operator<<(raw_o
   return OS;
 }
 
-raw_ostream &llvm::pdb::operator<<(raw_ostream &OS, const PDB_RegisterId &Reg) {
+raw_ostream &llvm::pdb::operator<<(raw_ostream &OS,
+                                   const codeview::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)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, AL, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, CL, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, DL, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, BL, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, AH, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, CH, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, DH, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, BH, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, AX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, CX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, DX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, BX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, SP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, BP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, SI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, DI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, EAX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, ECX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, EDX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, EBX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, ESP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, EBP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, ESI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, EDI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, ES, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, CS, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, SS, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, DS, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, FS, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, GS, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, IP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, RAX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, RBX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, RCX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, RDX, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, RSI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, RDI, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, RBP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, RSP, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, R8, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, R9, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, R10, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, R11, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, R12, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, R13, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, R14, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::RegisterId, R15, OS)
   default:
     OS << static_cast<int>(Reg);
   }
@@ -164,15 +165,15 @@ raw_ostream &llvm::pdb::operator<<(raw_o
 }
 
 raw_ostream &llvm::pdb::operator<<(raw_ostream &OS,
-                                   const PDB_ThunkOrdinal &Thunk) {
+                                   const codeview::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)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, BranchIsland, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, Pcode, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, Standard, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, ThisAdjustor, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, TrampIncremental, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, UnknownLoad, OS)
+    CASE_OUTPUT_ENUM_CLASS_NAME(codeview::ThunkOrdinal, Vcall, OS)
   }
   return OS;
 }

Modified: llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test?rev=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test (original)
+++ llvm/trunk/test/DebugInfo/PDB/pdbdump-headers.test Tue May 24 17:58:46 2016
@@ -141,7 +141,7 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           CompilerFlags {
+; EMPTY-NEXT:           CompilerFlags3 {
 ; EMPTY-NEXT:             Language: Cpp (0x1)
 ; EMPTY-NEXT:             Flags [ (0x2000)
 ; EMPTY-NEXT:               SecurityChecks (0x2000)
@@ -238,7 +238,7 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           CompilerFlags {
+; EMPTY-NEXT:           CompilerFlags3 {
 ; EMPTY-NEXT:             Language: Link (0x7)
 ; EMPTY-NEXT:             Flags [ (0x0)
 ; EMPTY-NEXT:             ]
@@ -254,9 +254,16 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           UnknownSym {
-; EMPTY-NEXT:             Kind: S_ENVBLOCK (0x113D)
-; EMPTY-NEXT:             Length: 168
+; EMPTY-NEXT:           EnvBlock {
+; EMPTY-NEXT:             Reserved: 0
+; EMPTY-NEXT:             Entries [
+; EMPTY-NEXT:               cwd
+; EMPTY-NEXT:               d:\src\llvm\test\DebugInfo\PDB\Inputs
+; EMPTY-NEXT:               exe
+; EMPTY-NEXT:               C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\link.exe
+; EMPTY-NEXT:               pdb
+; EMPTY-NEXT:               d:\src\llvm\test\DebugInfo\PDB\Inputs\empty.pdb
+; EMPTY-NEXT:             ]
 ; EMPTY-NEXT:           }
 ; EMPTY-NEXT:           Bytes (
 ; EMPTY-NEXT:             0000: 00637764 00643A5C 7372635C 6C6C766D  |.cwd.d:\src\llvm|
@@ -273,18 +280,27 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           UnknownSym {
-; EMPTY-NEXT:             Kind: S_TRAMPOLINE (0x112C)
-; EMPTY-NEXT:             Length: 16
+; EMPTY-NEXT:           Trampoline {
+; EMPTY-NEXT:             Type: TrampIncremental (0x0)
+; EMPTY-NEXT:             Size: 5
+; EMPTY-NEXT:             ThunkOff: 5
+; EMPTY-NEXT:             TargetOff: 16
+; EMPTY-NEXT:             ThunkSection: 1
+; EMPTY-NEXT:             TargetSection: 1
 ; EMPTY-NEXT:           }
 ; EMPTY-NEXT:           Bytes (
 ; EMPTY-NEXT:             0000: 00000500 05000000 10000000 01000100  |................|
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           UnknownSym {
-; EMPTY-NEXT:             Kind: S_SECTION (0x1136)
-; EMPTY-NEXT:             Length: 24
+; EMPTY-NEXT:           Section {
+; EMPTY-NEXT:             SectionNumber: 1
+; EMPTY-NEXT:             Alignment: 12
+; EMPTY-NEXT:             Reserved: 0
+; EMPTY-NEXT:             Rva: 4096
+; EMPTY-NEXT:             Length: 4122
+; EMPTY-NEXT:             Characteristics: 0x60000020
+; EMPTY-NEXT:             Name: .text
 ; EMPTY-NEXT:           }
 ; EMPTY-NEXT:           Bytes (
 ; EMPTY-NEXT:             0000: 01000C00 00100000 1A100000 20000060  |............ ..`|
@@ -292,9 +308,12 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           UnknownSym {
-; EMPTY-NEXT:             Kind: S_COFFGROUP (0x1137)
-; EMPTY-NEXT:             Length: 24
+; EMPTY-NEXT:           COFF Group {
+; EMPTY-NEXT:             Size: 4122
+; EMPTY-NEXT:             Characteristics: 0x60000020
+; EMPTY-NEXT:             Offset: 0
+; EMPTY-NEXT:             Segment: 1
+; EMPTY-NEXT:             Name: .text$mn
 ; EMPTY-NEXT:           }
 ; EMPTY-NEXT:           Bytes (
 ; EMPTY-NEXT:             0000: 1A100000 20000060 00000000 01002E74  |.... ..`.......t|
@@ -302,9 +321,14 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           UnknownSym {
-; EMPTY-NEXT:             Kind: S_SECTION (0x1136)
-; EMPTY-NEXT:             Length: 24
+; EMPTY-NEXT:           Section {
+; EMPTY-NEXT:             SectionNumber: 2
+; EMPTY-NEXT:             Alignment: 12
+; EMPTY-NEXT:             Reserved: 0
+; EMPTY-NEXT:             Rva: 12288
+; EMPTY-NEXT:             Length: 690
+; EMPTY-NEXT:             Characteristics: 0x40000040
+; EMPTY-NEXT:             Name: .rdata
 ; EMPTY-NEXT:           }
 ; EMPTY-NEXT:           Bytes (
 ; EMPTY-NEXT:             0000: 02000C00 00300000 B2020000 40000040  |.....0...... at ..@|
@@ -312,9 +336,12 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           UnknownSym {
-; EMPTY-NEXT:             Kind: S_COFFGROUP (0x1137)
-; EMPTY-NEXT:             Length: 24
+; EMPTY-NEXT:           COFF Group {
+; EMPTY-NEXT:             Size: 323
+; EMPTY-NEXT:             Characteristics: 0x40000040
+; EMPTY-NEXT:             Offset: 0
+; EMPTY-NEXT:             Segment: 2
+; EMPTY-NEXT:             Name: .rdata
 ; EMPTY-NEXT:           }
 ; EMPTY-NEXT:           Bytes (
 ; EMPTY-NEXT:             0000: 43010000 40000040 00000000 02002E72  |C... at ..@.......r|
@@ -322,9 +349,12 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           UnknownSym {
-; EMPTY-NEXT:             Kind: S_COFFGROUP (0x1137)
-; EMPTY-NEXT:             Length: 24
+; EMPTY-NEXT:           COFF Group {
+; EMPTY-NEXT:             Size: 0
+; EMPTY-NEXT:             Characteristics: 0x40000040
+; EMPTY-NEXT:             Offset: 323
+; EMPTY-NEXT:             Segment: 2
+; EMPTY-NEXT:             Name: .edata
 ; EMPTY-NEXT:           }
 ; EMPTY-NEXT:           Bytes (
 ; EMPTY-NEXT:             0000: 00000000 40000040 43010000 02002E65  |.... at ..@C......e|
@@ -332,9 +362,12 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           UnknownSym {
-; EMPTY-NEXT:             Kind: S_COFFGROUP (0x1137)
-; EMPTY-NEXT:             Length: 28
+; EMPTY-NEXT:           COFF Group {
+; EMPTY-NEXT:             Size: 366
+; EMPTY-NEXT:             Characteristics: 0x40000040
+; EMPTY-NEXT:             Offset: 324
+; EMPTY-NEXT:             Segment: 2
+; EMPTY-NEXT:             Name: .rdata$debug
 ; EMPTY-NEXT:           }
 ; EMPTY-NEXT:           Bytes (
 ; EMPTY-NEXT:             0000: 6E010000 40000040 44010000 02002E72  |n... at ..@D......r|
@@ -342,9 +375,14 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           UnknownSym {
-; EMPTY-NEXT:             Kind: S_SECTION (0x1136)
-; EMPTY-NEXT:             Length: 24
+; EMPTY-NEXT:           Section {
+; EMPTY-NEXT:             SectionNumber: 3
+; EMPTY-NEXT:             Alignment: 12
+; EMPTY-NEXT:             Reserved: 0
+; EMPTY-NEXT:             Rva: 16384
+; EMPTY-NEXT:             Length: 4
+; EMPTY-NEXT:             Characteristics: 0xC0000040
+; EMPTY-NEXT:             Name: .data
 ; EMPTY-NEXT:           }
 ; EMPTY-NEXT:           Bytes (
 ; EMPTY-NEXT:             0000: 03000C00 00400000 04000000 400000C0  |..... at ......@...|
@@ -352,9 +390,12 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           UnknownSym {
-; EMPTY-NEXT:             Kind: S_COFFGROUP (0x1137)
-; EMPTY-NEXT:             Length: 20
+; EMPTY-NEXT:           COFF Group {
+; EMPTY-NEXT:             Size: 4
+; EMPTY-NEXT:             Characteristics: 0xC0000080
+; EMPTY-NEXT:             Offset: 0
+; EMPTY-NEXT:             Segment: 3
+; EMPTY-NEXT:             Name: .bss
 ; EMPTY-NEXT:           }
 ; EMPTY-NEXT:           Bytes (
 ; EMPTY-NEXT:             0000: 04000000 800000C0 00000000 03002E62  |...............b|
@@ -362,9 +403,14 @@
 ; EMPTY-NEXT:           )
 ; EMPTY-NEXT:         }
 ; EMPTY-NEXT:         {
-; EMPTY-NEXT:           UnknownSym {
-; EMPTY-NEXT:             Kind: S_SECTION (0x1136)
-; EMPTY-NEXT:             Length: 24
+; EMPTY-NEXT:           Section {
+; EMPTY-NEXT:             SectionNumber: 4
+; EMPTY-NEXT:             Alignment: 12
+; EMPTY-NEXT:             Reserved: 0
+; EMPTY-NEXT:             Rva: 20480
+; EMPTY-NEXT:             Length: 8
+; EMPTY-NEXT:             Characteristics: 0x42000040
+; EMPTY-NEXT:             Name: .reloc
 ; EMPTY-NEXT:           }
 ; EMPTY-NEXT:           Bytes (
 ; EMPTY-NEXT:             0000: 04000C00 00500000 08000000 40000042  |.....P...... at ..B|

Modified: llvm/trunk/tools/llvm-pdbdump/CompilandDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbdump/CompilandDumper.cpp?rev=270628&r1=270627&r2=270628&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-pdbdump/CompilandDumper.cpp (original)
+++ llvm/trunk/tools/llvm-pdbdump/CompilandDumper.cpp Tue May 24 17:58:46 2016
@@ -158,9 +158,9 @@ void CompilandDumper::dump(const PDBSymb
 
   Printer.NewLine();
   Printer << "thunk ";
-  PDB_ThunkOrdinal Ordinal = Symbol.getThunkOrdinal();
+  codeview::ThunkOrdinal Ordinal = Symbol.getThunkOrdinal();
   uint64_t VA = Symbol.getVirtualAddress();
-  if (Ordinal == PDB_ThunkOrdinal::TrampIncremental) {
+  if (Ordinal == codeview::ThunkOrdinal::TrampIncremental) {
     uint64_t Target = Symbol.getTargetVirtualAddress();
     WithColor(Printer, PDB_ColorItem::Address).get() << format_hex(VA, 10);
     Printer << " -> ";




More information about the llvm-commits mailing list