LLVM 23.0.0git
EnumTables.cpp
Go to the documentation of this file.
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
10#include "llvm/ADT/Enum.h"
11#include <type_traits>
12
13using namespace llvm;
14using 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
21namespace llvm {
22namespace codeview {
23
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
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
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
85 constexpr EnumStringDef<uint32_t> PublicSymFlagNameDefs[] = {
90 };
91 static constexpr auto PublicSymFlagNames =
92 BUILD_ENUM_STRINGS(PublicSymFlagNameDefs);
93 return PublicSymFlagNames;
94}
95
111
129
131 constexpr EnumStringDef<uint8_t> FrameCookieKindDefs[] = {
136 };
137 static constexpr auto FrameCookieKinds =
138 BUILD_ENUM_STRINGS(FrameCookieKindDefs);
139 return FrameCookieKinds;
140}
141
143 constexpr EnumStringDef<codeview::SourceLanguage> SourceLanguageDefs[] = {
146 CV_ENUM_ENT(SourceLanguage, Fortran),
158 CV_ENUM_ENT(SourceLanguage, JScript),
166 CV_ENUM_ENT(SourceLanguage, AliasObj),
168 {{"Swift"}, SourceLanguage::OldSwift},
169 };
170 static constexpr auto SourceLanguages =
171 BUILD_ENUM_STRINGS(SourceLanguageDefs);
172 return SourceLanguages;
173}
174
191
211
213 constexpr EnumStringDef<uint32_t> FileChecksumNameDefs[] = {
218 };
219 static constexpr auto FileChecksumNames =
220 BUILD_ENUM_STRINGS(FileChecksumNameDefs);
221 return FileChecksumNames;
222}
223
225 constexpr EnumStringDef<unsigned> CPUTypeNameDefs[] = {
290 };
291 static constexpr auto CPUTypeNames = BUILD_ENUM_STRINGS(CPUTypeNameDefs);
292 return CPUTypeNames;
293}
294
296 constexpr EnumStringDef<uint32_t> FrameProcSymFlagNameDefs[] = {
319 };
320 static constexpr auto FrameProcSymFlagNames =
321 BUILD_ENUM_STRINGS(FrameProcSymFlagNameDefs);
322 return FrameProcSymFlagNames;
323}
324
326 constexpr EnumStringDef<uint16_t> ExportSymFlagNameDefs[] = {
333 };
334 static constexpr auto ExportSymFlagNames =
335 BUILD_ENUM_STRINGS(ExportSymFlagNameDefs);
336 return ExportSymFlagNames;
337}
338
360
375
377 constexpr EnumStringDef<uint16_t> TrampolineNameDefs[] = {
380 };
381 static constexpr auto TrampolineNames =
382 BUILD_ENUM_STRINGS(TrampolineNameDefs);
383 return TrampolineNames;
384}
385
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
449
451 constexpr EnumStringDef<uint8_t> MemberAccessNameDefs[] = {
456 };
457 static constexpr auto MemberAccessNames =
458 BUILD_ENUM_STRINGS(MemberAccessNameDefs);
459 return MemberAccessNames;
460}
461
463 constexpr EnumStringDef<uint16_t> MethodOptionNameDefs[] = {
469 };
470 static constexpr auto MethodOptionNames =
471 BUILD_ENUM_STRINGS(MethodOptionNameDefs);
472 return MethodOptionNames;
473}
474
489
509
521
541
543 constexpr EnumStringDef<uint16_t> TypeModifierNameDefs[] = {
547 };
548 static constexpr auto TypeModifierNames =
549 BUILD_ENUM_STRINGS(TypeModifierNameDefs);
550 return TypeModifierNames;
551}
552
554 constexpr EnumStringDef<uint8_t> CallingConventionDefs[] = {
580 };
581 static constexpr auto CallingConventions =
582 BUILD_ENUM_STRINGS(CallingConventionDefs);
583 return CallingConventions;
584}
585
587 constexpr EnumStringDef<uint8_t> FunctionOptionEnumDefs[] = {
591 };
592 static constexpr auto FunctionOptionEnum =
593 BUILD_ENUM_STRINGS(FunctionOptionEnumDefs);
594 return FunctionOptionEnum;
595}
596
598 constexpr EnumStringDef<uint16_t> LabelTypeEnumDefs[] = {
601 };
602 static constexpr auto LabelTypeEnum = BUILD_ENUM_STRINGS(LabelTypeEnumDefs);
603 return LabelTypeEnum;
604}
605
624
625} // end namespace codeview
626} // end namespace llvm
static GCRegistry::Add< StatepointGC > D("statepoint-example", "an example strategy for statepoint")
#define CV_ENUM_ENT(ns, enum)
#define CV_ENUM_CLASS_ENT(enum_class, enum)
#define BUILD_ENUM_STRINGS(Tab)
Definition Enum.h:120
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
LLVM_ABI EnumStrings< uint32_t, 1 > getModuleSubstreamKindNames()
PointerMode
Equivalent to CV_ptrmode_e.
Definition CodeView.h:335
ProcSymFlags
Corresponds to the CV_PROCFLAGS bitfield.
Definition CodeView.h:415
LLVM_ABI EnumStrings< uint8_t, 1 > getMemberAccessNames()
LocalSymFlags
Corresponds to CV_LVARFLAGS bitfield.
Definition CodeView.h:388
MethodKind
Part of member attribute flags. (CV_methodprop_e)
Definition CodeView.h:252
LLVM_ABI EnumStrings< uint8_t, 1 > getCallingConventions()
LLVM_ABI EnumStrings< uint32_t, 1 > getFrameProcSymFlagNames()
CompileSym2Flags
Corresponds to COMPILESYM2::Flags bitfield.
Definition CodeView.h:429
LLVM_ABI EnumStrings< uint8_t, 1 > getFunctionOptionEnum()
LLVM_ABI EnumStrings< uint32_t, 1 > getCompileSym2FlagNames()
PointerKind
Equivalent to CV_ptrtype_e.
Definition CodeView.h:318
CPUType
These values correspond to the CV_CPU_TYPE_e enumeration, and are documented here: https://msdn....
Definition CodeView.h:76
LLVM_ABI EnumStrings< uint8_t, 1 > getThunkOrdinalNames()
CompileSym3Flags
Corresponds to COMPILESYM3::Flags bitfield.
Definition CodeView.h:445
LLVM_ABI EnumStrings< SourceLanguage, 1 > getSourceLanguageNames()
LLVM_ABI EnumStrings< unsigned, 1 > getCPUTypeNames()
PointerToMemberRepresentation
Equivalent to CV_pmtype_e.
Definition CodeView.h:358
LLVM_ABI EnumStrings< uint16_t, 1 > getJumpTableEntrySizeNames()
CallingConvention
These values correspond to the CV_call_e enumeration, and are documented at the following locations: ...
Definition CodeView.h:156
LLVM_ABI EnumStrings< uint8_t, 1 > getPtrKindNames()
LLVM_ABI EnumStrings< uint16_t, 1 > getLocalFlagNames()
LLVM_ABI EnumStrings< uint32_t, 1 > getPublicSymFlagNames()
MethodOptions
Equivalent to CV_fldattr_t bitfield.
Definition CodeView.h:263
LLVM_ABI EnumStrings< uint8_t, 1 > getPtrModeNames()
LLVM_ABI EnumStrings< COFF::SectionCharacteristics, 1 > getImageSectionCharacteristicNames()
LLVM_ABI EnumStrings< uint16_t, 1 > getTrampolineNames()
LLVM_ABI EnumStrings< uint16_t, 1 > getTypeModifierNames()
LLVM_ABI EnumStrings< uint16_t, 1 > getMemberKindNames()
LLVM_ABI EnumStrings< uint32_t, 1 > getCompileSym3FlagNames()
LLVM_ABI EnumStrings< uint16_t, 1 > getMethodOptionNames()
MemberAccess
Source-level access specifier. (CV_access_e)
Definition CodeView.h:244
ThunkOrdinal
These values correspond to the THUNK_ORDINAL enumeration.
Definition CodeView.h:536
LLVM_ABI EnumStrings< uint16_t, 1 > getLabelTypeEnum()
LLVM_ABI EnumStrings< SymbolKind, 1 > getSymbolTypeNames()
LLVM_ABI EnumStrings< uint32_t, 1 > getFileChecksumNames()
LLVM_ABI EnumStrings< uint16_t, 1 > getPtrMemberRepNames()
LLVM_ABI EnumStrings< uint16_t, 1 > getRegisterNames(CPUType Cpu)
LLVM_ABI EnumStrings< uint8_t, 1 > getFrameCookieKindNames()
LLVM_ABI EnumStrings< uint8_t, 1 > getProcSymFlagNames()
ModifierOptions
Equivalent to CV_modifier_t.
Definition CodeView.h:283
LLVM_ABI EnumStrings< TypeLeafKind, 1 > getTypeLeafNames()
LLVM_ABI EnumStrings< uint16_t, 1 > getExportSymFlagNames()
LLVM_ABI EnumStrings< uint16_t, 1 > getClassOptionNames()
PublicSymFlags
Corresponds to the CV_PUBSYMFLAGS bitfield.
Definition CodeView.h:405
LabelType
Equivalent to CV_LABEL_TYPE_e.
Definition CodeView.h:276
SourceLanguage
These values correspond to the CV_CFL_LANG enumeration in the Microsoft Debug Interface Access SDK,...
Definition CodeView.h:146
This is an optimization pass for GlobalISel generic memory operations.
Compile-time data representation of enum entries.
Definition Enum.h:47
Data in the SUBSEC_FRAMEDATA subection.
Definition CodeView.h:557