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.