LLVM  9.0.0svn
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"
13 #include "llvm/ADT/BitmaskEnum.h"
14 #include "llvm/ADT/SmallVector.h"
15 #include "llvm/ADT/StringRef.h"
17 #include <memory>
18 
19 namespace llvm {
20 class raw_ostream;
21 
22 namespace pdb {
23 
24 class IPDBSession;
25 class PDBSymbolTypeVTable;
26 class PDBSymbolTypeVTableShape;
27 
28 enum class PdbSymbolIdField : uint32_t {
29  None = 0,
30  SymIndexId = 1 << 0,
31  LexicalParent = 1 << 1,
32  ClassParent = 1 << 2,
33  Type = 1 << 3,
34  UnmodifiedType = 1 << 4,
35  All = 0xFFFFFFFF,
36  LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ All)
37 };
38 
40  int Indent, const IPDBSession &Session,
41  PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags,
42  PdbSymbolIdField RecurseFlags);
43 
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.
50 public:
51  virtual ~IPDBRawSymbol();
52 
53  virtual void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields,
54  PdbSymbolIdField RecurseIdFields) const = 0;
55 
56  virtual std::unique_ptr<IPDBEnumSymbols>
57  findChildren(PDB_SymType Type) const = 0;
58 
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;
72 
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;
79 
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;
88 
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;
256 };
257 
259 
260 } // namespace pdb
261 } // namespace llvm
262 
263 #endif
#define LLVM_MARK_AS_BITMASK_ENUM(LargestValue)
LLVM_MARK_AS_BITMASK_ENUM lets you opt in an individual enum type so you can perform bitwise operatio...
Definition: BitmaskEnum.h:41
IPDBSession defines an interface used to provide a context for querying debug information from a debu...
Definition: IPDBSession.h:25
This class represents lattice values for constants.
Definition: AllocatorList.h:23
amdgpu Simplify well known AMD library false FunctionCallee Value const Twine & Name
PDB_UdtType
These values correspond to the UdtKind enumeration, and are documented here: https://msdn.microsoft.com/en-us/library/wcstk66t.aspx.
Definition: PDBTypes.h:249
PDB_NameSearchFlags
Defines flags used for enumerating child symbols.
Definition: PDBTypes.h:100
static StringRef getName(Value *V)
This represents the &#39;GUID&#39; type from windows.h.
Definition: GUID.h:21
std::pair< StringRef, StringRef > getToken(StringRef Source, StringRef Delimiters=" \\\)
getToken - This function extracts one token from source, ignoring any leading characters that appear ...
static Error getOffset(const SymbolRef &Sym, SectionRef Sec, uint64_t &Result)
PDB_UndnameFlags
These values correspond to the flags that can be combined to control the return of an undecorated nam...
Definition: PDBTypes.h:300
PDB_SymType
These values correspond to the SymTagEnum enumeration, and are documented here: https://msdn.microsoft.com/en-us/library/bkedss5f.aspx.
Definition: PDBTypes.h:182
void dump(const SparseBitVector< ElementSize > &LHS, raw_ostream &out)
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:45
unsigned getCallingConvention(StringRef LanguageString)
Definition: Dwarf.cpp:379
LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE()
PDB_DataKind
These values correspond to the DataKind enumeration, and are documented here: https://msdn.microsoft.com/en-us/library/b2x2t313.aspx.
Definition: PDBTypes.h:167
IPDBRawSymbol defines an interface used to represent an arbitrary symbol.
Definition: IPDBRawSymbol.h:49
void dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value, int Indent, const IPDBSession &Session, PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags, PdbSymbolIdField RecurseFlags)
Definition: PDBSymbol.cpp:185
unsigned getLanguage(StringRef LanguageString)
Definition: Dwarf.cpp:313
PDB_LocType
These values correspond to the LocationType enumeration, and are documented here: https://msdn...
Definition: PDBTypes.h:231
SourceLanguage
These values correspond to the CV_CFL_LANG enumeration, and are documented here: https://msdn.microsoft.com/en-us/library/bw3aekw6.aspx.
Definition: CodeView.h:143
static bool hasDebugInfo(const MachineModuleInfo *MMI, const MachineFunction *MF)
CPUType
These values correspond to the CV_CPU_TYPE_e enumeration, and are documented here: https://msdn...
Definition: CodeView.h:78
uint32_t SymIndexId
Definition: PDBTypes.h:25
ThunkOrdinal
These values correspond to the THUNK_ORDINAL enumeration.
Definition: CodeView.h:531
PDB_BuiltinType
These values correspond to the Basictype enumeration, and are documented here: https://msdn.microsoft.com/en-us/library/4szdtzc3.aspx.
Definition: PDBTypes.h:274
LLVM Value Representation.
Definition: Value.h:72
CallingConvention
These values correspond to the CV_call_e enumeration, and are documented at the following locations: ...
Definition: CodeView.h:173
This class implements an extremely fast bulk output stream that can only output to a stream...
Definition: raw_ostream.h:45
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:48
static std::string getSignature(FunctionType *FTy)
const uint64_t Version
Definition: InstrProf.h:984
PDB_MemberAccess
Definition: PDBTypes.h:323