1 //===- DIAExtras.cpp - Helper classes and functions for DIA C++ ---------*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
9 #include "llvm/Support/Format.h"
10 #include "llvm/Support/raw_ostream.h"
12 #include "llvm-pdbdump.h"
13 #include "DIAExtras.h"
16 using namespace llvm::sys::windows;
18 #define PRINT_ENUM_VALUE_CASE(Value) \
23 raw_ostream &llvm::operator<<(raw_ostream &Stream, DiaSymTagEnum SymTag) {
25 PRINT_ENUM_VALUE_CASE(SymTagNull)
26 PRINT_ENUM_VALUE_CASE(SymTagExe)
27 PRINT_ENUM_VALUE_CASE(SymTagCompiland)
28 PRINT_ENUM_VALUE_CASE(SymTagCompilandDetails)
29 PRINT_ENUM_VALUE_CASE(SymTagCompilandEnv)
30 PRINT_ENUM_VALUE_CASE(SymTagFunction)
31 PRINT_ENUM_VALUE_CASE(SymTagBlock)
32 PRINT_ENUM_VALUE_CASE(SymTagData)
33 PRINT_ENUM_VALUE_CASE(SymTagAnnotation)
34 PRINT_ENUM_VALUE_CASE(SymTagLabel)
35 PRINT_ENUM_VALUE_CASE(SymTagPublicSymbol)
36 PRINT_ENUM_VALUE_CASE(SymTagUDT)
37 PRINT_ENUM_VALUE_CASE(SymTagEnum)
38 PRINT_ENUM_VALUE_CASE(SymTagFunctionType)
39 PRINT_ENUM_VALUE_CASE(SymTagPointerType)
40 PRINT_ENUM_VALUE_CASE(SymTagArrayType)
41 PRINT_ENUM_VALUE_CASE(SymTagBaseType)
42 PRINT_ENUM_VALUE_CASE(SymTagTypedef)
43 PRINT_ENUM_VALUE_CASE(SymTagBaseClass)
44 PRINT_ENUM_VALUE_CASE(SymTagFriend)
45 PRINT_ENUM_VALUE_CASE(SymTagFunctionArgType)
46 PRINT_ENUM_VALUE_CASE(SymTagFuncDebugStart)
47 PRINT_ENUM_VALUE_CASE(SymTagFuncDebugEnd)
48 PRINT_ENUM_VALUE_CASE(SymTagUsingNamespace)
49 PRINT_ENUM_VALUE_CASE(SymTagVTableShape)
50 PRINT_ENUM_VALUE_CASE(SymTagVTable)
51 PRINT_ENUM_VALUE_CASE(SymTagCustom)
52 PRINT_ENUM_VALUE_CASE(SymTagThunk)
53 PRINT_ENUM_VALUE_CASE(SymTagCustomType)
54 PRINT_ENUM_VALUE_CASE(SymTagManagedType)
55 PRINT_ENUM_VALUE_CASE(SymTagDimension)
56 PRINT_ENUM_VALUE_CASE(SymTagCallSite)
57 PRINT_ENUM_VALUE_CASE(SymTagInlineSite)
58 PRINT_ENUM_VALUE_CASE(SymTagBaseInterface)
59 PRINT_ENUM_VALUE_CASE(SymTagVectorType)
60 PRINT_ENUM_VALUE_CASE(SymTagMatrixType)
61 PRINT_ENUM_VALUE_CASE(SymTagHLSLType)
62 #if (_MSC_FULL_VER >= 180031101)
63 PRINT_ENUM_VALUE_CASE(SymTagCaller)
64 PRINT_ENUM_VALUE_CASE(SymTagCallee)
66 PRINT_ENUM_VALUE_CASE(SymTagMax)
68 outs() << " {" << (DWORD)SymTag << "}";
72 raw_ostream &llvm::operator<<(raw_ostream &Stream, CV_CPU_TYPE_e CpuType) {
74 PRINT_ENUM_VALUE_CASE(CV_CFL_8080)
75 PRINT_ENUM_VALUE_CASE(CV_CFL_8086)
76 PRINT_ENUM_VALUE_CASE(CV_CFL_80286)
77 PRINT_ENUM_VALUE_CASE(CV_CFL_80386)
78 PRINT_ENUM_VALUE_CASE(CV_CFL_80486)
79 PRINT_ENUM_VALUE_CASE(CV_CFL_PENTIUM)
80 PRINT_ENUM_VALUE_CASE(CV_CFL_PENTIUMPRO)
81 PRINT_ENUM_VALUE_CASE(CV_CFL_PENTIUMIII)
82 PRINT_ENUM_VALUE_CASE(CV_CFL_MIPS)
83 PRINT_ENUM_VALUE_CASE(CV_CFL_MIPS16)
84 PRINT_ENUM_VALUE_CASE(CV_CFL_MIPS32)
85 PRINT_ENUM_VALUE_CASE(CV_CFL_MIPS64)
86 PRINT_ENUM_VALUE_CASE(CV_CFL_MIPSI)
87 PRINT_ENUM_VALUE_CASE(CV_CFL_MIPSII)
88 PRINT_ENUM_VALUE_CASE(CV_CFL_MIPSIII)
89 PRINT_ENUM_VALUE_CASE(CV_CFL_MIPSIV)
90 PRINT_ENUM_VALUE_CASE(CV_CFL_MIPSV)
91 PRINT_ENUM_VALUE_CASE(CV_CFL_M68000)
92 PRINT_ENUM_VALUE_CASE(CV_CFL_M68010)
93 PRINT_ENUM_VALUE_CASE(CV_CFL_M68020)
94 PRINT_ENUM_VALUE_CASE(CV_CFL_M68030)
95 PRINT_ENUM_VALUE_CASE(CV_CFL_M68040)
96 PRINT_ENUM_VALUE_CASE(CV_CFL_ALPHA)
97 PRINT_ENUM_VALUE_CASE(CV_CFL_ALPHA_21164)
98 PRINT_ENUM_VALUE_CASE(CV_CFL_ALPHA_21164A)
99 PRINT_ENUM_VALUE_CASE(CV_CFL_ALPHA_21264)
100 PRINT_ENUM_VALUE_CASE(CV_CFL_ALPHA_21364)
101 PRINT_ENUM_VALUE_CASE(CV_CFL_PPC601)
102 PRINT_ENUM_VALUE_CASE(CV_CFL_PPC603)
103 PRINT_ENUM_VALUE_CASE(CV_CFL_PPC604)
104 PRINT_ENUM_VALUE_CASE(CV_CFL_PPC620)
105 PRINT_ENUM_VALUE_CASE(CV_CFL_PPCFP)
106 PRINT_ENUM_VALUE_CASE(CV_CFL_PPCBE)
107 PRINT_ENUM_VALUE_CASE(CV_CFL_SH3)
108 PRINT_ENUM_VALUE_CASE(CV_CFL_SH3E)
109 PRINT_ENUM_VALUE_CASE(CV_CFL_SH3DSP)
110 PRINT_ENUM_VALUE_CASE(CV_CFL_SH4)
111 PRINT_ENUM_VALUE_CASE(CV_CFL_SHMEDIA)
112 PRINT_ENUM_VALUE_CASE(CV_CFL_ARM3)
113 PRINT_ENUM_VALUE_CASE(CV_CFL_ARM4)
114 PRINT_ENUM_VALUE_CASE(CV_CFL_ARM4T)
115 PRINT_ENUM_VALUE_CASE(CV_CFL_ARM5)
116 PRINT_ENUM_VALUE_CASE(CV_CFL_ARM5T)
117 PRINT_ENUM_VALUE_CASE(CV_CFL_ARM6)
118 PRINT_ENUM_VALUE_CASE(CV_CFL_ARM_XMAC)
119 PRINT_ENUM_VALUE_CASE(CV_CFL_ARM_WMMX)
120 PRINT_ENUM_VALUE_CASE(CV_CFL_ARM7)
121 PRINT_ENUM_VALUE_CASE(CV_CFL_OMNI)
122 PRINT_ENUM_VALUE_CASE(CV_CFL_IA64)
123 PRINT_ENUM_VALUE_CASE(CV_CFL_IA64_2)
124 PRINT_ENUM_VALUE_CASE(CV_CFL_CEE)
125 PRINT_ENUM_VALUE_CASE(CV_CFL_AM33)
126 PRINT_ENUM_VALUE_CASE(CV_CFL_M32R)
127 PRINT_ENUM_VALUE_CASE(CV_CFL_TRICORE)
128 PRINT_ENUM_VALUE_CASE(CV_CFL_X64)
129 PRINT_ENUM_VALUE_CASE(CV_CFL_EBC)
130 PRINT_ENUM_VALUE_CASE(CV_CFL_THUMB)
131 PRINT_ENUM_VALUE_CASE(CV_CFL_ARMNT)
132 #if (_MSC_FULL_VER >= 180031101)
133 PRINT_ENUM_VALUE_CASE(CV_CFL_ARM64)
135 PRINT_ENUM_VALUE_CASE(CV_CFL_D3D11_SHADER)
137 outs() << " {" << llvm::format_hex((DWORD)CpuType, 2, true) << "}";
141 raw_ostream &llvm::operator<<(raw_ostream &Stream,
142 MachineTypeEnum MachineType) {
143 switch (MachineType) {
144 PRINT_ENUM_VALUE_CASE(MachineTypeUnknown)
145 PRINT_ENUM_VALUE_CASE(MachineTypeX86)
146 PRINT_ENUM_VALUE_CASE(MachineTypeR3000)
147 PRINT_ENUM_VALUE_CASE(MachineTypeR4000)
148 PRINT_ENUM_VALUE_CASE(MachineTypeR10000)
149 PRINT_ENUM_VALUE_CASE(MachineTypeWCEMIPSv2)
150 PRINT_ENUM_VALUE_CASE(MachineTypeAlpha)
151 PRINT_ENUM_VALUE_CASE(MachineTypeSH3)
152 PRINT_ENUM_VALUE_CASE(MachineTypeSH3DSP)
153 PRINT_ENUM_VALUE_CASE(MachineTypeSH3E)
154 PRINT_ENUM_VALUE_CASE(MachineTypeSH4)
155 PRINT_ENUM_VALUE_CASE(MachineTypeSH5)
156 PRINT_ENUM_VALUE_CASE(MachineTypeArm)
157 PRINT_ENUM_VALUE_CASE(MachineTypeThumb)
158 PRINT_ENUM_VALUE_CASE(MachineTypeArmNT)
159 PRINT_ENUM_VALUE_CASE(MachineTypeAM33)
160 PRINT_ENUM_VALUE_CASE(MachineTypePowerPC)
161 PRINT_ENUM_VALUE_CASE(MachineTypePowerPCFP)
162 PRINT_ENUM_VALUE_CASE(MachineTypeIa64)
163 PRINT_ENUM_VALUE_CASE(MachineTypeMips16)
164 PRINT_ENUM_VALUE_CASE(MachineTypeAlpha64)
165 PRINT_ENUM_VALUE_CASE(MachineTypeMipsFpu)
166 PRINT_ENUM_VALUE_CASE(MachineTypeMipsFpu16)
167 PRINT_ENUM_VALUE_CASE(MachineTypeTriCore)
168 PRINT_ENUM_VALUE_CASE(MachineTypeCEF)
169 PRINT_ENUM_VALUE_CASE(MachineTypeEBC)
170 PRINT_ENUM_VALUE_CASE(MachineTypeAmd64)
171 PRINT_ENUM_VALUE_CASE(MachineTypeM32R)
172 PRINT_ENUM_VALUE_CASE(MachineTypeCEE)
174 outs() << " {" << llvm::format_hex((DWORD)MachineType, 2, true) << "}";