LLVM: lib/DebugInfo/CodeView/TypeDumpVisitor.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
10
20
21using namespace llvm;
23
25#define CV_TYPE(enum, val) {#enum, enum},
26#include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
27};
28
29#define ENUM_ENTRY(enum_class, enum) \
30 { #enum, std::underlying_type_t<enum_class>(enum_class::enum) }
31
46
51
59
69
85
93
105
110
138
144
148
149#undef ENUM_ENTRY
150
152 switch (LT) {
153#define TYPE_RECORD(ename, value, name) \
154 case ename: \
155 return #name;
156#include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
157 default:
158 break;
159 }
160 return "UnknownLeaf";
161}
162
166
170
174
177 W->getOStream() << " (" << HexNumber(Index.getIndex()) << ")";
178 W->getOStream() << " {\n";
179 W->indent();
180 W->printEnum("TypeLeafKind", unsigned(Record.kind()),
183}
184
186 if (PrintRecordBytes)
188
189 W->unindent();
190 W->startLine() << "}\n";
192}
193
196 W->getOStream() << " {\n";
197 W->indent();
200}
201
203 if (PrintRecordBytes)
205
206 W->unindent();
207 W->startLine() << "}\n";
209}
210
211Error TypeDumpVisitor::visitKnownRecord(CVType &CVR,
214 return EC;
215
217}
218
223}
224
226 auto Indices = Args.getIndices();
232 }
234}
235
238 uint32_t Size = Indices.size();
239 W->printNumber("NumStrings", Size);
240 ListScope Arguments(*W, "Strings");
241 for (uint32_t I = 0; I < Size; ++I) {
243 }
245}
246
248 uint16_t Props = static_cast<uint16_t>(Class.getOptions());
249 W->printNumber("MemberCount", Class.getMemberCount());
254 W->printNumber("SizeOf", Class.getSize());
255 W->printString("Name", Class.getName());
257 W->printString("LinkageName", Class.getUniqueName());
259}
260
262 uint16_t Props = static_cast<uint16_t>(Union.getOptions());
263 W->printNumber("MemberCount", Union.getMemberCount());
266 W->printNumber("SizeOf", Union.getSize());
267 W->printString("Name", Union.getName());
269 W->printString("LinkageName", Union.getUniqueName());
271}
272
274 uint16_t Props = static_cast<uint16_t>(Enum.getOptions());
275 W->printNumber("NumEnumerators", Enum.getMemberCount());
276 W->printFlags("Properties", uint16_t(Enum.getOptions()),
280 W->printString("Name", Enum.getName());
282 W->printString("LinkageName", Enum.getUniqueName());
284}
285
289 W->printNumber("SizeOf", AT.getSize());
290 W->printString("Name", AT.getName());
292}
293
298 W->printString("VFTableName", VFT.getName());
300 W->printString("MethodName", N);
302}
303
307 W->printString("Name", Id.getName());
309}
310
313 W->printEnum("CallingConvention", uint8_t(Proc.getCallConv()),
315 W->printFlags("FunctionOptions", uint8_t(Proc.getOptions()),
320}
321
326 W->printEnum("CallingConvention", uint8_t(MF.getCallConv()),
328 W->printFlags("FunctionOptions", uint8_t(MF.getOptions()),
334}
335
336Error TypeDumpVisitor::visitKnownRecord(CVType &CVR,
338 for (const auto &M : MethodList.getMethods()) {
339 ListScope S(*W, "Method");
340 printMemberAttributes(M.getAccess(), M.getMethodKind(), M.getOptions());
342 if (M.isIntroducingVirtual())
343 W->printHex("VFTableOffset", M.getVFTableOffset());
344 }
346}
347
351 W->printString("Name", Func.getName());
353}
354
356 W->printString("Guid", formatv("{0}", TS.getGuid()).str());
357 W->printNumber("Age", TS.getAge());
358 W->printString("Name", TS.getName());
360}
361
364 W->printEnum("PtrType", unsigned(Ptr.getPointerKind()),
367
368 W->printNumber("IsFlat", Ptr.isFlat());
369 W->printNumber("IsConst", Ptr.isConst());
370 W->printNumber("IsVolatile", Ptr.isVolatile());
371 W->printNumber("IsUnaligned", Ptr.isUnaligned());
372 W->printNumber("IsRestrict", Ptr.isRestrict());
375 W->printNumber("SizeOf", Ptr.getSize());
376
379
381 W->printEnum("Representation", uint16_t(MI.getRepresentation()),
383 }
384
386}
387
389 uint16_t Mods = static_cast<uint16_t>(Mod.getModifiers());
392
394}
395
398 W->printNumber("BitSize", BitField.getBitSize());
399 W->printNumber("BitOffset", BitField.getBitOffset());
401}
402
403Error TypeDumpVisitor::visitKnownRecord(CVType &CVR,
405 W->printNumber("VFEntryCount", Shape.getEntryCount());
407}
408
409Error TypeDumpVisitor::visitKnownRecord(CVType &CVR,
413 W->printNumber("LineNumber", Line.getLineNumber());
415}
416
417Error TypeDumpVisitor::visitKnownRecord(CVType &CVR,
421 W->printNumber("LineNumber", Line.getLineNumber());
422 W->printNumber("Module", Line.getModule());
424}
425
427 W->printNumber("NumArgs", static_cast<uint32_t>(Args.getArgs().size()));
428
429 ListScope Arguments(*W, "Arguments");
430 for (auto Arg : Args.getArgs()) {
432 }
434}
435
436void TypeDumpVisitor::printMemberAttributes(MemberAttributes Attrs) {
437 return printMemberAttributes(Attrs.getAccess(), Attrs.getMethodKind(),
438 Attrs.getFlags());
439}
440
445
449 W->printFlags("MethodOptions", unsigned(Options),
451 }
452}
453
455 W->printHex("UnknownMember", unsigned(Record.Kind));
457}
458
464
470}
471
474 MethodKind K = Method.getMethodKind();
475 printMemberAttributes(Method.getAccess(), K, Method.getOptions());
477
478 if (Method.isIntroducingVirtual())
479 W->printHex("VFTableOffset", Method.getVFTableOffset());
480 W->printString("Name", Method.getName());
482}
483
486 W->printHex("MethodCount", Method.getNumOverloads());
487 printTypeIndex("MethodListIndex", Method.getMethodList());
488 W->printString("Name", Method.getName());
490}
491
497 W->printHex("FieldOffset", Field.getFieldOffset());
498 W->printString("Name", Field.getName());
500}
501
507 W->printString("Name", Field.getName());
509}
510
515}
516
521 W->printNumber("EnumValue", Enum.getValue());
522 W->printString("Name", Enum.getName());
524}
525
531 W->printHex("BaseOffset", Base.getBaseOffset());
533}
534
541 W->printHex("VBPtrOffset", Base.getVBPtrOffset());
542 W->printHex("VBTableIndex", Base.getVTableIndex());
544}
545
550}
551
555}
556
557Error TypeDumpVisitor::visitKnownRecord(CVType &CVR,
561 W->printHex("Signature", Precomp.getSignature());
564}
565
566Error TypeDumpVisitor::visitKnownRecord(CVType &CVR,
568 W->printHex("Signature", EndPrecomp.getSignature());
570}
AMDGPU Lower Kernel Arguments
static const EnumEntry< uint16_t > MemberKindNames[]
static const EnumEntry< uint16_t > TypeModifierNames[]
static const EnumEntry< uint16_t > PtrMemberRepNames[]
static const EnumEntry< uint8_t > CallingConventions[]
static const EnumEntry< uint8_t > FunctionOptionEnum[]
static const EnumEntry< uint16_t > LabelTypeEnum[]
static const EnumEntry< uint16_t > MethodOptionNames[]
static const EnumEntry< uint8_t > MemberAccessNames[]
static const EnumEntry< uint8_t > PtrModeNames[]
static const EnumEntry< uint16_t > ClassOptionNames[]
static const EnumEntry< uint8_t > PtrKindNames[]
OptimizedStructLayoutField Field
#define ENUM_ENTRY(enum_class, enum)
Definition TypeDumpVisitor.cpp:29
static StringRef getLeafTypeName(TypeLeafKind LT)
Definition TypeDumpVisitor.cpp:151
static const EnumEntry< TypeLeafKind > LeafTypeNames[]
Definition TypeDumpVisitor.cpp:24
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Lightweight error class with error context and mandatory checking.
static ErrorSuccess success()
Create a success value.
virtual void printString(StringRef Value)
virtual void printNumber(StringRef Label, char Value)
void printHex(StringRef Label, T Value)
StringRef - Represent a constant reference to a string, i.e.
TypeIndex getElementType() const
TypeIndex getIndexType() const
StringRef getName() const
uint32_t getSignature() const
LF_INDEX - Used to chain two large LF_FIELDLIST or LF_METHODLIST records together.
TypeIndex getContinuationIndex() const
TypeIndex getReturnType() const
int32_t getThisPointerAdjustment() const
TypeIndex getArgumentList() const
uint16_t getParameterCount() const
TypeIndex getThisType() const
FunctionOptions getOptions() const
TypeIndex getClassType() const
CallingConvention getCallConv() const
ArrayRef< OneMethodRecord > getMethods() const
For method overload sets. LF_METHOD.
bool isRValueReferenceThisPtr() const
TypeIndex getReferentType() const
MemberPointerInfo getMemberInfo() const
bool isPointerToMember() const
bool isLValueReferenceThisPtr() const
PointerMode getMode() const
PointerKind getPointerKind() const
uint32_t getSignature() const
StringRef getPrecompFilePath() const
uint32_t getTypesCount() const
uint32_t getStartTypeIndex() const
TypeIndex getReturnType() const
TypeIndex getArgumentList() const
uint16_t getParameterCount() const
FunctionOptions getOptions() const
CallingConvention getCallConv() const
ArrayRef< TypeIndex > getIndices() const
Error visitTypeEnd(CVType &Record) override
Definition TypeDumpVisitor.cpp:185
void printTypeIndex(StringRef FieldName, TypeIndex TI) const
Definition TypeDumpVisitor.cpp:163
Error visitUnknownMember(CVMemberRecord &Record) override
Definition TypeDumpVisitor.cpp:454
Error visitMemberEnd(CVMemberRecord &Record) override
Definition TypeDumpVisitor.cpp:202
Error visitUnknownType(CVType &Record) override
Action to take on unknown types. By default, they are ignored.
Definition TypeDumpVisitor.cpp:459
void printItemIndex(StringRef FieldName, TypeIndex TI) const
Definition TypeDumpVisitor.cpp:167
Error visitTypeBegin(CVType &Record) override
Paired begin/end actions for all types.
Definition TypeDumpVisitor.cpp:171
Error visitMemberBegin(CVMemberRecord &Record) override
Definition TypeDumpVisitor.cpp:194
static TypeIndex fromArrayIndex(uint32_t Index)
StringRef getName() const
const GUID & getGuid() const
TypeIndex getType() const
uint32_t getVFPtrOffset() const
TypeIndex getOverriddenVTable() const
ArrayRef< StringRef > getMethodNames() const
StringRef getName() const
TypeIndex getCompleteClass() const
uint32_t getEntryCount() const
constexpr char Args[]
Key for Kernel::Metadata::mArgs.
constexpr char Attrs[]
Key for Kernel::Metadata::mAttrs.
@ Swift
Calling convention for Swift.
This namespace contains an enum with a value for every intrinsic/builtin function known by LLVM.
PointerMode
Equivalent to CV_ptrmode_e.
@ PointerToMemberFunction
MethodKind
Part of member attribute flags. (CV_methodprop_e)
CVRecord< TypeLeafKind > CVType
PointerKind
Equivalent to CV_ptrtype_e.
@ HasConstructorOrDestructor
@ HasOverloadedAssignmentOperator
PointerToMemberRepresentation
Equivalent to CV_pmtype_e.
@ MultipleInheritanceData
@ SingleInheritanceFunction
@ VirtualInheritanceFunction
@ MultipleInheritanceFunction
LLVM_ABI Error visitMemberRecordStream(ArrayRef< uint8_t > FieldList, TypeVisitorCallbacks &Callbacks)
CallingConvention
These values correspond to the CV_call_e enumeration, and are documented at the following locations: ...
MethodOptions
Equivalent to CV_fldattr_t bitfield.
LLVM_ABI StringRef getBytesAsCharacters(ArrayRef< uint8_t > LeafData)
Reinterpret a byte array as an array of characters.
@ ConstructorWithVirtualBases
MemberAccess
Source-level access specifier. (CV_access_e)
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
ModifierOptions
Equivalent to CV_modifier_t.
LabelType
Equivalent to CV_LABEL_TYPE_e.
LLVM_ABI void printTypeIndex(ScopedPrinter &Printer, StringRef FieldName, TypeIndex TI, TypeCollection &Types)
NodeAddr< FuncNode * > Func
This is an optimization pass for GlobalISel generic memory operations.
auto formatv(bool Validate, const char *Fmt, Ts &&...Vals)
@ Mod
The access may modify the value stored in memory.
ArrayRef(const T &OneElt) -> ArrayRef< T >
Equvalent to CV_fldattr_t in cvinfo.h.