]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/llvm/include/llvm/DebugInfo/PDB/IPDBRawSymbol.h
MFC r355940:
[FreeBSD/FreeBSD.git] / contrib / llvm-project / llvm / include / llvm / DebugInfo / PDB / IPDBRawSymbol.h
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"
16 #include "llvm/DebugInfo/CodeView/CodeView.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
39 void dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value,
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.
49 class IPDBRawSymbol {
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
258 LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
259
260 } // namespace pdb
261 } // namespace llvm
262
263 #endif