| 1 | //===- EnumTables.cpp - Enum to string conversion tables ------------------===// |
| 2 | // |
| 3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| 4 | // See https://llvm.org/LICENSE.txt for license information. |
| 5 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| 6 | // |
| 7 | //===----------------------------------------------------------------------===// |
| 8 | |
| 9 | #include "llvm/DebugInfo/CodeView/EnumTables.h" |
| 10 | #include "llvm/ADT/Enum.h" |
| 11 | #include <type_traits> |
| 12 | |
| 13 | using namespace llvm; |
| 14 | using namespace codeview; |
| 15 | |
| 16 | #define CV_ENUM_CLASS_ENT(enum_class, enum) \ |
| 17 | {{#enum}, std::underlying_type_t<enum_class>(enum_class::enum)} |
| 18 | |
| 19 | #define CV_ENUM_ENT(ns, enum) {{#enum}, ns::enum} |
| 20 | |
| 21 | namespace llvm { |
| 22 | namespace codeview { |
| 23 | |
| 24 | EnumStrings<SymbolKind> getSymbolTypeNames() { |
| 25 | constexpr EnumStringDef<SymbolKind> SymbolTypeNameDefs[] = { |
| 26 | #define CV_SYMBOL(enum, val) {{#enum}, enum}, |
| 27 | #include "llvm/DebugInfo/CodeView/CodeViewSymbols.def" |
| 28 | #undef CV_SYMBOL |
| 29 | }; |
| 30 | static constexpr auto SymbolTypeNames = |
| 31 | BUILD_ENUM_STRINGS(SymbolTypeNameDefs); |
| 32 | return SymbolTypeNames; |
| 33 | } |
| 34 | |
| 35 | EnumStrings<TypeLeafKind> getTypeLeafNames() { |
| 36 | constexpr EnumStringDef<TypeLeafKind> TypeLeafNameDefs[] = { |
| 37 | #define CV_TYPE(name, val) {{#name}, name}, |
| 38 | #include "llvm/DebugInfo/CodeView/CodeViewTypes.def" |
| 39 | #undef CV_TYPE |
| 40 | }; |
| 41 | static constexpr auto TypeLeafNames = BUILD_ENUM_STRINGS(TypeLeafNameDefs); |
| 42 | return TypeLeafNames; |
| 43 | } |
| 44 | |
| 45 | EnumStrings<uint16_t> getRegisterNames(CPUType Cpu) { |
| 46 | constexpr EnumStringDef<uint16_t> RegisterNameDefs_X86[] = { |
| 47 | #define CV_REGISTERS_X86 |
| 48 | #define CV_REGISTER(name, val) CV_ENUM_CLASS_ENT(RegisterId, name), |
| 49 | #include "llvm/DebugInfo/CodeView/CodeViewRegisters.def" |
| 50 | #undef CV_REGISTER |
| 51 | #undef CV_REGISTERS_X86 |
| 52 | }; |
| 53 | static constexpr auto RegisterNames_X86 = |
| 54 | BUILD_ENUM_STRINGS(RegisterNameDefs_X86); |
| 55 | |
| 56 | constexpr EnumStringDef<uint16_t> RegisterNameDefs_ARM[] = { |
| 57 | #define CV_REGISTERS_ARM |
| 58 | #define CV_REGISTER(name, val) CV_ENUM_CLASS_ENT(RegisterId, name), |
| 59 | #include "llvm/DebugInfo/CodeView/CodeViewRegisters.def" |
| 60 | #undef CV_REGISTER |
| 61 | #undef CV_REGISTERS_ARM |
| 62 | }; |
| 63 | static constexpr auto RegisterNames_ARM = |
| 64 | BUILD_ENUM_STRINGS(RegisterNameDefs_ARM); |
| 65 | |
| 66 | constexpr EnumStringDef<uint16_t> RegisterNameDefs_ARM64[] = { |
| 67 | #define CV_REGISTERS_ARM64 |
| 68 | #define CV_REGISTER(name, val) CV_ENUM_CLASS_ENT(RegisterId, name), |
| 69 | #include "llvm/DebugInfo/CodeView/CodeViewRegisters.def" |
| 70 | #undef CV_REGISTER |
| 71 | #undef CV_REGISTERS_ARM64 |
| 72 | }; |
| 73 | static constexpr auto RegisterNames_ARM64 = |
| 74 | BUILD_ENUM_STRINGS(RegisterNameDefs_ARM64); |
| 75 | |
| 76 | if (Cpu == CPUType::ARMNT) { |
| 77 | return RegisterNames_ARM; |
| 78 | } else if (Cpu == CPUType::ARM64) { |
| 79 | return RegisterNames_ARM64; |
| 80 | } |
| 81 | return RegisterNames_X86; |
| 82 | } |
| 83 | |
| 84 | EnumStrings<uint32_t> getPublicSymFlagNames() { |
| 85 | constexpr EnumStringDef<uint32_t> PublicSymFlagNameDefs[] = { |
| 86 | CV_ENUM_CLASS_ENT(PublicSymFlags, Code), |
| 87 | CV_ENUM_CLASS_ENT(PublicSymFlags, Function), |
| 88 | CV_ENUM_CLASS_ENT(PublicSymFlags, Managed), |
| 89 | CV_ENUM_CLASS_ENT(PublicSymFlags, MSIL), |
| 90 | }; |
| 91 | static constexpr auto PublicSymFlagNames = |
| 92 | BUILD_ENUM_STRINGS(PublicSymFlagNameDefs); |
| 93 | return PublicSymFlagNames; |
| 94 | } |
| 95 | |
| 96 | EnumStrings<uint8_t> getProcSymFlagNames() { |
| 97 | constexpr EnumStringDef<uint8_t> ProcSymFlagNameDefs[] = { |
| 98 | CV_ENUM_CLASS_ENT(ProcSymFlags, HasFP), |
| 99 | CV_ENUM_CLASS_ENT(ProcSymFlags, HasIRET), |
| 100 | CV_ENUM_CLASS_ENT(ProcSymFlags, HasFRET), |
| 101 | CV_ENUM_CLASS_ENT(ProcSymFlags, IsNoReturn), |
| 102 | CV_ENUM_CLASS_ENT(ProcSymFlags, IsUnreachable), |
| 103 | CV_ENUM_CLASS_ENT(ProcSymFlags, HasCustomCallingConv), |
| 104 | CV_ENUM_CLASS_ENT(ProcSymFlags, IsNoInline), |
| 105 | CV_ENUM_CLASS_ENT(ProcSymFlags, HasOptimizedDebugInfo), |
| 106 | }; |
| 107 | static constexpr auto ProcSymFlagNames = |
| 108 | BUILD_ENUM_STRINGS(ProcSymFlagNameDefs); |
| 109 | return ProcSymFlagNames; |
| 110 | } |
| 111 | |
| 112 | EnumStrings<uint16_t> getLocalFlagNames() { |
| 113 | constexpr EnumStringDef<uint16_t> LocalFlagDefs[] = { |
| 114 | CV_ENUM_CLASS_ENT(LocalSymFlags, IsParameter), |
| 115 | CV_ENUM_CLASS_ENT(LocalSymFlags, IsAddressTaken), |
| 116 | CV_ENUM_CLASS_ENT(LocalSymFlags, IsCompilerGenerated), |
| 117 | CV_ENUM_CLASS_ENT(LocalSymFlags, IsAggregate), |
| 118 | CV_ENUM_CLASS_ENT(LocalSymFlags, IsAggregated), |
| 119 | CV_ENUM_CLASS_ENT(LocalSymFlags, IsAliased), |
| 120 | CV_ENUM_CLASS_ENT(LocalSymFlags, IsAlias), |
| 121 | CV_ENUM_CLASS_ENT(LocalSymFlags, IsReturnValue), |
| 122 | CV_ENUM_CLASS_ENT(LocalSymFlags, IsOptimizedOut), |
| 123 | CV_ENUM_CLASS_ENT(LocalSymFlags, IsEnregisteredGlobal), |
| 124 | CV_ENUM_CLASS_ENT(LocalSymFlags, IsEnregisteredStatic), |
| 125 | }; |
| 126 | static constexpr auto LocalFlags = BUILD_ENUM_STRINGS(LocalFlagDefs); |
| 127 | return LocalFlags; |
| 128 | } |
| 129 | |
| 130 | EnumStrings<uint8_t> getFrameCookieKindNames() { |
| 131 | constexpr EnumStringDef<uint8_t> FrameCookieKindDefs[] = { |
| 132 | CV_ENUM_CLASS_ENT(FrameCookieKind, Copy), |
| 133 | CV_ENUM_CLASS_ENT(FrameCookieKind, XorStackPointer), |
| 134 | CV_ENUM_CLASS_ENT(FrameCookieKind, XorFramePointer), |
| 135 | CV_ENUM_CLASS_ENT(FrameCookieKind, XorR13), |
| 136 | }; |
| 137 | static constexpr auto FrameCookieKinds = |
| 138 | BUILD_ENUM_STRINGS(FrameCookieKindDefs); |
| 139 | return FrameCookieKinds; |
| 140 | } |
| 141 | |
| 142 | EnumStrings<SourceLanguage> getSourceLanguageNames() { |
| 143 | constexpr EnumStringDef<codeview::SourceLanguage> SourceLanguageDefs[] = { |
| 144 | CV_ENUM_ENT(SourceLanguage, C), |
| 145 | CV_ENUM_ENT(SourceLanguage, Cpp), |
| 146 | CV_ENUM_ENT(SourceLanguage, Fortran), |
| 147 | CV_ENUM_ENT(SourceLanguage, Masm), |
| 148 | CV_ENUM_ENT(SourceLanguage, Pascal), |
| 149 | CV_ENUM_ENT(SourceLanguage, Basic), |
| 150 | CV_ENUM_ENT(SourceLanguage, Cobol), |
| 151 | CV_ENUM_ENT(SourceLanguage, Link), |
| 152 | CV_ENUM_ENT(SourceLanguage, Cvtres), |
| 153 | CV_ENUM_ENT(SourceLanguage, Cvtpgd), |
| 154 | CV_ENUM_ENT(SourceLanguage, CSharp), |
| 155 | CV_ENUM_ENT(SourceLanguage, VB), |
| 156 | CV_ENUM_ENT(SourceLanguage, ILAsm), |
| 157 | CV_ENUM_ENT(SourceLanguage, Java), |
| 158 | CV_ENUM_ENT(SourceLanguage, JScript), |
| 159 | CV_ENUM_ENT(SourceLanguage, MSIL), |
| 160 | CV_ENUM_ENT(SourceLanguage, HLSL), |
| 161 | CV_ENUM_ENT(SourceLanguage, D), |
| 162 | CV_ENUM_ENT(SourceLanguage, Swift), |
| 163 | CV_ENUM_ENT(SourceLanguage, Rust), |
| 164 | CV_ENUM_ENT(SourceLanguage, ObjC), |
| 165 | CV_ENUM_ENT(SourceLanguage, ObjCpp), |
| 166 | CV_ENUM_ENT(SourceLanguage, AliasObj), |
| 167 | CV_ENUM_ENT(SourceLanguage, Go), |
| 168 | {.Names: {"Swift" }, .Value: SourceLanguage::OldSwift}, |
| 169 | }; |
| 170 | static constexpr auto SourceLanguages = |
| 171 | BUILD_ENUM_STRINGS(SourceLanguageDefs); |
| 172 | return SourceLanguages; |
| 173 | } |
| 174 | |
| 175 | EnumStrings<uint32_t> getCompileSym2FlagNames() { |
| 176 | constexpr EnumStringDef<uint32_t> CompileSym2FlagNameDefs[] = { |
| 177 | CV_ENUM_CLASS_ENT(CompileSym2Flags, EC), |
| 178 | CV_ENUM_CLASS_ENT(CompileSym2Flags, NoDbgInfo), |
| 179 | CV_ENUM_CLASS_ENT(CompileSym2Flags, LTCG), |
| 180 | CV_ENUM_CLASS_ENT(CompileSym2Flags, NoDataAlign), |
| 181 | CV_ENUM_CLASS_ENT(CompileSym2Flags, ManagedPresent), |
| 182 | CV_ENUM_CLASS_ENT(CompileSym2Flags, SecurityChecks), |
| 183 | CV_ENUM_CLASS_ENT(CompileSym2Flags, HotPatch), |
| 184 | CV_ENUM_CLASS_ENT(CompileSym2Flags, CVTCIL), |
| 185 | CV_ENUM_CLASS_ENT(CompileSym2Flags, MSILModule), |
| 186 | }; |
| 187 | static constexpr auto CompileSym2FlagNames = |
| 188 | BUILD_ENUM_STRINGS(CompileSym2FlagNameDefs); |
| 189 | return CompileSym2FlagNames; |
| 190 | } |
| 191 | |
| 192 | EnumStrings<uint32_t> getCompileSym3FlagNames() { |
| 193 | constexpr EnumStringDef<uint32_t> CompileSym3FlagNameDefs[] = { |
| 194 | CV_ENUM_CLASS_ENT(CompileSym3Flags, EC), |
| 195 | CV_ENUM_CLASS_ENT(CompileSym3Flags, NoDbgInfo), |
| 196 | CV_ENUM_CLASS_ENT(CompileSym3Flags, LTCG), |
| 197 | CV_ENUM_CLASS_ENT(CompileSym3Flags, NoDataAlign), |
| 198 | CV_ENUM_CLASS_ENT(CompileSym3Flags, ManagedPresent), |
| 199 | CV_ENUM_CLASS_ENT(CompileSym3Flags, SecurityChecks), |
| 200 | CV_ENUM_CLASS_ENT(CompileSym3Flags, HotPatch), |
| 201 | CV_ENUM_CLASS_ENT(CompileSym3Flags, CVTCIL), |
| 202 | CV_ENUM_CLASS_ENT(CompileSym3Flags, MSILModule), |
| 203 | CV_ENUM_CLASS_ENT(CompileSym3Flags, Sdl), |
| 204 | CV_ENUM_CLASS_ENT(CompileSym3Flags, PGO), |
| 205 | CV_ENUM_CLASS_ENT(CompileSym3Flags, Exp), |
| 206 | }; |
| 207 | static constexpr auto CompileSym3FlagNames = |
| 208 | BUILD_ENUM_STRINGS(CompileSym3FlagNameDefs); |
| 209 | return CompileSym3FlagNames; |
| 210 | } |
| 211 | |
| 212 | EnumStrings<uint32_t> getFileChecksumNames() { |
| 213 | constexpr EnumStringDef<uint32_t> FileChecksumNameDefs[] = { |
| 214 | CV_ENUM_CLASS_ENT(FileChecksumKind, None), |
| 215 | CV_ENUM_CLASS_ENT(FileChecksumKind, MD5), |
| 216 | CV_ENUM_CLASS_ENT(FileChecksumKind, SHA1), |
| 217 | CV_ENUM_CLASS_ENT(FileChecksumKind, SHA256), |
| 218 | }; |
| 219 | static constexpr auto FileChecksumNames = |
| 220 | BUILD_ENUM_STRINGS(FileChecksumNameDefs); |
| 221 | return FileChecksumNames; |
| 222 | } |
| 223 | |
| 224 | EnumStrings<unsigned> getCPUTypeNames() { |
| 225 | constexpr EnumStringDef<unsigned> CPUTypeNameDefs[] = { |
| 226 | CV_ENUM_CLASS_ENT(CPUType, Intel8080), |
| 227 | CV_ENUM_CLASS_ENT(CPUType, Intel8086), |
| 228 | CV_ENUM_CLASS_ENT(CPUType, Intel80286), |
| 229 | CV_ENUM_CLASS_ENT(CPUType, Intel80386), |
| 230 | CV_ENUM_CLASS_ENT(CPUType, Intel80486), |
| 231 | CV_ENUM_CLASS_ENT(CPUType, Pentium), |
| 232 | CV_ENUM_CLASS_ENT(CPUType, PentiumPro), |
| 233 | CV_ENUM_CLASS_ENT(CPUType, Pentium3), |
| 234 | CV_ENUM_CLASS_ENT(CPUType, MIPS), |
| 235 | CV_ENUM_CLASS_ENT(CPUType, MIPS16), |
| 236 | CV_ENUM_CLASS_ENT(CPUType, MIPS32), |
| 237 | CV_ENUM_CLASS_ENT(CPUType, MIPS64), |
| 238 | CV_ENUM_CLASS_ENT(CPUType, MIPSI), |
| 239 | CV_ENUM_CLASS_ENT(CPUType, MIPSII), |
| 240 | CV_ENUM_CLASS_ENT(CPUType, MIPSIII), |
| 241 | CV_ENUM_CLASS_ENT(CPUType, MIPSIV), |
| 242 | CV_ENUM_CLASS_ENT(CPUType, MIPSV), |
| 243 | CV_ENUM_CLASS_ENT(CPUType, M68000), |
| 244 | CV_ENUM_CLASS_ENT(CPUType, M68010), |
| 245 | CV_ENUM_CLASS_ENT(CPUType, M68020), |
| 246 | CV_ENUM_CLASS_ENT(CPUType, M68030), |
| 247 | CV_ENUM_CLASS_ENT(CPUType, M68040), |
| 248 | CV_ENUM_CLASS_ENT(CPUType, Alpha), |
| 249 | CV_ENUM_CLASS_ENT(CPUType, Alpha21164), |
| 250 | CV_ENUM_CLASS_ENT(CPUType, Alpha21164A), |
| 251 | CV_ENUM_CLASS_ENT(CPUType, Alpha21264), |
| 252 | CV_ENUM_CLASS_ENT(CPUType, Alpha21364), |
| 253 | CV_ENUM_CLASS_ENT(CPUType, PPC601), |
| 254 | CV_ENUM_CLASS_ENT(CPUType, PPC603), |
| 255 | CV_ENUM_CLASS_ENT(CPUType, PPC604), |
| 256 | CV_ENUM_CLASS_ENT(CPUType, PPC620), |
| 257 | CV_ENUM_CLASS_ENT(CPUType, PPCFP), |
| 258 | CV_ENUM_CLASS_ENT(CPUType, PPCBE), |
| 259 | CV_ENUM_CLASS_ENT(CPUType, SH3), |
| 260 | CV_ENUM_CLASS_ENT(CPUType, SH3E), |
| 261 | CV_ENUM_CLASS_ENT(CPUType, SH3DSP), |
| 262 | CV_ENUM_CLASS_ENT(CPUType, SH4), |
| 263 | CV_ENUM_CLASS_ENT(CPUType, SHMedia), |
| 264 | CV_ENUM_CLASS_ENT(CPUType, ARM3), |
| 265 | CV_ENUM_CLASS_ENT(CPUType, ARM4), |
| 266 | CV_ENUM_CLASS_ENT(CPUType, ARM4T), |
| 267 | CV_ENUM_CLASS_ENT(CPUType, ARM5), |
| 268 | CV_ENUM_CLASS_ENT(CPUType, ARM5T), |
| 269 | CV_ENUM_CLASS_ENT(CPUType, ARM6), |
| 270 | CV_ENUM_CLASS_ENT(CPUType, ARM_XMAC), |
| 271 | CV_ENUM_CLASS_ENT(CPUType, ARM_WMMX), |
| 272 | CV_ENUM_CLASS_ENT(CPUType, ARM7), |
| 273 | CV_ENUM_CLASS_ENT(CPUType, Omni), |
| 274 | CV_ENUM_CLASS_ENT(CPUType, Ia64), |
| 275 | CV_ENUM_CLASS_ENT(CPUType, Ia64_2), |
| 276 | CV_ENUM_CLASS_ENT(CPUType, CEE), |
| 277 | CV_ENUM_CLASS_ENT(CPUType, AM33), |
| 278 | CV_ENUM_CLASS_ENT(CPUType, M32R), |
| 279 | CV_ENUM_CLASS_ENT(CPUType, TriCore), |
| 280 | CV_ENUM_CLASS_ENT(CPUType, X64), |
| 281 | CV_ENUM_CLASS_ENT(CPUType, EBC), |
| 282 | CV_ENUM_CLASS_ENT(CPUType, Thumb), |
| 283 | CV_ENUM_CLASS_ENT(CPUType, ARMNT), |
| 284 | CV_ENUM_CLASS_ENT(CPUType, ARM64), |
| 285 | CV_ENUM_CLASS_ENT(CPUType, HybridX86ARM64), |
| 286 | CV_ENUM_CLASS_ENT(CPUType, ARM64EC), |
| 287 | CV_ENUM_CLASS_ENT(CPUType, ARM64X), |
| 288 | CV_ENUM_CLASS_ENT(CPUType, Unknown), |
| 289 | CV_ENUM_CLASS_ENT(CPUType, D3D11_Shader), |
| 290 | }; |
| 291 | static constexpr auto CPUTypeNames = BUILD_ENUM_STRINGS(CPUTypeNameDefs); |
| 292 | return CPUTypeNames; |
| 293 | } |
| 294 | |
| 295 | EnumStrings<uint32_t> getFrameProcSymFlagNames() { |
| 296 | constexpr EnumStringDef<uint32_t> FrameProcSymFlagNameDefs[] = { |
| 297 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasAlloca), |
| 298 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasSetJmp), |
| 299 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasLongJmp), |
| 300 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasInlineAssembly), |
| 301 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasExceptionHandling), |
| 302 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, MarkedInline), |
| 303 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, HasStructuredExceptionHandling), |
| 304 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, Naked), |
| 305 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, SecurityChecks), |
| 306 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, AsynchronousExceptionHandling), |
| 307 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, |
| 308 | NoStackOrderingForSecurityChecks), |
| 309 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, Inlined), |
| 310 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, StrictSecurityChecks), |
| 311 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, SafeBuffers), |
| 312 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, EncodedLocalBasePointerMask), |
| 313 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, EncodedParamBasePointerMask), |
| 314 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, ProfileGuidedOptimization), |
| 315 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, ValidProfileCounts), |
| 316 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, OptimizedForSpeed), |
| 317 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, GuardCfg), |
| 318 | CV_ENUM_CLASS_ENT(FrameProcedureOptions, GuardCfw), |
| 319 | }; |
| 320 | static constexpr auto FrameProcSymFlagNames = |
| 321 | BUILD_ENUM_STRINGS(FrameProcSymFlagNameDefs); |
| 322 | return FrameProcSymFlagNames; |
| 323 | } |
| 324 | |
| 325 | EnumStrings<uint16_t> getExportSymFlagNames() { |
| 326 | constexpr EnumStringDef<uint16_t> ExportSymFlagNameDefs[] = { |
| 327 | CV_ENUM_CLASS_ENT(ExportFlags, IsConstant), |
| 328 | CV_ENUM_CLASS_ENT(ExportFlags, IsData), |
| 329 | CV_ENUM_CLASS_ENT(ExportFlags, IsPrivate), |
| 330 | CV_ENUM_CLASS_ENT(ExportFlags, HasNoName), |
| 331 | CV_ENUM_CLASS_ENT(ExportFlags, HasExplicitOrdinal), |
| 332 | CV_ENUM_CLASS_ENT(ExportFlags, IsForwarder), |
| 333 | }; |
| 334 | static constexpr auto ExportSymFlagNames = |
| 335 | BUILD_ENUM_STRINGS(ExportSymFlagNameDefs); |
| 336 | return ExportSymFlagNames; |
| 337 | } |
| 338 | |
| 339 | EnumStrings<uint32_t> getModuleSubstreamKindNames() { |
| 340 | constexpr EnumStringDef<uint32_t> ModuleSubstreamKindNameDefs[] = { |
| 341 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, None), |
| 342 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, Symbols), |
| 343 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, Lines), |
| 344 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, StringTable), |
| 345 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, FileChecksums), |
| 346 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, FrameData), |
| 347 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, InlineeLines), |
| 348 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, CrossScopeImports), |
| 349 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, CrossScopeExports), |
| 350 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, ILLines), |
| 351 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, FuncMDTokenMap), |
| 352 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, TypeMDTokenMap), |
| 353 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, MergedAssemblyInput), |
| 354 | CV_ENUM_CLASS_ENT(DebugSubsectionKind, CoffSymbolRVA), |
| 355 | }; |
| 356 | static constexpr auto ModuleSubstreamKindNames = |
| 357 | BUILD_ENUM_STRINGS(ModuleSubstreamKindNameDefs); |
| 358 | return ModuleSubstreamKindNames; |
| 359 | } |
| 360 | |
| 361 | EnumStrings<uint8_t> getThunkOrdinalNames() { |
| 362 | constexpr EnumStringDef<uint8_t> ThunkOrdinalNameDefs[] = { |
| 363 | CV_ENUM_CLASS_ENT(ThunkOrdinal, Standard), |
| 364 | CV_ENUM_CLASS_ENT(ThunkOrdinal, ThisAdjustor), |
| 365 | CV_ENUM_CLASS_ENT(ThunkOrdinal, Vcall), |
| 366 | CV_ENUM_CLASS_ENT(ThunkOrdinal, Pcode), |
| 367 | CV_ENUM_CLASS_ENT(ThunkOrdinal, UnknownLoad), |
| 368 | CV_ENUM_CLASS_ENT(ThunkOrdinal, TrampIncremental), |
| 369 | CV_ENUM_CLASS_ENT(ThunkOrdinal, BranchIsland), |
| 370 | }; |
| 371 | static constexpr auto ThunkOrdinalNames = |
| 372 | BUILD_ENUM_STRINGS(ThunkOrdinalNameDefs); |
| 373 | return ThunkOrdinalNames; |
| 374 | } |
| 375 | |
| 376 | EnumStrings<uint16_t> getTrampolineNames() { |
| 377 | constexpr EnumStringDef<uint16_t> TrampolineNameDefs[] = { |
| 378 | CV_ENUM_CLASS_ENT(TrampolineType, TrampIncremental), |
| 379 | CV_ENUM_CLASS_ENT(TrampolineType, BranchIsland), |
| 380 | }; |
| 381 | static constexpr auto TrampolineNames = |
| 382 | BUILD_ENUM_STRINGS(TrampolineNameDefs); |
| 383 | return TrampolineNames; |
| 384 | } |
| 385 | |
| 386 | EnumStrings<COFF::SectionCharacteristics> getImageSectionCharacteristicNames() { |
| 387 | constexpr EnumStringDef<COFF::SectionCharacteristics> |
| 388 | ImageSectionCharacteristicNameDefs[] = { |
| 389 | CV_ENUM_ENT(COFF, IMAGE_SCN_TYPE_NOLOAD), |
| 390 | CV_ENUM_ENT(COFF, IMAGE_SCN_TYPE_NO_PAD), |
| 391 | CV_ENUM_ENT(COFF, IMAGE_SCN_CNT_CODE), |
| 392 | CV_ENUM_ENT(COFF, IMAGE_SCN_CNT_INITIALIZED_DATA), |
| 393 | CV_ENUM_ENT(COFF, IMAGE_SCN_CNT_UNINITIALIZED_DATA), |
| 394 | CV_ENUM_ENT(COFF, IMAGE_SCN_LNK_OTHER), |
| 395 | CV_ENUM_ENT(COFF, IMAGE_SCN_LNK_INFO), |
| 396 | CV_ENUM_ENT(COFF, IMAGE_SCN_LNK_REMOVE), |
| 397 | CV_ENUM_ENT(COFF, IMAGE_SCN_LNK_COMDAT), |
| 398 | CV_ENUM_ENT(COFF, IMAGE_SCN_GPREL), |
| 399 | CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_PURGEABLE), |
| 400 | CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_16BIT), |
| 401 | CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_LOCKED), |
| 402 | CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_PRELOAD), |
| 403 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_1BYTES), |
| 404 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_2BYTES), |
| 405 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_4BYTES), |
| 406 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_8BYTES), |
| 407 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_16BYTES), |
| 408 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_32BYTES), |
| 409 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_64BYTES), |
| 410 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_128BYTES), |
| 411 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_256BYTES), |
| 412 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_512BYTES), |
| 413 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_1024BYTES), |
| 414 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_2048BYTES), |
| 415 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_4096BYTES), |
| 416 | CV_ENUM_ENT(COFF, IMAGE_SCN_ALIGN_8192BYTES), |
| 417 | CV_ENUM_ENT(COFF, IMAGE_SCN_LNK_NRELOC_OVFL), |
| 418 | CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_DISCARDABLE), |
| 419 | CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_NOT_CACHED), |
| 420 | CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_NOT_PAGED), |
| 421 | CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_SHARED), |
| 422 | CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_EXECUTE), |
| 423 | CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_READ), |
| 424 | CV_ENUM_ENT(COFF, IMAGE_SCN_MEM_WRITE)}; |
| 425 | static constexpr auto ImageSectionCharacteristicNames = |
| 426 | BUILD_ENUM_STRINGS(ImageSectionCharacteristicNameDefs); |
| 427 | return ImageSectionCharacteristicNames; |
| 428 | } |
| 429 | |
| 430 | EnumStrings<uint16_t> getClassOptionNames() { |
| 431 | constexpr EnumStringDef<uint16_t> ClassOptionNameDefs[] = { |
| 432 | CV_ENUM_CLASS_ENT(ClassOptions, Packed), |
| 433 | CV_ENUM_CLASS_ENT(ClassOptions, HasConstructorOrDestructor), |
| 434 | CV_ENUM_CLASS_ENT(ClassOptions, HasOverloadedOperator), |
| 435 | CV_ENUM_CLASS_ENT(ClassOptions, Nested), |
| 436 | CV_ENUM_CLASS_ENT(ClassOptions, ContainsNestedClass), |
| 437 | CV_ENUM_CLASS_ENT(ClassOptions, HasOverloadedAssignmentOperator), |
| 438 | CV_ENUM_CLASS_ENT(ClassOptions, HasConversionOperator), |
| 439 | CV_ENUM_CLASS_ENT(ClassOptions, ForwardReference), |
| 440 | CV_ENUM_CLASS_ENT(ClassOptions, Scoped), |
| 441 | CV_ENUM_CLASS_ENT(ClassOptions, HasUniqueName), |
| 442 | CV_ENUM_CLASS_ENT(ClassOptions, Sealed), |
| 443 | CV_ENUM_CLASS_ENT(ClassOptions, Intrinsic), |
| 444 | }; |
| 445 | static constexpr auto ClassOptionNames = |
| 446 | BUILD_ENUM_STRINGS(ClassOptionNameDefs); |
| 447 | return ClassOptionNames; |
| 448 | } |
| 449 | |
| 450 | EnumStrings<uint8_t> getMemberAccessNames() { |
| 451 | constexpr EnumStringDef<uint8_t> MemberAccessNameDefs[] = { |
| 452 | CV_ENUM_CLASS_ENT(MemberAccess, None), |
| 453 | CV_ENUM_CLASS_ENT(MemberAccess, Private), |
| 454 | CV_ENUM_CLASS_ENT(MemberAccess, Protected), |
| 455 | CV_ENUM_CLASS_ENT(MemberAccess, Public), |
| 456 | }; |
| 457 | static constexpr auto MemberAccessNames = |
| 458 | BUILD_ENUM_STRINGS(MemberAccessNameDefs); |
| 459 | return MemberAccessNames; |
| 460 | } |
| 461 | |
| 462 | EnumStrings<uint16_t> getMethodOptionNames() { |
| 463 | constexpr EnumStringDef<uint16_t> MethodOptionNameDefs[] = { |
| 464 | CV_ENUM_CLASS_ENT(MethodOptions, Pseudo), |
| 465 | CV_ENUM_CLASS_ENT(MethodOptions, NoInherit), |
| 466 | CV_ENUM_CLASS_ENT(MethodOptions, NoConstruct), |
| 467 | CV_ENUM_CLASS_ENT(MethodOptions, CompilerGenerated), |
| 468 | CV_ENUM_CLASS_ENT(MethodOptions, Sealed), |
| 469 | }; |
| 470 | static constexpr auto MethodOptionNames = |
| 471 | BUILD_ENUM_STRINGS(MethodOptionNameDefs); |
| 472 | return MethodOptionNames; |
| 473 | } |
| 474 | |
| 475 | EnumStrings<uint16_t> getMemberKindNames() { |
| 476 | constexpr EnumStringDef<uint16_t> MemberKindNameDefs[] = { |
| 477 | CV_ENUM_CLASS_ENT(MethodKind, Vanilla), |
| 478 | CV_ENUM_CLASS_ENT(MethodKind, Virtual), |
| 479 | CV_ENUM_CLASS_ENT(MethodKind, Static), |
| 480 | CV_ENUM_CLASS_ENT(MethodKind, Friend), |
| 481 | CV_ENUM_CLASS_ENT(MethodKind, IntroducingVirtual), |
| 482 | CV_ENUM_CLASS_ENT(MethodKind, PureVirtual), |
| 483 | CV_ENUM_CLASS_ENT(MethodKind, PureIntroducingVirtual), |
| 484 | }; |
| 485 | static constexpr auto MemberKindNames = |
| 486 | BUILD_ENUM_STRINGS(MemberKindNameDefs); |
| 487 | return MemberKindNames; |
| 488 | } |
| 489 | |
| 490 | EnumStrings<uint8_t> getPtrKindNames() { |
| 491 | constexpr EnumStringDef<uint8_t> PtrKindNameDefs[] = { |
| 492 | CV_ENUM_CLASS_ENT(PointerKind, Near16), |
| 493 | CV_ENUM_CLASS_ENT(PointerKind, Far16), |
| 494 | CV_ENUM_CLASS_ENT(PointerKind, Huge16), |
| 495 | CV_ENUM_CLASS_ENT(PointerKind, BasedOnSegment), |
| 496 | CV_ENUM_CLASS_ENT(PointerKind, BasedOnValue), |
| 497 | CV_ENUM_CLASS_ENT(PointerKind, BasedOnSegmentValue), |
| 498 | CV_ENUM_CLASS_ENT(PointerKind, BasedOnAddress), |
| 499 | CV_ENUM_CLASS_ENT(PointerKind, BasedOnSegmentAddress), |
| 500 | CV_ENUM_CLASS_ENT(PointerKind, BasedOnType), |
| 501 | CV_ENUM_CLASS_ENT(PointerKind, BasedOnSelf), |
| 502 | CV_ENUM_CLASS_ENT(PointerKind, Near32), |
| 503 | CV_ENUM_CLASS_ENT(PointerKind, Far32), |
| 504 | CV_ENUM_CLASS_ENT(PointerKind, Near64), |
| 505 | }; |
| 506 | static constexpr auto PtrKindNames = BUILD_ENUM_STRINGS(PtrKindNameDefs); |
| 507 | return PtrKindNames; |
| 508 | } |
| 509 | |
| 510 | EnumStrings<uint8_t> getPtrModeNames() { |
| 511 | constexpr EnumStringDef<uint8_t> PtrModeNameDefs[] = { |
| 512 | CV_ENUM_CLASS_ENT(PointerMode, Pointer), |
| 513 | CV_ENUM_CLASS_ENT(PointerMode, LValueReference), |
| 514 | CV_ENUM_CLASS_ENT(PointerMode, PointerToDataMember), |
| 515 | CV_ENUM_CLASS_ENT(PointerMode, PointerToMemberFunction), |
| 516 | CV_ENUM_CLASS_ENT(PointerMode, RValueReference), |
| 517 | }; |
| 518 | static constexpr auto PtrModeNames = BUILD_ENUM_STRINGS(PtrModeNameDefs); |
| 519 | return PtrModeNames; |
| 520 | } |
| 521 | |
| 522 | EnumStrings<uint16_t> getPtrMemberRepNames() { |
| 523 | constexpr EnumStringDef<uint16_t> PtrMemberRepNameDefs[] = { |
| 524 | CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, Unknown), |
| 525 | CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, SingleInheritanceData), |
| 526 | CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, MultipleInheritanceData), |
| 527 | CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, VirtualInheritanceData), |
| 528 | CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, GeneralData), |
| 529 | CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, |
| 530 | SingleInheritanceFunction), |
| 531 | CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, |
| 532 | MultipleInheritanceFunction), |
| 533 | CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, |
| 534 | VirtualInheritanceFunction), |
| 535 | CV_ENUM_CLASS_ENT(PointerToMemberRepresentation, GeneralFunction), |
| 536 | }; |
| 537 | static constexpr auto PtrMemberRepNames = |
| 538 | BUILD_ENUM_STRINGS(PtrMemberRepNameDefs); |
| 539 | return PtrMemberRepNames; |
| 540 | } |
| 541 | |
| 542 | EnumStrings<uint16_t> getTypeModifierNames() { |
| 543 | constexpr EnumStringDef<uint16_t> TypeModifierNameDefs[] = { |
| 544 | CV_ENUM_CLASS_ENT(ModifierOptions, Const), |
| 545 | CV_ENUM_CLASS_ENT(ModifierOptions, Volatile), |
| 546 | CV_ENUM_CLASS_ENT(ModifierOptions, Unaligned), |
| 547 | }; |
| 548 | static constexpr auto TypeModifierNames = |
| 549 | BUILD_ENUM_STRINGS(TypeModifierNameDefs); |
| 550 | return TypeModifierNames; |
| 551 | } |
| 552 | |
| 553 | EnumStrings<uint8_t> getCallingConventions() { |
| 554 | constexpr EnumStringDef<uint8_t> CallingConventionDefs[] = { |
| 555 | CV_ENUM_CLASS_ENT(CallingConvention, NearC), |
| 556 | CV_ENUM_CLASS_ENT(CallingConvention, FarC), |
| 557 | CV_ENUM_CLASS_ENT(CallingConvention, NearPascal), |
| 558 | CV_ENUM_CLASS_ENT(CallingConvention, FarPascal), |
| 559 | CV_ENUM_CLASS_ENT(CallingConvention, NearFast), |
| 560 | CV_ENUM_CLASS_ENT(CallingConvention, FarFast), |
| 561 | CV_ENUM_CLASS_ENT(CallingConvention, NearStdCall), |
| 562 | CV_ENUM_CLASS_ENT(CallingConvention, FarStdCall), |
| 563 | CV_ENUM_CLASS_ENT(CallingConvention, NearSysCall), |
| 564 | CV_ENUM_CLASS_ENT(CallingConvention, FarSysCall), |
| 565 | CV_ENUM_CLASS_ENT(CallingConvention, ThisCall), |
| 566 | CV_ENUM_CLASS_ENT(CallingConvention, MipsCall), |
| 567 | CV_ENUM_CLASS_ENT(CallingConvention, Generic), |
| 568 | CV_ENUM_CLASS_ENT(CallingConvention, AlphaCall), |
| 569 | CV_ENUM_CLASS_ENT(CallingConvention, PpcCall), |
| 570 | CV_ENUM_CLASS_ENT(CallingConvention, SHCall), |
| 571 | CV_ENUM_CLASS_ENT(CallingConvention, ArmCall), |
| 572 | CV_ENUM_CLASS_ENT(CallingConvention, AM33Call), |
| 573 | CV_ENUM_CLASS_ENT(CallingConvention, TriCall), |
| 574 | CV_ENUM_CLASS_ENT(CallingConvention, SH5Call), |
| 575 | CV_ENUM_CLASS_ENT(CallingConvention, M32RCall), |
| 576 | CV_ENUM_CLASS_ENT(CallingConvention, ClrCall), |
| 577 | CV_ENUM_CLASS_ENT(CallingConvention, Inline), |
| 578 | CV_ENUM_CLASS_ENT(CallingConvention, NearVector), |
| 579 | CV_ENUM_CLASS_ENT(CallingConvention, Swift), |
| 580 | }; |
| 581 | static constexpr auto CallingConventions = |
| 582 | BUILD_ENUM_STRINGS(CallingConventionDefs); |
| 583 | return CallingConventions; |
| 584 | } |
| 585 | |
| 586 | EnumStrings<uint8_t> getFunctionOptionEnum() { |
| 587 | constexpr EnumStringDef<uint8_t> FunctionOptionEnumDefs[] = { |
| 588 | CV_ENUM_CLASS_ENT(FunctionOptions, CxxReturnUdt), |
| 589 | CV_ENUM_CLASS_ENT(FunctionOptions, Constructor), |
| 590 | CV_ENUM_CLASS_ENT(FunctionOptions, ConstructorWithVirtualBases), |
| 591 | }; |
| 592 | static constexpr auto FunctionOptionEnum = |
| 593 | BUILD_ENUM_STRINGS(FunctionOptionEnumDefs); |
| 594 | return FunctionOptionEnum; |
| 595 | } |
| 596 | |
| 597 | EnumStrings<uint16_t> getLabelTypeEnum() { |
| 598 | constexpr EnumStringDef<uint16_t> LabelTypeEnumDefs[] = { |
| 599 | CV_ENUM_CLASS_ENT(LabelType, Near), |
| 600 | CV_ENUM_CLASS_ENT(LabelType, Far), |
| 601 | }; |
| 602 | static constexpr auto LabelTypeEnum = BUILD_ENUM_STRINGS(LabelTypeEnumDefs); |
| 603 | return LabelTypeEnum; |
| 604 | } |
| 605 | |
| 606 | EnumStrings<uint16_t> getJumpTableEntrySizeNames() { |
| 607 | constexpr EnumStringDef<uint16_t> JumpTableEntrySizeNameDefs[] = { |
| 608 | CV_ENUM_CLASS_ENT(JumpTableEntrySize, Int8), |
| 609 | CV_ENUM_CLASS_ENT(JumpTableEntrySize, UInt8), |
| 610 | CV_ENUM_CLASS_ENT(JumpTableEntrySize, Int16), |
| 611 | CV_ENUM_CLASS_ENT(JumpTableEntrySize, UInt16), |
| 612 | CV_ENUM_CLASS_ENT(JumpTableEntrySize, Int32), |
| 613 | CV_ENUM_CLASS_ENT(JumpTableEntrySize, UInt32), |
| 614 | CV_ENUM_CLASS_ENT(JumpTableEntrySize, Pointer), |
| 615 | CV_ENUM_CLASS_ENT(JumpTableEntrySize, UInt8ShiftLeft), |
| 616 | CV_ENUM_CLASS_ENT(JumpTableEntrySize, UInt16ShiftLeft), |
| 617 | CV_ENUM_CLASS_ENT(JumpTableEntrySize, Int8ShiftLeft), |
| 618 | CV_ENUM_CLASS_ENT(JumpTableEntrySize, Int16ShiftLeft), |
| 619 | }; |
| 620 | static constexpr auto JumpTableEntrySizeNames = |
| 621 | BUILD_ENUM_STRINGS(JumpTableEntrySizeNameDefs); |
| 622 | return JumpTableEntrySizeNames; |
| 623 | } |
| 624 | |
| 625 | } // end namespace codeview |
| 626 | } // end namespace llvm |
| 627 | |