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