diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp | 40 | ||||
-rw-r--r-- | llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp | 6 | ||||
-rw-r--r-- | llvm/lib/DebugInfo/CodeView/EnumTables.cpp | 166 | ||||
-rw-r--r-- | llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp | 242 |
4 files changed, 55 insertions, 399 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp index f4514335cb3..b3dabca0a8a 100644 --- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp @@ -98,8 +98,7 @@ using namespace llvm::codeview; namespace { class CVMCAdapter : public CodeViewRecordStreamer { public: - CVMCAdapter(MCStreamer &OS, TypeCollection &TypeTable) - : OS(&OS), TypeTable(TypeTable) {} + CVMCAdapter(MCStreamer &OS) : OS(&OS) {} void EmitBytes(StringRef Data) { OS->EmitBytes(Data); } @@ -111,24 +110,8 @@ public: void AddComment(const Twine &T) { OS->AddComment(T); } - void AddRawComment(const Twine &T) { OS->emitRawComment(T); } - - bool isVerboseAsm() { return OS->isVerboseAsm(); } - - StringRef getTypeName(TypeIndex TI) { - StringRef TypeName; - if (!TI.isNoneType()) { - if (TI.isSimple()) - TypeName = TypeIndex::simpleTypeName(TI); - else - TypeName = TypeTable.getTypeName(TI); - } - return TypeName; - } - private: MCStreamer *OS = nullptr; - TypeCollection &TypeTable; }; } // namespace @@ -634,6 +617,13 @@ emitNullTerminatedSymbolName(MCStreamer &OS, StringRef S, OS.EmitBytes(NullTerminatedString); } +static StringRef getTypeLeafName(TypeLeafKind TypeKind) { + for (const EnumEntry<TypeLeafKind> &EE : getTypeLeafNames()) + if (EE.Value == TypeKind) + return EE.Name; + return ""; +} + void CodeViewDebug::emitTypeInformation() { if (TypeTable.empty()) return; @@ -650,11 +640,11 @@ void CodeViewDebug::emitTypeInformation() { } TypeTableCollection Table(TypeTable.records()); - TypeVisitorCallbackPipeline Pipeline; SmallString<512> CommentBlock; raw_svector_ostream CommentOS(CommentBlock); std::unique_ptr<ScopedPrinter> SP; std::unique_ptr<TypeDumpVisitor> TDV; + TypeVisitorCallbackPipeline Pipeline; if (OS.isVerboseAsm()) { // To construct block comment describing the type record for readability. @@ -665,7 +655,7 @@ void CodeViewDebug::emitTypeInformation() { } // To emit type record using Codeview MCStreamer adapter - CVMCAdapter CVMCOS(OS, Table); + CVMCAdapter CVMCOS(OS); TypeRecordMapping typeMapping(CVMCOS); Pipeline.addCallbackToPipeline(typeMapping); @@ -675,6 +665,16 @@ void CodeViewDebug::emitTypeInformation() { CVType Record = Table.getType(*B); CommentBlock.clear(); + + auto RecordLen = Record.length(); + auto RecordKind = Record.kind(); + if (OS.isVerboseAsm()) + CVMCOS.AddComment("Record length"); + CVMCOS.EmitIntValue(RecordLen - 2, 2); + if (OS.isVerboseAsm()) + CVMCOS.AddComment("Record kind: " + getTypeLeafName(RecordKind)); + CVMCOS.EmitIntValue(RecordKind, sizeof(RecordKind)); + Error E = codeview::visitTypeRecord(Record, *B, Pipeline); if (E) { diff --git a/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp b/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp index 73ff57b9bbd..092099bb0a1 100644 --- a/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp +++ b/llvm/lib/DebugInfo/CodeView/CodeViewRecordIO.cpp @@ -126,11 +126,7 @@ Error CodeViewRecordIO::mapByteVectorTail(std::vector<uint8_t> &Bytes, Error CodeViewRecordIO::mapInteger(TypeIndex &TypeInd, const Twine &Comment) { if (isStreaming()) { - StringRef TypeNameStr = Streamer->getTypeName(TypeInd); - if (!TypeNameStr.empty()) - emitComment(Comment + ": " + TypeNameStr); - else - emitComment(Comment); + emitComment(Comment); Streamer->EmitIntValue(TypeInd.getIndex(), sizeof(TypeInd.getIndex())); incrStreamedLen(sizeof(TypeInd.getIndex())); } else if (isWriting()) { diff --git a/llvm/lib/DebugInfo/CodeView/EnumTables.cpp b/llvm/lib/DebugInfo/CodeView/EnumTables.cpp index 82f6713a88f..54e68ae4ea9 100644 --- a/llvm/lib/DebugInfo/CodeView/EnumTables.cpp +++ b/llvm/lib/DebugInfo/CodeView/EnumTables.cpp @@ -300,128 +300,6 @@ static const EnumEntry<COFF::SectionCharacteristics> CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_READ), CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_WRITE)}; -static const EnumEntry<uint16_t> ClassOptionNames[] = { - CV_ENUM_CLASS_ENT(ClassOptions, Packed), - CV_ENUM_CLASS_ENT(ClassOptions, HasConstructorOrDestructor), - CV_ENUM_CLASS_ENT(ClassOptions, HasOverloadedOperator), - CV_ENUM_CLASS_ENT(ClassOptions, Nested), - CV_ENUM_CLASS_ENT(ClassOptions, ContainsNestedClass), - CV_ENUM_CLASS_ENT(ClassOptions, HasOverloadedAssignmentOperator), - CV_ENUM_CLASS_ENT(ClassOptions, HasConversionOperator), - CV_ENUM_CLASS_ENT(ClassOptions, ForwardReference), - CV_ENUM_CLASS_ENT(ClassOptions, Scoped), - CV_ENUM_CLASS_ENT(ClassOptions, HasUniqueName), - CV_ENUM_CLASS_ENT(ClassOptions, Sealed), - CV_ENUM_CLASS_ENT(ClassOptions, Intrinsic), -}; - -static const EnumEntry<uint8_t> MemberAccessNames[] = { - CV_ENUM_CLASS_ENT(MemberAccess, None), - CV_ENUM_CLASS_ENT(MemberAccess, Private), - CV_ENUM_CLASS_ENT(MemberAccess, Protected), - CV_ENUM_CLASS_ENT(MemberAccess, Public), -}; - -static const EnumEntry<uint16_t> MethodOptionNames[] = { - CV_ENUM_CLASS_ENT(MethodOptions, Pseudo), - CV_ENUM_CLASS_ENT(MethodOptions, NoInherit), - CV_ENUM_CLASS_ENT(MethodOptions, NoConstruct), - CV_ENUM_CLASS_ENT(MethodOptions, CompilerGenerated), - CV_ENUM_CLASS_ENT(MethodOptions, Sealed), -}; - -static const EnumEntry<uint16_t> MemberKindNames[] = { - CV_ENUM_CLASS_ENT(MethodKind, Vanilla), - CV_ENUM_CLASS_ENT(MethodKind, Virtual), - CV_ENUM_CLASS_ENT(MethodKind, Static), - CV_ENUM_CLASS_ENT(MethodKind, Friend), - CV_ENUM_CLASS_ENT(MethodKind, IntroducingVirtual), - CV_ENUM_CLASS_ENT(MethodKind, PureVirtual), - CV_ENUM_CLASS_ENT(MethodKind, PureIntroducingVirtual), -}; - -static const EnumEntry<uint8_t> PtrKindNames[] = { - CV_ENUM_CLASS_ENT(PointerKind, Near16), - CV_ENUM_CLASS_ENT(PointerKind, Far16), - CV_ENUM_CLASS_ENT(PointerKind, Huge16), - CV_ENUM_CLASS_ENT(PointerKind, BasedOnSegment), - CV_ENUM_CLASS_ENT(PointerKind, BasedOnValue), - CV_ENUM_CLASS_ENT(PointerKind, BasedOnSegmentValue), - CV_ENUM_CLASS_ENT(PointerKind, BasedOnAddress), - CV_ENUM_CLASS_ENT(PointerKind, BasedOnSegmentAddress), - CV_ENUM_CLASS_ENT(PointerKind, BasedOnType), - CV_ENUM_CLASS_ENT(PointerKind, BasedOnSelf), - CV_ENUM_CLASS_ENT(PointerKind, Near32), - CV_ENUM_CLASS_ENT(PointerKind, Far32), - CV_ENUM_CLASS_ENT(PointerKind, Near64), -}; - -static const EnumEntry<uint8_t> PtrModeNames[] = { - CV_ENUM_CLASS_ENT(PointerMode, Pointer), - CV_ENUM_CLASS_ENT(PointerMode, LValueReference), - CV_ENUM_CLASS_ENT(PointerMode, PointerToDataMember), - CV_ENUM_CLASS_ENT(PointerMode, PointerToMemberFunction), - CV_ENUM_CLASS_ENT(PointerMode, RValueReference), -}; - -static const EnumEntry<uint16_t> PtrMemberRepNames[] = { - CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, Unknown), - CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, SingleInheritanceData), - CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, MultipleInheritanceData), - CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, VirtualInheritanceData), - CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, GeneralData), - CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, SingleInheritanceFunction), - CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, - MultipleInheritanceFunction), - CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, - VirtualInheritanceFunction), - CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, GeneralFunction), -}; - -static const EnumEntry<uint16_t> TypeModifierNames[] = { - CV_ENUM_CLASS_ENT(ModifierOptions, Const), - CV_ENUM_CLASS_ENT(ModifierOptions, Volatile), - CV_ENUM_CLASS_ENT(ModifierOptions, Unaligned), -}; - -static const EnumEntry<uint8_t> CallingConventions[] = { - CV_ENUM_CLASS_ENT(CallingConvention, NearC), - CV_ENUM_CLASS_ENT(CallingConvention, FarC), - CV_ENUM_CLASS_ENT(CallingConvention, NearPascal), - CV_ENUM_CLASS_ENT(CallingConvention, FarPascal), - CV_ENUM_CLASS_ENT(CallingConvention, NearFast), - CV_ENUM_CLASS_ENT(CallingConvention, FarFast), - CV_ENUM_CLASS_ENT(CallingConvention, NearStdCall), - CV_ENUM_CLASS_ENT(CallingConvention, FarStdCall), - CV_ENUM_CLASS_ENT(CallingConvention, NearSysCall), - CV_ENUM_CLASS_ENT(CallingConvention, FarSysCall), - CV_ENUM_CLASS_ENT(CallingConvention, ThisCall), - CV_ENUM_CLASS_ENT(CallingConvention, MipsCall), - CV_ENUM_CLASS_ENT(CallingConvention, Generic), - CV_ENUM_CLASS_ENT(CallingConvention, AlphaCall), - CV_ENUM_CLASS_ENT(CallingConvention, PpcCall), - CV_ENUM_CLASS_ENT(CallingConvention, SHCall), - CV_ENUM_CLASS_ENT(CallingConvention, ArmCall), - CV_ENUM_CLASS_ENT(CallingConvention, AM33Call), - CV_ENUM_CLASS_ENT(CallingConvention, TriCall), - CV_ENUM_CLASS_ENT(CallingConvention, SH5Call), - CV_ENUM_CLASS_ENT(CallingConvention, M32RCall), - CV_ENUM_CLASS_ENT(CallingConvention, ClrCall), - CV_ENUM_CLASS_ENT(CallingConvention, Inline), - CV_ENUM_CLASS_ENT(CallingConvention, NearVector), -}; - -static const EnumEntry<uint8_t> FunctionOptionEnum[] = { - CV_ENUM_CLASS_ENT(FunctionOptions, CxxReturnUdt), - CV_ENUM_CLASS_ENT(FunctionOptions, Constructor), - CV_ENUM_CLASS_ENT(FunctionOptions, ConstructorWithVirtualBases), -}; - -static const EnumEntry<uint16_t> LabelTypeEnum[] = { - CV_ENUM_CLASS_ENT(LabelType, Near), - CV_ENUM_CLASS_ENT(LabelType, Far), -}; - namespace llvm { namespace codeview { @@ -501,49 +379,5 @@ getImageSectionCharacteristicNames() { return makeArrayRef(ImageSectionCharacteristicNames); } -ArrayRef<EnumEntry<uint16_t>> getClassOptionNames() { - return makeArrayRef(ClassOptionNames); -} - -ArrayRef<EnumEntry<uint8_t>> getMemberAccessNames() { - return makeArrayRef(MemberAccessNames); -} - -ArrayRef<EnumEntry<uint16_t>> getMethodOptionNames() { - return makeArrayRef(MethodOptionNames); -} - -ArrayRef<EnumEntry<uint16_t>> getMemberKindNames() { - return makeArrayRef(MemberKindNames); -} - -ArrayRef<EnumEntry<uint8_t>> getPtrKindNames() { - return makeArrayRef(PtrKindNames); -} - -ArrayRef<EnumEntry<uint8_t>> getPtrModeNames() { - return makeArrayRef(PtrModeNames); -} - -ArrayRef<EnumEntry<uint16_t>> getPtrMemberRepNames() { - return makeArrayRef(PtrMemberRepNames); -} - -ArrayRef<EnumEntry<uint16_t>> getTypeModifierNames() { - return makeArrayRef(TypeModifierNames); -} - -ArrayRef<EnumEntry<uint8_t>> getCallingConventions() { - return makeArrayRef(CallingConventions); -} - -ArrayRef<EnumEntry<uint8_t>> getFunctionOptionEnum() { - return makeArrayRef(FunctionOptionEnum); -} - -ArrayRef<EnumEntry<uint16_t>> getLabelTypeEnum() { - return makeArrayRef(LabelTypeEnum); -} - } // end namespace codeview } // end namespace llvm diff --git a/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp b/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp index 721eca08a27..b81ae4bff3f 100644 --- a/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp +++ b/llvm/lib/DebugInfo/CodeView/TypeRecordMapping.cpp @@ -7,124 +7,24 @@ //===----------------------------------------------------------------------===// #include "llvm/DebugInfo/CodeView/TypeRecordMapping.h" -#include "llvm/ADT/StringExtras.h" -#include "llvm/DebugInfo/CodeView/EnumTables.h" using namespace llvm; using namespace llvm::codeview; -namespace { - #define error(X) \ if (auto EC = X) \ return EC; -static const EnumEntry<TypeLeafKind> LeafTypeNames[] = { -#define CV_TYPE(enum, val) {#enum, enum}, -#include "llvm/DebugInfo/CodeView/CodeViewTypes.def" -}; - -static StringRef getLeafTypeName(TypeLeafKind LT) { - switch (LT) { -#define TYPE_RECORD(ename, value, name) \ - case ename: \ - return #name; -#include "llvm/DebugInfo/CodeView/CodeViewTypes.def" - default: - break; - } - return "UnknownLeaf"; -} - -template <typename T> -static bool compEnumNames(const EnumEntry<T> &lhs, const EnumEntry<T> &rhs) { - return lhs.Name < rhs.Name; -} - -template <typename T, typename TFlag> -static StringRef getFlagNames(CodeViewRecordIO &IO, T Value, - ArrayRef<EnumEntry<TFlag>> Flags) { - if (!IO.isStreaming()) - return ""; - typedef EnumEntry<TFlag> FlagEntry; - typedef SmallVector<FlagEntry, 10> FlagVector; - FlagVector SetFlags; - for (const auto &Flag : Flags) { - if (Flag.Value == 0) - continue; - if ((Value & Flag.Value) == Flag.Value) { - SetFlags.push_back(Flag); - } - } - - llvm::sort(SetFlags, &compEnumNames<TFlag>); - - SmallString<128> FlagLabel; - bool FirstOcc = true; - for (const auto &Flag : SetFlags) { - if (FirstOcc) - FirstOcc = false; - else - FlagLabel += (" | "); - - FlagLabel += (Flag.Name + " (0x" + utohexstr(Flag.Value) + ")").str(); - } - - if (!FlagLabel.empty()) { - SmallString<128> LabelWithBraces(" ( "); - LabelWithBraces += (FlagLabel + " )").str(); - return LabelWithBraces.str(); - } else - return FlagLabel.str(); -} - -template <typename T, typename TEnum> -static StringRef getEnumName(CodeViewRecordIO &IO, T Value, - ArrayRef<EnumEntry<TEnum>> EnumValues) { - if (!IO.isStreaming()) - return ""; - StringRef Name; - for (const auto &EnumItem : EnumValues) { - if (EnumItem.Value == Value) { - Name = EnumItem.Name; - break; - } - } - - return Name; -} - -static StringRef getMemberAttributes(CodeViewRecordIO &IO, MemberAccess Access, - MethodKind Kind, MethodOptions Options) { - if (!IO.isStreaming()) - return ""; - SmallString<256> AccessSpecifier = - getEnumName(IO, uint8_t(Access), makeArrayRef(getMemberAccessNames())); - SmallString<256> MemberAttrs(AccessSpecifier); - if (Kind != MethodKind::Vanilla) { - SmallString<256> MethodKind = - getEnumName(IO, unsigned(Kind), makeArrayRef(getMemberKindNames())); - MemberAttrs += (", " + MethodKind).str(); - } - if (Options != MethodOptions::None) { - SmallString<256> MethodOptions = getFlagNames( - IO, unsigned(Options), makeArrayRef(getMethodOptionNames())); - MemberAttrs += (", " + MethodOptions).str(); - } - return MemberAttrs.str(); -} - +namespace { struct MapOneMethodRecord { explicit MapOneMethodRecord(bool IsFromOverloadList) : IsFromOverloadList(IsFromOverloadList) {} Error operator()(CodeViewRecordIO &IO, OneMethodRecord &Method) const { - StringRef Attrs = getMemberAttributes( - IO, Method.getAccess(), Method.getMethodKind(), Method.getOptions()); - error(IO.mapInteger(Method.Attrs.Attrs, "Attrs: " + Attrs)); + error(IO.mapInteger(Method.Attrs.Attrs, "AccessSpecifier")); if (IsFromOverloadList) { uint16_t Padding = 0; - error(IO.mapInteger(Padding)); + error(IO.mapInteger(Padding, "Padding")); } error(IO.mapInteger(Method.Type, "Type")); if (Method.isIntroducingVirtual()) { @@ -141,7 +41,7 @@ struct MapOneMethodRecord { private: bool IsFromOverloadList; }; -} // namespace +} static Error mapNameAndUniqueName(CodeViewRecordIO &IO, StringRef &Name, StringRef &UniqueName, bool HasUniqueName) { @@ -183,6 +83,18 @@ static Error mapNameAndUniqueName(CodeViewRecordIO &IO, StringRef &Name, return Error::success(); } +static StringRef getLeafTypeName(TypeLeafKind LT) { + switch (LT) { +#define TYPE_RECORD(ename, value, name) \ + case ename: \ + return #ename; +#include "llvm/DebugInfo/CodeView/CodeViewTypes.def" + default: + break; + } + return "UnknownLeaf"; +} + Error TypeRecordMapping::visitTypeBegin(CVType &CVR) { assert(!TypeKind.hasValue() && "Already in a type mapping!"); assert(!MemberKind.hasValue() && "Already in a member mapping!"); @@ -196,22 +108,10 @@ Error TypeRecordMapping::visitTypeBegin(CVType &CVR) { MaxLen = MaxRecordLength - sizeof(RecordPrefix); error(IO.beginRecord(MaxLen)); TypeKind = CVR.kind(); - - if (IO.isStreaming()) { - auto RecordKind = CVR.kind(); - uint16_t RecordLen = CVR.length() - 2; - SmallString<128> RecordKindName = - getEnumName(IO, unsigned(RecordKind), makeArrayRef(LeafTypeNames)); - error(IO.mapInteger(RecordLen, "Record length")); - error(IO.mapEnum(RecordKind, "Record kind: " + RecordKindName)); - } return Error::success(); } Error TypeRecordMapping::visitTypeBegin(CVType &CVR, TypeIndex Index) { - if (IO.isStreaming()) - IO.emitRawComment(" " + getLeafTypeName(CVR.kind()) + " (0x" + - utohexstr(Index.getIndex()) + ")"); return visitTypeBegin(CVR); } @@ -240,13 +140,8 @@ Error TypeRecordMapping::visitMemberBegin(CVMemberRecord &Record) { MemberKind = Record.Kind; if (IO.isStreaming()) { - SmallString<128> MemberKindName = getLeafTypeName(Record.Kind); - MemberKindName += - (" ( " + - getEnumName(IO, unsigned(Record.Kind), makeArrayRef(LeafTypeNames)) + - " )") - .str(); - error(IO.mapEnum(Record.Kind, "Member kind: " + MemberKindName)); + error(IO.mapEnum(Record.Kind, + "Member kind: " + getLeafTypeName(Record.Kind))); } return Error::success(); } @@ -266,24 +161,16 @@ Error TypeRecordMapping::visitMemberEnd(CVMemberRecord &Record) { } Error TypeRecordMapping::visitKnownRecord(CVType &CVR, ModifierRecord &Record) { - SmallString<256> ModifierNames = - getFlagNames(IO, static_cast<uint16_t>(Record.Modifiers), - makeArrayRef(getTypeModifierNames())); error(IO.mapInteger(Record.ModifiedType, "ModifiedType")); - error(IO.mapEnum(Record.Modifiers, "Modifiers" + ModifierNames)); + error(IO.mapEnum(Record.Modifiers, "Modifiers")); return Error::success(); } Error TypeRecordMapping::visitKnownRecord(CVType &CVR, ProcedureRecord &Record) { - SmallString<256> CallingConvName = getEnumName( - IO, uint8_t(Record.CallConv), makeArrayRef(getCallingConventions())); - SmallString<256> FuncOptionNames = - getFlagNames(IO, static_cast<uint16_t>(Record.Options), - makeArrayRef(getFunctionOptionEnum())); error(IO.mapInteger(Record.ReturnType, "ReturnType")); - error(IO.mapEnum(Record.CallConv, "CallingConvention: " + CallingConvName)); - error(IO.mapEnum(Record.Options, "FunctionOptions" + FuncOptionNames)); + error(IO.mapEnum(Record.CallConv, "CallingConvention")); + error(IO.mapEnum(Record.Options, "FunctionOptions")); error(IO.mapInteger(Record.ParameterCount, "NumParameters")); error(IO.mapInteger(Record.ArgumentList, "ArgListType")); @@ -292,16 +179,11 @@ Error TypeRecordMapping::visitKnownRecord(CVType &CVR, Error TypeRecordMapping::visitKnownRecord(CVType &CVR, MemberFunctionRecord &Record) { - SmallString<256> CallingConvName = getEnumName( - IO, uint8_t(Record.CallConv), makeArrayRef(getCallingConventions())); - SmallString<256> FuncOptionNames = - getFlagNames(IO, static_cast<uint16_t>(Record.Options), - makeArrayRef(getFunctionOptionEnum())); error(IO.mapInteger(Record.ReturnType, "ReturnType")); error(IO.mapInteger(Record.ClassType, "ClassType")); error(IO.mapInteger(Record.ThisType, "ThisType")); - error(IO.mapEnum(Record.CallConv, "CallingConvention: " + CallingConvName)); - error(IO.mapEnum(Record.Options, "FunctionOptions" + FuncOptionNames)); + error(IO.mapEnum(Record.CallConv, "CallingConvention")); + error(IO.mapEnum(Record.Options, "FunctionOptions")); error(IO.mapInteger(Record.ParameterCount, "NumParameters")); error(IO.mapInteger(Record.ArgumentList, "ArgListType")); error(IO.mapInteger(Record.ThisPointerAdjustment, "ThisAdjustment")); @@ -332,40 +214,8 @@ Error TypeRecordMapping::visitKnownRecord(CVType &CVR, } Error TypeRecordMapping::visitKnownRecord(CVType &CVR, PointerRecord &Record) { - - SmallString<128> Attr("Attrs: "); - - if (IO.isStreaming()) { - SmallString<128> PtrType = getEnumName( - IO, unsigned(Record.getPointerKind()), makeArrayRef(getPtrKindNames())); - Attr += ("[ Type: " + PtrType).str(); - - SmallString<128> PtrMode = getEnumName(IO, unsigned(Record.getMode()), - makeArrayRef(getPtrModeNames())); - Attr += (", Mode: " + PtrMode).str(); - - auto PtrSizeOf = Record.getSize(); - Attr += ", SizeOf: " + itostr(PtrSizeOf); - - if (auto PtrIsFlat = Record.isFlat()) - Attr += ", isFlat"; - if (auto PtrIsConst = Record.isConst()) - Attr += ", isConst"; - if (auto PtrIsVolatile = Record.isVolatile()) - Attr += ", isVolatile"; - if (auto PtrIsUnaligned = Record.isUnaligned()) - Attr += ", isUnaligned"; - if (auto PtrIsRestrict = Record.isRestrict()) - Attr += ", isRestricted"; - if (auto PtrIsLValueReferenceThisPtr = Record.isLValueReferenceThisPtr()) - Attr += ", isThisPtr&"; - if (auto PtrIsRValueReferenceThisPtr = Record.isRValueReferenceThisPtr()) - Attr += ", isThisPtr&&"; - Attr += " ]"; - } - error(IO.mapInteger(Record.ReferentType, "PointeeType")); - error(IO.mapInteger(Record.Attrs, Attr)); + error(IO.mapInteger(Record.Attrs, "Attributes")); if (Record.isPointerToMember()) { if (IO.isReading()) @@ -373,10 +223,7 @@ Error TypeRecordMapping::visitKnownRecord(CVType &CVR, PointerRecord &Record) { MemberPointerInfo &M = *Record.MemberInfo; error(IO.mapInteger(M.ContainingType, "ClassType")); - SmallString<256> PtrMemberGetRepresentation = getEnumName( - IO, uint16_t(M.Representation), makeArrayRef(getPtrMemberRepNames())); - error(IO.mapEnum(M.Representation, - "Representation: " + PtrMemberGetRepresentation)); + error(IO.mapEnum(M.Representation, "Representation")); } return Error::success(); @@ -396,11 +243,8 @@ Error TypeRecordMapping::visitKnownRecord(CVType &CVR, ClassRecord &Record) { (CVR.kind() == TypeLeafKind::LF_CLASS) || (CVR.kind() == TypeLeafKind::LF_INTERFACE)); - SmallString<256> PropertiesNames = - getFlagNames(IO, static_cast<uint16_t>(Record.Options), - makeArrayRef(getClassOptionNames())); error(IO.mapInteger(Record.MemberCount, "MemberCount")); - error(IO.mapEnum(Record.Options, "Properties" + PropertiesNames)); + error(IO.mapEnum(Record.Options, "Properties")); error(IO.mapInteger(Record.FieldList, "FieldList")); error(IO.mapInteger(Record.DerivationList, "DerivedFrom")); error(IO.mapInteger(Record.VTableShape, "VShape")); @@ -412,11 +256,8 @@ Error TypeRecordMapping::visitKnownRecord(CVType &CVR, ClassRecord &Record) { } Error TypeRecordMapping::visitKnownRecord(CVType &CVR, UnionRecord &Record) { - SmallString<256> PropertiesNames = - getFlagNames(IO, static_cast<uint16_t>(Record.Options), - makeArrayRef(getClassOptionNames())); error(IO.mapInteger(Record.MemberCount, "MemberCount")); - error(IO.mapEnum(Record.Options, "Properties" + PropertiesNames)); + error(IO.mapEnum(Record.Options, "Properties")); error(IO.mapInteger(Record.FieldList, "FieldList")); error(IO.mapEncodedInteger(Record.Size, "SizeOf")); error(mapNameAndUniqueName(IO, Record.Name, Record.UniqueName, @@ -426,11 +267,8 @@ Error TypeRecordMapping::visitKnownRecord(CVType &CVR, UnionRecord &Record) { } Error TypeRecordMapping::visitKnownRecord(CVType &CVR, EnumRecord &Record) { - SmallString<256> PropertiesNames = - getFlagNames(IO, static_cast<uint16_t>(Record.Options), - makeArrayRef(getClassOptionNames())); error(IO.mapInteger(Record.MemberCount, "NumEnumerators")); - error(IO.mapEnum(Record.Options, "Properties" + PropertiesNames)); + error(IO.mapEnum(Record.Options, "Properties")); error(IO.mapInteger(Record.UnderlyingType, "UnderlyingType")); error(IO.mapInteger(Record.FieldList, "FieldListType")); error(mapNameAndUniqueName(IO, Record.Name, Record.UniqueName, @@ -580,17 +418,13 @@ Error TypeRecordMapping::visitKnownRecord(CVType &CVR, } Error TypeRecordMapping::visitKnownRecord(CVType &CVR, LabelRecord &Record) { - SmallString<256> ModeName = - getEnumName(IO, uint16_t(Record.Mode), makeArrayRef(getLabelTypeEnum())); - error(IO.mapEnum(Record.Mode, "Mode: " + ModeName)); + error(IO.mapEnum(Record.Mode, "Mode")); return Error::success(); } Error TypeRecordMapping::visitKnownMember(CVMemberRecord &CVR, BaseClassRecord &Record) { - StringRef Attrs = getMemberAttributes( - IO, Record.getAccess(), MethodKind::Vanilla, MethodOptions::None); - error(IO.mapInteger(Record.Attrs.Attrs, "Attrs: " + Attrs)); + error(IO.mapInteger(Record.Attrs.Attrs, "AccessSpecifier")); error(IO.mapInteger(Record.Type, "BaseType")); error(IO.mapEncodedInteger(Record.Offset, "BaseOffset")); @@ -599,9 +433,7 @@ Error TypeRecordMapping::visitKnownMember(CVMemberRecord &CVR, Error TypeRecordMapping::visitKnownMember(CVMemberRecord &CVR, EnumeratorRecord &Record) { - StringRef Attrs = getMemberAttributes( - IO, Record.getAccess(), MethodKind::Vanilla, MethodOptions::None); - error(IO.mapInteger(Record.Attrs.Attrs, "Attrs: " + Attrs)); + error(IO.mapInteger(Record.Attrs.Attrs)); // FIXME: Handle full APInt such as __int128. error(IO.mapEncodedInteger(Record.Value, "EnumValue")); @@ -612,9 +444,7 @@ Error TypeRecordMapping::visitKnownMember(CVMemberRecord &CVR, Error TypeRecordMapping::visitKnownMember(CVMemberRecord &CVR, DataMemberRecord &Record) { - StringRef Attrs = getMemberAttributes( - IO, Record.getAccess(), MethodKind::Vanilla, MethodOptions::None); - error(IO.mapInteger(Record.Attrs.Attrs, "Attrs: " + Attrs)); + error(IO.mapInteger(Record.Attrs.Attrs, "AccessSpecifier")); error(IO.mapInteger(Record.Type, "Type")); error(IO.mapEncodedInteger(Record.FieldOffset, "FieldOffset")); error(IO.mapStringZ(Record.Name, "Name")); @@ -651,9 +481,7 @@ Error TypeRecordMapping::visitKnownMember(CVMemberRecord &CVR, Error TypeRecordMapping::visitKnownMember(CVMemberRecord &CVR, StaticDataMemberRecord &Record) { - StringRef Attrs = getMemberAttributes( - IO, Record.getAccess(), MethodKind::Vanilla, MethodOptions::None); - error(IO.mapInteger(Record.Attrs.Attrs, "Attrs: " + Attrs)); + error(IO.mapInteger(Record.Attrs.Attrs, "AccessSpecifier")); error(IO.mapInteger(Record.Type, "Type")); error(IO.mapStringZ(Record.Name, "Name")); @@ -663,9 +491,7 @@ Error TypeRecordMapping::visitKnownMember(CVMemberRecord &CVR, Error TypeRecordMapping::visitKnownMember(CVMemberRecord &CVR, VirtualBaseClassRecord &Record) { - StringRef Attrs = getMemberAttributes( - IO, Record.getAccess(), MethodKind::Vanilla, MethodOptions::None); - error(IO.mapInteger(Record.Attrs.Attrs, "Attrs: " + Attrs)); + error(IO.mapInteger(Record.Attrs.Attrs, "AccessSpecifier")); error(IO.mapInteger(Record.BaseType, "BaseType")); error(IO.mapInteger(Record.VBPtrType, "VBPtrType")); error(IO.mapEncodedInteger(Record.VBPtrOffset, "VBPtrOffset")); |