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
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
24EnumStrings<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
35EnumStrings<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
45EnumStrings<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
84EnumStrings<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
96EnumStrings<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
112EnumStrings<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
130EnumStrings<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
142EnumStrings<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
175EnumStrings<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
192EnumStrings<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
212EnumStrings<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
224EnumStrings<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
295EnumStrings<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
325EnumStrings<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
339EnumStrings<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
361EnumStrings<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
376EnumStrings<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
386EnumStrings<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
430EnumStrings<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
450EnumStrings<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
462EnumStrings<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
475EnumStrings<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
490EnumStrings<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
510EnumStrings<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
522EnumStrings<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
542EnumStrings<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
553EnumStrings<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
586EnumStrings<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
597EnumStrings<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
606EnumStrings<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