1 //===- IPDBRawSymbol.h - base interface for PDB symbol types ----*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H
10 #define LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H
13 #include "llvm/ADT/BitmaskEnum.h"
14 #include "llvm/ADT/SmallVector.h"
15 #include "llvm/ADT/StringRef.h"
16 #include "llvm/DebugInfo/CodeView/CodeView.h"
25 class PDBSymbolTypeVTable
;
26 class PDBSymbolTypeVTableShape
;
28 enum class PdbSymbolIdField
: uint32_t {
31 LexicalParent
= 1 << 1,
34 UnmodifiedType
= 1 << 4,
36 LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ All
)
39 void dumpSymbolIdField(raw_ostream
&OS
, StringRef Name
, SymIndexId Value
,
40 int Indent
, const IPDBSession
&Session
,
41 PdbSymbolIdField FieldId
, PdbSymbolIdField ShowFlags
,
42 PdbSymbolIdField RecurseFlags
);
44 /// IPDBRawSymbol defines an interface used to represent an arbitrary symbol.
45 /// It exposes a monolithic interface consisting of accessors for the union of
46 /// all properties that are valid for any symbol type. This interface is then
47 /// wrapped by a concrete class which exposes only those set of methods valid
48 /// for this particular symbol type. See PDBSymbol.h for more details.
51 virtual ~IPDBRawSymbol();
53 virtual void dump(raw_ostream
&OS
, int Indent
, PdbSymbolIdField ShowIdFields
,
54 PdbSymbolIdField RecurseIdFields
) const = 0;
56 virtual std::unique_ptr
<IPDBEnumSymbols
>
57 findChildren(PDB_SymType Type
) const = 0;
59 virtual std::unique_ptr
<IPDBEnumSymbols
>
60 findChildren(PDB_SymType Type
, StringRef Name
,
61 PDB_NameSearchFlags Flags
) const = 0;
62 virtual std::unique_ptr
<IPDBEnumSymbols
>
63 findChildrenByAddr(PDB_SymType Type
, StringRef Name
,
64 PDB_NameSearchFlags Flags
,
65 uint32_t Section
, uint32_t Offset
) const = 0;
66 virtual std::unique_ptr
<IPDBEnumSymbols
>
67 findChildrenByVA(PDB_SymType Type
, StringRef Name
, PDB_NameSearchFlags Flags
,
68 uint64_t VA
) const = 0;
69 virtual std::unique_ptr
<IPDBEnumSymbols
>
70 findChildrenByRVA(PDB_SymType Type
, StringRef Name
, PDB_NameSearchFlags Flags
,
71 uint32_t RVA
) const = 0;
73 virtual std::unique_ptr
<IPDBEnumSymbols
>
74 findInlineFramesByAddr(uint32_t Section
, uint32_t Offset
) const = 0;
75 virtual std::unique_ptr
<IPDBEnumSymbols
>
76 findInlineFramesByRVA(uint32_t RVA
) const = 0;
77 virtual std::unique_ptr
<IPDBEnumSymbols
>
78 findInlineFramesByVA(uint64_t VA
) const = 0;
80 virtual std::unique_ptr
<IPDBEnumLineNumbers
> findInlineeLines() const = 0;
81 virtual std::unique_ptr
<IPDBEnumLineNumbers
>
82 findInlineeLinesByAddr(uint32_t Section
, uint32_t Offset
,
83 uint32_t Length
) const = 0;
84 virtual std::unique_ptr
<IPDBEnumLineNumbers
>
85 findInlineeLinesByRVA(uint32_t RVA
, uint32_t Length
) const = 0;
86 virtual std::unique_ptr
<IPDBEnumLineNumbers
>
87 findInlineeLinesByVA(uint64_t VA
, uint32_t Length
) const = 0;
89 virtual void getDataBytes(llvm::SmallVector
<uint8_t, 32> &bytes
) const = 0;
90 virtual void getBackEndVersion(VersionInfo
&Version
) const = 0;
91 virtual PDB_MemberAccess
getAccess() const = 0;
92 virtual uint32_t getAddressOffset() const = 0;
93 virtual uint32_t getAddressSection() const = 0;
94 virtual uint32_t getAge() const = 0;
95 virtual SymIndexId
getArrayIndexTypeId() const = 0;
96 virtual uint32_t getBaseDataOffset() const = 0;
97 virtual uint32_t getBaseDataSlot() const = 0;
98 virtual SymIndexId
getBaseSymbolId() const = 0;
99 virtual PDB_BuiltinType
getBuiltinType() const = 0;
100 virtual uint32_t getBitPosition() const = 0;
101 virtual PDB_CallingConv
getCallingConvention() const = 0;
102 virtual SymIndexId
getClassParentId() const = 0;
103 virtual std::string
getCompilerName() const = 0;
104 virtual uint32_t getCount() const = 0;
105 virtual uint32_t getCountLiveRanges() const = 0;
106 virtual void getFrontEndVersion(VersionInfo
&Version
) const = 0;
107 virtual PDB_Lang
getLanguage() const = 0;
108 virtual SymIndexId
getLexicalParentId() const = 0;
109 virtual std::string
getLibraryName() const = 0;
110 virtual uint32_t getLiveRangeStartAddressOffset() const = 0;
111 virtual uint32_t getLiveRangeStartAddressSection() const = 0;
112 virtual uint32_t getLiveRangeStartRelativeVirtualAddress() const = 0;
113 virtual codeview::RegisterId
getLocalBasePointerRegisterId() const = 0;
114 virtual SymIndexId
getLowerBoundId() const = 0;
115 virtual uint32_t getMemorySpaceKind() const = 0;
116 virtual std::string
getName() const = 0;
117 virtual uint32_t getNumberOfAcceleratorPointerTags() const = 0;
118 virtual uint32_t getNumberOfColumns() const = 0;
119 virtual uint32_t getNumberOfModifiers() const = 0;
120 virtual uint32_t getNumberOfRegisterIndices() const = 0;
121 virtual uint32_t getNumberOfRows() const = 0;
122 virtual std::string
getObjectFileName() const = 0;
123 virtual uint32_t getOemId() const = 0;
124 virtual SymIndexId
getOemSymbolId() const = 0;
125 virtual uint32_t getOffsetInUdt() const = 0;
126 virtual PDB_Cpu
getPlatform() const = 0;
127 virtual uint32_t getRank() const = 0;
128 virtual codeview::RegisterId
getRegisterId() const = 0;
129 virtual uint32_t getRegisterType() const = 0;
130 virtual uint32_t getRelativeVirtualAddress() const = 0;
131 virtual uint32_t getSamplerSlot() const = 0;
132 virtual uint32_t getSignature() const = 0;
133 virtual uint32_t getSizeInUdt() const = 0;
134 virtual uint32_t getSlot() const = 0;
135 virtual std::string
getSourceFileName() const = 0;
136 virtual std::unique_ptr
<IPDBLineNumber
>
137 getSrcLineOnTypeDefn() const = 0;
138 virtual uint32_t getStride() const = 0;
139 virtual SymIndexId
getSubTypeId() const = 0;
140 virtual std::string
getSymbolsFileName() const = 0;
141 virtual SymIndexId
getSymIndexId() const = 0;
142 virtual uint32_t getTargetOffset() const = 0;
143 virtual uint32_t getTargetRelativeVirtualAddress() const = 0;
144 virtual uint64_t getTargetVirtualAddress() const = 0;
145 virtual uint32_t getTargetSection() const = 0;
146 virtual uint32_t getTextureSlot() const = 0;
147 virtual uint32_t getTimeStamp() const = 0;
148 virtual uint32_t getToken() const = 0;
149 virtual SymIndexId
getTypeId() const = 0;
150 virtual uint32_t getUavSlot() const = 0;
151 virtual std::string
getUndecoratedName() const = 0;
152 virtual std::string
getUndecoratedNameEx(PDB_UndnameFlags Flags
) const = 0;
153 virtual SymIndexId
getUnmodifiedTypeId() const = 0;
154 virtual SymIndexId
getUpperBoundId() const = 0;
155 virtual Variant
getValue() const = 0;
156 virtual uint32_t getVirtualBaseDispIndex() const = 0;
157 virtual uint32_t getVirtualBaseOffset() const = 0;
158 virtual std::unique_ptr
<PDBSymbolTypeBuiltin
>
159 getVirtualBaseTableType() const = 0;
160 virtual SymIndexId
getVirtualTableShapeId() const = 0;
161 virtual PDB_DataKind
getDataKind() const = 0;
162 virtual PDB_SymType
getSymTag() const = 0;
163 virtual codeview::GUID
getGuid() const = 0;
164 virtual int32_t getOffset() const = 0;
165 virtual int32_t getThisAdjust() const = 0;
166 virtual int32_t getVirtualBasePointerOffset() const = 0;
167 virtual PDB_LocType
getLocationType() const = 0;
168 virtual PDB_Machine
getMachineType() const = 0;
169 virtual codeview::ThunkOrdinal
getThunkOrdinal() const = 0;
170 virtual uint64_t getLength() const = 0;
171 virtual uint64_t getLiveRangeLength() const = 0;
172 virtual uint64_t getVirtualAddress() const = 0;
173 virtual PDB_UdtType
getUdtKind() const = 0;
174 virtual bool hasConstructor() const = 0;
175 virtual bool hasCustomCallingConvention() const = 0;
176 virtual bool hasFarReturn() const = 0;
177 virtual bool isCode() const = 0;
178 virtual bool isCompilerGenerated() const = 0;
179 virtual bool isConstType() const = 0;
180 virtual bool isEditAndContinueEnabled() const = 0;
181 virtual bool isFunction() const = 0;
182 virtual bool getAddressTaken() const = 0;
183 virtual bool getNoStackOrdering() const = 0;
184 virtual bool hasAlloca() const = 0;
185 virtual bool hasAssignmentOperator() const = 0;
186 virtual bool hasCTypes() const = 0;
187 virtual bool hasCastOperator() const = 0;
188 virtual bool hasDebugInfo() const = 0;
189 virtual bool hasEH() const = 0;
190 virtual bool hasEHa() const = 0;
191 virtual bool hasFramePointer() const = 0;
192 virtual bool hasInlAsm() const = 0;
193 virtual bool hasInlineAttribute() const = 0;
194 virtual bool hasInterruptReturn() const = 0;
195 virtual bool hasLongJump() const = 0;
196 virtual bool hasManagedCode() const = 0;
197 virtual bool hasNestedTypes() const = 0;
198 virtual bool hasNoInlineAttribute() const = 0;
199 virtual bool hasNoReturnAttribute() const = 0;
200 virtual bool hasOptimizedCodeDebugInfo() const = 0;
201 virtual bool hasOverloadedOperator() const = 0;
202 virtual bool hasSEH() const = 0;
203 virtual bool hasSecurityChecks() const = 0;
204 virtual bool hasSetJump() const = 0;
205 virtual bool hasStrictGSCheck() const = 0;
206 virtual bool isAcceleratorGroupSharedLocal() const = 0;
207 virtual bool isAcceleratorPointerTagLiveRange() const = 0;
208 virtual bool isAcceleratorStubFunction() const = 0;
209 virtual bool isAggregated() const = 0;
210 virtual bool isIntroVirtualFunction() const = 0;
211 virtual bool isCVTCIL() const = 0;
212 virtual bool isConstructorVirtualBase() const = 0;
213 virtual bool isCxxReturnUdt() const = 0;
214 virtual bool isDataAligned() const = 0;
215 virtual bool isHLSLData() const = 0;
216 virtual bool isHotpatchable() const = 0;
217 virtual bool isIndirectVirtualBaseClass() const = 0;
218 virtual bool isInterfaceUdt() const = 0;
219 virtual bool isIntrinsic() const = 0;
220 virtual bool isLTCG() const = 0;
221 virtual bool isLocationControlFlowDependent() const = 0;
222 virtual bool isMSILNetmodule() const = 0;
223 virtual bool isMatrixRowMajor() const = 0;
224 virtual bool isManagedCode() const = 0;
225 virtual bool isMSILCode() const = 0;
226 virtual bool isMultipleInheritance() const = 0;
227 virtual bool isNaked() const = 0;
228 virtual bool isNested() const = 0;
229 virtual bool isOptimizedAway() const = 0;
230 virtual bool isPacked() const = 0;
231 virtual bool isPointerBasedOnSymbolValue() const = 0;
232 virtual bool isPointerToDataMember() const = 0;
233 virtual bool isPointerToMemberFunction() const = 0;
234 virtual bool isPureVirtual() const = 0;
235 virtual bool isRValueReference() const = 0;
236 virtual bool isRefUdt() const = 0;
237 virtual bool isReference() const = 0;
238 virtual bool isRestrictedType() const = 0;
239 virtual bool isReturnValue() const = 0;
240 virtual bool isSafeBuffers() const = 0;
241 virtual bool isScoped() const = 0;
242 virtual bool isSdl() const = 0;
243 virtual bool isSingleInheritance() const = 0;
244 virtual bool isSplitted() const = 0;
245 virtual bool isStatic() const = 0;
246 virtual bool hasPrivateSymbols() const = 0;
247 virtual bool isUnalignedType() const = 0;
248 virtual bool isUnreached() const = 0;
249 virtual bool isValueUdt() const = 0;
250 virtual bool isVirtual() const = 0;
251 virtual bool isVirtualBaseClass() const = 0;
252 virtual bool isVirtualInheritance() const = 0;
253 virtual bool isVolatileType() const = 0;
254 virtual bool wasInlined() const = 0;
255 virtual std::string
getUnused() const = 0;
258 LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();