LLVM  6.0.0svn
DIARawSymbol.cpp
Go to the documentation of this file.
1 //===- DIARawSymbol.cpp - DIA implementation of IPDBRawSymbol ---*- C++ -*-===//
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 
11 #include "llvm/ADT/ArrayRef.h"
12 #include "llvm/ADT/STLExtras.h"
23 
24 using namespace llvm;
25 using namespace llvm::pdb;
26 
27 namespace {
28 Variant VariantFromVARIANT(const VARIANT &V) {
29  Variant Result;
30  switch (V.vt) {
31  case VT_I1:
32  Result.Value.Int8 = V.cVal;
33  Result.Type = PDB_VariantType::Int8;
34  break;
35  case VT_I2:
36  Result.Value.Int16 = V.iVal;
38  break;
39  case VT_I4:
40  Result.Value.Int32 = V.intVal;
42  break;
43  case VT_I8:
44  Result.Value.Int64 = V.llVal;
46  break;
47  case VT_UI1:
48  Result.Value.UInt8 = V.bVal;
50  break;
51  case VT_UI2:
52  Result.Value.UInt16 = V.uiVal;
54  break;
55  case VT_UI4:
56  Result.Value.UInt32 = V.uintVal;
58  break;
59  case VT_UI8:
60  Result.Value.UInt64 = V.ullVal;
62  break;
63  case VT_BOOL:
64  Result.Value.Bool = (V.boolVal == VARIANT_TRUE) ? true : false;
65  Result.Type = PDB_VariantType::Bool;
66  break;
67  case VT_R4:
68  Result.Value.Single = V.fltVal;
70  break;
71  case VT_R8:
72  Result.Value.Double = V.dblVal;
74  break;
75  case VT_BSTR: {
76  const char *SrcBytes = reinterpret_cast<const char *>(V.bstrVal);
77  llvm::ArrayRef<char> SrcByteArray(SrcBytes, SysStringByteLen(V.bstrVal));
78  std::string Result8;
79  if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8))
80  Result.Value.String = nullptr;
81  Result.Value.String = new char[Result8.length() + 1];
82  ::strcpy(Result.Value.String, Result8.c_str());
84  break;
85  }
86  default:
88  break;
89  }
90  return Result;
91 }
92 
93 template <typename ArgType>
94 ArgType PrivateGetDIAValue(IDiaSymbol *Symbol,
95  HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
96  ArgType Value;
97  if (S_OK == (Symbol->*Method)(&Value))
98  return static_cast<ArgType>(Value);
99 
100  return ArgType();
101 }
102 
103 template <typename ArgType, typename RetType>
104 RetType PrivateGetDIAValue(IDiaSymbol *Symbol,
105  HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
106  ArgType Value;
107  if (S_OK == (Symbol->*Method)(&Value))
108  return static_cast<RetType>(Value);
109 
110  return RetType();
111 }
112 
113 std::string
114 PrivateGetDIAValue(IDiaSymbol *Symbol,
115  HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
116  CComBSTR Result16;
117  if (S_OK != (Symbol->*Method)(&Result16))
118  return std::string();
119 
120  const char *SrcBytes = reinterpret_cast<const char *>(Result16.m_str);
121  llvm::ArrayRef<char> SrcByteArray(SrcBytes, Result16.ByteLength());
122  std::string Result8;
123  if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8))
124  return std::string();
125  return Result8;
126 }
127 
129 PrivateGetDIAValue(IDiaSymbol *Symbol,
130  HRESULT (__stdcall IDiaSymbol::*Method)(GUID *)) {
131  GUID Result;
132  if (S_OK != (Symbol->*Method)(&Result))
133  return codeview::GUID();
134 
135  static_assert(sizeof(codeview::GUID) == sizeof(GUID),
136  "GUID is the wrong size!");
137  codeview::GUID IdResult;
138  ::memcpy(&IdResult, &Result, sizeof(GUID));
139  return IdResult;
140 }
141 
142 template <typename ArgType>
143 void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
144  IDiaSymbol *Symbol,
145  HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
146  ArgType Value;
147  if (S_OK == (Symbol->*Method)(&Value)) {
148  OS << "\n";
149  OS.indent(Indent);
150  OS << Name << ": " << Value;
151  }
152 }
153 
154 void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
155  IDiaSymbol *Symbol,
156  HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
157  BSTR Value = nullptr;
158  if (S_OK != (Symbol->*Method)(&Value))
159  return;
160  const char *Bytes = reinterpret_cast<const char *>(Value);
161  ArrayRef<char> ByteArray(Bytes, ::SysStringByteLen(Value));
162  std::string Result;
163  if (llvm::convertUTF16ToUTF8String(ByteArray, Result)) {
164  OS << "\n";
165  OS.indent(Indent);
166  OS << Name << ": " << Result;
167  }
168  ::SysFreeString(Value);
169 }
170 
171 void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
172  IDiaSymbol *Symbol,
173  HRESULT (__stdcall IDiaSymbol::*Method)(VARIANT *)) {
174  VARIANT Value;
175  Value.vt = VT_EMPTY;
176  if (S_OK != (Symbol->*Method)(&Value))
177  return;
178  OS << "\n";
179  OS.indent(Indent);
180  Variant V = VariantFromVARIANT(Value);
181  OS << V;
182 }
183 }
184 
185 namespace llvm {
187  StringRef GuidBytes(reinterpret_cast<const char *>(&G), sizeof(G));
188  codeview::detail::GuidAdapter A(GuidBytes);
189  A.format(OS, "");
190  return OS;
191 }
192 }
193 
195  CComPtr<IDiaSymbol> DiaSymbol)
196  : Session(PDBSession), Symbol(DiaSymbol) {}
197 
198 #define RAW_METHOD_DUMP(Stream, Method) \
199  DumpDIAValue(Stream, Indent, StringRef(#Method), Symbol, &IDiaSymbol::Method);
200 
201 void DIARawSymbol::dump(raw_ostream &OS, int Indent) const {
202  RAW_METHOD_DUMP(OS, get_access)
203  RAW_METHOD_DUMP(OS, get_addressOffset)
204  RAW_METHOD_DUMP(OS, get_addressSection)
205  RAW_METHOD_DUMP(OS, get_age)
206  RAW_METHOD_DUMP(OS, get_arrayIndexTypeId)
207  RAW_METHOD_DUMP(OS, get_backEndMajor)
208  RAW_METHOD_DUMP(OS, get_backEndMinor)
209  RAW_METHOD_DUMP(OS, get_backEndBuild)
210  RAW_METHOD_DUMP(OS, get_backEndQFE)
211  RAW_METHOD_DUMP(OS, get_baseDataOffset)
212  RAW_METHOD_DUMP(OS, get_baseDataSlot)
213  RAW_METHOD_DUMP(OS, get_baseSymbolId)
214  RAW_METHOD_DUMP(OS, get_baseType)
215  RAW_METHOD_DUMP(OS, get_bitPosition)
216  RAW_METHOD_DUMP(OS, get_callingConvention)
217  RAW_METHOD_DUMP(OS, get_classParentId)
218  RAW_METHOD_DUMP(OS, get_compilerName)
219  RAW_METHOD_DUMP(OS, get_count)
220  RAW_METHOD_DUMP(OS, get_countLiveRanges)
221  RAW_METHOD_DUMP(OS, get_frontEndMajor)
222  RAW_METHOD_DUMP(OS, get_frontEndMinor)
223  RAW_METHOD_DUMP(OS, get_frontEndBuild)
224  RAW_METHOD_DUMP(OS, get_frontEndQFE)
225  RAW_METHOD_DUMP(OS, get_lexicalParentId)
226  RAW_METHOD_DUMP(OS, get_libraryName)
227  RAW_METHOD_DUMP(OS, get_liveRangeStartAddressOffset)
228  RAW_METHOD_DUMP(OS, get_liveRangeStartAddressSection)
229  RAW_METHOD_DUMP(OS, get_liveRangeStartRelativeVirtualAddress)
230  RAW_METHOD_DUMP(OS, get_localBasePointerRegisterId)
231  RAW_METHOD_DUMP(OS, get_lowerBoundId)
232  RAW_METHOD_DUMP(OS, get_memorySpaceKind)
233  RAW_METHOD_DUMP(OS, get_name)
234  RAW_METHOD_DUMP(OS, get_numberOfAcceleratorPointerTags)
235  RAW_METHOD_DUMP(OS, get_numberOfColumns)
236  RAW_METHOD_DUMP(OS, get_numberOfModifiers)
237  RAW_METHOD_DUMP(OS, get_numberOfRegisterIndices)
238  RAW_METHOD_DUMP(OS, get_numberOfRows)
239  RAW_METHOD_DUMP(OS, get_objectFileName)
240  RAW_METHOD_DUMP(OS, get_oemId)
241  RAW_METHOD_DUMP(OS, get_oemSymbolId)
242  RAW_METHOD_DUMP(OS, get_offsetInUdt)
243  RAW_METHOD_DUMP(OS, get_platform)
244  RAW_METHOD_DUMP(OS, get_rank)
245  RAW_METHOD_DUMP(OS, get_registerId)
246  RAW_METHOD_DUMP(OS, get_registerType)
247  RAW_METHOD_DUMP(OS, get_relativeVirtualAddress)
248  RAW_METHOD_DUMP(OS, get_samplerSlot)
249  RAW_METHOD_DUMP(OS, get_signature)
250  RAW_METHOD_DUMP(OS, get_sizeInUdt)
251  RAW_METHOD_DUMP(OS, get_slot)
252  RAW_METHOD_DUMP(OS, get_sourceFileName)
253  RAW_METHOD_DUMP(OS, get_stride)
254  RAW_METHOD_DUMP(OS, get_subTypeId)
255  RAW_METHOD_DUMP(OS, get_symbolsFileName)
256  RAW_METHOD_DUMP(OS, get_symIndexId)
257  RAW_METHOD_DUMP(OS, get_targetOffset)
258  RAW_METHOD_DUMP(OS, get_targetRelativeVirtualAddress)
259  RAW_METHOD_DUMP(OS, get_targetVirtualAddress)
260  RAW_METHOD_DUMP(OS, get_targetSection)
261  RAW_METHOD_DUMP(OS, get_textureSlot)
262  RAW_METHOD_DUMP(OS, get_timeStamp)
263  RAW_METHOD_DUMP(OS, get_token)
264  RAW_METHOD_DUMP(OS, get_typeId)
265  RAW_METHOD_DUMP(OS, get_uavSlot)
266  RAW_METHOD_DUMP(OS, get_undecoratedName)
267  RAW_METHOD_DUMP(OS, get_unmodifiedTypeId)
268  RAW_METHOD_DUMP(OS, get_upperBoundId)
269  RAW_METHOD_DUMP(OS, get_virtualBaseDispIndex)
270  RAW_METHOD_DUMP(OS, get_virtualBaseOffset)
271  RAW_METHOD_DUMP(OS, get_virtualTableShapeId)
272  RAW_METHOD_DUMP(OS, get_dataKind)
273  RAW_METHOD_DUMP(OS, get_symTag)
274  RAW_METHOD_DUMP(OS, get_guid)
275  RAW_METHOD_DUMP(OS, get_offset)
276  RAW_METHOD_DUMP(OS, get_thisAdjust)
277  RAW_METHOD_DUMP(OS, get_virtualBasePointerOffset)
278  RAW_METHOD_DUMP(OS, get_locationType)
279  RAW_METHOD_DUMP(OS, get_machineType)
280  RAW_METHOD_DUMP(OS, get_thunkOrdinal)
281  RAW_METHOD_DUMP(OS, get_length)
282  RAW_METHOD_DUMP(OS, get_liveRangeLength)
283  RAW_METHOD_DUMP(OS, get_virtualAddress)
284  RAW_METHOD_DUMP(OS, get_udtKind)
285  RAW_METHOD_DUMP(OS, get_constructor)
286  RAW_METHOD_DUMP(OS, get_customCallingConvention)
287  RAW_METHOD_DUMP(OS, get_farReturn)
288  RAW_METHOD_DUMP(OS, get_code)
289  RAW_METHOD_DUMP(OS, get_compilerGenerated)
290  RAW_METHOD_DUMP(OS, get_constType)
291  RAW_METHOD_DUMP(OS, get_editAndContinueEnabled)
292  RAW_METHOD_DUMP(OS, get_function)
293  RAW_METHOD_DUMP(OS, get_stride)
294  RAW_METHOD_DUMP(OS, get_noStackOrdering)
295  RAW_METHOD_DUMP(OS, get_hasAlloca)
296  RAW_METHOD_DUMP(OS, get_hasAssignmentOperator)
297  RAW_METHOD_DUMP(OS, get_isCTypes)
298  RAW_METHOD_DUMP(OS, get_hasCastOperator)
299  RAW_METHOD_DUMP(OS, get_hasDebugInfo)
300  RAW_METHOD_DUMP(OS, get_hasEH)
301  RAW_METHOD_DUMP(OS, get_hasEHa)
302  RAW_METHOD_DUMP(OS, get_hasInlAsm)
303  RAW_METHOD_DUMP(OS, get_framePointerPresent)
304  RAW_METHOD_DUMP(OS, get_inlSpec)
305  RAW_METHOD_DUMP(OS, get_interruptReturn)
306  RAW_METHOD_DUMP(OS, get_hasLongJump)
307  RAW_METHOD_DUMP(OS, get_hasManagedCode)
308  RAW_METHOD_DUMP(OS, get_hasNestedTypes)
309  RAW_METHOD_DUMP(OS, get_noInline)
310  RAW_METHOD_DUMP(OS, get_noReturn)
311  RAW_METHOD_DUMP(OS, get_optimizedCodeDebugInfo)
312  RAW_METHOD_DUMP(OS, get_overloadedOperator)
313  RAW_METHOD_DUMP(OS, get_hasSEH)
314  RAW_METHOD_DUMP(OS, get_hasSecurityChecks)
315  RAW_METHOD_DUMP(OS, get_hasSetJump)
316  RAW_METHOD_DUMP(OS, get_strictGSCheck)
317  RAW_METHOD_DUMP(OS, get_isAcceleratorGroupSharedLocal)
318  RAW_METHOD_DUMP(OS, get_isAcceleratorPointerTagLiveRange)
319  RAW_METHOD_DUMP(OS, get_isAcceleratorStubFunction)
320  RAW_METHOD_DUMP(OS, get_isAggregated)
321  RAW_METHOD_DUMP(OS, get_intro)
322  RAW_METHOD_DUMP(OS, get_isCVTCIL)
323  RAW_METHOD_DUMP(OS, get_isConstructorVirtualBase)
324  RAW_METHOD_DUMP(OS, get_isCxxReturnUdt)
325  RAW_METHOD_DUMP(OS, get_isDataAligned)
326  RAW_METHOD_DUMP(OS, get_isHLSLData)
327  RAW_METHOD_DUMP(OS, get_isHotpatchable)
328  RAW_METHOD_DUMP(OS, get_indirectVirtualBaseClass)
329  RAW_METHOD_DUMP(OS, get_isInterfaceUdt)
330  RAW_METHOD_DUMP(OS, get_intrinsic)
331  RAW_METHOD_DUMP(OS, get_isLTCG)
332  RAW_METHOD_DUMP(OS, get_isLocationControlFlowDependent)
333  RAW_METHOD_DUMP(OS, get_isMSILNetmodule)
334  RAW_METHOD_DUMP(OS, get_isMatrixRowMajor)
335  RAW_METHOD_DUMP(OS, get_managed)
336  RAW_METHOD_DUMP(OS, get_msil)
337  RAW_METHOD_DUMP(OS, get_isMultipleInheritance)
338  RAW_METHOD_DUMP(OS, get_isNaked)
339  RAW_METHOD_DUMP(OS, get_nested)
340  RAW_METHOD_DUMP(OS, get_isOptimizedAway)
341  RAW_METHOD_DUMP(OS, get_packed)
342  RAW_METHOD_DUMP(OS, get_isPointerBasedOnSymbolValue)
343  RAW_METHOD_DUMP(OS, get_isPointerToDataMember)
344  RAW_METHOD_DUMP(OS, get_isPointerToMemberFunction)
345  RAW_METHOD_DUMP(OS, get_pure)
346  RAW_METHOD_DUMP(OS, get_RValueReference)
347  RAW_METHOD_DUMP(OS, get_isRefUdt)
348  RAW_METHOD_DUMP(OS, get_reference)
349  RAW_METHOD_DUMP(OS, get_restrictedType)
350  RAW_METHOD_DUMP(OS, get_isReturnValue)
351  RAW_METHOD_DUMP(OS, get_isSafeBuffers)
352  RAW_METHOD_DUMP(OS, get_scoped)
353  RAW_METHOD_DUMP(OS, get_isSdl)
354  RAW_METHOD_DUMP(OS, get_isSingleInheritance)
355  RAW_METHOD_DUMP(OS, get_isSplitted)
356  RAW_METHOD_DUMP(OS, get_isStatic)
357  RAW_METHOD_DUMP(OS, get_isStripped)
358  RAW_METHOD_DUMP(OS, get_unalignedType)
359  RAW_METHOD_DUMP(OS, get_notReached)
360  RAW_METHOD_DUMP(OS, get_isValueUdt)
361  RAW_METHOD_DUMP(OS, get_virtual)
362  RAW_METHOD_DUMP(OS, get_virtualBaseClass)
363  RAW_METHOD_DUMP(OS, get_isVirtualInheritance)
364  RAW_METHOD_DUMP(OS, get_volatileType)
365  RAW_METHOD_DUMP(OS, get_wasInlined)
366  RAW_METHOD_DUMP(OS, get_unused)
367  RAW_METHOD_DUMP(OS, get_value)
368 }
369 
370 std::unique_ptr<IPDBEnumSymbols>
372  enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
373 
374  CComPtr<IDiaEnumSymbols> DiaEnumerator;
375  if (S_OK !=
376  Symbol->findChildrenEx(EnumVal, nullptr, nsNone, &DiaEnumerator)) {
377  if (S_OK != Symbol->findChildren(EnumVal, nullptr, nsNone, &DiaEnumerator))
378  return nullptr;
379  }
380 
381  return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
382 }
383 
384 std::unique_ptr<IPDBEnumSymbols>
386  PDB_NameSearchFlags Flags) const {
388  llvm::convertUTF8ToUTF16String(Name, Name16);
389 
390  enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
391  DWORD CompareFlags = static_cast<DWORD>(Flags);
392  wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
393 
394  CComPtr<IDiaEnumSymbols> DiaEnumerator;
395  if (S_OK !=
396  Symbol->findChildrenEx(EnumVal, Name16Str, CompareFlags, &DiaEnumerator))
397  return nullptr;
398 
399  return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
400 }
401 
402 std::unique_ptr<IPDBEnumSymbols>
404  PDB_NameSearchFlags Flags, uint32_t RVA) const {
406  llvm::convertUTF8ToUTF16String(Name, Name16);
407 
408  enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
409  DWORD CompareFlags = static_cast<DWORD>(Flags);
410  wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
411 
412  CComPtr<IDiaEnumSymbols> DiaEnumerator;
413  if (S_OK !=
414  Symbol->findChildrenExByRVA(EnumVal, Name16Str, CompareFlags, RVA,
415  &DiaEnumerator))
416  return nullptr;
417 
418  return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
419 }
420 
421 std::unique_ptr<IPDBEnumSymbols>
423  CComPtr<IDiaEnumSymbols> DiaEnumerator;
424  if (S_OK != Symbol->findInlineFramesByRVA(RVA, &DiaEnumerator))
425  return nullptr;
426 
427  return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
428 }
429 
431  bytes.clear();
432 
433  DWORD DataSize = 0;
434  Symbol->get_dataBytes(0, &DataSize, nullptr);
435  if (DataSize == 0)
436  return;
437 
438  bytes.resize(DataSize);
439  Symbol->get_dataBytes(DataSize, &DataSize, bytes.data());
440 }
441 
442 std::string
444  CComBSTR Result16;
445  if (S_OK != Symbol->get_undecoratedNameEx((DWORD)Flags, &Result16))
446  return std::string();
447 
448  const char *SrcBytes = reinterpret_cast<const char *>(Result16.m_str);
449  llvm::ArrayRef<char> SrcByteArray(SrcBytes, Result16.ByteLength());
450  std::string Result8;
451  if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8))
452  return std::string();
453  return Result8;
454 }
455 
457  return PrivateGetDIAValue<DWORD, PDB_MemberAccess>(Symbol,
458  &IDiaSymbol::get_access);
459 }
460 
462  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressOffset);
463 }
464 
466  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressSection);
467 }
468 
470  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_age);
471 }
472 
474  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_arrayIndexTypeId);
475 }
476 
478  Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMajor);
479  Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMinor);
480  Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndBuild);
481  Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndQFE);
482 }
483 
485  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataOffset);
486 }
487 
489  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataSlot);
490 }
491 
493  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseSymbolId);
494 }
495 
497  return PrivateGetDIAValue<DWORD, PDB_BuiltinType>(Symbol,
498  &IDiaSymbol::get_baseType);
499 }
500 
502  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_bitPosition);
503 }
504 
506  return PrivateGetDIAValue<DWORD, PDB_CallingConv>(
507  Symbol, &IDiaSymbol::get_callingConvention);
508 }
509 
511  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_classParentId);
512 }
513 
514 std::string DIARawSymbol::getCompilerName() const {
515  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerName);
516 }
517 
519  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_count);
520 }
521 
523  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_countLiveRanges);
524 }
525 
527  Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMajor);
528  Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMinor);
529  Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndBuild);
530  Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndQFE);
531 }
532 
534  return PrivateGetDIAValue<DWORD, PDB_Lang>(Symbol, &IDiaSymbol::get_language);
535 }
536 
538  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lexicalParentId);
539 }
540 
541 std::string DIARawSymbol::getLibraryName() const {
542  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_libraryName);
543 }
544 
546  return PrivateGetDIAValue(Symbol,
547  &IDiaSymbol::get_liveRangeStartAddressOffset);
548 }
549 
551  return PrivateGetDIAValue(Symbol,
552  &IDiaSymbol::get_liveRangeStartAddressSection);
553 }
554 
556  return PrivateGetDIAValue(
557  Symbol, &IDiaSymbol::get_liveRangeStartRelativeVirtualAddress);
558 }
559 
561  return PrivateGetDIAValue<DWORD, codeview::RegisterId>(
562  Symbol, &IDiaSymbol::get_localBasePointerRegisterId);
563 }
564 
566  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lowerBoundId);
567 }
568 
570  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_memorySpaceKind);
571 }
572 
573 std::string DIARawSymbol::getName() const {
574  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_name);
575 }
576 
578  return PrivateGetDIAValue(Symbol,
579  &IDiaSymbol::get_numberOfAcceleratorPointerTags);
580 }
581 
583  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfColumns);
584 }
585 
587  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfModifiers);
588 }
589 
591  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRegisterIndices);
592 }
593 
595  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRows);
596 }
597 
598 std::string DIARawSymbol::getObjectFileName() const {
599  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_objectFileName);
600 }
601 
603  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemId);
604 }
605 
607  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemSymbolId);
608 }
609 
611  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offsetInUdt);
612 }
613 
615  return PrivateGetDIAValue<DWORD, PDB_Cpu>(Symbol, &IDiaSymbol::get_platform);
616 }
617 
619  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_rank);
620 }
621 
623  return PrivateGetDIAValue<DWORD, codeview::RegisterId>(
624  Symbol, &IDiaSymbol::get_registerId);
625 }
626 
628  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_registerType);
629 }
630 
632  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_relativeVirtualAddress);
633 }
634 
636  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_samplerSlot);
637 }
638 
640  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_signature);
641 }
642 
644  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sizeInUdt);
645 }
646 
648  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_slot);
649 }
650 
651 std::string DIARawSymbol::getSourceFileName() const {
652  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sourceFileName);
653 }
654 
656  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_stride);
657 }
658 
660  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_subTypeId);
661 }
662 
663 std::string DIARawSymbol::getSymbolsFileName() const {
664  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symbolsFileName);
665 }
666 
668  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symIndexId);
669 }
670 
672  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetOffset);
673 }
674 
676  return PrivateGetDIAValue(Symbol,
677  &IDiaSymbol::get_targetRelativeVirtualAddress);
678 }
679 
681  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetVirtualAddress);
682 }
683 
685  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetSection);
686 }
687 
689  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_textureSlot);
690 }
691 
693  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_timeStamp);
694 }
695 
697  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_token);
698 }
699 
701  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_typeId);
702 }
703 
705  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_uavSlot);
706 }
707 
708 std::string DIARawSymbol::getUndecoratedName() const {
709  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_undecoratedName);
710 }
711 
713  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unmodifiedTypeId);
714 }
715 
717  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_upperBoundId);
718 }
719 
721  VARIANT Value;
722  Value.vt = VT_EMPTY;
723  if (S_OK != Symbol->get_value(&Value))
724  return Variant();
725 
726  return VariantFromVARIANT(Value);
727 }
728 
730  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseDispIndex);
731 }
732 
734  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseOffset);
735 }
736 
738  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualTableShapeId);
739 }
740 
741 std::unique_ptr<PDBSymbolTypeBuiltin>
743  CComPtr<IDiaSymbol> TableType;
744  if (FAILED(Symbol->get_virtualBaseTableType(&TableType)) || !TableType)
745  return nullptr;
746 
747  auto RawVT = llvm::make_unique<DIARawSymbol>(Session, TableType);
748  auto Pointer =
749  llvm::make_unique<PDBSymbolTypePointer>(Session, std::move(RawVT));
750  return unique_dyn_cast<PDBSymbolTypeBuiltin>(Pointer->getPointeeType());
751 }
752 
754  return PrivateGetDIAValue<DWORD, PDB_DataKind>(Symbol,
755  &IDiaSymbol::get_dataKind);
756 }
757 
759  return PrivateGetDIAValue<DWORD, PDB_SymType>(Symbol,
760  &IDiaSymbol::get_symTag);
761 }
762 
764  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_guid);
765 }
766 
767 int32_t DIARawSymbol::getOffset() const {
768  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offset);
769 }
770 
772  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_thisAdjust);
773 }
774 
776  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBasePointerOffset);
777 }
778 
780  return PrivateGetDIAValue<DWORD, PDB_LocType>(Symbol,
781  &IDiaSymbol::get_locationType);
782 }
783 
785  return PrivateGetDIAValue<DWORD, PDB_Machine>(Symbol,
786  &IDiaSymbol::get_machineType);
787 }
788 
790  return PrivateGetDIAValue<DWORD, codeview::ThunkOrdinal>(
791  Symbol, &IDiaSymbol::get_thunkOrdinal);
792 }
793 
794 uint64_t DIARawSymbol::getLength() const {
795  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_length);
796 }
797 
799  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_liveRangeLength);
800 }
801 
803  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualAddress);
804 }
805 
807  return PrivateGetDIAValue<DWORD, PDB_UdtType>(Symbol,
808  &IDiaSymbol::get_udtKind);
809 }
810 
812  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constructor);
813 }
814 
816  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_customCallingConvention);
817 }
818 
820  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_farReturn);
821 }
822 
823 bool DIARawSymbol::isCode() const {
824  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_code);
825 }
826 
828  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerGenerated);
829 }
830 
832  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constType);
833 }
834 
836  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_editAndContinueEnabled);
837 }
838 
840  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_function);
841 }
842 
844  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressTaken);
845 }
846 
848  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noStackOrdering);
849 }
850 
852  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAlloca);
853 }
854 
856  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAssignmentOperator);
857 }
858 
860  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCTypes);
861 }
862 
864  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasCastOperator);
865 }
866 
868  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasDebugInfo);
869 }
870 
871 bool DIARawSymbol::hasEH() const {
872  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEH);
873 }
874 
875 bool DIARawSymbol::hasEHa() const {
876  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEHa);
877 }
878 
880  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasInlAsm);
881 }
882 
884  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_inlSpec);
885 }
886 
888  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_interruptReturn);
889 }
890 
892  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_framePointerPresent);
893 }
894 
896  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasLongJump);
897 }
898 
900  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasManagedCode);
901 }
902 
904  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasNestedTypes);
905 }
906 
908  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noInline);
909 }
910 
912  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noReturn);
913 }
914 
916  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_optimizedCodeDebugInfo);
917 }
918 
920  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_overloadedOperator);
921 }
922 
923 bool DIARawSymbol::hasSEH() const {
924  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSEH);
925 }
926 
928  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSecurityChecks);
929 }
930 
932  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSetJump);
933 }
934 
936  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_strictGSCheck);
937 }
938 
940  return PrivateGetDIAValue(Symbol,
941  &IDiaSymbol::get_isAcceleratorGroupSharedLocal);
942 }
943 
945  return PrivateGetDIAValue(Symbol,
946  &IDiaSymbol::get_isAcceleratorPointerTagLiveRange);
947 }
948 
950  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAcceleratorStubFunction);
951 }
952 
954  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAggregated);
955 }
956 
958  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intro);
959 }
960 
962  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCVTCIL);
963 }
964 
966  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isConstructorVirtualBase);
967 }
968 
970  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCxxReturnUdt);
971 }
972 
974  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isDataAligned);
975 }
976 
978  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHLSLData);
979 }
980 
982  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHotpatchable);
983 }
984 
986  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_indirectVirtualBaseClass);
987 }
988 
990  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isInterfaceUdt);
991 }
992 
994  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intrinsic);
995 }
996 
997 bool DIARawSymbol::isLTCG() const {
998  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isLTCG);
999 }
1000 
1002  return PrivateGetDIAValue(Symbol,
1003  &IDiaSymbol::get_isLocationControlFlowDependent);
1004 }
1005 
1007  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMSILNetmodule);
1008 }
1009 
1011  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMatrixRowMajor);
1012 }
1013 
1015  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_managed);
1016 }
1017 
1019  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_msil);
1020 }
1021 
1023  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMultipleInheritance);
1024 }
1025 
1027  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isNaked);
1028 }
1029 
1031  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_nested);
1032 }
1033 
1035  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isOptimizedAway);
1036 }
1037 
1039  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_packed);
1040 }
1041 
1043  return PrivateGetDIAValue(Symbol,
1044  &IDiaSymbol::get_isPointerBasedOnSymbolValue);
1045 }
1046 
1048  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToDataMember);
1049 }
1050 
1052  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToMemberFunction);
1053 }
1054 
1056  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_pure);
1057 }
1058 
1060  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_RValueReference);
1061 }
1062 
1064  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isRefUdt);
1065 }
1066 
1068  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_reference);
1069 }
1070 
1072  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_restrictedType);
1073 }
1074 
1076  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isReturnValue);
1077 }
1078 
1080  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSafeBuffers);
1081 }
1082 
1084  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_scoped);
1085 }
1086 
1087 bool DIARawSymbol::isSdl() const {
1088  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSdl);
1089 }
1090 
1092  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSingleInheritance);
1093 }
1094 
1096  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSplitted);
1097 }
1098 
1100  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStatic);
1101 }
1102 
1104  // hasPrivateSymbols is the opposite of isStripped, but we expose
1105  // hasPrivateSymbols as a more intuitive interface.
1106  return !PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStripped);
1107 }
1108 
1110  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unalignedType);
1111 }
1112 
1114  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_notReached);
1115 }
1116 
1118  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isValueUdt);
1119 }
1120 
1122  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtual);
1123 }
1124 
1126  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseClass);
1127 }
1128 
1130  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isVirtualInheritance);
1131 }
1132 
1134  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_volatileType);
1135 }
1136 
1138  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_wasInlined);
1139 }
1140 
1141 std::string DIARawSymbol::getUnused() const {
1142  return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unused);
1143 }
bool hasAlloca() const override
bool hasInlineAttribute() const override
bool hasNoReturnAttribute() const override
uint32_t getOemSymbolId() const override
uint32_t getToken() const override
uint32_t getLiveRangeStartRelativeVirtualAddress() const override
bool hasInterruptReturn() const override
bool isRValueReference() const override
PDB_UdtType getUdtKind() const override
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
int32_t getOffset() const override
bool isStatic() const override
codeview::RegisterId getLocalBasePointerRegisterId() const override
uint32_t getNumberOfColumns() const override
uint32_t getTargetOffset() const override
LLVM_NODISCARD auto unique_dyn_cast(std::unique_ptr< Y > &Val) -> decltype(cast< X >(Val))
Definition: Casting.h:368
bool hasOptimizedCodeDebugInfo() const override
PDB_UdtType
These values correspond to the UdtKind enumeration, and are documented here: https://msdn.microsoft.com/en-us/library/wcstk66t.aspx.
Definition: PDBTypes.h:216
uint32_t getTextureSlot() const override
uint32_t getSubTypeId() const override
bool isNaked() const override
uint32_t getVirtualBaseDispIndex() const override
raw_ostream & indent(unsigned NumSpaces)
indent - Insert &#39;NumSpaces&#39; spaces.
PDB_NameSearchFlags
Defines flags used for enumerating child symbols.
Definition: PDBTypes.h:92
bool isValueUdt() const override
uint32_t getVirtualTableShapeId() const override
std::string getUnused() const override
bool isConstructorVirtualBase() const override
bool getNoStackOrdering() const override
bool isPureVirtual() const override
bool isSdl() const override
std::string getSymbolsFileName() const override
bool isFunction() const override
bool isReturnValue() const override
PDB_Machine getMachineType() const override
bool isRefUdt() const override
bool hasManagedCode() const override
bool isVirtual() const override
bool hasOverloadedOperator() const override
raw_ostream & operator<<(raw_ostream &OS, const PDB_VariantType &Value)
Definition: PDBExtras.cpp:26
bool hasCastOperator() const override
uint32_t getUnmodifiedTypeId() const override
uint32_t getStride() const override
uint32_t getUpperBoundId() const override
bool hasEHa() const override
bool isIntroVirtualFunction() const override
uint32_t getNumberOfRegisterIndices() const override
std::string getName() const override
codeview::ThunkOrdinal getThunkOrdinal() const override
void format(raw_ostream &Stream, StringRef Style) override
Definition: Formatters.cpp:27
This represents the &#39;GUID&#39; type from windows.h.
Definition: GUID.h:22
bool isScoped() const override
std::string getUndecoratedNameEx(PDB_UndnameFlags Flags) const override
bool isCxxReturnUdt() const override
bool isVolatileType() const override
uint32_t getNumberOfAcceleratorPointerTags() const override
PDB_SymType getSymTag() const override
uint32_t getArrayIndexTypeId() const override
bool isNested() const override
bool isMSILNetmodule() const override
bool isPointerToMemberFunction() const override
uint64_t getLength() const override
bool isOptimizedAway() const override
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory)...
Definition: APInt.h:33
bool isIndirectVirtualBaseClass() const override
uint32_t getTimeStamp() const override
bool isIntrinsic() const override
PDB_UndnameFlags
These values correspond to the flags that can be combined to control the return of an undecorated nam...
Definition: PDBTypes.h:252
bool convertUTF8ToUTF16String(StringRef SrcUTF8, SmallVectorImpl< UTF16 > &DstUTF16)
Converts a UTF-8 string into a UTF-16 string with native endianness.
void getFrontEndVersion(VersionInfo &Version) const override
PDB_BuiltinType getBuiltinType() const override
bool hasCustomCallingConvention() const override
uint32_t getLiveRangeStartAddressOffset() const override
bool isLocationControlFlowDependent() const override
bool isAcceleratorPointerTagLiveRange() const override
bool isRestrictedType() const override
bool hasCTypes() const override
PDB_SymType
These values correspond to the SymTagEnum enumeration, and are documented here: https://msdn.microsoft.com/en-us/library/bkedss5f.aspx.
Definition: PDBTypes.h:162
uint32_t getRank() const override
PDB_MemberAccess getAccess() const override
uint32_t UInt32
Definition: PDBTypes.h:324
bool getAddressTaken() const override
uint32_t getTargetSection() const override
uint32_t getRegisterType() const override
bool isAcceleratorGroupSharedLocal() const override
bool isEditAndContinueEnabled() const override
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
PDB_DataKind
These values correspond to the DataKind enumeration, and are documented here: https://msdn.microsoft.com/en-us/library/b2x2t313.aspx.
Definition: PDBTypes.h:147
void getDataBytes(llvm::SmallVector< uint8_t, 32 > &bytes) const override
bool isPointerBasedOnSymbolValue() const override
uint32_t getSymIndexId() const override
uint32_t getOffsetInUdt() const override
bool isAcceleratorStubFunction() const override
bool isDataAligned() const override
uint64_t getTargetVirtualAddress() const override
bool hasNestedTypes() const override
codeview::GUID getGuid() const override
bool isVirtualBaseClass() const override
bool hasEH() const override
uint32_t getLexicalParentId() const override
bool wasInlined() const override
bool isAggregated() const override
bool isMSILCode() const override
uint32_t getSizeInUdt() const override
PDB_LocType
These values correspond to the LocationType enumeration, and are documented here: https://msdn...
Definition: PDBTypes.h:199
uint32_t getTargetRelativeVirtualAddress() const override
uint64_t UInt64
Definition: PDBTypes.h:325
bool isPacked() const override
PDB_CallingConv getCallingConvention() const override
std::string getCompilerName() const override
uint64_t getLiveRangeLength() const override
bool isConstType() const override
bool isCode() const override
uint32_t getSignature() const override
SourceLanguage
These values correspond to the CV_CFL_LANG enumeration, and are documented here: https://msdn.microsoft.com/en-us/library/bw3aekw6.aspx.
Definition: CodeView.h:144
bool hasSEH() const override
std::unique_ptr< IPDBEnumSymbols > findInlineFramesByRVA(uint32_t RVA) const override
This is a &#39;vector&#39; (really, a variable-sized array), optimized for the case when the array is small...
Definition: SmallVector.h:864
bool isCVTCIL() const override
int32_t getVirtualBasePointerOffset() const override
bool isManagedCode() const override
bool hasPrivateSymbols() const override
bool isSafeBuffers() const override
CPUType
These values correspond to the CV_CPU_TYPE_e enumeration, and are documented here: https://msdn...
Definition: CodeView.h:79
int32_t getThisAdjust() const override
std::string getLibraryName() const override
const DataFlowGraph & G
Definition: RDFGraph.cpp:211
codeview::RegisterId getRegisterId() const override
bool isMatrixRowMajor() const override
bool isHLSLData() const override
uint32_t getSlot() const override
uint32_t getLowerBoundId() const override
bool hasLongJump() const override
bool hasAssignmentOperator() const override
uint32_t getVirtualBaseOffset() const override
DIARawSymbol(const DIASession &PDBSession, CComPtr< IDiaSymbol > DiaSymbol)
std::string getSourceFileName() const override
uint32_t getBaseDataOffset() const override
bool convertUTF16ToUTF8String(ArrayRef< char > SrcBytes, std::string &Out)
Converts a stream of raw bytes assumed to be UTF16 into a UTF8 std::string.
bool hasSetJump() const override
bool isVirtualInheritance() const override
bool isUnreached() const override
bool isPointerToDataMember() const override
uint32_t getNumberOfModifiers() const override
PDB_LocType getLocationType() const override
bool hasStrictGSCheck() const override
pointer data()
Return a pointer to the vector&#39;s buffer, even if empty().
Definition: SmallVector.h:143
bool hasSecurityChecks() const override
void getBackEndVersion(VersionInfo &Version) const override
bool hasFramePointer() const override
#define RAW_METHOD_DUMP(Stream, Method)
uint32_t getNumberOfRows() const override
std::string getUndecoratedName() const override
uint32_t getAddressSection() const override
uint32_t getAge() const override
PDB_Cpu getPlatform() const override
uint16_t UInt16
Definition: PDBTypes.h:323
union llvm::pdb::Variant::@187 Value
uint32_t getOemId() const override
bool isHotpatchable() const override
bool isMultipleInheritance() const override
ThunkOrdinal
These values correspond to the THUNK_ORDINAL enumeration.
Definition: CodeView.h:514
PDB_BuiltinType
These values correspond to the Basictype enumeration, and are documented here: https://msdn.microsoft.com/en-us/library/4szdtzc3.aspx.
Definition: PDBTypes.h:228
std::unique_ptr< IPDBEnumSymbols > findChildren(PDB_SymType Type) const override
bool hasNoInlineAttribute() const override
bool isLTCG() const override
uint32_t getCount() const override
LLVM Value Representation.
Definition: Value.h:73
bool isSplitted() const override
uint64_t getVirtualAddress() const override
std::unique_ptr< IPDBEnumSymbols > findChildrenByRVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags, uint32_t RVA) const override
CallingConvention
These values correspond to the CV_call_e enumeration, and are documented at the following locations: ...
Definition: CodeView.h:173
uint32_t getMemorySpaceKind() const override
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:44
bool isCompilerGenerated() const override
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
Variant getValue() const override
bool isSingleInheritance() const override
uint32_t getLiveRangeStartAddressSection() const override
PDB_Lang getLanguage() const override
void dump(raw_ostream &OS, int Indent) const override
PDB_VariantType Type
Definition: PDBTypes.h:313
std::string getObjectFileName() const override
bool isInterfaceUdt() const override
bool isReference() const override
PDB_DataKind getDataKind() const override
bool hasInlAsm() const override
uint32_t getClassParentId() const override
uint32_t getAddressOffset() const override
uint32_t getUavSlot() const override
uint32_t getBitPosition() const override
uint32_t getBaseDataSlot() const override
const uint64_t Version
Definition: InstrProf.h:867
bool hasConstructor() const override
bool isUnalignedType() const override
uint32_t getCountLiveRanges() const override
uint32_t getSamplerSlot() const override
std::unique_ptr< PDBSymbolTypeBuiltin > getVirtualBaseTableType() const override
bool hasDebugInfo() const override
bool hasFarReturn() const override
uint32_t getTypeId() const override
uint32_t getRelativeVirtualAddress() const override
uint32_t getBaseSymbolId() const override
PDB_MemberAccess
Definition: PDBTypes.h:275
void resize(size_type N)
Definition: SmallVector.h:355