75b64750129dc5a14c705590cae2e7ce634689dc
[oota-llvm.git] / include / llvm / DebugInfo / PDB / PDBTypes.h
1 //===- PDBTypes.h - Defines enums for various fields contained in PDB ---*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef LLVM_DEBUGINFO_PDB_PDBTYPES_H
11 #define LLVM_DEBUGINFO_PDB_PDBTYPES_H
12
13 #include "llvm/Config/llvm-config.h"
14 #include <functional>
15 #include <stdint.h>
16
17 namespace llvm {
18
19 class PDBSymDumper;
20 class PDBSymbol;
21
22 class IPDBDataStream;
23 template <class T> class IPDBEnumChildren;
24 class IPDBRawSymbol;
25 class IPDBSession;
26 class IPDBSourceFile;
27
28 typedef IPDBEnumChildren<PDBSymbol> IPDBEnumSymbols;
29 typedef IPDBEnumChildren<IPDBSourceFile> IPDBEnumSourceFiles;
30 typedef IPDBEnumChildren<IPDBDataStream> IPDBEnumDataStreams;
31
32 class PDBSymbolExe;
33 class PDBSymbolCompiland;
34 class PDBSymbolCompilandDetails;
35 class PDBSymbolCompilandEnv;
36 class PDBSymbolFunc;
37 class PDBSymbolBlock;
38 class PDBSymbolData;
39 class PDBSymbolAnnotation;
40 class PDBSymbolLabel;
41 class PDBSymbolPublicSymbol;
42 class PDBSymbolTypeUDT;
43 class PDBSymbolTypeEnum;
44 class PDBSymbolTypeFunctionSig;
45 class PDBSymbolTypePointer;
46 class PDBSymbolTypeArray;
47 class PDBSymbolTypeBuiltin;
48 class PDBSymbolTypeTypedef;
49 class PDBSymbolTypeBaseClass;
50 class PDBSymbolTypeFriend;
51 class PDBSymbolTypeFunctionArg;
52 class PDBSymbolFuncDebugStart;
53 class PDBSymbolFuncDebugEnd;
54 class PDBSymbolUsingNamespace;
55 class PDBSymbolTypeVTableShape;
56 class PDBSymbolTypeVTable;
57 class PDBSymbolCustom;
58 class PDBSymbolThunk;
59 class PDBSymbolTypeCustom;
60 class PDBSymbolTypeManaged;
61 class PDBSymbolTypeDimension;
62 class PDBSymbolUnknown;
63
64 /// Specifies which PDB reader implementation is to be used.  Only a value
65 /// of PDB_ReaderType::DIA is supported.
66 enum class PDB_ReaderType {
67   DIA = 0,
68 };
69
70 /// Defines a 128-bit unique identifier.  This maps to a GUID on Windows, but
71 /// is abstracted here for the purposes of non-Windows platforms that don't have
72 /// the GUID structure defined.
73 struct PDB_UniqueId {
74   uint64_t HighPart;
75   uint64_t LowPart;
76 };
77
78 /// An enumeration indicating the type of data contained in this table.
79 enum class PDB_TableType {
80   Symbols,
81   SourceFiles,
82   LineNumbers,
83   SectionContribs,
84   Segments,
85   InjectedSources,
86   FrameData
87 };
88
89 /// Defines flags used for enumerating child symbols.  This corresponds to the
90 /// NameSearchOptions enumeration which is documented here:
91 /// https://msdn.microsoft.com/en-us/library/yat28ads.aspx
92 enum PDB_NameSearchFlags {
93   NS_Default = 0x0,
94   NS_CaseSensitive = 0x1,
95   NS_CaseInsensitive = 0x2,
96   NS_FileNameExtMatch = 0x4,
97   NS_Regex = 0x8,
98   NS_UndecoratedName = 0x10
99 };
100
101 /// Specifies the hash algorithm that a source file from a PDB was hashed with.
102 /// This corresponds to the CV_SourceChksum_t enumeration and are documented
103 /// here: https://msdn.microsoft.com/en-us/library/e96az21x.aspx
104 enum class PDB_Checksum { None = 0, MD5 = 1, SHA1 = 2 };
105
106 /// These values correspond to the CV_CPU_TYPE_e enumeration, and are documented
107 /// here: https://msdn.microsoft.com/en-us/library/b2fc64ek.aspx
108 enum class PDB_Cpu {
109   Intel8080 = 0x0,
110   Intel8086 = 0x1,
111   Intel80286 = 0x2,
112   Intel80386 = 0x3,
113   Intel80486 = 0x4,
114   Pentium = 0x5,
115   PentiumPro = 0x6,
116   Pentium3 = 0x7,
117   MIPS = 0x10,
118   MIPS16 = 0x11,
119   MIPS32 = 0x12,
120   MIPS64 = 0x13,
121   MIPSI = 0x14,
122   MIPSII = 0x15,
123   MIPSIII = 0x16,
124   MIPSIV = 0x17,
125   MIPSV = 0x18,
126   M68000 = 0x20,
127   M68010 = 0x21,
128   M68020 = 0x22,
129   M68030 = 0x23,
130   M68040 = 0x24,
131   Alpha = 0x30,
132   Alpha21164 = 0x31,
133   Alpha21164A = 0x32,
134   Alpha21264 = 0x33,
135   Alpha21364 = 0x34,
136   PPC601 = 0x40,
137   PPC603 = 0x41,
138   PPC604 = 0x42,
139   PPC620 = 0x43,
140   PPCFP = 0x44,
141   PPCBE = 0x45,
142   SH3 = 0x50,
143   SH3E = 0x51,
144   SH3DSP = 0x52,
145   SH4 = 0x53,
146   SHMedia = 0x54,
147   ARM3 = 0x60,
148   ARM4 = 0x61,
149   ARM4T = 0x62,
150   ARM5 = 0x63,
151   ARM5T = 0x64,
152   ARM6 = 0x65,
153   ARM_XMAC = 0x66,
154   ARM_WMMX = 0x67,
155   ARM7 = 0x68,
156   Omni = 0x70,
157   Ia64 = 0x80,
158   Ia64_2 = 0x81,
159   CEE = 0x90,
160   AM33 = 0xa0,
161   M32R = 0xb0,
162   TriCore = 0xc0,
163   X64 = 0xd0,
164   EBC = 0xe0,
165   Thumb = 0xf0,
166   ARMNT = 0xf4,
167   D3D11_Shader = 0x100,
168 };
169
170 enum class PDB_Machine {
171   Invalid = 0xffff,
172   Unknown = 0x0,
173   Am33 = 0x13,
174   Amd64 = 0x8664,
175   Arm = 0x1C0,
176   ArmNT = 0x1C4,
177   Ebc = 0xEBC,
178   x86 = 0x14C,
179   Ia64 = 0x200,
180   M32R = 0x9041,
181   Mips16 = 0x266,
182   MipsFpu = 0x366,
183   MipsFpu16 = 0x466,
184   PowerPC = 0x1F0,
185   PowerPCFP = 0x1F1,
186   R4000 = 0x166,
187   SH3 = 0x1A2,
188   SH3DSP = 0x1A3,
189   SH4 = 0x1A6,
190   SH5 = 0x1A8,
191   Thumb = 0x1C2,
192   WceMipsV2 = 0x169
193 };
194
195 /// These values correspond to the CV_call_e enumeration, and are documented
196 /// at the following locations:
197 ///   https://msdn.microsoft.com/en-us/library/b2fc64ek.aspx
198 ///   https://msdn.microsoft.com/en-us/library/windows/desktop/ms680207(v=vs.85).aspx
199 ///
200 enum class PDB_CallingConv {
201   NearCdecl = 0x00,
202   FarCdecl = 0x01,
203   NearPascal = 0x02,
204   FarPascal = 0x03,
205   NearFastcall = 0x04,
206   FarFastcall = 0x05,
207   Skipped = 0x06,
208   NearStdcall = 0x07,
209   FarStdcall = 0x08,
210   NearSyscall = 0x09,
211   FarSyscall = 0x0a,
212   Thiscall = 0x0b,
213   MipsCall = 0x0c,
214   Generic = 0x0d,
215   Alphacall = 0x0e,
216   Ppccall = 0x0f,
217   SuperHCall = 0x10,
218   Armcall = 0x11,
219   AM33call = 0x12,
220   Tricall = 0x13,
221   Sh5call = 0x14,
222   M32R = 0x15,
223   Clrcall = 0x16,
224   Inline = 0x17,
225   NearVectorcall = 0x18,
226   Reserved = 0x19,
227 };
228
229 /// These values correspond to the CV_CFL_LANG enumeration, and are documented
230 /// here: https://msdn.microsoft.com/en-us/library/bw3aekw6.aspx
231 enum class PDB_Lang {
232   C = 0x00,
233   Cpp = 0x01,
234   Fortran = 0x02,
235   Masm = 0x03,
236   Pascal = 0x04,
237   Basic = 0x05,
238   Cobol = 0x06,
239   Link = 0x07,
240   Cvtres = 0x08,
241   Cvtpgd = 0x09,
242   CSharp = 0x0a,
243   VB = 0x0b,
244   ILAsm = 0x0c,
245   Java = 0x0d,
246   JScript = 0x0e,
247   MSIL = 0x0f,
248   HLSL = 0x10
249 };
250
251 /// These values correspond to the DataKind enumeration, and are documented
252 /// here: https://msdn.microsoft.com/en-us/library/b2x2t313.aspx
253 enum class PDB_DataKind {
254   Unknown,
255   Local,
256   StaticLocal,
257   Param,
258   ObjectPtr,
259   FileStatic,
260   Global,
261   Member,
262   StaticMember,
263   Constant
264 };
265
266 /// These values correspond to the SymTagEnum enumeration, and are documented
267 /// here: https://msdn.microsoft.com/en-us/library/bkedss5f.aspx
268 enum class PDB_SymType {
269   None,
270   Exe,
271   Compiland,
272   CompilandDetails,
273   CompilandEnv,
274   Function,
275   Block,
276   Data,
277   Annotation,
278   Label,
279   PublicSymbol,
280   UDT,
281   Enum,
282   FunctionSig,
283   PointerType,
284   ArrayType,
285   BuiltinType,
286   Typedef,
287   BaseClass,
288   Friend,
289   FunctionArg,
290   FuncDebugStart,
291   FuncDebugEnd,
292   UsingNamespace,
293   VTableShape,
294   VTable,
295   Custom,
296   Thunk,
297   CustomType,
298   ManagedType,
299   Dimension,
300   Max
301 };
302
303 /// These values correspond to the LocationType enumeration, and are documented
304 /// here: https://msdn.microsoft.com/en-us/library/f57kaez3.aspx
305 enum class PDB_LocType {
306   Null,
307   Static,
308   TLS,
309   RegRel,
310   ThisRel,
311   Enregistered,
312   BitField,
313   Slot,
314   IlRel,
315   MetaData,
316   Constant,
317   Max
318 };
319
320 /// These values correspond to the THUNK_ORDINAL enumeration, and are documented
321 /// here: https://msdn.microsoft.com/en-us/library/dh0k8hft.aspx
322 enum class PDB_ThunkOrdinal {
323   Standard,
324   ThisAdjustor,
325   Vcall,
326   Pcode,
327   UnknownLoad,
328   TrampIncremental,
329   BranchIsland
330 };
331
332 /// These values correspond to the UdtKind enumeration, and are documented
333 /// here: https://msdn.microsoft.com/en-us/library/wcstk66t.aspx
334 enum class PDB_UdtType { Struct, Class, Union, Interface };
335
336 /// These values correspond to the StackFrameTypeEnum enumeration, and are
337 /// documented here: https://msdn.microsoft.com/en-us/library/bc5207xw.aspx.
338 enum class PDB_StackFrameType { FPO, KernelTrap, KernelTSS, EBP, FrameData };
339
340 /// These values correspond to the StackFrameTypeEnum enumeration, and are
341 /// documented here: https://msdn.microsoft.com/en-us/library/bc5207xw.aspx.
342 enum class PDB_MemoryType { Code, Data, Stack, HeapCode };
343
344 /// These values correspond to the Basictype enumeration, and are documented
345 /// here: https://msdn.microsoft.com/en-us/library/4szdtzc3.aspx
346 enum class PDB_BuiltinType {
347   None = 0,
348   Void = 1,
349   Char = 2,
350   WCharT = 3,
351   Int = 6,
352   UInt = 7,
353   Float = 8,
354   BCD = 9,
355   Bool = 10,
356   Long = 13,
357   ULong = 14,
358   Currency = 25,
359   Date = 26,
360   Variant = 27,
361   Complex = 28,
362   Bitfield = 29,
363   BSTR = 30,
364   HResult = 31
365 };
366
367 enum class PDB_RegisterId {
368   Unknown = 0,
369   VFrame = 30006,
370   AL = 1,
371   CL = 2,
372   DL = 3,
373   BL = 4,
374   AH = 5,
375   CH = 6,
376   DH = 7,
377   BH = 8,
378   AX = 9,
379   CX = 10,
380   DX = 11,
381   BX = 12,
382   SP = 13,
383   BP = 14,
384   SI = 15,
385   DI = 16,
386   EAX = 17,
387   ECX = 18,
388   EDX = 19,
389   EBX = 20,
390   ESP = 21,
391   EBP = 22,
392   ESI = 23,
393   EDI = 24,
394   ES = 25,
395   CS = 26,
396   SS = 27,
397   DS = 28,
398   FS = 29,
399   GS = 30,
400   IP = 31,
401   RAX = 328,
402   RBX = 329,
403   RCX = 330,
404   RDX = 331,
405   RSI = 332,
406   RDI = 333,
407   RBP = 334,
408   RSP = 335,
409   R8 = 336,
410   R9 = 337,
411   R10 = 338,
412   R11 = 339,
413   R12 = 340,
414   R13 = 341,
415   R14 = 342,
416   R15 = 343,
417 };
418
419 enum class PDB_MemberAccess { Private = 1, Protected = 2, Public = 3 };
420
421 struct VersionInfo {
422   uint32_t Major;
423   uint32_t Minor;
424   uint32_t Build;
425   uint32_t QFE;
426 };
427
428 enum PDB_VariantType {
429   Empty,
430   Unknown,
431   Int8,
432   Int16,
433   Int32,
434   Int64,
435   Single,
436   Double,
437   UInt8,
438   UInt16,
439   UInt32,
440   UInt64,
441   Bool,
442 };
443
444 struct Variant {
445   Variant()
446     : Type(PDB_VariantType::Empty) {
447   }
448
449   PDB_VariantType Type;
450   union {
451     bool Bool;
452     int8_t Int8;
453     int16_t Int16;
454     int32_t Int32;
455     int64_t Int64;
456     float Single;
457     double Double;
458     uint8_t UInt8;
459     uint16_t UInt16;
460     uint32_t UInt32;
461     uint64_t UInt64;
462     void* Pointer;
463   };
464 };
465
466 } // namespace llvm
467
468 namespace std {
469 template <> struct hash<llvm::PDB_SymType> {
470   typedef llvm::PDB_SymType argument_type;
471   typedef std::size_t result_type;
472
473   result_type operator()(const argument_type &Arg) const {
474     return std::hash<int>()(static_cast<int>(Arg));
475   }
476 };
477 }
478
479 #endif