blob: 7c818d7cadebb0b343ca6f1d6185d8291617623f [file] [log] [blame]
Andrew Scull5e1ddfa2018-08-14 10:06:54 +01001//===- 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"
Andrew Scull0372a572018-11-16 15:47:06 +000014#include "llvm/ADT/BitmaskEnum.h"
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010015#include "llvm/ADT/SmallVector.h"
16#include "llvm/ADT/StringRef.h"
17#include "llvm/DebugInfo/CodeView/CodeView.h"
18#include <memory>
19
20namespace llvm {
21class raw_ostream;
22
23namespace pdb {
24
Andrew Scull0372a572018-11-16 15:47:06 +000025class IPDBSession;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010026class PDBSymbolTypeVTable;
27class PDBSymbolTypeVTableShape;
28
Andrew Scull0372a572018-11-16 15:47:06 +000029enum 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
40void dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value,
41 int Indent, const IPDBSession &Session,
42 PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags,
43 PdbSymbolIdField RecurseFlags);
44
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010045/// 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.
50class IPDBRawSymbol {
51public:
52 virtual ~IPDBRawSymbol();
53
Andrew Scull0372a572018-11-16 15:47:06 +000054 virtual void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields,
55 PdbSymbolIdField RecurseIdFields) const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010056
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;
Andrew Scull0372a572018-11-16 15:47:06 +000096 virtual SymIndexId getArrayIndexTypeId() const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +010097 virtual uint32_t getBaseDataOffset() const = 0;
98 virtual uint32_t getBaseDataSlot() const = 0;
Andrew Scull0372a572018-11-16 15:47:06 +000099 virtual SymIndexId getBaseSymbolId() const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100100 virtual PDB_BuiltinType getBuiltinType() const = 0;
101 virtual uint32_t getBitPosition() const = 0;
102 virtual PDB_CallingConv getCallingConvention() const = 0;
Andrew Scull0372a572018-11-16 15:47:06 +0000103 virtual SymIndexId getClassParentId() const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100104 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;
Andrew Scull0372a572018-11-16 15:47:06 +0000109 virtual SymIndexId getLexicalParentId() const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100110 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;
Andrew Scull0372a572018-11-16 15:47:06 +0000115 virtual SymIndexId getLowerBoundId() const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100116 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;
Andrew Scull0372a572018-11-16 15:47:06 +0000125 virtual SymIndexId getOemSymbolId() const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100126 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;
Andrew Scull0372a572018-11-16 15:47:06 +0000140 virtual SymIndexId getSubTypeId() const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100141 virtual std::string getSymbolsFileName() const = 0;
Andrew Scull0372a572018-11-16 15:47:06 +0000142 virtual SymIndexId getSymIndexId() const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100143 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;
Andrew Scull0372a572018-11-16 15:47:06 +0000150 virtual SymIndexId getTypeId() const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100151 virtual uint32_t getUavSlot() const = 0;
152 virtual std::string getUndecoratedName() const = 0;
153 virtual std::string getUndecoratedNameEx(PDB_UndnameFlags Flags) const = 0;
Andrew Scull0372a572018-11-16 15:47:06 +0000154 virtual SymIndexId getUnmodifiedTypeId() const = 0;
155 virtual SymIndexId getUpperBoundId() const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100156 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;
Andrew Scull0372a572018-11-16 15:47:06 +0000161 virtual SymIndexId getVirtualTableShapeId() const = 0;
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100162 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
Andrew Scull0372a572018-11-16 15:47:06 +0000259LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
260
Andrew Scull5e1ddfa2018-08-14 10:06:54 +0100261} // namespace pdb
262} // namespace llvm
263
264#endif