1283625Sdim//===- IPDBRawSymbol.h - base interface for PDB symbol types ----*- C++ -*-===//
2283625Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6283625Sdim//
7283625Sdim//===----------------------------------------------------------------------===//
8283625Sdim
9283625Sdim#ifndef LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H
10283625Sdim#define LLVM_DEBUGINFO_PDB_IPDBRAWSYMBOL_H
11283625Sdim
12283625Sdim#include "PDBTypes.h"
13344779Sdim#include "llvm/ADT/BitmaskEnum.h"
14283625Sdim#include "llvm/ADT/SmallVector.h"
15283625Sdim#include "llvm/ADT/StringRef.h"
16309124Sdim#include "llvm/DebugInfo/CodeView/CodeView.h"
17283625Sdim#include <memory>
18283625Sdim
19283625Sdimnamespace llvm {
20283625Sdimclass raw_ostream;
21283625Sdim
22309124Sdimnamespace pdb {
23309124Sdim
24344779Sdimclass IPDBSession;
25321369Sdimclass PDBSymbolTypeVTable;
26321369Sdimclass PDBSymbolTypeVTableShape;
27321369Sdim
28344779Sdimenum class PdbSymbolIdField : uint32_t {
29344779Sdim  None = 0,
30344779Sdim  SymIndexId = 1 << 0,
31344779Sdim  LexicalParent = 1 << 1,
32344779Sdim  ClassParent = 1 << 2,
33344779Sdim  Type = 1 << 3,
34344779Sdim  UnmodifiedType = 1 << 4,
35344779Sdim  All = 0xFFFFFFFF,
36344779Sdim  LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ All)
37344779Sdim};
38344779Sdim
39344779Sdimvoid dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value,
40344779Sdim                       int Indent, const IPDBSession &Session,
41344779Sdim                       PdbSymbolIdField FieldId, PdbSymbolIdField ShowFlags,
42344779Sdim                       PdbSymbolIdField RecurseFlags);
43344779Sdim
44283625Sdim/// IPDBRawSymbol defines an interface used to represent an arbitrary symbol.
45283625Sdim/// It exposes a monolithic interface consisting of accessors for the union of
46283625Sdim/// all properties that are valid for any symbol type.  This interface is then
47283625Sdim/// wrapped by a concrete class which exposes only those set of methods valid
48283625Sdim/// for this particular symbol type.  See PDBSymbol.h for more details.
49283625Sdimclass IPDBRawSymbol {
50283625Sdimpublic:
51283625Sdim  virtual ~IPDBRawSymbol();
52283625Sdim
53344779Sdim  virtual void dump(raw_ostream &OS, int Indent, PdbSymbolIdField ShowIdFields,
54344779Sdim                    PdbSymbolIdField RecurseIdFields) const = 0;
55283625Sdim
56283625Sdim  virtual std::unique_ptr<IPDBEnumSymbols>
57283625Sdim  findChildren(PDB_SymType Type) const = 0;
58283625Sdim
59283625Sdim  virtual std::unique_ptr<IPDBEnumSymbols>
60283625Sdim  findChildren(PDB_SymType Type, StringRef Name,
61283625Sdim               PDB_NameSearchFlags Flags) const = 0;
62283625Sdim  virtual std::unique_ptr<IPDBEnumSymbols>
63341825Sdim  findChildrenByAddr(PDB_SymType Type, StringRef Name,
64341825Sdim                     PDB_NameSearchFlags Flags,
65341825Sdim                     uint32_t Section, uint32_t Offset) const = 0;
66341825Sdim  virtual std::unique_ptr<IPDBEnumSymbols>
67341825Sdim  findChildrenByVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
68341825Sdim                   uint64_t VA) const = 0;
69341825Sdim  virtual std::unique_ptr<IPDBEnumSymbols>
70283625Sdim  findChildrenByRVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
71283625Sdim                    uint32_t RVA) const = 0;
72341825Sdim
73283625Sdim  virtual std::unique_ptr<IPDBEnumSymbols>
74341825Sdim  findInlineFramesByAddr(uint32_t Section, uint32_t Offset) const = 0;
75341825Sdim  virtual std::unique_ptr<IPDBEnumSymbols>
76283625Sdim  findInlineFramesByRVA(uint32_t RVA) const = 0;
77341825Sdim  virtual std::unique_ptr<IPDBEnumSymbols>
78341825Sdim  findInlineFramesByVA(uint64_t VA) const = 0;
79283625Sdim
80341825Sdim  virtual std::unique_ptr<IPDBEnumLineNumbers> findInlineeLines() const = 0;
81341825Sdim  virtual std::unique_ptr<IPDBEnumLineNumbers>
82341825Sdim  findInlineeLinesByAddr(uint32_t Section, uint32_t Offset,
83341825Sdim                         uint32_t Length) const = 0;
84341825Sdim  virtual std::unique_ptr<IPDBEnumLineNumbers>
85341825Sdim  findInlineeLinesByRVA(uint32_t RVA, uint32_t Length) const = 0;
86341825Sdim  virtual std::unique_ptr<IPDBEnumLineNumbers>
87341825Sdim  findInlineeLinesByVA(uint64_t VA, uint32_t Length) const = 0;
88341825Sdim
89283625Sdim  virtual void getDataBytes(llvm::SmallVector<uint8_t, 32> &bytes) const = 0;
90283625Sdim  virtual void getBackEndVersion(VersionInfo &Version) const = 0;
91283625Sdim  virtual PDB_MemberAccess getAccess() const = 0;
92283625Sdim  virtual uint32_t getAddressOffset() const = 0;
93283625Sdim  virtual uint32_t getAddressSection() const = 0;
94283625Sdim  virtual uint32_t getAge() const = 0;
95344779Sdim  virtual SymIndexId getArrayIndexTypeId() const = 0;
96283625Sdim  virtual uint32_t getBaseDataOffset() const = 0;
97283625Sdim  virtual uint32_t getBaseDataSlot() const = 0;
98344779Sdim  virtual SymIndexId getBaseSymbolId() const = 0;
99283625Sdim  virtual PDB_BuiltinType getBuiltinType() const = 0;
100283625Sdim  virtual uint32_t getBitPosition() const = 0;
101283625Sdim  virtual PDB_CallingConv getCallingConvention() const = 0;
102344779Sdim  virtual SymIndexId getClassParentId() const = 0;
103283625Sdim  virtual std::string getCompilerName() const = 0;
104283625Sdim  virtual uint32_t getCount() const = 0;
105283625Sdim  virtual uint32_t getCountLiveRanges() const = 0;
106283625Sdim  virtual void getFrontEndVersion(VersionInfo &Version) const = 0;
107283625Sdim  virtual PDB_Lang getLanguage() const = 0;
108344779Sdim  virtual SymIndexId getLexicalParentId() const = 0;
109283625Sdim  virtual std::string getLibraryName() const = 0;
110283625Sdim  virtual uint32_t getLiveRangeStartAddressOffset() const = 0;
111283625Sdim  virtual uint32_t getLiveRangeStartAddressSection() const = 0;
112283625Sdim  virtual uint32_t getLiveRangeStartRelativeVirtualAddress() const = 0;
113309124Sdim  virtual codeview::RegisterId getLocalBasePointerRegisterId() const = 0;
114344779Sdim  virtual SymIndexId getLowerBoundId() const = 0;
115283625Sdim  virtual uint32_t getMemorySpaceKind() const = 0;
116283625Sdim  virtual std::string getName() const = 0;
117283625Sdim  virtual uint32_t getNumberOfAcceleratorPointerTags() const = 0;
118283625Sdim  virtual uint32_t getNumberOfColumns() const = 0;
119283625Sdim  virtual uint32_t getNumberOfModifiers() const = 0;
120283625Sdim  virtual uint32_t getNumberOfRegisterIndices() const = 0;
121283625Sdim  virtual uint32_t getNumberOfRows() const = 0;
122283625Sdim  virtual std::string getObjectFileName() const = 0;
123283625Sdim  virtual uint32_t getOemId() const = 0;
124344779Sdim  virtual SymIndexId getOemSymbolId() const = 0;
125283625Sdim  virtual uint32_t getOffsetInUdt() const = 0;
126283625Sdim  virtual PDB_Cpu getPlatform() const = 0;
127283625Sdim  virtual uint32_t getRank() const = 0;
128309124Sdim  virtual codeview::RegisterId getRegisterId() const = 0;
129283625Sdim  virtual uint32_t getRegisterType() const = 0;
130283625Sdim  virtual uint32_t getRelativeVirtualAddress() const = 0;
131283625Sdim  virtual uint32_t getSamplerSlot() const = 0;
132283625Sdim  virtual uint32_t getSignature() const = 0;
133283625Sdim  virtual uint32_t getSizeInUdt() const = 0;
134283625Sdim  virtual uint32_t getSlot() const = 0;
135283625Sdim  virtual std::string getSourceFileName() const = 0;
136341825Sdim  virtual std::unique_ptr<IPDBLineNumber>
137341825Sdim  getSrcLineOnTypeDefn() const = 0;
138283625Sdim  virtual uint32_t getStride() const = 0;
139344779Sdim  virtual SymIndexId getSubTypeId() const = 0;
140283625Sdim  virtual std::string getSymbolsFileName() const = 0;
141344779Sdim  virtual SymIndexId getSymIndexId() const = 0;
142283625Sdim  virtual uint32_t getTargetOffset() const = 0;
143283625Sdim  virtual uint32_t getTargetRelativeVirtualAddress() const = 0;
144283625Sdim  virtual uint64_t getTargetVirtualAddress() const = 0;
145283625Sdim  virtual uint32_t getTargetSection() const = 0;
146283625Sdim  virtual uint32_t getTextureSlot() const = 0;
147283625Sdim  virtual uint32_t getTimeStamp() const = 0;
148283625Sdim  virtual uint32_t getToken() const = 0;
149344779Sdim  virtual SymIndexId getTypeId() const = 0;
150283625Sdim  virtual uint32_t getUavSlot() const = 0;
151283625Sdim  virtual std::string getUndecoratedName() const = 0;
152327952Sdim  virtual std::string getUndecoratedNameEx(PDB_UndnameFlags Flags) const = 0;
153344779Sdim  virtual SymIndexId getUnmodifiedTypeId() const = 0;
154344779Sdim  virtual SymIndexId getUpperBoundId() const = 0;
155283625Sdim  virtual Variant getValue() const = 0;
156283625Sdim  virtual uint32_t getVirtualBaseDispIndex() const = 0;
157283625Sdim  virtual uint32_t getVirtualBaseOffset() const = 0;
158321369Sdim  virtual std::unique_ptr<PDBSymbolTypeBuiltin>
159321369Sdim  getVirtualBaseTableType() const = 0;
160344779Sdim  virtual SymIndexId getVirtualTableShapeId() const = 0;
161283625Sdim  virtual PDB_DataKind getDataKind() const = 0;
162283625Sdim  virtual PDB_SymType getSymTag() const = 0;
163321369Sdim  virtual codeview::GUID getGuid() const = 0;
164283625Sdim  virtual int32_t getOffset() const = 0;
165283625Sdim  virtual int32_t getThisAdjust() const = 0;
166283625Sdim  virtual int32_t getVirtualBasePointerOffset() const = 0;
167283625Sdim  virtual PDB_LocType getLocationType() const = 0;
168283625Sdim  virtual PDB_Machine getMachineType() const = 0;
169309124Sdim  virtual codeview::ThunkOrdinal getThunkOrdinal() const = 0;
170283625Sdim  virtual uint64_t getLength() const = 0;
171283625Sdim  virtual uint64_t getLiveRangeLength() const = 0;
172283625Sdim  virtual uint64_t getVirtualAddress() const = 0;
173283625Sdim  virtual PDB_UdtType getUdtKind() const = 0;
174283625Sdim  virtual bool hasConstructor() const = 0;
175283625Sdim  virtual bool hasCustomCallingConvention() const = 0;
176283625Sdim  virtual bool hasFarReturn() const = 0;
177283625Sdim  virtual bool isCode() const = 0;
178283625Sdim  virtual bool isCompilerGenerated() const = 0;
179283625Sdim  virtual bool isConstType() const = 0;
180283625Sdim  virtual bool isEditAndContinueEnabled() const = 0;
181283625Sdim  virtual bool isFunction() const = 0;
182283625Sdim  virtual bool getAddressTaken() const = 0;
183283625Sdim  virtual bool getNoStackOrdering() const = 0;
184283625Sdim  virtual bool hasAlloca() const = 0;
185283625Sdim  virtual bool hasAssignmentOperator() const = 0;
186283625Sdim  virtual bool hasCTypes() const = 0;
187283625Sdim  virtual bool hasCastOperator() const = 0;
188283625Sdim  virtual bool hasDebugInfo() const = 0;
189283625Sdim  virtual bool hasEH() const = 0;
190283625Sdim  virtual bool hasEHa() const = 0;
191283625Sdim  virtual bool hasFramePointer() const = 0;
192283625Sdim  virtual bool hasInlAsm() const = 0;
193283625Sdim  virtual bool hasInlineAttribute() const = 0;
194283625Sdim  virtual bool hasInterruptReturn() const = 0;
195283625Sdim  virtual bool hasLongJump() const = 0;
196283625Sdim  virtual bool hasManagedCode() const = 0;
197283625Sdim  virtual bool hasNestedTypes() const = 0;
198283625Sdim  virtual bool hasNoInlineAttribute() const = 0;
199283625Sdim  virtual bool hasNoReturnAttribute() const = 0;
200283625Sdim  virtual bool hasOptimizedCodeDebugInfo() const = 0;
201283625Sdim  virtual bool hasOverloadedOperator() const = 0;
202283625Sdim  virtual bool hasSEH() const = 0;
203283625Sdim  virtual bool hasSecurityChecks() const = 0;
204283625Sdim  virtual bool hasSetJump() const = 0;
205283625Sdim  virtual bool hasStrictGSCheck() const = 0;
206283625Sdim  virtual bool isAcceleratorGroupSharedLocal() const = 0;
207283625Sdim  virtual bool isAcceleratorPointerTagLiveRange() const = 0;
208283625Sdim  virtual bool isAcceleratorStubFunction() const = 0;
209283625Sdim  virtual bool isAggregated() const = 0;
210283625Sdim  virtual bool isIntroVirtualFunction() const = 0;
211283625Sdim  virtual bool isCVTCIL() const = 0;
212283625Sdim  virtual bool isConstructorVirtualBase() const = 0;
213283625Sdim  virtual bool isCxxReturnUdt() const = 0;
214283625Sdim  virtual bool isDataAligned() const = 0;
215283625Sdim  virtual bool isHLSLData() const = 0;
216283625Sdim  virtual bool isHotpatchable() const = 0;
217283625Sdim  virtual bool isIndirectVirtualBaseClass() const = 0;
218283625Sdim  virtual bool isInterfaceUdt() const = 0;
219283625Sdim  virtual bool isIntrinsic() const = 0;
220283625Sdim  virtual bool isLTCG() const = 0;
221283625Sdim  virtual bool isLocationControlFlowDependent() const = 0;
222283625Sdim  virtual bool isMSILNetmodule() const = 0;
223283625Sdim  virtual bool isMatrixRowMajor() const = 0;
224283625Sdim  virtual bool isManagedCode() const = 0;
225283625Sdim  virtual bool isMSILCode() const = 0;
226283625Sdim  virtual bool isMultipleInheritance() const = 0;
227283625Sdim  virtual bool isNaked() const = 0;
228283625Sdim  virtual bool isNested() const = 0;
229283625Sdim  virtual bool isOptimizedAway() const = 0;
230283625Sdim  virtual bool isPacked() const = 0;
231283625Sdim  virtual bool isPointerBasedOnSymbolValue() const = 0;
232283625Sdim  virtual bool isPointerToDataMember() const = 0;
233283625Sdim  virtual bool isPointerToMemberFunction() const = 0;
234283625Sdim  virtual bool isPureVirtual() const = 0;
235283625Sdim  virtual bool isRValueReference() const = 0;
236283625Sdim  virtual bool isRefUdt() const = 0;
237283625Sdim  virtual bool isReference() const = 0;
238283625Sdim  virtual bool isRestrictedType() const = 0;
239283625Sdim  virtual bool isReturnValue() const = 0;
240283625Sdim  virtual bool isSafeBuffers() const = 0;
241283625Sdim  virtual bool isScoped() const = 0;
242283625Sdim  virtual bool isSdl() const = 0;
243283625Sdim  virtual bool isSingleInheritance() const = 0;
244283625Sdim  virtual bool isSplitted() const = 0;
245283625Sdim  virtual bool isStatic() const = 0;
246283625Sdim  virtual bool hasPrivateSymbols() const = 0;
247283625Sdim  virtual bool isUnalignedType() const = 0;
248283625Sdim  virtual bool isUnreached() const = 0;
249283625Sdim  virtual bool isValueUdt() const = 0;
250283625Sdim  virtual bool isVirtual() const = 0;
251283625Sdim  virtual bool isVirtualBaseClass() const = 0;
252283625Sdim  virtual bool isVirtualInheritance() const = 0;
253283625Sdim  virtual bool isVolatileType() const = 0;
254283625Sdim  virtual bool wasInlined() const = 0;
255283625Sdim  virtual std::string getUnused() const = 0;
256283625Sdim};
257283625Sdim
258344779SdimLLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
259344779Sdim
260309124Sdim} // namespace pdb
261283625Sdim} // namespace llvm
262283625Sdim
263283625Sdim#endif
264