diff options
author | Zachary Turner <zturner@google.com> | 2016-11-02 17:05:19 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2016-11-02 17:05:19 +0000 |
commit | d7730478c08debbc0e2622f487645304dfe34957 (patch) | |
tree | 969cb5e5620410e1dd964b067a1fcd30523b1c8c /tools | |
parent | 08f7b241492e37a3199eb8e71a8c12ee502f05c9 (diff) |
Add CodeViewRecordIO for reading and writing.
Using a pattern similar to that of YamlIO, this allows
us to have a single codepath for translating codeview
records to and from serialized byte streams. The
current patch only hooks this up to the reading of
CodeView type records. A subsequent patch will hook
it up for writing of CodeView type records, and then a
third patch will hook up the reading and writing of
CodeView symbols.
Differential Revision: https://reviews.llvm.org/D26040
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@285836 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r-- | tools/llvm-pdbdump/YamlTypeDumper.cpp | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/tools/llvm-pdbdump/YamlTypeDumper.cpp b/tools/llvm-pdbdump/YamlTypeDumper.cpp index d20e26d18d2..8fde16be1bc 100644 --- a/tools/llvm-pdbdump/YamlTypeDumper.cpp +++ b/tools/llvm-pdbdump/YamlTypeDumper.cpp @@ -300,8 +300,6 @@ void MappingTraits<ClassRecord>::mapping(IO &IO, ClassRecord &Class) { IO.mapRequired("FieldList", Class.FieldList); IO.mapRequired("Name", Class.Name); IO.mapRequired("UniqueName", Class.UniqueName); - IO.mapRequired("Hfa", Class.Hfa); - IO.mapRequired("WinRTKind", Class.WinRTKind); IO.mapRequired("DerivationList", Class.DerivationList); IO.mapRequired("VTableShape", Class.VTableShape); IO.mapRequired("Size", Class.Size); @@ -313,7 +311,6 @@ void MappingTraits<UnionRecord>::mapping(IO &IO, UnionRecord &Union) { IO.mapRequired("FieldList", Union.FieldList); IO.mapRequired("Name", Union.Name); IO.mapRequired("UniqueName", Union.UniqueName); - IO.mapRequired("Hfa", Union.Hfa); IO.mapRequired("Size", Union.Size); } @@ -337,7 +334,6 @@ void MappingTraits<VFTableRecord>::mapping(IO &IO, VFTableRecord &VFT) { IO.mapRequired("CompleteClass", VFT.CompleteClass); IO.mapRequired("OverriddenVFTable", VFT.OverriddenVFTable); IO.mapRequired("VFPtrOffset", VFT.VFPtrOffset); - IO.mapRequired("Name", VFT.Name); IO.mapRequired("MethodNames", VFT.MethodNames); } @@ -387,10 +383,7 @@ void MappingTraits<TypeServer2Record>::mapping(IO &IO, TypeServer2Record &TS) { void MappingTraits<PointerRecord>::mapping(IO &IO, PointerRecord &Ptr) { IO.mapRequired("ReferentType", Ptr.ReferentType); - IO.mapRequired("PtrKind", Ptr.PtrKind); - IO.mapRequired("Mode", Ptr.Mode); - IO.mapRequired("Options", Ptr.Options); - IO.mapRequired("Size", Ptr.Size); + IO.mapRequired("Attrs", Ptr.Attrs); IO.mapOptional("MemberInfo", Ptr.MemberInfo); } @@ -442,9 +435,7 @@ void MappingTraits<NestedTypeRecord>::mapping(IO &IO, void MappingTraits<OneMethodRecord>::mapping(IO &IO, OneMethodRecord &Method) { IO.mapRequired("Type", Method.Type); - IO.mapRequired("Kind", Method.Kind); - IO.mapRequired("Options", Method.Options); - IO.mapRequired("Access", Method.Access); + IO.mapRequired("Attrs", Method.Attrs.Attrs); IO.mapRequired("VFTableOffset", Method.VFTableOffset); IO.mapRequired("Name", Method.Name); } @@ -457,7 +448,7 @@ void MappingTraits<OverloadedMethodRecord>::mapping( } void MappingTraits<DataMemberRecord>::mapping(IO &IO, DataMemberRecord &Field) { - IO.mapRequired("Access", Field.Access); + IO.mapRequired("Attrs", Field.Attrs.Attrs); IO.mapRequired("Type", Field.Type); IO.mapRequired("FieldOffset", Field.FieldOffset); IO.mapRequired("Name", Field.Name); @@ -465,7 +456,7 @@ void MappingTraits<DataMemberRecord>::mapping(IO &IO, DataMemberRecord &Field) { void MappingTraits<StaticDataMemberRecord>::mapping( IO &IO, StaticDataMemberRecord &Field) { - IO.mapRequired("Access", Field.Access); + IO.mapRequired("Attrs", Field.Attrs.Attrs); IO.mapRequired("Type", Field.Type); IO.mapRequired("Name", Field.Name); } @@ -475,20 +466,20 @@ void MappingTraits<VFPtrRecord>::mapping(IO &IO, VFPtrRecord &VFTable) { } void MappingTraits<EnumeratorRecord>::mapping(IO &IO, EnumeratorRecord &Enum) { - IO.mapRequired("Access", Enum.Access); + IO.mapRequired("Attrs", Enum.Attrs.Attrs); IO.mapRequired("Value", Enum.Value); IO.mapRequired("Name", Enum.Name); } void MappingTraits<BaseClassRecord>::mapping(IO &IO, BaseClassRecord &Base) { - IO.mapRequired("Access", Base.Access); + IO.mapRequired("Attrs", Base.Attrs.Attrs); IO.mapRequired("Type", Base.Type); IO.mapRequired("Offset", Base.Offset); } void MappingTraits<VirtualBaseClassRecord>::mapping( IO &IO, VirtualBaseClassRecord &Base) { - IO.mapRequired("Access", Base.Access); + IO.mapRequired("Attrs", Base.Attrs.Attrs); IO.mapRequired("BaseType", Base.BaseType); IO.mapRequired("VBPtrType", Base.VBPtrType); IO.mapRequired("VBPtrOffset", Base.VBPtrOffset); @@ -568,7 +559,10 @@ struct MappingContextTraits<pdb::yaml::PdbTpiFieldListRecord, static void mapping(IO &IO, pdb::yaml::PdbTpiFieldListRecord &Obj, pdb::yaml::SerializationContext &Context) { codeview::TypeVisitorCallbackPipeline Pipeline; - codeview::TypeDeserializer Deserializer; + + msf::ByteStream Data(Obj.Record.Data); + msf::StreamReader FieldReader(Data); + codeview::FieldListDeserializer Deserializer(FieldReader); codeview::TypeSerializationVisitor Serializer(Context.FieldListBuilder, Context.TypeTableBuilder); pdb::TpiHashUpdater Hasher; |