1*0b57cec5SDimitry Andric //===- EnumTables.cpp - Enum to string conversion tables ------------------===// 2*0b57cec5SDimitry Andric // 3*0b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*0b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0b57cec5SDimitry Andric // 7*0b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 8*0b57cec5SDimitry Andric 9*0b57cec5SDimitry Andric #include "llvm/DebugInfo/CodeView/EnumTables.h" 10*0b57cec5SDimitry Andric #include "llvm/Support/ScopedPrinter.h" 11*0b57cec5SDimitry Andric #include <type_traits> 12*0b57cec5SDimitry Andric 13*0b57cec5SDimitry Andric using namespace llvm; 14*0b57cec5SDimitry Andric using namespace codeview; 15*0b57cec5SDimitry Andric 16*0b57cec5SDimitry Andric #define CV_ENUM_CLASS_ENT(enum_class, enum) \ 17*0b57cec5SDimitry Andric { #enum, std::underlying_type < enum_class > ::type(enum_class::enum) } 18*0b57cec5SDimitry Andric 19*0b57cec5SDimitry Andric #define CV_ENUM_ENT(ns, enum) \ 20*0b57cec5SDimitry Andric { #enum, ns::enum } 21*0b57cec5SDimitry Andric 22*0b57cec5SDimitry Andric static const EnumEntry<SymbolKind> SymbolTypeNames[] = { 23*0b57cec5SDimitry Andric #define CV_SYMBOL(enum, val) {#enum, enum}, 24*0b57cec5SDimitry Andric #include "llvm/DebugInfo/CodeView/CodeViewSymbols.def" 25*0b57cec5SDimitry Andric #undef CV_SYMBOL 26*0b57cec5SDimitry Andric }; 27*0b57cec5SDimitry Andric 28*0b57cec5SDimitry Andric static const EnumEntry<TypeLeafKind> TypeLeafNames[] = { 29*0b57cec5SDimitry Andric #define CV_TYPE(name, val) {#name, name}, 30*0b57cec5SDimitry Andric #include "llvm/DebugInfo/CodeView/CodeViewTypes.def" 31*0b57cec5SDimitry Andric #undef CV_TYPE 32*0b57cec5SDimitry Andric }; 33*0b57cec5SDimitry Andric 34*0b57cec5SDimitry Andric static const EnumEntry<uint16_t> RegisterNames_X86[] = { 35*0b57cec5SDimitry Andric #define CV_REGISTERS_X86 36*0b57cec5SDimitry Andric #define CV_REGISTER(name, val) CV_ENUM_CLASS_ENT(RegisterId, name), 37*0b57cec5SDimitry Andric #include "llvm/DebugInfo/CodeView/CodeViewRegisters.def" 38*0b57cec5SDimitry Andric #undef CV_REGISTER 39*0b57cec5SDimitry Andric #undef CV_REGISTERS_X86 40*0b57cec5SDimitry Andric }; 41*0b57cec5SDimitry Andric 42*0b57cec5SDimitry Andric static const EnumEntry<uint16_t> RegisterNames_ARM64[] = { 43*0b57cec5SDimitry Andric #define CV_REGISTERS_ARM64 44*0b57cec5SDimitry Andric #define CV_REGISTER(name, val) CV_ENUM_CLASS_ENT(RegisterId, name), 45*0b57cec5SDimitry Andric #include "llvm/DebugInfo/CodeView/CodeViewRegisters.def" 46*0b57cec5SDimitry Andric #undef CV_REGISTER 47*0b57cec5SDimitry Andric #undef CV_REGISTERS_ARM64 48*0b57cec5SDimitry Andric }; 49*0b57cec5SDimitry Andric 50*0b57cec5SDimitry Andric static const EnumEntry<uint32_t> PublicSymFlagNames[] = { 51*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(PublicSymFlags, Code), 52*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(PublicSymFlags, Function), 53*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(PublicSymFlags, Managed), 54*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(PublicSymFlags, MSIL), 55*0b57cec5SDimitry Andric }; 56*0b57cec5SDimitry Andric 57*0b57cec5SDimitry Andric static const EnumEntry<uint8_t> ProcSymFlagNames[] = { 58*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ProcSymFlags, HasFP), 59*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ProcSymFlags, HasIRET), 60*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ProcSymFlags, HasFRET), 61*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ProcSymFlags, IsNoReturn), 62*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ProcSymFlags, IsUnreachable), 63*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ProcSymFlags, HasCustomCallingConv), 64*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ProcSymFlags, IsNoInline), 65*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ProcSymFlags, HasOptimizedDebugInfo), 66*0b57cec5SDimitry Andric }; 67*0b57cec5SDimitry Andric 68*0b57cec5SDimitry Andric static const EnumEntry<uint16_t> LocalFlags[] = { 69*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(LocalSymFlags, IsParameter), 70*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(LocalSymFlags, IsAddressTaken), 71*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(LocalSymFlags, IsCompilerGenerated), 72*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(LocalSymFlags, IsAggregate), 73*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(LocalSymFlags, IsAggregated), 74*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(LocalSymFlags, IsAliased), 75*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(LocalSymFlags, IsAlias), 76*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(LocalSymFlags, IsReturnValue), 77*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(LocalSymFlags, IsOptimizedOut), 78*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(LocalSymFlags, IsEnregisteredGlobal), 79*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(LocalSymFlags, IsEnregisteredStatic), 80*0b57cec5SDimitry Andric }; 81*0b57cec5SDimitry Andric 82*0b57cec5SDimitry Andric static const EnumEntry<uint8_t> FrameCookieKinds[] = { 83*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameCookieKind, Copy), 84*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameCookieKind, XorStackPointer), 85*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameCookieKind, XorFramePointer), 86*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameCookieKind, XorR13), 87*0b57cec5SDimitry Andric }; 88*0b57cec5SDimitry Andric 89*0b57cec5SDimitry Andric static const EnumEntry<codeview::SourceLanguage> SourceLanguages[] = { 90*0b57cec5SDimitry Andric CV_ENUM_ENT(SourceLanguage, C), CV_ENUM_ENT(SourceLanguage, Cpp), 91*0b57cec5SDimitry Andric CV_ENUM_ENT(SourceLanguage, Fortran), CV_ENUM_ENT(SourceLanguage, Masm), 92*0b57cec5SDimitry Andric CV_ENUM_ENT(SourceLanguage, Pascal), CV_ENUM_ENT(SourceLanguage, Basic), 93*0b57cec5SDimitry Andric CV_ENUM_ENT(SourceLanguage, Cobol), CV_ENUM_ENT(SourceLanguage, Link), 94*0b57cec5SDimitry Andric CV_ENUM_ENT(SourceLanguage, Cvtres), CV_ENUM_ENT(SourceLanguage, Cvtpgd), 95*0b57cec5SDimitry Andric CV_ENUM_ENT(SourceLanguage, CSharp), CV_ENUM_ENT(SourceLanguage, VB), 96*0b57cec5SDimitry Andric CV_ENUM_ENT(SourceLanguage, ILAsm), CV_ENUM_ENT(SourceLanguage, Java), 97*0b57cec5SDimitry Andric CV_ENUM_ENT(SourceLanguage, JScript), CV_ENUM_ENT(SourceLanguage, MSIL), 98*0b57cec5SDimitry Andric CV_ENUM_ENT(SourceLanguage, HLSL), CV_ENUM_ENT(SourceLanguage, D), 99*0b57cec5SDimitry Andric CV_ENUM_ENT(SourceLanguage, Swift), 100*0b57cec5SDimitry Andric }; 101*0b57cec5SDimitry Andric 102*0b57cec5SDimitry Andric static const EnumEntry<uint32_t> CompileSym2FlagNames[] = { 103*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym2Flags, EC), 104*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym2Flags, NoDbgInfo), 105*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym2Flags, LTCG), 106*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym2Flags, NoDataAlign), 107*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym2Flags, ManagedPresent), 108*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym2Flags, SecurityChecks), 109*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym2Flags, HotPatch), 110*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym2Flags, CVTCIL), 111*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym2Flags, MSILModule), 112*0b57cec5SDimitry Andric }; 113*0b57cec5SDimitry Andric 114*0b57cec5SDimitry Andric static const EnumEntry<uint32_t> CompileSym3FlagNames[] = { 115*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, EC), 116*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, NoDbgInfo), 117*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, LTCG), 118*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, NoDataAlign), 119*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, ManagedPresent), 120*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, SecurityChecks), 121*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, HotPatch), 122*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, CVTCIL), 123*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, MSILModule), 124*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, Sdl), 125*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, PGO), 126*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CompileSym3Flags, Exp), 127*0b57cec5SDimitry Andric }; 128*0b57cec5SDimitry Andric 129*0b57cec5SDimitry Andric static const EnumEntry<uint32_t> FileChecksumNames[] = { 130*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FileChecksumKind, None), 131*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FileChecksumKind, MD5), 132*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FileChecksumKind, SHA1), 133*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FileChecksumKind, SHA256), 134*0b57cec5SDimitry Andric }; 135*0b57cec5SDimitry Andric 136*0b57cec5SDimitry Andric static const EnumEntry<unsigned> CPUTypeNames[] = { 137*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Intel8080), 138*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Intel8086), 139*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Intel80286), 140*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Intel80386), 141*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Intel80486), 142*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Pentium), 143*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, PentiumPro), 144*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Pentium3), 145*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, MIPS), 146*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, MIPS16), 147*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, MIPS32), 148*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, MIPS64), 149*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, MIPSI), 150*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, MIPSII), 151*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, MIPSIII), 152*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, MIPSIV), 153*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, MIPSV), 154*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, M68000), 155*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, M68010), 156*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, M68020), 157*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, M68030), 158*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, M68040), 159*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Alpha), 160*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Alpha21164), 161*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Alpha21164A), 162*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Alpha21264), 163*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Alpha21364), 164*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, PPC601), 165*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, PPC603), 166*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, PPC604), 167*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, PPC620), 168*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, PPCFP), 169*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, PPCBE), 170*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, SH3), 171*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, SH3E), 172*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, SH3DSP), 173*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, SH4), 174*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, SHMedia), 175*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, ARM3), 176*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, ARM4), 177*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, ARM4T), 178*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, ARM5), 179*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, ARM5T), 180*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, ARM6), 181*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, ARM_XMAC), 182*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, ARM_WMMX), 183*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, ARM7), 184*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, ARM64), 185*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Omni), 186*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Ia64), 187*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Ia64_2), 188*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, CEE), 189*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, AM33), 190*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, M32R), 191*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, TriCore), 192*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, X64), 193*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, EBC), 194*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, Thumb), 195*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, ARMNT), 196*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(CPUType, D3D11_Shader), 197*0b57cec5SDimitry Andric }; 198*0b57cec5SDimitry Andric 199*0b57cec5SDimitry Andric static const EnumEntry<uint32_t> FrameProcSymFlagNames[] = { 200*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasAlloca), 201*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasSetJmp), 202*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasLongJmp), 203*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasInlineAssembly), 204*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasExceptionHandling), 205*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, MarkedInline), 206*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasStructuredExceptionHandling), 207*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, Naked), 208*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, SecurityChecks), 209*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, AsynchronousExceptionHandling), 210*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, NoStackOrderingForSecurityChecks), 211*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, Inlined), 212*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, StrictSecurityChecks), 213*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, SafeBuffers), 214*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, EncodedLocalBasePointerMask), 215*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, EncodedParamBasePointerMask), 216*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, ProfileGuidedOptimization), 217*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, ValidProfileCounts), 218*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, OptimizedForSpeed), 219*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, GuardCfg), 220*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(FrameProcedureOptions, GuardCfw), 221*0b57cec5SDimitry Andric }; 222*0b57cec5SDimitry Andric 223*0b57cec5SDimitry Andric static const EnumEntry<uint32_t> ModuleSubstreamKindNames[] = { 224*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, None), 225*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, Symbols), 226*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, Lines), 227*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, StringTable), 228*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, FileChecksums), 229*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, FrameData), 230*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, InlineeLines), 231*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, CrossScopeImports), 232*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, CrossScopeExports), 233*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, ILLines), 234*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, FuncMDTokenMap), 235*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, TypeMDTokenMap), 236*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, MergedAssemblyInput), 237*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(DebugSubsectionKind, CoffSymbolRVA), 238*0b57cec5SDimitry Andric }; 239*0b57cec5SDimitry Andric 240*0b57cec5SDimitry Andric static const EnumEntry<uint16_t> ExportSymFlagNames[] = { 241*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ExportFlags, IsConstant), 242*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ExportFlags, IsData), 243*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ExportFlags, IsPrivate), 244*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ExportFlags, HasNoName), 245*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ExportFlags, HasExplicitOrdinal), 246*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ExportFlags, IsForwarder), 247*0b57cec5SDimitry Andric }; 248*0b57cec5SDimitry Andric 249*0b57cec5SDimitry Andric static const EnumEntry<uint8_t> ThunkOrdinalNames[] = { 250*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ThunkOrdinal, Standard), 251*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ThunkOrdinal, ThisAdjustor), 252*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ThunkOrdinal, Vcall), 253*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ThunkOrdinal, Pcode), 254*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ThunkOrdinal, UnknownLoad), 255*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ThunkOrdinal, TrampIncremental), 256*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(ThunkOrdinal, BranchIsland), 257*0b57cec5SDimitry Andric }; 258*0b57cec5SDimitry Andric 259*0b57cec5SDimitry Andric static const EnumEntry<uint16_t> TrampolineNames[] = { 260*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(TrampolineType, TrampIncremental), 261*0b57cec5SDimitry Andric CV_ENUM_CLASS_ENT(TrampolineType, BranchIsland), 262*0b57cec5SDimitry Andric }; 263*0b57cec5SDimitry Andric 264*0b57cec5SDimitry Andric static const EnumEntry<COFF::SectionCharacteristics> 265*0b57cec5SDimitry Andric ImageSectionCharacteristicNames[] = { 266*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_TYPE_NOLOAD), 267*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_TYPE_NO_PAD), 268*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_CNT_CODE), 269*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_CNT_INITIALIZED_DATA), 270*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_CNT_UNINITIALIZED_DATA), 271*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_LNK_OTHER), 272*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_LNK_INFO), 273*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_LNK_REMOVE), 274*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_LNK_COMDAT), 275*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_GPREL), 276*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_PURGEABLE), 277*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_16BIT), 278*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_LOCKED), 279*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_PRELOAD), 280*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_1BYTES), 281*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_2BYTES), 282*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_4BYTES), 283*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_8BYTES), 284*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_16BYTES), 285*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_32BYTES), 286*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_64BYTES), 287*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_128BYTES), 288*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_256BYTES), 289*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_512BYTES), 290*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_1024BYTES), 291*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_2048BYTES), 292*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_4096BYTES), 293*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_8192BYTES), 294*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_LNK_NRELOC_OVFL), 295*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_DISCARDABLE), 296*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_NOT_CACHED), 297*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_NOT_PAGED), 298*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_SHARED), 299*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_EXECUTE), 300*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_READ), 301*0b57cec5SDimitry Andric CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_WRITE)}; 302*0b57cec5SDimitry Andric 303*0b57cec5SDimitry Andric namespace llvm { 304*0b57cec5SDimitry Andric namespace codeview { 305*0b57cec5SDimitry Andric 306*0b57cec5SDimitry Andric ArrayRef<EnumEntry<SymbolKind>> getSymbolTypeNames() { 307*0b57cec5SDimitry Andric return makeArrayRef(SymbolTypeNames); 308*0b57cec5SDimitry Andric } 309*0b57cec5SDimitry Andric 310*0b57cec5SDimitry Andric ArrayRef<EnumEntry<TypeLeafKind>> getTypeLeafNames() { 311*0b57cec5SDimitry Andric return makeArrayRef(TypeLeafNames); 312*0b57cec5SDimitry Andric } 313*0b57cec5SDimitry Andric 314*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint16_t>> getRegisterNames(CPUType Cpu) { 315*0b57cec5SDimitry Andric if (Cpu == CPUType::ARM64) { 316*0b57cec5SDimitry Andric return makeArrayRef(RegisterNames_ARM64); 317*0b57cec5SDimitry Andric } 318*0b57cec5SDimitry Andric return makeArrayRef(RegisterNames_X86); 319*0b57cec5SDimitry Andric } 320*0b57cec5SDimitry Andric 321*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint32_t>> getPublicSymFlagNames() { 322*0b57cec5SDimitry Andric return makeArrayRef(PublicSymFlagNames); 323*0b57cec5SDimitry Andric } 324*0b57cec5SDimitry Andric 325*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint8_t>> getProcSymFlagNames() { 326*0b57cec5SDimitry Andric return makeArrayRef(ProcSymFlagNames); 327*0b57cec5SDimitry Andric } 328*0b57cec5SDimitry Andric 329*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint16_t>> getLocalFlagNames() { 330*0b57cec5SDimitry Andric return makeArrayRef(LocalFlags); 331*0b57cec5SDimitry Andric } 332*0b57cec5SDimitry Andric 333*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint8_t>> getFrameCookieKindNames() { 334*0b57cec5SDimitry Andric return makeArrayRef(FrameCookieKinds); 335*0b57cec5SDimitry Andric } 336*0b57cec5SDimitry Andric 337*0b57cec5SDimitry Andric ArrayRef<EnumEntry<SourceLanguage>> getSourceLanguageNames() { 338*0b57cec5SDimitry Andric return makeArrayRef(SourceLanguages); 339*0b57cec5SDimitry Andric } 340*0b57cec5SDimitry Andric 341*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint32_t>> getCompileSym2FlagNames() { 342*0b57cec5SDimitry Andric return makeArrayRef(CompileSym2FlagNames); 343*0b57cec5SDimitry Andric } 344*0b57cec5SDimitry Andric 345*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint32_t>> getCompileSym3FlagNames() { 346*0b57cec5SDimitry Andric return makeArrayRef(CompileSym3FlagNames); 347*0b57cec5SDimitry Andric } 348*0b57cec5SDimitry Andric 349*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint32_t>> getFileChecksumNames() { 350*0b57cec5SDimitry Andric return makeArrayRef(FileChecksumNames); 351*0b57cec5SDimitry Andric } 352*0b57cec5SDimitry Andric 353*0b57cec5SDimitry Andric ArrayRef<EnumEntry<unsigned>> getCPUTypeNames() { 354*0b57cec5SDimitry Andric return makeArrayRef(CPUTypeNames); 355*0b57cec5SDimitry Andric } 356*0b57cec5SDimitry Andric 357*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint32_t>> getFrameProcSymFlagNames() { 358*0b57cec5SDimitry Andric return makeArrayRef(FrameProcSymFlagNames); 359*0b57cec5SDimitry Andric } 360*0b57cec5SDimitry Andric 361*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint16_t>> getExportSymFlagNames() { 362*0b57cec5SDimitry Andric return makeArrayRef(ExportSymFlagNames); 363*0b57cec5SDimitry Andric } 364*0b57cec5SDimitry Andric 365*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint32_t>> getModuleSubstreamKindNames() { 366*0b57cec5SDimitry Andric return makeArrayRef(ModuleSubstreamKindNames); 367*0b57cec5SDimitry Andric } 368*0b57cec5SDimitry Andric 369*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint8_t>> getThunkOrdinalNames() { 370*0b57cec5SDimitry Andric return makeArrayRef(ThunkOrdinalNames); 371*0b57cec5SDimitry Andric } 372*0b57cec5SDimitry Andric 373*0b57cec5SDimitry Andric ArrayRef<EnumEntry<uint16_t>> getTrampolineNames() { 374*0b57cec5SDimitry Andric return makeArrayRef(TrampolineNames); 375*0b57cec5SDimitry Andric } 376*0b57cec5SDimitry Andric 377*0b57cec5SDimitry Andric ArrayRef<EnumEntry<COFF::SectionCharacteristics>> 378*0b57cec5SDimitry Andric getImageSectionCharacteristicNames() { 379*0b57cec5SDimitry Andric return makeArrayRef(ImageSectionCharacteristicNames); 380*0b57cec5SDimitry Andric } 381*0b57cec5SDimitry Andric 382*0b57cec5SDimitry Andric } // end namespace codeview 383*0b57cec5SDimitry Andric } // end namespace llvm 384