diff options
Diffstat (limited to 'llvm/tools/llvm-readobj/COFFDumper.cpp')
-rw-r--r-- | llvm/tools/llvm-readobj/COFFDumper.cpp | 125 |
1 files changed, 63 insertions, 62 deletions
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp index af3a79d3d1e..0add018f80d 100644 --- a/llvm/tools/llvm-readobj/COFFDumper.cpp +++ b/llvm/tools/llvm-readobj/COFFDumper.cpp @@ -425,19 +425,19 @@ WeakExternalCharacteristics[] = { { "Alias" , COFF::IMAGE_WEAK_EXTERN_SEARCH_ALIAS } }; -static const EnumEntry<CompileSym3::Flags> CompileSym3Flags[] = { - LLVM_READOBJ_ENUM_ENT(CompileSym3, EC), - LLVM_READOBJ_ENUM_ENT(CompileSym3, NoDbgInfo), - LLVM_READOBJ_ENUM_ENT(CompileSym3, LTCG), - LLVM_READOBJ_ENUM_ENT(CompileSym3, NoDataAlign), - LLVM_READOBJ_ENUM_ENT(CompileSym3, ManagedPresent), - LLVM_READOBJ_ENUM_ENT(CompileSym3, SecurityChecks), - LLVM_READOBJ_ENUM_ENT(CompileSym3, HotPatch), - LLVM_READOBJ_ENUM_ENT(CompileSym3, CVTCIL), - LLVM_READOBJ_ENUM_ENT(CompileSym3, MSILModule), - LLVM_READOBJ_ENUM_ENT(CompileSym3, Sdl), - LLVM_READOBJ_ENUM_ENT(CompileSym3, PGO), - LLVM_READOBJ_ENUM_ENT(CompileSym3, Exp), +static const EnumEntry<uint32_t> CompileSym3FlagNames[] = { + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, EC), + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, NoDbgInfo), + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, LTCG), + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, NoDataAlign), + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, ManagedPresent), + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, SecurityChecks), + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, HotPatch), + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, CVTCIL), + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, MSILModule), + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, Sdl), + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, PGO), + LLVM_READOBJ_ENUM_CLASS_ENT(CompileSym3Flags, Exp), }; static const EnumEntry<codeview::SourceLanguage> SourceLanguages[] = { @@ -538,15 +538,15 @@ static const EnumEntry<unsigned> CPUTypeNames[] = { LLVM_READOBJ_ENUM_CLASS_ENT(CPUType, D3D11_Shader), }; -static const EnumEntry<uint8_t> ProcSymFlags[] = { - LLVM_READOBJ_ENUM_ENT(ProcFlags, HasFP), - LLVM_READOBJ_ENUM_ENT(ProcFlags, HasIRET), - LLVM_READOBJ_ENUM_ENT(ProcFlags, HasFRET), - LLVM_READOBJ_ENUM_ENT(ProcFlags, IsNoReturn), - LLVM_READOBJ_ENUM_ENT(ProcFlags, IsUnreachable), - LLVM_READOBJ_ENUM_ENT(ProcFlags, HasCustomCallingConv), - LLVM_READOBJ_ENUM_ENT(ProcFlags, IsNoInline), - LLVM_READOBJ_ENUM_ENT(ProcFlags, HasOptimizedDebugInfo), +static const EnumEntry<uint8_t> ProcSymFlagNames[] = { + LLVM_READOBJ_ENUM_CLASS_ENT(ProcSymFlags, HasFP), + LLVM_READOBJ_ENUM_CLASS_ENT(ProcSymFlags, HasIRET), + LLVM_READOBJ_ENUM_CLASS_ENT(ProcSymFlags, HasFRET), + LLVM_READOBJ_ENUM_CLASS_ENT(ProcSymFlags, IsNoReturn), + LLVM_READOBJ_ENUM_CLASS_ENT(ProcSymFlags, IsUnreachable), + LLVM_READOBJ_ENUM_CLASS_ENT(ProcSymFlags, HasCustomCallingConv), + LLVM_READOBJ_ENUM_CLASS_ENT(ProcSymFlags, IsNoInline), + LLVM_READOBJ_ENUM_CLASS_ENT(ProcSymFlags, HasOptimizedDebugInfo), }; static const EnumEntry<uint32_t> FrameProcSymFlags[] = { @@ -582,24 +582,24 @@ static const EnumEntry<uint32_t> FrameDataFlags[] = { }; static const EnumEntry<uint16_t> LocalFlags[] = { - LLVM_READOBJ_ENUM_ENT(LocalSym, IsParameter), - LLVM_READOBJ_ENUM_ENT(LocalSym, IsAddressTaken), - LLVM_READOBJ_ENUM_ENT(LocalSym, IsCompilerGenerated), - LLVM_READOBJ_ENUM_ENT(LocalSym, IsAggregate), - LLVM_READOBJ_ENUM_ENT(LocalSym, IsAggregated), - LLVM_READOBJ_ENUM_ENT(LocalSym, IsAliased), - LLVM_READOBJ_ENUM_ENT(LocalSym, IsAlias), - LLVM_READOBJ_ENUM_ENT(LocalSym, IsReturnValue), - LLVM_READOBJ_ENUM_ENT(LocalSym, IsOptimizedOut), - LLVM_READOBJ_ENUM_ENT(LocalSym, IsEnregisteredGlobal), - LLVM_READOBJ_ENUM_ENT(LocalSym, IsEnregisteredStatic), + LLVM_READOBJ_ENUM_CLASS_ENT(LocalSymFlags, IsParameter), + LLVM_READOBJ_ENUM_CLASS_ENT(LocalSymFlags, IsAddressTaken), + LLVM_READOBJ_ENUM_CLASS_ENT(LocalSymFlags, IsCompilerGenerated), + LLVM_READOBJ_ENUM_CLASS_ENT(LocalSymFlags, IsAggregate), + LLVM_READOBJ_ENUM_CLASS_ENT(LocalSymFlags, IsAggregated), + LLVM_READOBJ_ENUM_CLASS_ENT(LocalSymFlags, IsAliased), + LLVM_READOBJ_ENUM_CLASS_ENT(LocalSymFlags, IsAlias), + LLVM_READOBJ_ENUM_CLASS_ENT(LocalSymFlags, IsReturnValue), + LLVM_READOBJ_ENUM_CLASS_ENT(LocalSymFlags, IsOptimizedOut), + LLVM_READOBJ_ENUM_CLASS_ENT(LocalSymFlags, IsEnregisteredGlobal), + LLVM_READOBJ_ENUM_CLASS_ENT(LocalSymFlags, IsEnregisteredStatic), }; -static const EnumEntry<uint16_t> FrameCookieKinds[] = { - LLVM_READOBJ_ENUM_ENT(FrameCookieSym, Copy), - LLVM_READOBJ_ENUM_ENT(FrameCookieSym, XorStackPointer), - LLVM_READOBJ_ENUM_ENT(FrameCookieSym, XorFramePointer), - LLVM_READOBJ_ENUM_ENT(FrameCookieSym, XorR13), +static const EnumEntry<uint32_t> FrameCookieKinds[] = { + LLVM_READOBJ_ENUM_CLASS_ENT(FrameCookieKind, Copy), + LLVM_READOBJ_ENUM_CLASS_ENT(FrameCookieKind, XorStackPointer), + LLVM_READOBJ_ENUM_CLASS_ENT(FrameCookieKind, XorFramePointer), + LLVM_READOBJ_ENUM_CLASS_ENT(FrameCookieKind, XorR13), }; static const EnumEntry<uint8_t> FileChecksumKindNames[] = { @@ -994,7 +994,7 @@ void COFFDumper::printCodeViewSymbolSection(StringRef SectionName, void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection, const SectionRef &Section, StringRef SectionContents) { - if (Subsection.size() < sizeof(SymRecord)) + if (Subsection.size() < sizeof(RecordPrefix)) return error(object_error::parse_failed); const coff_section *Sec = Obj->getCOFFSection(Section); @@ -1004,15 +1004,15 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection, bool InFunctionScope = false; while (!Data.empty()) { - const SymRecord *Rec; + const RecordPrefix *Rec; error(consumeObject(Data, Rec)); - StringRef SymData = Data.substr(0, Rec->RecordLength - 2); + StringRef SymData = Data.substr(0, Rec->RecordLen - 2); StringRef OrigSymData = SymData; - Data = Data.drop_front(Rec->RecordLength - 2); + Data = Data.drop_front(Rec->RecordLen - 2); - SymbolRecordKind Kind = Rec->getKind(); + SymbolKind Kind = static_cast<SymbolKind>(uint16_t(Rec->RecordKind)); switch (Kind) { case S_LPROC32: case S_GPROC32: @@ -1039,7 +1039,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection, printRelocatedField("CodeOffset", Sec, SectionContents, &Proc->CodeOffset, &LinkageName); W.printHex("Segment", Proc->Segment); - W.printFlags("Flags", Proc->Flags, makeArrayRef(ProcSymFlags)); + W.printFlags("Flags", Proc->Flags, makeArrayRef(ProcSymFlagNames)); W.printString("DisplayName", DisplayName); W.printString("LinkageName", LinkageName); break; @@ -1086,7 +1086,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection, &Label->CodeOffset, &LinkageName); W.printHex("Segment", Label->Segment); W.printHex("Flags", Label->Flags); - W.printFlags("Flags", Label->Flags, makeArrayRef(ProcSymFlags)); + W.printFlags("Flags", Label->Flags, makeArrayRef(ProcSymFlagNames)); W.printString("DisplayName", DisplayName); W.printString("LinkageName", LinkageName); break; @@ -1145,44 +1145,45 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection, ListScope BinaryAnnotations(W, "BinaryAnnotations"); while (!SymData.empty()) { - uint32_t OpCode = GetCompressedAnnotation(); + auto OpCode = + static_cast<BinaryAnnotationsOpCode>(GetCompressedAnnotation()); switch (OpCode) { default: - case Invalid: + case BinaryAnnotationsOpCode::Invalid: return error(object_error::parse_failed); - case CodeOffset: + case BinaryAnnotationsOpCode::CodeOffset: W.printHex("CodeOffset", GetCompressedAnnotation()); break; - case ChangeCodeOffsetBase: + case BinaryAnnotationsOpCode::ChangeCodeOffsetBase: W.printNumber("ChangeCodeOffsetBase", GetCompressedAnnotation()); break; - case ChangeCodeOffset: + case BinaryAnnotationsOpCode::ChangeCodeOffset: W.printHex("ChangeCodeOffset", GetCompressedAnnotation()); break; - case ChangeCodeLength: + case BinaryAnnotationsOpCode::ChangeCodeLength: W.printHex("ChangeCodeLength", GetCompressedAnnotation()); break; - case ChangeFile: + case BinaryAnnotationsOpCode::ChangeFile: printFileNameForOffset("ChangeFile", GetCompressedAnnotation()); break; - case ChangeLineOffset: + case BinaryAnnotationsOpCode::ChangeLineOffset: W.printNumber("ChangeLineOffset", DecodeSignedOperand(GetCompressedAnnotation())); break; - case ChangeLineEndDelta: + case BinaryAnnotationsOpCode::ChangeLineEndDelta: W.printNumber("ChangeLineEndDelta", GetCompressedAnnotation()); break; - case ChangeRangeKind: + case BinaryAnnotationsOpCode::ChangeRangeKind: W.printNumber("ChangeRangeKind", GetCompressedAnnotation()); break; - case ChangeColumnStart: + case BinaryAnnotationsOpCode::ChangeColumnStart: W.printNumber("ChangeColumnStart", GetCompressedAnnotation()); break; - case ChangeColumnEndDelta: + case BinaryAnnotationsOpCode::ChangeColumnEndDelta: W.printNumber("ChangeColumnEndDelta", DecodeSignedOperand(GetCompressedAnnotation())); break; - case ChangeCodeOffsetAndLineOffset: { + case BinaryAnnotationsOpCode::ChangeCodeOffsetAndLineOffset: { uint32_t Annotation = GetCompressedAnnotation(); int32_t LineOffset = DecodeSignedOperand(Annotation >> 4); uint32_t CodeOffset = Annotation & 0xf; @@ -1191,7 +1192,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection, << "}\n"; break; } - case ChangeCodeLengthAndCodeOffset: { + case BinaryAnnotationsOpCode::ChangeCodeLengthAndCodeOffset: { uint32_t Length = GetCompressedAnnotation(); uint32_t CodeOffset = GetCompressedAnnotation(); W.startLine() << "ChangeCodeLengthAndCodeOffset: {CodeOffset: " @@ -1199,7 +1200,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection, << "}\n"; break; } - case ChangeColumnEnd: + case BinaryAnnotationsOpCode::ChangeColumnEnd: W.printNumber("ChangeColumnEnd", GetCompressedAnnotation()); break; } @@ -1416,7 +1417,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection, W.printEnum("Language", CompFlags->getLanguage(), makeArrayRef(SourceLanguages)); W.printFlags("Flags", CompFlags->flags & ~0xff, - makeArrayRef(CompileSym3Flags)); + makeArrayRef(CompileSym3FlagNames)); W.printEnum("Machine", unsigned(CompFlags->Machine), makeArrayRef(CPUTypeNames)); std::string FrontendVersion; @@ -1516,7 +1517,7 @@ void COFFDumper::printCodeViewSymbolsSubsection(StringRef Subsection, default: { DictScope S(W, "UnknownSym"); W.printHex("Kind", unsigned(Kind)); - W.printHex("Size", Rec->RecordLength); + W.printHex("Size", Rec->RecordLen); break; } } |