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