1//==- NativeRawSymbol.h - Native implementation of IPDBRawSymbol -*- C++ -*-==//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_DEBUGINFO_PDB_NATIVE_NATIVERAWSYMBOL_H
10#define LLVM_DEBUGINFO_PDB_NATIVE_NATIVERAWSYMBOL_H
11
12#include "llvm/DebugInfo/PDB/IPDBRawSymbol.h"
13#include <cstdint>
14#include <memory>
15
16namespace llvm {
17namespace pdb {
18
19class NativeSession;
20
21class NativeRawSymbol : public IPDBRawSymbol {
22  friend class SymbolCache;
23  virtual void initialize() {}
24
25public:
26  NativeRawSymbol(NativeSession &PDBSession, PDB_SymType Tag,
27                  SymIndexId SymbolId);
28
29  void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields,
30            PdbSymbolIdField RecurseIdFields) const override;
31
32  std::unique_ptr<IPDBEnumSymbols>
33    findChildren(PDB_SymType Type) const override;
34  std::unique_ptr<IPDBEnumSymbols>
35    findChildren(PDB_SymType Type, StringRef Name,
36      PDB_NameSearchFlags Flags) const override;
37  std::unique_ptr<IPDBEnumSymbols>
38    findChildrenByAddr(PDB_SymType Type, StringRef Name,
39                       PDB_NameSearchFlags Flags,
40                       uint32_t Section, uint32_t Offset) const override;
41  std::unique_ptr<IPDBEnumSymbols>
42    findChildrenByVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
43                     uint64_t VA) const override;
44  std::unique_ptr<IPDBEnumSymbols>
45    findChildrenByRVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
46      uint32_t RVA) const override;
47
48  std::unique_ptr<IPDBEnumSymbols>
49    findInlineFramesByAddr(uint32_t Section, uint32_t Offset) const override;
50  std::unique_ptr<IPDBEnumSymbols>
51    findInlineFramesByRVA(uint32_t RVA) const override;
52  std::unique_ptr<IPDBEnumSymbols>
53    findInlineFramesByVA(uint64_t VA) const override;
54
55  std::unique_ptr<IPDBEnumLineNumbers> findInlineeLines() const override;
56  std::unique_ptr<IPDBEnumLineNumbers>
57    findInlineeLinesByAddr(uint32_t Section, uint32_t Offset,
58                           uint32_t Length) const override;
59  std::unique_ptr<IPDBEnumLineNumbers>
60    findInlineeLinesByRVA(uint32_t RVA, uint32_t Length) const override;
61  std::unique_ptr<IPDBEnumLineNumbers>
62    findInlineeLinesByVA(uint64_t VA, uint32_t Length) const override;
63
64  void getDataBytes(SmallVector<uint8_t, 32> &Bytes) const override;
65  void getFrontEndVersion(VersionInfo &Version) const override;
66  void getBackEndVersion(VersionInfo &Version) const override;
67  PDB_MemberAccess getAccess() const override;
68  uint32_t getAddressOffset() const override;
69  uint32_t getAddressSection() const override;
70  uint32_t getAge() const override;
71  SymIndexId getArrayIndexTypeId() const override;
72  uint32_t getBaseDataOffset() const override;
73  uint32_t getBaseDataSlot() const override;
74  SymIndexId getBaseSymbolId() const override;
75  PDB_BuiltinType getBuiltinType() const override;
76  uint32_t getBitPosition() const override;
77  PDB_CallingConv getCallingConvention() const override;
78  SymIndexId getClassParentId() const override;
79  std::string getCompilerName() const override;
80  uint32_t getCount() const override;
81  uint32_t getCountLiveRanges() const override;
82  PDB_Lang getLanguage() const override;
83  SymIndexId getLexicalParentId() const override;
84  std::string getLibraryName() const override;
85  uint32_t getLiveRangeStartAddressOffset() const override;
86  uint32_t getLiveRangeStartAddressSection() const override;
87  uint32_t getLiveRangeStartRelativeVirtualAddress() const override;
88  codeview::RegisterId getLocalBasePointerRegisterId() const override;
89  SymIndexId getLowerBoundId() const override;
90  uint32_t getMemorySpaceKind() const override;
91  std::string getName() const override;
92  uint32_t getNumberOfAcceleratorPointerTags() const override;
93  uint32_t getNumberOfColumns() const override;
94  uint32_t getNumberOfModifiers() const override;
95  uint32_t getNumberOfRegisterIndices() const override;
96  uint32_t getNumberOfRows() const override;
97  std::string getObjectFileName() const override;
98  uint32_t getOemId() const override;
99  SymIndexId getOemSymbolId() const override;
100  uint32_t getOffsetInUdt() const override;
101  PDB_Cpu getPlatform() const override;
102  uint32_t getRank() const override;
103  codeview::RegisterId getRegisterId() const override;
104  uint32_t getRegisterType() const override;
105  uint32_t getRelativeVirtualAddress() const override;
106  uint32_t getSamplerSlot() const override;
107  uint32_t getSignature() const override;
108  uint32_t getSizeInUdt() const override;
109  uint32_t getSlot() const override;
110  std::string getSourceFileName() const override;
111  std::unique_ptr<IPDBLineNumber> getSrcLineOnTypeDefn() const override;
112  uint32_t getStride() const override;
113  SymIndexId getSubTypeId() const override;
114  std::string getSymbolsFileName() const override;
115  SymIndexId getSymIndexId() const override;
116  uint32_t getTargetOffset() const override;
117  uint32_t getTargetRelativeVirtualAddress() const override;
118  uint64_t getTargetVirtualAddress() const override;
119  uint32_t getTargetSection() const override;
120  uint32_t getTextureSlot() const override;
121  uint32_t getTimeStamp() const override;
122  uint32_t getToken() const override;
123  SymIndexId getTypeId() const override;
124  uint32_t getUavSlot() const override;
125  std::string getUndecoratedName() const override;
126  std::string getUndecoratedNameEx(PDB_UndnameFlags Flags) const override;
127  SymIndexId getUnmodifiedTypeId() const override;
128  SymIndexId getUpperBoundId() const override;
129  Variant getValue() const override;
130  uint32_t getVirtualBaseDispIndex() const override;
131  uint32_t getVirtualBaseOffset() const override;
132  SymIndexId getVirtualTableShapeId() const override;
133  std::unique_ptr<PDBSymbolTypeBuiltin>
134  getVirtualBaseTableType() const override;
135  PDB_DataKind getDataKind() const override;
136  PDB_SymType getSymTag() const override;
137  codeview::GUID getGuid() const override;
138  int32_t getOffset() const override;
139  int32_t getThisAdjust() const override;
140  int32_t getVirtualBasePointerOffset() const override;
141  PDB_LocType getLocationType() const override;
142  PDB_Machine getMachineType() const override;
143  codeview::ThunkOrdinal getThunkOrdinal() const override;
144  uint64_t getLength() const override;
145  uint64_t getLiveRangeLength() const override;
146  uint64_t getVirtualAddress() const override;
147  PDB_UdtType getUdtKind() const override;
148  bool hasConstructor() const override;
149  bool hasCustomCallingConvention() const override;
150  bool hasFarReturn() const override;
151  bool isCode() const override;
152  bool isCompilerGenerated() const override;
153  bool isConstType() const override;
154  bool isEditAndContinueEnabled() const override;
155  bool isFunction() const override;
156  bool getAddressTaken() const override;
157  bool getNoStackOrdering() const override;
158  bool hasAlloca() const override;
159  bool hasAssignmentOperator() const override;
160  bool hasCTypes() const override;
161  bool hasCastOperator() const override;
162  bool hasDebugInfo() const override;
163  bool hasEH() const override;
164  bool hasEHa() const override;
165  bool hasInlAsm() const override;
166  bool hasInlineAttribute() const override;
167  bool hasInterruptReturn() const override;
168  bool hasFramePointer() const override;
169  bool hasLongJump() const override;
170  bool hasManagedCode() const override;
171  bool hasNestedTypes() const override;
172  bool hasNoInlineAttribute() const override;
173  bool hasNoReturnAttribute() const override;
174  bool hasOptimizedCodeDebugInfo() const override;
175  bool hasOverloadedOperator() const override;
176  bool hasSEH() const override;
177  bool hasSecurityChecks() const override;
178  bool hasSetJump() const override;
179  bool hasStrictGSCheck() const override;
180  bool isAcceleratorGroupSharedLocal() const override;
181  bool isAcceleratorPointerTagLiveRange() const override;
182  bool isAcceleratorStubFunction() const override;
183  bool isAggregated() const override;
184  bool isIntroVirtualFunction() const override;
185  bool isCVTCIL() const override;
186  bool isConstructorVirtualBase() const override;
187  bool isCxxReturnUdt() const override;
188  bool isDataAligned() const override;
189  bool isHLSLData() const override;
190  bool isHotpatchable() const override;
191  bool isIndirectVirtualBaseClass() const override;
192  bool isInterfaceUdt() const override;
193  bool isIntrinsic() const override;
194  bool isLTCG() const override;
195  bool isLocationControlFlowDependent() const override;
196  bool isMSILNetmodule() const override;
197  bool isMatrixRowMajor() const override;
198  bool isManagedCode() const override;
199  bool isMSILCode() const override;
200  bool isMultipleInheritance() const override;
201  bool isNaked() const override;
202  bool isNested() const override;
203  bool isOptimizedAway() const override;
204  bool isPacked() const override;
205  bool isPointerBasedOnSymbolValue() const override;
206  bool isPointerToDataMember() const override;
207  bool isPointerToMemberFunction() const override;
208  bool isPureVirtual() const override;
209  bool isRValueReference() const override;
210  bool isRefUdt() const override;
211  bool isReference() const override;
212  bool isRestrictedType() const override;
213  bool isReturnValue() const override;
214  bool isSafeBuffers() const override;
215  bool isScoped() const override;
216  bool isSdl() const override;
217  bool isSingleInheritance() const override;
218  bool isSplitted() const override;
219  bool isStatic() const override;
220  bool hasPrivateSymbols() const override;
221  bool isUnalignedType() const override;
222  bool isUnreached() const override;
223  bool isValueUdt() const override;
224  bool isVirtual() const override;
225  bool isVirtualBaseClass() const override;
226  bool isVirtualInheritance() const override;
227  bool isVolatileType() const override;
228  bool wasInlined() const override;
229  std::string getUnused() const override;
230
231protected:
232  NativeSession &Session;
233  PDB_SymType Tag;
234  SymIndexId SymbolId;
235};
236
237} // end namespace pdb
238} // end namespace llvm
239
240#endif // LLVM_DEBUGINFO_PDB_NATIVE_NATIVERAWSYMBOL_H
241