LLVM 19.0.0git
IPDBRawSymbol.h
Go to the documentation of this file.
1//===- IPDBRawSymbol.h - base interface for PDB symbol types ----*- 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_IPDBRAWSYMBOL_H
10#define LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H
11
12#include "PDBTypes.h"
16#include <memory>
17
18namespace llvm {
19class raw_ostream;
20class StringRef;
21
22namespace pdb {
23
25 None = 0,
26 SymIndexId = 1 << 0,
27 LexicalParent = 1 << 1,
28 ClassParent = 1 << 2,
29 Type = 1 << 3,
30 UnmodifiedType = 1 << 4,
31 All = 0xFFFFFFFF,
32 LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ All)
33};
34
36 int Indent, const IPDBSession &Session,
37 PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags,
38 PdbSymbolIdField RecurseFlags);
39
40/// IPDBRawSymbol defines an interface used to represent an arbitrary symbol.
41/// It exposes a monolithic interface consisting of accessors for the union of
42/// all properties that are valid for any symbol type. This interface is then
43/// wrapped by a concrete class which exposes only those set of methods valid
44/// for this particular symbol type. See PDBSymbol.h for more details.
46public:
47 virtual ~IPDBRawSymbol();
48
49 virtual void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields,
50 PdbSymbolIdField RecurseIdFields) const = 0;
51
52 virtual std::unique_ptr<IPDBEnumSymbols>
54
55 virtual std::unique_ptr<IPDBEnumSymbols>
57 PDB_NameSearchFlags Flags) const = 0;
58 virtual std::unique_ptr<IPDBEnumSymbols>
61 uint32_t Section, uint32_t Offset) const = 0;
62 virtual std::unique_ptr<IPDBEnumSymbols>
64 uint64_t VA) const = 0;
65 virtual std::unique_ptr<IPDBEnumSymbols>
67 uint32_t RVA) const = 0;
68
69 virtual std::unique_ptr<IPDBEnumSymbols>
71 virtual std::unique_ptr<IPDBEnumSymbols>
73 virtual std::unique_ptr<IPDBEnumSymbols>
75
76 virtual std::unique_ptr<IPDBEnumLineNumbers> findInlineeLines() const = 0;
77 virtual std::unique_ptr<IPDBEnumLineNumbers>
79 uint32_t Length) const = 0;
80 virtual std::unique_ptr<IPDBEnumLineNumbers>
82 virtual std::unique_ptr<IPDBEnumLineNumbers>
84
85 virtual void getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const = 0;
86 virtual void getBackEndVersion(VersionInfo &Version) const = 0;
87 virtual PDB_MemberAccess getAccess() const = 0;
88 virtual uint32_t getAddressOffset() const = 0;
89 virtual uint32_t getAddressSection() const = 0;
90 virtual uint32_t getAge() const = 0;
91 virtual SymIndexId getArrayIndexTypeId() const = 0;
92 virtual uint32_t getBaseDataOffset() const = 0;
93 virtual uint32_t getBaseDataSlot() const = 0;
94 virtual SymIndexId getBaseSymbolId() const = 0;
95 virtual PDB_BuiltinType getBuiltinType() const = 0;
96 virtual uint32_t getBitPosition() const = 0;
98 virtual SymIndexId getClassParentId() const = 0;
99 virtual std::string getCompilerName() const = 0;
100 virtual uint32_t getCount() const = 0;
101 virtual uint32_t getCountLiveRanges() const = 0;
102 virtual void getFrontEndVersion(VersionInfo &Version) const = 0;
103 virtual PDB_Lang getLanguage() const = 0;
104 virtual SymIndexId getLexicalParentId() const = 0;
105 virtual std::string getLibraryName() const = 0;
110 virtual SymIndexId getLowerBoundId() const = 0;
111 virtual uint32_t getMemorySpaceKind() const = 0;
112 virtual std::string getName() const = 0;
114 virtual uint32_t getNumberOfColumns() const = 0;
115 virtual uint32_t getNumberOfModifiers() const = 0;
117 virtual uint32_t getNumberOfRows() const = 0;
118 virtual std::string getObjectFileName() const = 0;
119 virtual uint32_t getOemId() const = 0;
120 virtual SymIndexId getOemSymbolId() const = 0;
121 virtual uint32_t getOffsetInUdt() const = 0;
122 virtual PDB_Cpu getPlatform() const = 0;
123 virtual uint32_t getRank() const = 0;
125 virtual uint32_t getRegisterType() const = 0;
127 virtual uint32_t getSamplerSlot() const = 0;
128 virtual uint32_t getSignature() const = 0;
129 virtual uint32_t getSizeInUdt() const = 0;
130 virtual uint32_t getSlot() const = 0;
131 virtual std::string getSourceFileName() const = 0;
132 virtual std::unique_ptr<IPDBLineNumber>
134 virtual uint32_t getStride() const = 0;
135 virtual SymIndexId getSubTypeId() const = 0;
136 virtual std::string getSymbolsFileName() const = 0;
137 virtual SymIndexId getSymIndexId() const = 0;
138 virtual uint32_t getTargetOffset() const = 0;
141 virtual uint32_t getTargetSection() const = 0;
142 virtual uint32_t getTextureSlot() const = 0;
143 virtual uint32_t getTimeStamp() const = 0;
144 virtual uint32_t getToken() const = 0;
145 virtual SymIndexId getTypeId() const = 0;
146 virtual uint32_t getUavSlot() const = 0;
147 virtual std::string getUndecoratedName() const = 0;
148 virtual std::string getUndecoratedNameEx(PDB_UndnameFlags Flags) const = 0;
149 virtual SymIndexId getUnmodifiedTypeId() const = 0;
150 virtual SymIndexId getUpperBoundId() const = 0;
151 virtual Variant getValue() const = 0;
153 virtual uint32_t getVirtualBaseOffset() const = 0;
154 virtual std::unique_ptr<PDBSymbolTypeBuiltin>
157 virtual PDB_DataKind getDataKind() const = 0;
158 virtual PDB_SymType getSymTag() const = 0;
159 virtual codeview::GUID getGuid() const = 0;
160 virtual int32_t getOffset() const = 0;
161 virtual int32_t getThisAdjust() const = 0;
162 virtual int32_t getVirtualBasePointerOffset() const = 0;
163 virtual PDB_LocType getLocationType() const = 0;
164 virtual PDB_Machine getMachineType() const = 0;
166 virtual uint64_t getLength() const = 0;
167 virtual uint64_t getLiveRangeLength() const = 0;
168 virtual uint64_t getVirtualAddress() const = 0;
169 virtual PDB_UdtType getUdtKind() const = 0;
170 virtual bool hasConstructor() const = 0;
171 virtual bool hasCustomCallingConvention() const = 0;
172 virtual bool hasFarReturn() const = 0;
173 virtual bool isCode() const = 0;
174 virtual bool isCompilerGenerated() const = 0;
175 virtual bool isConstType() const = 0;
176 virtual bool isEditAndContinueEnabled() const = 0;
177 virtual bool isFunction() const = 0;
178 virtual bool getAddressTaken() const = 0;
179 virtual bool getNoStackOrdering() const = 0;
180 virtual bool hasAlloca() const = 0;
181 virtual bool hasAssignmentOperator() const = 0;
182 virtual bool hasCTypes() const = 0;
183 virtual bool hasCastOperator() const = 0;
184 virtual bool hasDebugInfo() const = 0;
185 virtual bool hasEH() const = 0;
186 virtual bool hasEHa() const = 0;
187 virtual bool hasFramePointer() const = 0;
188 virtual bool hasInlAsm() const = 0;
189 virtual bool hasInlineAttribute() const = 0;
190 virtual bool hasInterruptReturn() const = 0;
191 virtual bool hasLongJump() const = 0;
192 virtual bool hasManagedCode() const = 0;
193 virtual bool hasNestedTypes() const = 0;
194 virtual bool hasNoInlineAttribute() const = 0;
195 virtual bool hasNoReturnAttribute() const = 0;
196 virtual bool hasOptimizedCodeDebugInfo() const = 0;
197 virtual bool hasOverloadedOperator() const = 0;
198 virtual bool hasSEH() const = 0;
199 virtual bool hasSecurityChecks() const = 0;
200 virtual bool hasSetJump() const = 0;
201 virtual bool hasStrictGSCheck() const = 0;
202 virtual bool isAcceleratorGroupSharedLocal() const = 0;
203 virtual bool isAcceleratorPointerTagLiveRange() const = 0;
204 virtual bool isAcceleratorStubFunction() const = 0;
205 virtual bool isAggregated() const = 0;
206 virtual bool isIntroVirtualFunction() const = 0;
207 virtual bool isCVTCIL() const = 0;
208 virtual bool isConstructorVirtualBase() const = 0;
209 virtual bool isCxxReturnUdt() const = 0;
210 virtual bool isDataAligned() const = 0;
211 virtual bool isHLSLData() const = 0;
212 virtual bool isHotpatchable() const = 0;
213 virtual bool isIndirectVirtualBaseClass() const = 0;
214 virtual bool isInterfaceUdt() const = 0;
215 virtual bool isIntrinsic() const = 0;
216 virtual bool isLTCG() const = 0;
217 virtual bool isLocationControlFlowDependent() const = 0;
218 virtual bool isMSILNetmodule() const = 0;
219 virtual bool isMatrixRowMajor() const = 0;
220 virtual bool isManagedCode() const = 0;
221 virtual bool isMSILCode() const = 0;
222 virtual bool isMultipleInheritance() const = 0;
223 virtual bool isNaked() const = 0;
224 virtual bool isNested() const = 0;
225 virtual bool isOptimizedAway() const = 0;
226 virtual bool isPacked() const = 0;
227 virtual bool isPointerBasedOnSymbolValue() const = 0;
228 virtual bool isPointerToDataMember() const = 0;
229 virtual bool isPointerToMemberFunction() const = 0;
230 virtual bool isPureVirtual() const = 0;
231 virtual bool isRValueReference() const = 0;
232 virtual bool isRefUdt() const = 0;
233 virtual bool isReference() const = 0;
234 virtual bool isRestrictedType() const = 0;
235 virtual bool isReturnValue() const = 0;
236 virtual bool isSafeBuffers() const = 0;
237 virtual bool isScoped() const = 0;
238 virtual bool isSdl() const = 0;
239 virtual bool isSingleInheritance() const = 0;
240 virtual bool isSplitted() const = 0;
241 virtual bool isStatic() const = 0;
242 virtual bool hasPrivateSymbols() const = 0;
243 virtual bool isUnalignedType() const = 0;
244 virtual bool isUnreached() const = 0;
245 virtual bool isValueUdt() const = 0;
246 virtual bool isVirtual() const = 0;
247 virtual bool isVirtualBaseClass() const = 0;
248 virtual bool isVirtualInheritance() const = 0;
249 virtual bool isVolatileType() const = 0;
250 virtual bool wasInlined() const = 0;
251 virtual std::string getUnused() const = 0;
252};
253
255
256} // namespace pdb
257} // namespace llvm
258
259#endif
std::string Name
raw_pwrite_stream & OS
This file defines the SmallVector class.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
Definition: SmallVector.h:1209
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
The instances of the Type class are immutable: once they are created, they are never changed.
Definition: Type.h:45
LLVM Value Representation.
Definition: Value.h:74
IPDBRawSymbol defines an interface used to represent an arbitrary symbol.
Definition: IPDBRawSymbol.h:45
virtual uint32_t getOffsetInUdt() const =0
virtual uint64_t getTargetVirtualAddress() const =0
virtual std::unique_ptr< IPDBEnumLineNumbers > findInlineeLinesByAddr(uint32_t Section, uint32_t Offset, uint32_t Length) const =0
virtual bool isStatic() const =0
virtual int32_t getVirtualBasePointerOffset() const =0
virtual uint32_t getSignature() const =0
virtual bool isAggregated() const =0
virtual SymIndexId getOemSymbolId() const =0
virtual bool isPacked() const =0
virtual uint32_t getStride() const =0
virtual uint32_t getUavSlot() const =0
virtual bool hasFarReturn() const =0
virtual bool isConstType() const =0
virtual std::string getName() const =0
virtual bool isInterfaceUdt() const =0
virtual SymIndexId getArrayIndexTypeId() const =0
virtual PDB_DataKind getDataKind() const =0
virtual bool getNoStackOrdering() const =0
virtual std::string getLibraryName() const =0
virtual SymIndexId getBaseSymbolId() const =0
virtual bool isManagedCode() const =0
virtual bool isNaked() const =0
virtual void getBackEndVersion(VersionInfo &Version) const =0
virtual bool isVirtualInheritance() const =0
virtual uint32_t getNumberOfRegisterIndices() const =0
virtual bool isVolatileType() const =0
virtual bool hasStrictGSCheck() const =0
virtual bool hasConstructor() const =0
virtual bool isCompilerGenerated() const =0
virtual void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields, PdbSymbolIdField RecurseIdFields) const =0
virtual bool isPureVirtual() const =0
virtual bool hasOptimizedCodeDebugInfo() const =0
virtual bool isFunction() const =0
virtual bool hasLongJump() const =0
virtual SymIndexId getUpperBoundId() const =0
virtual std::unique_ptr< IPDBLineNumber > getSrcLineOnTypeDefn() const =0
virtual PDB_BuiltinType getBuiltinType() const =0
virtual uint32_t getLiveRangeStartAddressSection() const =0
virtual void getDataBytes(llvm::SmallVector< uint8_t, 32 > &bytes) const =0
virtual bool isMultipleInheritance() const =0
virtual bool isAcceleratorStubFunction() const =0
virtual bool hasPrivateSymbols() const =0
virtual uint32_t getLiveRangeStartAddressOffset() const =0
virtual std::string getSymbolsFileName() const =0
virtual uint32_t getSamplerSlot() const =0
virtual bool hasNestedTypes() const =0
virtual int32_t getThisAdjust() const =0
virtual uint32_t getTextureSlot() const =0
virtual PDB_CallingConv getCallingConvention() const =0
virtual uint32_t getNumberOfColumns() const =0
virtual uint32_t getBaseDataOffset() const =0
virtual bool hasEHa() const =0
virtual uint32_t getVirtualBaseOffset() const =0
virtual uint32_t getOemId() const =0
virtual std::unique_ptr< PDBSymbolTypeBuiltin > getVirtualBaseTableType() const =0
virtual SymIndexId getSubTypeId() const =0
virtual uint32_t getToken() const =0
virtual bool isUnalignedType() const =0
virtual PDB_Machine getMachineType() const =0
virtual bool isSafeBuffers() const =0
virtual SymIndexId getUnmodifiedTypeId() const =0
virtual PDB_SymType getSymTag() const =0
virtual bool hasCustomCallingConvention() const =0
virtual std::unique_ptr< IPDBEnumSymbols > findInlineFramesByAddr(uint32_t Section, uint32_t Offset) const =0
virtual uint32_t getCount() const =0
virtual PDB_Lang getLanguage() const =0
virtual bool isRestrictedType() const =0
virtual std::string getUndecoratedName() const =0
virtual std::string getCompilerName() const =0
virtual bool isHotpatchable() const =0
virtual std::string getUndecoratedNameEx(PDB_UndnameFlags Flags) const =0
virtual std::unique_ptr< IPDBEnumSymbols > findInlineFramesByRVA(uint32_t RVA) const =0
virtual int32_t getOffset() const =0
virtual bool isMSILCode() const =0
virtual PDB_UdtType getUdtKind() const =0
virtual bool isPointerBasedOnSymbolValue() const =0
virtual uint32_t getRelativeVirtualAddress() const =0
virtual uint32_t getAddressSection() const =0
virtual bool hasAssignmentOperator() const =0
virtual bool hasFramePointer() const =0
virtual bool isDataAligned() const =0
virtual std::unique_ptr< IPDBEnumSymbols > findChildren(PDB_SymType Type) const =0
virtual bool isValueUdt() const =0
virtual bool hasInlineAttribute() const =0
virtual uint32_t getCountLiveRanges() const =0
virtual bool isScoped() const =0
virtual bool isRefUdt() const =0
virtual bool isVirtual() const =0
virtual bool wasInlined() const =0
virtual bool hasSEH() const =0
virtual bool isEditAndContinueEnabled() const =0
virtual bool isUnreached() const =0
virtual bool isPointerToMemberFunction() const =0
virtual bool isLocationControlFlowDependent() const =0
virtual bool hasInterruptReturn() const =0
virtual bool hasCTypes() const =0
virtual std::unique_ptr< IPDBEnumLineNumbers > findInlineeLinesByVA(uint64_t VA, uint32_t Length) const =0
virtual SymIndexId getSymIndexId() const =0
virtual std::unique_ptr< IPDBEnumSymbols > findInlineFramesByVA(uint64_t VA) const =0
virtual uint32_t getVirtualBaseDispIndex() const =0
virtual uint32_t getMemorySpaceKind() const =0
virtual bool hasAlloca() const =0
virtual std::unique_ptr< IPDBEnumSymbols > findChildren(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags) const =0
virtual uint32_t getNumberOfAcceleratorPointerTags() const =0
virtual codeview::ThunkOrdinal getThunkOrdinal() const =0
virtual codeview::RegisterId getRegisterId() const =0
virtual bool isLTCG() const =0
virtual uint64_t getLiveRangeLength() const =0
virtual uint32_t getTargetOffset() const =0
virtual SymIndexId getLexicalParentId() const =0
virtual uint32_t getRegisterType() const =0
virtual bool isSingleInheritance() const =0
virtual PDB_MemberAccess getAccess() const =0
virtual uint64_t getLength() const =0
virtual bool isIntrinsic() const =0
virtual uint32_t getLiveRangeStartRelativeVirtualAddress() const =0
virtual bool hasInlAsm() const =0
virtual bool isCode() const =0
virtual uint32_t getTargetSection() const =0
virtual bool isSplitted() const =0
virtual bool hasEH() const =0
virtual uint32_t getNumberOfModifiers() const =0
virtual bool isMSILNetmodule() const =0
virtual uint32_t getTargetRelativeVirtualAddress() const =0
virtual bool isRValueReference() const =0
virtual bool hasNoReturnAttribute() const =0
virtual uint64_t getVirtualAddress() const =0
virtual PDB_LocType getLocationType() const =0
virtual bool isReturnValue() const =0
virtual SymIndexId getVirtualTableShapeId() const =0
virtual SymIndexId getLowerBoundId() const =0
virtual std::unique_ptr< IPDBEnumSymbols > findChildrenByAddr(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags, uint32_t Section, uint32_t Offset) const =0
virtual SymIndexId getClassParentId() const =0
virtual std::unique_ptr< IPDBEnumSymbols > findChildrenByVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags, uint64_t VA) const =0
virtual uint32_t getBitPosition() const =0
virtual bool isVirtualBaseClass() const =0
virtual void getFrontEndVersion(VersionInfo &Version) const =0
virtual Variant getValue() const =0
virtual std::string getSourceFileName() const =0
virtual bool isAcceleratorGroupSharedLocal() const =0
virtual uint32_t getTimeStamp() const =0
virtual std::unique_ptr< IPDBEnumLineNumbers > findInlineeLines() const =0
virtual bool hasDebugInfo() const =0
virtual bool getAddressTaken() const =0
virtual bool hasNoInlineAttribute() const =0
virtual std::unique_ptr< IPDBEnumLineNumbers > findInlineeLinesByRVA(uint32_t RVA, uint32_t Length) const =0
virtual PDB_Cpu getPlatform() const =0
virtual bool isMatrixRowMajor() const =0
virtual uint32_t getNumberOfRows() const =0
virtual uint32_t getBaseDataSlot() const =0
virtual uint32_t getRank() const =0
virtual bool isConstructorVirtualBase() const =0
virtual bool isIntroVirtualFunction() const =0
virtual bool hasSecurityChecks() const =0
virtual bool hasOverloadedOperator() const =0
virtual bool isIndirectVirtualBaseClass() const =0
virtual bool isHLSLData() const =0
virtual bool isCVTCIL() const =0
virtual uint32_t getSlot() const =0
virtual bool isCxxReturnUdt() const =0
virtual bool isAcceleratorPointerTagLiveRange() const =0
virtual uint32_t getSizeInUdt() const =0
virtual uint32_t getAddressOffset() const =0
virtual bool hasManagedCode() const =0
virtual bool isOptimizedAway() const =0
virtual bool isPointerToDataMember() const =0
virtual uint32_t getAge() const =0
virtual std::string getUnused() const =0
virtual SymIndexId getTypeId() const =0
virtual codeview::GUID getGuid() const =0
virtual bool hasCastOperator() const =0
virtual std::unique_ptr< IPDBEnumSymbols > findChildrenByRVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags, uint32_t RVA) const =0
virtual bool isReference() const =0
virtual bool hasSetJump() const =0
virtual codeview::RegisterId getLocalBasePointerRegisterId() const =0
virtual bool isSdl() const =0
virtual std::string getObjectFileName() const =0
virtual bool isNested() const =0
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
CPUType
These values correspond to the CV_CPU_TYPE_e enumeration, and are documented here: https://msdn....
Definition: CodeView.h:76
CallingConvention
These values correspond to the CV_call_e enumeration, and are documented at the following locations: ...
Definition: CodeView.h:184
ThunkOrdinal
These values correspond to the THUNK_ORDINAL enumeration.
Definition: CodeView.h:563
SourceLanguage
These values correspond to the CV_CFL_LANG enumeration in the Microsoft Debug Interface Access SDK,...
Definition: CodeView.h:146
uint32_t SymIndexId
Definition: PDBTypes.h:26
PDB_NameSearchFlags
Defines flags used for enumerating child symbols.
Definition: PDBTypes.h:102
PDB_BuiltinType
These values correspond to the Basictype enumeration, and are documented here: https://msdn....
Definition: PDBTypes.h:335
PDB_MemberAccess
Definition: PDBTypes.h:385
PDB_UdtType
These values correspond to the UdtKind enumeration, and are documented here: https://msdn....
Definition: PDBTypes.h:310
PDB_SymType
These values correspond to the SymTagEnum enumeration, and are documented here: https://msdn....
Definition: PDBTypes.h:243
PDB_LocType
These values correspond to the LocationType enumeration, and are documented here: https://msdn....
Definition: PDBTypes.h:292
PDB_DataKind
These values correspond to the DataKind enumeration, and are documented here: https://msdn....
Definition: PDBTypes.h:228
LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE()
PDB_UndnameFlags
These values correspond to the flags that can be combined to control the return of an undecorated nam...
Definition: PDBTypes.h:362
void dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value, int Indent, const IPDBSession &Session, PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags, PdbSymbolIdField RecurseFlags)
Definition: PDBSymbol.cpp:202
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
@ Length
Definition: DWP.cpp:456
This represents the 'GUID' type from windows.h.
Definition: GUID.h:21