Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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/DebugInfo/CodeView/CodeView.h"
16
#include <memory>
17
 
18
namespace llvm {
19
class raw_ostream;
20
class StringRef;
21
 
22
namespace pdb {
23
 
24
enum class PdbSymbolIdField : uint32_t {
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
 
35
void dumpSymbolIdField(raw_ostream &OS, StringRef Name, SymIndexId Value,
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.
45
class IPDBRawSymbol {
46
public:
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>
53
  findChildren(PDB_SymType Type) const = 0;
54
 
55
  virtual std::unique_ptr<IPDBEnumSymbols>
56
  findChildren(PDB_SymType Type, StringRef Name,
57
               PDB_NameSearchFlags Flags) const = 0;
58
  virtual std::unique_ptr<IPDBEnumSymbols>
59
  findChildrenByAddr(PDB_SymType Type, StringRef Name,
60
                     PDB_NameSearchFlags Flags,
61
                     uint32_t Section, uint32_t Offset) const = 0;
62
  virtual std::unique_ptr<IPDBEnumSymbols>
63
  findChildrenByVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
64
                   uint64_t VA) const = 0;
65
  virtual std::unique_ptr<IPDBEnumSymbols>
66
  findChildrenByRVA(PDB_SymType Type, StringRef Name, PDB_NameSearchFlags Flags,
67
                    uint32_t RVA) const = 0;
68
 
69
  virtual std::unique_ptr<IPDBEnumSymbols>
70
  findInlineFramesByAddr(uint32_t Section, uint32_t Offset) const = 0;
71
  virtual std::unique_ptr<IPDBEnumSymbols>
72
  findInlineFramesByRVA(uint32_t RVA) const = 0;
73
  virtual std::unique_ptr<IPDBEnumSymbols>
74
  findInlineFramesByVA(uint64_t VA) const = 0;
75
 
76
  virtual std::unique_ptr<IPDBEnumLineNumbers> findInlineeLines() const = 0;
77
  virtual std::unique_ptr<IPDBEnumLineNumbers>
78
  findInlineeLinesByAddr(uint32_t Section, uint32_t Offset,
79
                         uint32_t Length) const = 0;
80
  virtual std::unique_ptr<IPDBEnumLineNumbers>
81
  findInlineeLinesByRVA(uint32_t RVA, uint32_t Length) const = 0;
82
  virtual std::unique_ptr<IPDBEnumLineNumbers>
83
  findInlineeLinesByVA(uint64_t VA, uint32_t Length) const = 0;
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;
97
  virtual PDB_CallingConv getCallingConvention() 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;
106
  virtual uint32_t getLiveRangeStartAddressOffset() const = 0;
107
  virtual uint32_t getLiveRangeStartAddressSection() const = 0;
108
  virtual uint32_t getLiveRangeStartRelativeVirtualAddress() const = 0;
109
  virtual codeview::RegisterId getLocalBasePointerRegisterId() const = 0;
110
  virtual SymIndexId getLowerBoundId() const = 0;
111
  virtual uint32_t getMemorySpaceKind() const = 0;
112
  virtual std::string getName() const = 0;
113
  virtual uint32_t getNumberOfAcceleratorPointerTags() const = 0;
114
  virtual uint32_t getNumberOfColumns() const = 0;
115
  virtual uint32_t getNumberOfModifiers() const = 0;
116
  virtual uint32_t getNumberOfRegisterIndices() 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;
124
  virtual codeview::RegisterId getRegisterId() const = 0;
125
  virtual uint32_t getRegisterType() const = 0;
126
  virtual uint32_t getRelativeVirtualAddress() 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>
133
  getSrcLineOnTypeDefn() const = 0;
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;
139
  virtual uint32_t getTargetRelativeVirtualAddress() const = 0;
140
  virtual uint64_t getTargetVirtualAddress() 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;
152
  virtual uint32_t getVirtualBaseDispIndex() const = 0;
153
  virtual uint32_t getVirtualBaseOffset() const = 0;
154
  virtual std::unique_ptr<PDBSymbolTypeBuiltin>
155
  getVirtualBaseTableType() const = 0;
156
  virtual SymIndexId getVirtualTableShapeId() const = 0;
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;
165
  virtual codeview::ThunkOrdinal getThunkOrdinal() 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
 
254
LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
255
 
256
} // namespace pdb
257
} // namespace llvm
258
 
259
#endif