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