DIARawSymbol.cpp 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095
  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. #include "llvm/ADT/STLExtras.h"
  10. #include "llvm/DebugInfo/PDB/DIA/DIAEnumSymbols.h"
  11. #include "llvm/DebugInfo/PDB/DIA/DIARawSymbol.h"
  12. #include "llvm/DebugInfo/PDB/DIA/DIASession.h"
  13. #include "llvm/DebugInfo/PDB/PDBExtras.h"
  14. #include "llvm/Support/ConvertUTF.h"
  15. #include "llvm/Support/raw_ostream.h"
  16. using namespace llvm;
  17. namespace {
  18. Variant VariantFromVARIANT(const VARIANT &V) {
  19. Variant Result;
  20. switch (V.vt) {
  21. case VT_I1:
  22. Result.Int8 = V.cVal;
  23. Result.Type = PDB_VariantType::Int8;
  24. break;
  25. case VT_I2:
  26. Result.Int16 = V.iVal;
  27. Result.Type = PDB_VariantType::Int16;
  28. break;
  29. case VT_I4:
  30. Result.Int32 = V.intVal;
  31. Result.Type = PDB_VariantType::Int32;
  32. break;
  33. case VT_I8:
  34. Result.Int64 = V.llVal;
  35. Result.Type = PDB_VariantType::Int64;
  36. break;
  37. case VT_UI1:
  38. Result.UInt8 = V.bVal;
  39. Result.Type = PDB_VariantType::UInt8;
  40. break;
  41. case VT_UI2:
  42. Result.UInt16 = V.uiVal;
  43. Result.Type = PDB_VariantType::UInt16;
  44. break;
  45. case VT_UI4:
  46. Result.UInt32 = V.uintVal;
  47. Result.Type = PDB_VariantType::UInt32;
  48. break;
  49. case VT_UI8:
  50. Result.UInt64 = V.ullVal;
  51. Result.Type = PDB_VariantType::UInt64;
  52. break;
  53. case VT_BOOL:
  54. Result.Bool = (V.boolVal == VARIANT_TRUE) ? true : false;
  55. Result.Type = PDB_VariantType::Bool;
  56. break;
  57. case VT_R4:
  58. Result.Single = V.fltVal;
  59. Result.Type = PDB_VariantType::Single;
  60. break;
  61. case VT_R8:
  62. Result.Double = V.dblVal;
  63. Result.Type = PDB_VariantType::Double;
  64. break;
  65. default:
  66. Result.Type = PDB_VariantType::Unknown;
  67. break;
  68. }
  69. return Result;
  70. }
  71. template <typename ArgType>
  72. ArgType PrivateGetDIAValue(IDiaSymbol *Symbol,
  73. HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
  74. ArgType Value;
  75. if (S_OK == (Symbol->*Method)(&Value))
  76. return static_cast<ArgType>(Value);
  77. return ArgType();
  78. }
  79. template <typename ArgType, typename RetType>
  80. RetType PrivateGetDIAValue(IDiaSymbol *Symbol,
  81. HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
  82. ArgType Value;
  83. if (S_OK == (Symbol->*Method)(&Value))
  84. return static_cast<RetType>(Value);
  85. return RetType();
  86. }
  87. std::string
  88. PrivateGetDIAValue(IDiaSymbol *Symbol,
  89. HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
  90. CComBSTR Result16;
  91. if (S_OK != (Symbol->*Method)(&Result16))
  92. return std::string();
  93. const char *SrcBytes = reinterpret_cast<const char *>(Result16.m_str);
  94. llvm::ArrayRef<char> SrcByteArray(SrcBytes, Result16.ByteLength());
  95. std::string Result8;
  96. if (!llvm::convertUTF16ToUTF8String(SrcByteArray, Result8))
  97. return std::string();
  98. return Result8;
  99. }
  100. PDB_UniqueId
  101. PrivateGetDIAValue(IDiaSymbol *Symbol,
  102. HRESULT (__stdcall IDiaSymbol::*Method)(GUID *)) {
  103. GUID Result;
  104. if (S_OK != (Symbol->*Method)(&Result))
  105. return PDB_UniqueId();
  106. static_assert(sizeof(PDB_UniqueId) == sizeof(GUID),
  107. "PDB_UniqueId is the wrong size!");
  108. PDB_UniqueId IdResult;
  109. ::memcpy(&IdResult, &Result, sizeof(GUID));
  110. return IdResult;
  111. }
  112. template <typename ArgType>
  113. void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
  114. IDiaSymbol *Symbol,
  115. HRESULT (__stdcall IDiaSymbol::*Method)(ArgType *)) {
  116. ArgType Value;
  117. if (S_OK == (Symbol->*Method)(&Value)) {
  118. OS << "\n";
  119. OS.indent(Indent);
  120. OS << Name << ": " << Value;
  121. }
  122. }
  123. void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
  124. IDiaSymbol *Symbol,
  125. HRESULT (__stdcall IDiaSymbol::*Method)(BSTR *)) {
  126. BSTR Value = nullptr;
  127. if (S_OK != (Symbol->*Method)(&Value))
  128. return;
  129. const char *Bytes = reinterpret_cast<const char *>(Value);
  130. ArrayRef<char> ByteArray(Bytes, ::SysStringByteLen(Value));
  131. std::string Result;
  132. if (llvm::convertUTF16ToUTF8String(ByteArray, Result)) {
  133. OS << "\n";
  134. OS.indent(Indent);
  135. OS << Name << ": " << Result;
  136. }
  137. ::SysFreeString(Value);
  138. }
  139. void DumpDIAValue(llvm::raw_ostream &OS, int Indent, StringRef Name,
  140. IDiaSymbol *Symbol,
  141. HRESULT (__stdcall IDiaSymbol::*Method)(VARIANT *)) {
  142. VARIANT Value;
  143. Value.vt = VT_EMPTY;
  144. if (S_OK != (Symbol->*Method)(&Value))
  145. return;
  146. OS << "\n";
  147. OS.indent(Indent);
  148. Variant V = VariantFromVARIANT(Value);
  149. OS << V;
  150. }
  151. }
  152. namespace llvm {
  153. raw_ostream &operator<<(raw_ostream &OS, const GUID &Guid) {
  154. const PDB_UniqueId *Id = reinterpret_cast<const PDB_UniqueId *>(&Guid);
  155. OS << *Id;
  156. return OS;
  157. }
  158. }
  159. DIARawSymbol::DIARawSymbol(const DIASession &PDBSession,
  160. CComPtr<IDiaSymbol> DiaSymbol)
  161. : Session(PDBSession), Symbol(DiaSymbol) {}
  162. #define RAW_METHOD_DUMP(Stream, Method) \
  163. DumpDIAValue(Stream, Indent, StringRef(#Method), Symbol, &IDiaSymbol::Method);
  164. void DIARawSymbol::dump(raw_ostream &OS, int Indent) const {
  165. RAW_METHOD_DUMP(OS, get_access)
  166. RAW_METHOD_DUMP(OS, get_addressOffset)
  167. RAW_METHOD_DUMP(OS, get_addressSection)
  168. RAW_METHOD_DUMP(OS, get_age)
  169. RAW_METHOD_DUMP(OS, get_arrayIndexTypeId)
  170. RAW_METHOD_DUMP(OS, get_backEndMajor)
  171. RAW_METHOD_DUMP(OS, get_backEndMinor)
  172. RAW_METHOD_DUMP(OS, get_backEndBuild)
  173. RAW_METHOD_DUMP(OS, get_backEndQFE)
  174. RAW_METHOD_DUMP(OS, get_baseDataOffset)
  175. RAW_METHOD_DUMP(OS, get_baseDataSlot)
  176. RAW_METHOD_DUMP(OS, get_baseSymbolId)
  177. RAW_METHOD_DUMP(OS, get_baseType)
  178. RAW_METHOD_DUMP(OS, get_bitPosition)
  179. RAW_METHOD_DUMP(OS, get_callingConvention)
  180. RAW_METHOD_DUMP(OS, get_classParentId)
  181. RAW_METHOD_DUMP(OS, get_compilerName)
  182. RAW_METHOD_DUMP(OS, get_count)
  183. RAW_METHOD_DUMP(OS, get_countLiveRanges)
  184. RAW_METHOD_DUMP(OS, get_frontEndMajor)
  185. RAW_METHOD_DUMP(OS, get_frontEndMinor)
  186. RAW_METHOD_DUMP(OS, get_frontEndBuild)
  187. RAW_METHOD_DUMP(OS, get_frontEndQFE)
  188. RAW_METHOD_DUMP(OS, get_lexicalParentId)
  189. RAW_METHOD_DUMP(OS, get_libraryName)
  190. RAW_METHOD_DUMP(OS, get_liveRangeStartAddressOffset)
  191. RAW_METHOD_DUMP(OS, get_liveRangeStartAddressSection)
  192. RAW_METHOD_DUMP(OS, get_liveRangeStartRelativeVirtualAddress)
  193. RAW_METHOD_DUMP(OS, get_localBasePointerRegisterId)
  194. RAW_METHOD_DUMP(OS, get_lowerBoundId)
  195. RAW_METHOD_DUMP(OS, get_memorySpaceKind)
  196. RAW_METHOD_DUMP(OS, get_name)
  197. RAW_METHOD_DUMP(OS, get_numberOfAcceleratorPointerTags)
  198. RAW_METHOD_DUMP(OS, get_numberOfColumns)
  199. RAW_METHOD_DUMP(OS, get_numberOfModifiers)
  200. RAW_METHOD_DUMP(OS, get_numberOfRegisterIndices)
  201. RAW_METHOD_DUMP(OS, get_numberOfRows)
  202. RAW_METHOD_DUMP(OS, get_objectFileName)
  203. RAW_METHOD_DUMP(OS, get_oemId)
  204. RAW_METHOD_DUMP(OS, get_oemSymbolId)
  205. RAW_METHOD_DUMP(OS, get_offsetInUdt)
  206. RAW_METHOD_DUMP(OS, get_platform)
  207. RAW_METHOD_DUMP(OS, get_rank)
  208. RAW_METHOD_DUMP(OS, get_registerId)
  209. RAW_METHOD_DUMP(OS, get_registerType)
  210. RAW_METHOD_DUMP(OS, get_relativeVirtualAddress)
  211. RAW_METHOD_DUMP(OS, get_samplerSlot)
  212. RAW_METHOD_DUMP(OS, get_signature)
  213. RAW_METHOD_DUMP(OS, get_sizeInUdt)
  214. RAW_METHOD_DUMP(OS, get_slot)
  215. RAW_METHOD_DUMP(OS, get_sourceFileName)
  216. RAW_METHOD_DUMP(OS, get_stride)
  217. RAW_METHOD_DUMP(OS, get_subTypeId)
  218. RAW_METHOD_DUMP(OS, get_symbolsFileName)
  219. RAW_METHOD_DUMP(OS, get_symIndexId)
  220. RAW_METHOD_DUMP(OS, get_targetOffset)
  221. RAW_METHOD_DUMP(OS, get_targetRelativeVirtualAddress)
  222. RAW_METHOD_DUMP(OS, get_targetVirtualAddress)
  223. RAW_METHOD_DUMP(OS, get_targetSection)
  224. RAW_METHOD_DUMP(OS, get_textureSlot)
  225. RAW_METHOD_DUMP(OS, get_timeStamp)
  226. RAW_METHOD_DUMP(OS, get_token)
  227. RAW_METHOD_DUMP(OS, get_typeId)
  228. RAW_METHOD_DUMP(OS, get_uavSlot)
  229. RAW_METHOD_DUMP(OS, get_undecoratedName)
  230. RAW_METHOD_DUMP(OS, get_unmodifiedTypeId)
  231. RAW_METHOD_DUMP(OS, get_upperBoundId)
  232. RAW_METHOD_DUMP(OS, get_virtualBaseDispIndex)
  233. RAW_METHOD_DUMP(OS, get_virtualBaseOffset)
  234. RAW_METHOD_DUMP(OS, get_virtualTableShapeId)
  235. RAW_METHOD_DUMP(OS, get_dataKind)
  236. RAW_METHOD_DUMP(OS, get_symTag)
  237. RAW_METHOD_DUMP(OS, get_guid)
  238. RAW_METHOD_DUMP(OS, get_offset)
  239. RAW_METHOD_DUMP(OS, get_thisAdjust)
  240. RAW_METHOD_DUMP(OS, get_virtualBasePointerOffset)
  241. RAW_METHOD_DUMP(OS, get_locationType)
  242. RAW_METHOD_DUMP(OS, get_machineType)
  243. RAW_METHOD_DUMP(OS, get_thunkOrdinal)
  244. RAW_METHOD_DUMP(OS, get_length)
  245. RAW_METHOD_DUMP(OS, get_liveRangeLength)
  246. RAW_METHOD_DUMP(OS, get_virtualAddress)
  247. RAW_METHOD_DUMP(OS, get_udtKind)
  248. RAW_METHOD_DUMP(OS, get_constructor)
  249. RAW_METHOD_DUMP(OS, get_customCallingConvention)
  250. RAW_METHOD_DUMP(OS, get_farReturn)
  251. RAW_METHOD_DUMP(OS, get_code)
  252. RAW_METHOD_DUMP(OS, get_compilerGenerated)
  253. RAW_METHOD_DUMP(OS, get_constType)
  254. RAW_METHOD_DUMP(OS, get_editAndContinueEnabled)
  255. RAW_METHOD_DUMP(OS, get_function)
  256. RAW_METHOD_DUMP(OS, get_stride)
  257. RAW_METHOD_DUMP(OS, get_noStackOrdering)
  258. RAW_METHOD_DUMP(OS, get_hasAlloca)
  259. RAW_METHOD_DUMP(OS, get_hasAssignmentOperator)
  260. RAW_METHOD_DUMP(OS, get_isCTypes)
  261. RAW_METHOD_DUMP(OS, get_hasCastOperator)
  262. RAW_METHOD_DUMP(OS, get_hasDebugInfo)
  263. RAW_METHOD_DUMP(OS, get_hasEH)
  264. RAW_METHOD_DUMP(OS, get_hasEHa)
  265. RAW_METHOD_DUMP(OS, get_hasInlAsm)
  266. RAW_METHOD_DUMP(OS, get_framePointerPresent)
  267. RAW_METHOD_DUMP(OS, get_inlSpec)
  268. RAW_METHOD_DUMP(OS, get_interruptReturn)
  269. RAW_METHOD_DUMP(OS, get_hasLongJump)
  270. RAW_METHOD_DUMP(OS, get_hasManagedCode)
  271. RAW_METHOD_DUMP(OS, get_hasNestedTypes)
  272. RAW_METHOD_DUMP(OS, get_noInline)
  273. RAW_METHOD_DUMP(OS, get_noReturn)
  274. RAW_METHOD_DUMP(OS, get_optimizedCodeDebugInfo)
  275. RAW_METHOD_DUMP(OS, get_overloadedOperator)
  276. RAW_METHOD_DUMP(OS, get_hasSEH)
  277. RAW_METHOD_DUMP(OS, get_hasSecurityChecks)
  278. RAW_METHOD_DUMP(OS, get_hasSetJump)
  279. RAW_METHOD_DUMP(OS, get_strictGSCheck)
  280. RAW_METHOD_DUMP(OS, get_isAcceleratorGroupSharedLocal)
  281. RAW_METHOD_DUMP(OS, get_isAcceleratorPointerTagLiveRange)
  282. RAW_METHOD_DUMP(OS, get_isAcceleratorStubFunction)
  283. RAW_METHOD_DUMP(OS, get_isAggregated)
  284. RAW_METHOD_DUMP(OS, get_intro)
  285. RAW_METHOD_DUMP(OS, get_isCVTCIL)
  286. RAW_METHOD_DUMP(OS, get_isConstructorVirtualBase)
  287. RAW_METHOD_DUMP(OS, get_isCxxReturnUdt)
  288. RAW_METHOD_DUMP(OS, get_isDataAligned)
  289. RAW_METHOD_DUMP(OS, get_isHLSLData)
  290. RAW_METHOD_DUMP(OS, get_isHotpatchable)
  291. RAW_METHOD_DUMP(OS, get_indirectVirtualBaseClass)
  292. RAW_METHOD_DUMP(OS, get_isInterfaceUdt)
  293. RAW_METHOD_DUMP(OS, get_intrinsic)
  294. RAW_METHOD_DUMP(OS, get_isLTCG)
  295. RAW_METHOD_DUMP(OS, get_isLocationControlFlowDependent)
  296. RAW_METHOD_DUMP(OS, get_isMSILNetmodule)
  297. RAW_METHOD_DUMP(OS, get_isMatrixRowMajor)
  298. RAW_METHOD_DUMP(OS, get_managed)
  299. RAW_METHOD_DUMP(OS, get_msil)
  300. RAW_METHOD_DUMP(OS, get_isMultipleInheritance)
  301. RAW_METHOD_DUMP(OS, get_isNaked)
  302. RAW_METHOD_DUMP(OS, get_nested)
  303. RAW_METHOD_DUMP(OS, get_isOptimizedAway)
  304. RAW_METHOD_DUMP(OS, get_packed)
  305. RAW_METHOD_DUMP(OS, get_isPointerBasedOnSymbolValue)
  306. RAW_METHOD_DUMP(OS, get_isPointerToDataMember)
  307. RAW_METHOD_DUMP(OS, get_isPointerToMemberFunction)
  308. RAW_METHOD_DUMP(OS, get_pure)
  309. RAW_METHOD_DUMP(OS, get_RValueReference)
  310. RAW_METHOD_DUMP(OS, get_isRefUdt)
  311. RAW_METHOD_DUMP(OS, get_reference)
  312. RAW_METHOD_DUMP(OS, get_restrictedType)
  313. RAW_METHOD_DUMP(OS, get_isReturnValue)
  314. RAW_METHOD_DUMP(OS, get_isSafeBuffers)
  315. RAW_METHOD_DUMP(OS, get_scoped)
  316. RAW_METHOD_DUMP(OS, get_isSdl)
  317. RAW_METHOD_DUMP(OS, get_isSingleInheritance)
  318. RAW_METHOD_DUMP(OS, get_isSplitted)
  319. RAW_METHOD_DUMP(OS, get_isStatic)
  320. RAW_METHOD_DUMP(OS, get_isStripped)
  321. RAW_METHOD_DUMP(OS, get_unalignedType)
  322. RAW_METHOD_DUMP(OS, get_notReached)
  323. RAW_METHOD_DUMP(OS, get_isValueUdt)
  324. RAW_METHOD_DUMP(OS, get_virtual)
  325. RAW_METHOD_DUMP(OS, get_virtualBaseClass)
  326. RAW_METHOD_DUMP(OS, get_isVirtualInheritance)
  327. RAW_METHOD_DUMP(OS, get_volatileType)
  328. RAW_METHOD_DUMP(OS, get_wasInlined)
  329. RAW_METHOD_DUMP(OS, get_unused)
  330. RAW_METHOD_DUMP(OS, get_value)
  331. }
  332. std::unique_ptr<IPDBEnumSymbols>
  333. DIARawSymbol::findChildren(PDB_SymType Type) const {
  334. enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
  335. CComPtr<IDiaEnumSymbols> DiaEnumerator;
  336. if (S_OK != Symbol->findChildrenEx(EnumVal, nullptr, nsNone, &DiaEnumerator))
  337. return nullptr;
  338. return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
  339. }
  340. std::unique_ptr<IPDBEnumSymbols>
  341. DIARawSymbol::findChildren(PDB_SymType Type, StringRef Name,
  342. PDB_NameSearchFlags Flags) const {
  343. llvm::SmallVector<UTF16, 32> Name16;
  344. llvm::convertUTF8ToUTF16String(Name, Name16);
  345. enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
  346. DWORD CompareFlags = static_cast<DWORD>(Flags);
  347. wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
  348. CComPtr<IDiaEnumSymbols> DiaEnumerator;
  349. if (S_OK !=
  350. Symbol->findChildrenEx(EnumVal, Name16Str, CompareFlags, &DiaEnumerator))
  351. return nullptr;
  352. return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
  353. }
  354. std::unique_ptr<IPDBEnumSymbols>
  355. DIARawSymbol::findChildrenByRVA(PDB_SymType Type, StringRef Name,
  356. PDB_NameSearchFlags Flags, uint32_t RVA) const {
  357. llvm::SmallVector<UTF16, 32> Name16;
  358. llvm::convertUTF8ToUTF16String(Name, Name16);
  359. enum SymTagEnum EnumVal = static_cast<enum SymTagEnum>(Type);
  360. DWORD CompareFlags = static_cast<DWORD>(Flags);
  361. wchar_t *Name16Str = reinterpret_cast<wchar_t *>(Name16.data());
  362. CComPtr<IDiaEnumSymbols> DiaEnumerator;
  363. if (S_OK !=
  364. Symbol->findChildrenExByRVA(EnumVal, Name16Str, CompareFlags, RVA,
  365. &DiaEnumerator))
  366. return nullptr;
  367. return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
  368. }
  369. std::unique_ptr<IPDBEnumSymbols>
  370. DIARawSymbol::findInlineFramesByRVA(uint32_t RVA) const {
  371. CComPtr<IDiaEnumSymbols> DiaEnumerator;
  372. if (S_OK != Symbol->findInlineFramesByRVA(RVA, &DiaEnumerator))
  373. return nullptr;
  374. return llvm::make_unique<DIAEnumSymbols>(Session, DiaEnumerator);
  375. }
  376. void DIARawSymbol::getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const {
  377. bytes.clear();
  378. DWORD DataSize = 0;
  379. Symbol->get_dataBytes(0, &DataSize, nullptr);
  380. if (DataSize == 0)
  381. return;
  382. bytes.resize(DataSize);
  383. Symbol->get_dataBytes(DataSize, &DataSize, bytes.data());
  384. }
  385. PDB_MemberAccess DIARawSymbol::getAccess() const {
  386. return PrivateGetDIAValue<DWORD, PDB_MemberAccess>(Symbol,
  387. &IDiaSymbol::get_access);
  388. }
  389. uint32_t DIARawSymbol::getAddressOffset() const {
  390. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressOffset);
  391. }
  392. uint32_t DIARawSymbol::getAddressSection() const {
  393. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressSection);
  394. }
  395. uint32_t DIARawSymbol::getAge() const {
  396. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_age);
  397. }
  398. uint32_t DIARawSymbol::getArrayIndexTypeId() const {
  399. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_arrayIndexTypeId);
  400. }
  401. void DIARawSymbol::getBackEndVersion(VersionInfo &Version) const {
  402. Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMajor);
  403. Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndMinor);
  404. Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndBuild);
  405. Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_backEndQFE);
  406. }
  407. uint32_t DIARawSymbol::getBaseDataOffset() const {
  408. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataOffset);
  409. }
  410. uint32_t DIARawSymbol::getBaseDataSlot() const {
  411. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseDataSlot);
  412. }
  413. uint32_t DIARawSymbol::getBaseSymbolId() const {
  414. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_baseSymbolId);
  415. }
  416. PDB_BuiltinType DIARawSymbol::getBuiltinType() const {
  417. return PrivateGetDIAValue<DWORD, PDB_BuiltinType>(Symbol,
  418. &IDiaSymbol::get_baseType);
  419. }
  420. uint32_t DIARawSymbol::getBitPosition() const {
  421. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_bitPosition);
  422. }
  423. PDB_CallingConv DIARawSymbol::getCallingConvention() const {
  424. return PrivateGetDIAValue<DWORD, PDB_CallingConv>(
  425. Symbol, &IDiaSymbol::get_callingConvention);
  426. }
  427. uint32_t DIARawSymbol::getClassParentId() const {
  428. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_classParentId);
  429. }
  430. std::string DIARawSymbol::getCompilerName() const {
  431. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerName);
  432. }
  433. uint32_t DIARawSymbol::getCount() const {
  434. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_count);
  435. }
  436. uint32_t DIARawSymbol::getCountLiveRanges() const {
  437. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_countLiveRanges);
  438. }
  439. void DIARawSymbol::getFrontEndVersion(VersionInfo &Version) const {
  440. Version.Major = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMajor);
  441. Version.Minor = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndMinor);
  442. Version.Build = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndBuild);
  443. Version.QFE = PrivateGetDIAValue(Symbol, &IDiaSymbol::get_frontEndQFE);
  444. }
  445. PDB_Lang DIARawSymbol::getLanguage() const {
  446. return PrivateGetDIAValue<DWORD, PDB_Lang>(Symbol, &IDiaSymbol::get_language);
  447. }
  448. uint32_t DIARawSymbol::getLexicalParentId() const {
  449. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lexicalParentId);
  450. }
  451. std::string DIARawSymbol::getLibraryName() const {
  452. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_libraryName);
  453. }
  454. uint32_t DIARawSymbol::getLiveRangeStartAddressOffset() const {
  455. return PrivateGetDIAValue(Symbol,
  456. &IDiaSymbol::get_liveRangeStartAddressOffset);
  457. }
  458. uint32_t DIARawSymbol::getLiveRangeStartAddressSection() const {
  459. return PrivateGetDIAValue(Symbol,
  460. &IDiaSymbol::get_liveRangeStartAddressSection);
  461. }
  462. uint32_t DIARawSymbol::getLiveRangeStartRelativeVirtualAddress() const {
  463. return PrivateGetDIAValue(
  464. Symbol, &IDiaSymbol::get_liveRangeStartRelativeVirtualAddress);
  465. }
  466. PDB_RegisterId DIARawSymbol::getLocalBasePointerRegisterId() const {
  467. return PrivateGetDIAValue<DWORD, PDB_RegisterId>(
  468. Symbol, &IDiaSymbol::get_localBasePointerRegisterId);
  469. }
  470. uint32_t DIARawSymbol::getLowerBoundId() const {
  471. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_lowerBoundId);
  472. }
  473. uint32_t DIARawSymbol::getMemorySpaceKind() const {
  474. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_memorySpaceKind);
  475. }
  476. std::string DIARawSymbol::getName() const {
  477. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_name);
  478. }
  479. uint32_t DIARawSymbol::getNumberOfAcceleratorPointerTags() const {
  480. return PrivateGetDIAValue(Symbol,
  481. &IDiaSymbol::get_numberOfAcceleratorPointerTags);
  482. }
  483. uint32_t DIARawSymbol::getNumberOfColumns() const {
  484. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfColumns);
  485. }
  486. uint32_t DIARawSymbol::getNumberOfModifiers() const {
  487. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfModifiers);
  488. }
  489. uint32_t DIARawSymbol::getNumberOfRegisterIndices() const {
  490. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRegisterIndices);
  491. }
  492. uint32_t DIARawSymbol::getNumberOfRows() const {
  493. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_numberOfRows);
  494. }
  495. std::string DIARawSymbol::getObjectFileName() const {
  496. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_objectFileName);
  497. }
  498. uint32_t DIARawSymbol::getOemId() const {
  499. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemId);
  500. }
  501. uint32_t DIARawSymbol::getOemSymbolId() const {
  502. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_oemSymbolId);
  503. }
  504. uint32_t DIARawSymbol::getOffsetInUdt() const {
  505. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offsetInUdt);
  506. }
  507. PDB_Cpu DIARawSymbol::getPlatform() const {
  508. return PrivateGetDIAValue<DWORD, PDB_Cpu>(Symbol, &IDiaSymbol::get_platform);
  509. }
  510. uint32_t DIARawSymbol::getRank() const {
  511. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_rank);
  512. }
  513. PDB_RegisterId DIARawSymbol::getRegisterId() const {
  514. return PrivateGetDIAValue<DWORD, PDB_RegisterId>(Symbol,
  515. &IDiaSymbol::get_registerId);
  516. }
  517. uint32_t DIARawSymbol::getRegisterType() const {
  518. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_registerType);
  519. }
  520. uint32_t DIARawSymbol::getRelativeVirtualAddress() const {
  521. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_relativeVirtualAddress);
  522. }
  523. uint32_t DIARawSymbol::getSamplerSlot() const {
  524. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_samplerSlot);
  525. }
  526. uint32_t DIARawSymbol::getSignature() const {
  527. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_signature);
  528. }
  529. uint32_t DIARawSymbol::getSizeInUdt() const {
  530. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sizeInUdt);
  531. }
  532. uint32_t DIARawSymbol::getSlot() const {
  533. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_slot);
  534. }
  535. std::string DIARawSymbol::getSourceFileName() const {
  536. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_sourceFileName);
  537. }
  538. uint32_t DIARawSymbol::getStride() const {
  539. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_stride);
  540. }
  541. uint32_t DIARawSymbol::getSubTypeId() const {
  542. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_subTypeId);
  543. }
  544. std::string DIARawSymbol::getSymbolsFileName() const {
  545. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symbolsFileName);
  546. }
  547. uint32_t DIARawSymbol::getSymIndexId() const {
  548. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_symIndexId);
  549. }
  550. uint32_t DIARawSymbol::getTargetOffset() const {
  551. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetOffset);
  552. }
  553. uint32_t DIARawSymbol::getTargetRelativeVirtualAddress() const {
  554. return PrivateGetDIAValue(Symbol,
  555. &IDiaSymbol::get_targetRelativeVirtualAddress);
  556. }
  557. uint64_t DIARawSymbol::getTargetVirtualAddress() const {
  558. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetVirtualAddress);
  559. }
  560. uint32_t DIARawSymbol::getTargetSection() const {
  561. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_targetSection);
  562. }
  563. uint32_t DIARawSymbol::getTextureSlot() const {
  564. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_textureSlot);
  565. }
  566. uint32_t DIARawSymbol::getTimeStamp() const {
  567. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_timeStamp);
  568. }
  569. uint32_t DIARawSymbol::getToken() const {
  570. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_token);
  571. }
  572. uint32_t DIARawSymbol::getTypeId() const {
  573. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_typeId);
  574. }
  575. uint32_t DIARawSymbol::getUavSlot() const {
  576. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_uavSlot);
  577. }
  578. std::string DIARawSymbol::getUndecoratedName() const {
  579. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_undecoratedName);
  580. }
  581. uint32_t DIARawSymbol::getUnmodifiedTypeId() const {
  582. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unmodifiedTypeId);
  583. }
  584. uint32_t DIARawSymbol::getUpperBoundId() const {
  585. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_upperBoundId);
  586. }
  587. Variant DIARawSymbol::getValue() const {
  588. VARIANT Value;
  589. Value.vt = VT_EMPTY;
  590. if (S_OK != Symbol->get_value(&Value))
  591. return Variant();
  592. return VariantFromVARIANT(Value);
  593. }
  594. uint32_t DIARawSymbol::getVirtualBaseDispIndex() const {
  595. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseDispIndex);
  596. }
  597. uint32_t DIARawSymbol::getVirtualBaseOffset() const {
  598. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseOffset);
  599. }
  600. uint32_t DIARawSymbol::getVirtualTableShapeId() const {
  601. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualTableShapeId);
  602. }
  603. PDB_DataKind DIARawSymbol::getDataKind() const {
  604. return PrivateGetDIAValue<DWORD, PDB_DataKind>(Symbol,
  605. &IDiaSymbol::get_dataKind);
  606. }
  607. PDB_SymType DIARawSymbol::getSymTag() const {
  608. return PrivateGetDIAValue<DWORD, PDB_SymType>(Symbol,
  609. &IDiaSymbol::get_symTag);
  610. }
  611. PDB_UniqueId DIARawSymbol::getGuid() const {
  612. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_guid);
  613. }
  614. int32_t DIARawSymbol::getOffset() const {
  615. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_offset);
  616. }
  617. int32_t DIARawSymbol::getThisAdjust() const {
  618. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_thisAdjust);
  619. }
  620. int32_t DIARawSymbol::getVirtualBasePointerOffset() const {
  621. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBasePointerOffset);
  622. }
  623. PDB_LocType DIARawSymbol::getLocationType() const {
  624. return PrivateGetDIAValue<DWORD, PDB_LocType>(Symbol,
  625. &IDiaSymbol::get_locationType);
  626. }
  627. PDB_Machine DIARawSymbol::getMachineType() const {
  628. return PrivateGetDIAValue<DWORD, PDB_Machine>(Symbol,
  629. &IDiaSymbol::get_machineType);
  630. }
  631. PDB_ThunkOrdinal DIARawSymbol::getThunkOrdinal() const {
  632. return PrivateGetDIAValue<DWORD, PDB_ThunkOrdinal>(
  633. Symbol, &IDiaSymbol::get_thunkOrdinal);
  634. }
  635. uint64_t DIARawSymbol::getLength() const {
  636. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_length);
  637. }
  638. uint64_t DIARawSymbol::getLiveRangeLength() const {
  639. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_liveRangeLength);
  640. }
  641. uint64_t DIARawSymbol::getVirtualAddress() const {
  642. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualAddress);
  643. }
  644. PDB_UdtType DIARawSymbol::getUdtKind() const {
  645. return PrivateGetDIAValue<DWORD, PDB_UdtType>(Symbol,
  646. &IDiaSymbol::get_udtKind);
  647. }
  648. bool DIARawSymbol::hasConstructor() const {
  649. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constructor);
  650. }
  651. bool DIARawSymbol::hasCustomCallingConvention() const {
  652. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_customCallingConvention);
  653. }
  654. bool DIARawSymbol::hasFarReturn() const {
  655. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_farReturn);
  656. }
  657. bool DIARawSymbol::isCode() const {
  658. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_code);
  659. }
  660. bool DIARawSymbol::isCompilerGenerated() const {
  661. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_compilerGenerated);
  662. }
  663. bool DIARawSymbol::isConstType() const {
  664. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_constType);
  665. }
  666. bool DIARawSymbol::isEditAndContinueEnabled() const {
  667. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_editAndContinueEnabled);
  668. }
  669. bool DIARawSymbol::isFunction() const {
  670. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_function);
  671. }
  672. bool DIARawSymbol::getAddressTaken() const {
  673. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_addressTaken);
  674. }
  675. bool DIARawSymbol::getNoStackOrdering() const {
  676. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noStackOrdering);
  677. }
  678. bool DIARawSymbol::hasAlloca() const {
  679. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAlloca);
  680. }
  681. bool DIARawSymbol::hasAssignmentOperator() const {
  682. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasAssignmentOperator);
  683. }
  684. bool DIARawSymbol::hasCTypes() const {
  685. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCTypes);
  686. }
  687. bool DIARawSymbol::hasCastOperator() const {
  688. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasCastOperator);
  689. }
  690. bool DIARawSymbol::hasDebugInfo() const {
  691. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasDebugInfo);
  692. }
  693. bool DIARawSymbol::hasEH() const {
  694. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEH);
  695. }
  696. bool DIARawSymbol::hasEHa() const {
  697. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasEHa);
  698. }
  699. bool DIARawSymbol::hasInlAsm() const {
  700. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasInlAsm);
  701. }
  702. bool DIARawSymbol::hasInlineAttribute() const {
  703. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_inlSpec);
  704. }
  705. bool DIARawSymbol::hasInterruptReturn() const {
  706. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_interruptReturn);
  707. }
  708. bool DIARawSymbol::hasFramePointer() const {
  709. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_framePointerPresent);
  710. }
  711. bool DIARawSymbol::hasLongJump() const {
  712. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasLongJump);
  713. }
  714. bool DIARawSymbol::hasManagedCode() const {
  715. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasManagedCode);
  716. }
  717. bool DIARawSymbol::hasNestedTypes() const {
  718. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasNestedTypes);
  719. }
  720. bool DIARawSymbol::hasNoInlineAttribute() const {
  721. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noInline);
  722. }
  723. bool DIARawSymbol::hasNoReturnAttribute() const {
  724. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_noReturn);
  725. }
  726. bool DIARawSymbol::hasOptimizedCodeDebugInfo() const {
  727. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_optimizedCodeDebugInfo);
  728. }
  729. bool DIARawSymbol::hasOverloadedOperator() const {
  730. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_overloadedOperator);
  731. }
  732. bool DIARawSymbol::hasSEH() const {
  733. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSEH);
  734. }
  735. bool DIARawSymbol::hasSecurityChecks() const {
  736. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSecurityChecks);
  737. }
  738. bool DIARawSymbol::hasSetJump() const {
  739. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_hasSetJump);
  740. }
  741. bool DIARawSymbol::hasStrictGSCheck() const {
  742. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_strictGSCheck);
  743. }
  744. bool DIARawSymbol::isAcceleratorGroupSharedLocal() const {
  745. return PrivateGetDIAValue(Symbol,
  746. &IDiaSymbol::get_isAcceleratorGroupSharedLocal);
  747. }
  748. bool DIARawSymbol::isAcceleratorPointerTagLiveRange() const {
  749. return PrivateGetDIAValue(Symbol,
  750. &IDiaSymbol::get_isAcceleratorPointerTagLiveRange);
  751. }
  752. bool DIARawSymbol::isAcceleratorStubFunction() const {
  753. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAcceleratorStubFunction);
  754. }
  755. bool DIARawSymbol::isAggregated() const {
  756. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isAggregated);
  757. }
  758. bool DIARawSymbol::isIntroVirtualFunction() const {
  759. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intro);
  760. }
  761. bool DIARawSymbol::isCVTCIL() const {
  762. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCVTCIL);
  763. }
  764. bool DIARawSymbol::isConstructorVirtualBase() const {
  765. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isConstructorVirtualBase);
  766. }
  767. bool DIARawSymbol::isCxxReturnUdt() const {
  768. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isCxxReturnUdt);
  769. }
  770. bool DIARawSymbol::isDataAligned() const {
  771. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isDataAligned);
  772. }
  773. bool DIARawSymbol::isHLSLData() const {
  774. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHLSLData);
  775. }
  776. bool DIARawSymbol::isHotpatchable() const {
  777. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isHotpatchable);
  778. }
  779. bool DIARawSymbol::isIndirectVirtualBaseClass() const {
  780. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_indirectVirtualBaseClass);
  781. }
  782. bool DIARawSymbol::isInterfaceUdt() const {
  783. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isInterfaceUdt);
  784. }
  785. bool DIARawSymbol::isIntrinsic() const {
  786. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_intrinsic);
  787. }
  788. bool DIARawSymbol::isLTCG() const {
  789. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isLTCG);
  790. }
  791. bool DIARawSymbol::isLocationControlFlowDependent() const {
  792. return PrivateGetDIAValue(Symbol,
  793. &IDiaSymbol::get_isLocationControlFlowDependent);
  794. }
  795. bool DIARawSymbol::isMSILNetmodule() const {
  796. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMSILNetmodule);
  797. }
  798. bool DIARawSymbol::isMatrixRowMajor() const {
  799. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMatrixRowMajor);
  800. }
  801. bool DIARawSymbol::isManagedCode() const {
  802. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_managed);
  803. }
  804. bool DIARawSymbol::isMSILCode() const {
  805. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_msil);
  806. }
  807. bool DIARawSymbol::isMultipleInheritance() const {
  808. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isMultipleInheritance);
  809. }
  810. bool DIARawSymbol::isNaked() const {
  811. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isNaked);
  812. }
  813. bool DIARawSymbol::isNested() const {
  814. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_nested);
  815. }
  816. bool DIARawSymbol::isOptimizedAway() const {
  817. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isOptimizedAway);
  818. }
  819. bool DIARawSymbol::isPacked() const {
  820. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_packed);
  821. }
  822. bool DIARawSymbol::isPointerBasedOnSymbolValue() const {
  823. return PrivateGetDIAValue(Symbol,
  824. &IDiaSymbol::get_isPointerBasedOnSymbolValue);
  825. }
  826. bool DIARawSymbol::isPointerToDataMember() const {
  827. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToDataMember);
  828. }
  829. bool DIARawSymbol::isPointerToMemberFunction() const {
  830. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isPointerToMemberFunction);
  831. }
  832. bool DIARawSymbol::isPureVirtual() const {
  833. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_pure);
  834. }
  835. bool DIARawSymbol::isRValueReference() const {
  836. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_RValueReference);
  837. }
  838. bool DIARawSymbol::isRefUdt() const {
  839. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isRefUdt);
  840. }
  841. bool DIARawSymbol::isReference() const {
  842. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_reference);
  843. }
  844. bool DIARawSymbol::isRestrictedType() const {
  845. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_restrictedType);
  846. }
  847. bool DIARawSymbol::isReturnValue() const {
  848. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isReturnValue);
  849. }
  850. bool DIARawSymbol::isSafeBuffers() const {
  851. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSafeBuffers);
  852. }
  853. bool DIARawSymbol::isScoped() const {
  854. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_scoped);
  855. }
  856. bool DIARawSymbol::isSdl() const {
  857. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSdl);
  858. }
  859. bool DIARawSymbol::isSingleInheritance() const {
  860. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSingleInheritance);
  861. }
  862. bool DIARawSymbol::isSplitted() const {
  863. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isSplitted);
  864. }
  865. bool DIARawSymbol::isStatic() const {
  866. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStatic);
  867. }
  868. bool DIARawSymbol::hasPrivateSymbols() const {
  869. // hasPrivateSymbols is the opposite of isStripped, but we expose
  870. // hasPrivateSymbols as a more intuitive interface.
  871. return !PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isStripped);
  872. }
  873. bool DIARawSymbol::isUnalignedType() const {
  874. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unalignedType);
  875. }
  876. bool DIARawSymbol::isUnreached() const {
  877. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_notReached);
  878. }
  879. bool DIARawSymbol::isValueUdt() const {
  880. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isValueUdt);
  881. }
  882. bool DIARawSymbol::isVirtual() const {
  883. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtual);
  884. }
  885. bool DIARawSymbol::isVirtualBaseClass() const {
  886. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_virtualBaseClass);
  887. }
  888. bool DIARawSymbol::isVirtualInheritance() const {
  889. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_isVirtualInheritance);
  890. }
  891. bool DIARawSymbol::isVolatileType() const {
  892. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_volatileType);
  893. }
  894. bool DIARawSymbol::wasInlined() const {
  895. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_wasInlined);
  896. }
  897. std::string DIARawSymbol::getUnused() const {
  898. return PrivateGetDIAValue(Symbol, &IDiaSymbol::get_unused);
  899. }