LLVM: include/llvm/ObjectYAML/DWARFYAML.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15#ifndef LLVM_OBJECTYAML_DWARFYAML_H

16#define LLVM_OBJECTYAML_DWARFYAML_H

17

24#include

25#include

26#include <unordered_map>

27#include

28

29namespace llvm {

31

37

39 std::optionalyaml::Hex64 Code;

43};

44

46 std::optional<uint64_t> ID;

47 std::vector Table;

48};

49

54

57 std::optionalyaml::Hex64 Length;

63};

64

65

66

71

72

74 std::optionalllvm::yaml::Hex64 Offset;

75 std::optionalllvm::yaml::Hex8 AddrSize;

77};

78

84

93

99

104

105

106

110

113 std::optionalyaml::Hex64 Length;

121

123};

124

129

135

141

143 std::vector Abbrevs;

145};

146

153

164

181

186

195

203

208

213

220

222 std::optional<std::vector> Entries;

223 std::optionalyaml::BinaryRef Content;

224};

225

226template struct ListTable {

228 std::optionalyaml::Hex64 Length;

233 std::optional<std::vectoryaml::Hex64> Offsets;

234 std::vector<ListEntries> Lists;

235};

236

245 std::optional<std::vector> DebugAddr;

248

251

253

255 std::optional<std::vector<ListTable>> DebugRnglists;

256 std::optional<std::vector<ListTable>> DebugLoclists;

258

260

262

269

270private:

271 mutable std::unordered_map<uint64_t, AbbrevTableInfo> AbbrevTableInfoMap;

272 mutable std::unordered_map<uint64_t, std::string> AbbrevTableContents;

273};

274

275}

276}

277

309

310namespace llvm {

311namespace yaml {

312

313template <> struct MappingTraitsDWARFYAML::[Data](namespacellvm.html#aa20539e89704d20b98b97e9c3feac934)\ {

314 LLVM_ABI static void mapping(IO &IO, DWARFYAML::Data &DWARF);

315};

316

317template <> struct MappingTraitsDWARFYAML::AbbrevTable {

318 LLVM_ABI static void mapping(IO &IO, DWARFYAML::AbbrevTable &AbbrevTable);

319};

320

321template <> struct MappingTraitsDWARFYAML::Abbrev {

322 LLVM_ABI static void mapping(IO &IO, DWARFYAML::Abbrev &Abbrev);

323};

324

325template <> struct MappingTraitsDWARFYAML::AttributeAbbrev {

326 LLVM_ABI static void mapping(IO &IO, DWARFYAML::AttributeAbbrev &AttAbbrev);

327};

328

329template <> struct MappingTraitsDWARFYAML::ARangeDescriptor {

330 LLVM_ABI static void mapping(IO &IO, DWARFYAML::ARangeDescriptor &Descriptor);

331};

332

333template <> struct MappingTraitsDWARFYAML::ARange {

334 LLVM_ABI static void mapping(IO &IO, DWARFYAML::ARange &ARange);

335};

336

337template <> struct MappingTraitsDWARFYAML::RangeEntry {

338 LLVM_ABI static void mapping(IO &IO, DWARFYAML::RangeEntry &Entry);

339};

340

342 LLVM_ABI static void mapping(IO &IO, DWARFYAML::Ranges &Ranges);

343};

344

345template <> struct MappingTraitsDWARFYAML::PubEntry {

346 LLVM_ABI static void mapping(IO &IO, DWARFYAML::PubEntry &Entry);

347};

348

349template <> struct MappingTraitsDWARFYAML::PubSection {

350 LLVM_ABI static void mapping(IO &IO, DWARFYAML::PubSection &Section);

351};

352

354 LLVM_ABI static void mapping(IO &IO, DWARFYAML::Unit &Unit);

355};

356

357template <> struct MappingTraitsDWARFYAML::DebugNamesSection {

358 LLVM_ABI static void mapping(IO &IO, DWARFYAML::DebugNamesSection &);

359};

360template <> struct MappingTraitsDWARFYAML::DebugNameEntry {

361 LLVM_ABI static void mapping(IO &IO, DWARFYAML::DebugNameEntry &);

362};

363template <> struct MappingTraitsDWARFYAML::DebugNameAbbreviation {

364 LLVM_ABI static void mapping(IO &IO, DWARFYAML::DebugNameAbbreviation &);

365};

366template <> struct MappingTraitsDWARFYAML::IdxForm {

367 LLVM_ABI static void mapping(IO &IO, DWARFYAML::IdxForm &);

368};

369

371 LLVM_ABI static void mapping(IO &IO, DWARFYAML::Entry &Entry);

372};

373

374template <> struct MappingTraitsDWARFYAML::FormValue {

375 LLVM_ABI static void mapping(IO &IO, DWARFYAML::FormValue &FormValue);

376};

377

379 LLVM_ABI static void mapping(IO &IO, DWARFYAML::File &File);

380};

381

382template <> struct MappingTraitsDWARFYAML::LineTableOpcode {

383 LLVM_ABI static void mapping(IO &IO,

384 DWARFYAML::LineTableOpcode &LineTableOpcode);

385};

386

387template <> struct MappingTraitsDWARFYAML::LineTable {

388 LLVM_ABI static void mapping(IO &IO, DWARFYAML::LineTable &LineTable);

389};

390

391template <> struct MappingTraitsDWARFYAML::SegAddrPair {

392 LLVM_ABI static void mapping(IO &IO, DWARFYAML::SegAddrPair &SegAddrPair);

393};

394

395template <> struct MappingTraitsDWARFYAML::DWARFOperation {

396 LLVM_ABI static void mapping(IO &IO,

397 DWARFYAML::DWARFOperation &DWARFOperation);

398};

399

400template

401struct MappingTraits<DWARFYAML::ListTable> {

402 static void mapping(IO &IO, DWARFYAML::ListTable &ListTable);

403};

404

405template

406struct MappingTraits<DWARFYAML::ListEntries> {

407 static void mapping(IO &IO, DWARFYAML::ListEntries &ListEntries);

408 static std::string validate(IO &IO,

409 DWARFYAML::ListEntries &ListEntries);

410};

411

412template <> struct MappingTraitsDWARFYAML::RnglistEntry {

413 LLVM_ABI static void mapping(IO &IO, DWARFYAML::RnglistEntry &RnglistEntry);

414};

415

416template <> struct MappingTraitsDWARFYAML::LoclistEntry {

417 LLVM_ABI static void mapping(IO &IO, DWARFYAML::LoclistEntry &LoclistEntry);

418};

419

420template <> struct MappingTraitsDWARFYAML::AddrTableEntry {

421 LLVM_ABI static void mapping(IO &IO, DWARFYAML::AddrTableEntry &AddrTable);

422};

423

424template <> struct MappingTraitsDWARFYAML::StringOffsetsTable {

425 LLVM_ABI static void mapping(IO &IO,

426 DWARFYAML::StringOffsetsTable &StrOffsetsTable);

427};

428

433 }

434};

435

436#define HANDLE_DW_TAG(unused, name, unused2, unused3, unused4) \

437 io.enumCase(value, "DW_TAG_" #name, dwarf::DW_TAG_##name);

438

440 static void enumeration(IO &io, dwarf::Tag &value) {

441#include "llvm/BinaryFormat/Dwarf.def"

442 io.enumFallback(value);

443 }

444};

445

446#define HANDLE_DW_LNS(unused, name) \

447 io.enumCase(value, "DW_LNS_" #name, dwarf::DW_LNS_##name);

448

451#include "llvm/BinaryFormat/Dwarf.def"

452 io.enumFallback(value);

453 }

454};

455

456#define HANDLE_DW_LNE(unused, name) \

457 io.enumCase(value, "DW_LNE_" #name, dwarf::DW_LNE_##name);

458

461#include "llvm/BinaryFormat/Dwarf.def"

462 io.enumFallback(value);

463 }

464};

465

466#define HANDLE_DW_AT(unused, name, unused2, unused3) \

467 io.enumCase(value, "DW_AT_" #name, dwarf::DW_AT_##name);

468

471#include "llvm/BinaryFormat/Dwarf.def"

472 io.enumFallback(value);

473 }

474};

475

476#define HANDLE_DW_FORM(unused, name, unused2, unused3) \

477 io.enumCase(value, "DW_FORM_" #name, dwarf::DW_FORM_##name);

478

480 static void enumeration(IO &io, dwarf::Form &value) {

481#include "llvm/BinaryFormat/Dwarf.def"

482 io.enumFallback(value);

483 }

484};

485

486#define HANDLE_DW_IDX(unused, name) \

487 io.enumCase(value, "DW_IDX_" #name, dwarf::DW_IDX_##name);

488

490 static void enumeration(IO &io, dwarf::Index &value) {

491#include "llvm/BinaryFormat/Dwarf.def"

492 io.enumFallback(value);

493 }

494};

495

496#define HANDLE_DW_UT(unused, name) \

497 io.enumCase(value, "DW_UT_" #name, dwarf::DW_UT_##name);

498

500 static void enumeration(IO &io, dwarf::UnitType &value) {

501#include "llvm/BinaryFormat/Dwarf.def"

502 io.enumFallback(value);

503 }

504};

505

510 io.enumFallback(value);

511 }

512};

513

514#define HANDLE_DW_RLE(unused, name) \

515 io.enumCase(value, "DW_RLE_" #name, dwarf::DW_RLE_##name);

516

519#include "llvm/BinaryFormat/Dwarf.def"

520 }

521};

522

523#define HANDLE_DW_LLE(unused, name) \

524 io.enumCase(value, "DW_LLE_" #name, dwarf::DW_LLE_##name);

525

528#include "llvm/BinaryFormat/Dwarf.def"

529 }

530};

531

532#define HANDLE_DW_OP(id, name, operands, arity, version, vendor) \

533 io.enumCase(value, "DW_OP_" #name, dwarf::DW_OP_##name);

534

537#include "llvm/BinaryFormat/Dwarf.def"

538 io.enumFallbackyaml::Hex8(value);

539 }

540};

541

542}

543}

544

545#endif

This file contains constants used for implementing Dwarf debug support.

This file implements a set that has insertion order iteration characteristics.

#define LLVM_YAML_IS_SEQUENCE_VECTOR(type)

Utility for declaring that a std::vector of a particular type should be considered a YAML sequence.

Tagged union holding either a T or a Error.

A vector that has set insertion semantics.

StringRef - Represent a constant reference to a string, i.e.

unsigned ID

LLVM IR allows to use arbitrary numbers as calling convention identifiers.

void validate(const Triple &TT, const FeatureBitset &FeatureBits)

LineNumberOps

Line Number Standard Opcode Encodings.

LoclistEntries

DWARF v5 loc list entry encoding values.

UnitType

Constants for unit types in DWARF v5.

DwarfFormat

Constants that define the DWARF format as 32 or 64 bit.

RnglistEntries

DWARF v5 range list entry encoding values.

LineNumberExtendedOps

Line Number Extended Opcode Encodings.

This is an optimization pass for GlobalISel generic memory operations.

FunctionAddr VTableAddr uintptr_t uintptr_t Data

Definition DWARFYAML.h:50

llvm::yaml::Hex64 Address

Definition DWARFYAML.h:51

yaml::Hex64 Length

Definition DWARFYAML.h:52

Definition DWARFYAML.h:55

yaml::Hex8 SegSize

Definition DWARFYAML.h:61

std::optional< yaml::Hex64 > Length

Definition DWARFYAML.h:57

yaml::Hex64 CuOffset

Definition DWARFYAML.h:59

dwarf::DwarfFormat Format

Definition DWARFYAML.h:56

uint16_t Version

Definition DWARFYAML.h:58

std::vector< ARangeDescriptor > Descriptors

Definition DWARFYAML.h:62

std::optional< yaml::Hex8 > AddrSize

Definition DWARFYAML.h:60

Definition DWARFYAML.h:45

std::vector< Abbrev > Table

Definition DWARFYAML.h:47

std::optional< uint64_t > ID

Definition DWARFYAML.h:46

Definition DWARFYAML.h:38

llvm::dwarf::Tag Tag

Definition DWARFYAML.h:40

std::vector< AttributeAbbrev > Attributes

Definition DWARFYAML.h:42

std::optional< yaml::Hex64 > Code

Definition DWARFYAML.h:39

llvm::dwarf::Constants Children

Definition DWARFYAML.h:41

Definition DWARFYAML.h:187

std::optional< yaml::Hex64 > Length

Definition DWARFYAML.h:189

std::optional< yaml::Hex8 > AddrSize

Definition DWARFYAML.h:191

dwarf::DwarfFormat Format

Definition DWARFYAML.h:188

yaml::Hex8 SegSelectorSize

Definition DWARFYAML.h:192

yaml::Hex16 Version

Definition DWARFYAML.h:190

std::vector< SegAddrPair > SegAddrPairs

Definition DWARFYAML.h:193

Definition DWARFYAML.h:32

llvm::dwarf::Form Form

Definition DWARFYAML.h:34

llvm::dwarf::Attribute Attribute

Definition DWARFYAML.h:33

llvm::yaml::Hex64 Value

Definition DWARFYAML.h:35

Class that contains helpful context information when mapping YAML into DWARF data structures.

Definition DWARFYAML.h:107

bool IsGNUPubSec

Definition DWARFYAML.h:108

Definition DWARFYAML.h:204

std::vector< yaml::Hex64 > Values

Definition DWARFYAML.h:206

dwarf::LocationAtom Operator

Definition DWARFYAML.h:205

Definition DWARFYAML.h:263

uint64_t Offset

Definition DWARFYAML.h:265

uint64_t Index

Definition DWARFYAML.h:264

Definition DWARFYAML.h:237

std::vector< Unit > Units

Definition DWARFYAML.h:252

std::vector< LineTable > DebugLines

Definition DWARFYAML.h:254

std::optional< std::vector< AddrTableEntry > > DebugAddr

Definition DWARFYAML.h:245

std::optional< std::vector< Ranges > > DebugRanges

Definition DWARFYAML.h:244

std::optional< std::vector< ListTable< LoclistEntry > > > DebugLoclists

Definition DWARFYAML.h:256

std::vector< AbbrevTable > DebugAbbrev

Definition DWARFYAML.h:240

LLVM_ABI Expected< AbbrevTableInfo > getAbbrevTableInfoByID(uint64_t ID) const

std::optional< PubSection > GNUPubNames

Definition DWARFYAML.h:249

std::optional< std::vector< ARange > > DebugAranges

Definition DWARFYAML.h:243

LLVM_ABI StringRef getAbbrevTableContentByIndex(uint64_t Index) const

std::optional< PubSection > GNUPubTypes

Definition DWARFYAML.h:250

LLVM_ABI SetVector< StringRef > getNonEmptySectionNames() const

std::optional< std::vector< StringOffsetsTable > > DebugStrOffsets

Definition DWARFYAML.h:242

bool IsLittleEndian

Definition DWARFYAML.h:238

std::optional< std::vector< StringRef > > DebugStrings

Definition DWARFYAML.h:241

bool Is64BitAddrSize

Definition DWARFYAML.h:239

std::optional< std::vector< ListTable< RnglistEntry > > > DebugRnglists

Definition DWARFYAML.h:255

std::optional< PubSection > PubNames

Definition DWARFYAML.h:246

std::optional< DebugNamesSection > DebugNames

Definition DWARFYAML.h:257

std::optional< PubSection > PubTypes

Definition DWARFYAML.h:247

LLVM_ABI bool isEmpty() const

Definition DWARFYAML.h:130

std::vector< IdxForm > Indices

Definition DWARFYAML.h:133

yaml::Hex64 Code

Definition DWARFYAML.h:131

dwarf::Tag Tag

Definition DWARFYAML.h:132

Definition DWARFYAML.h:136

yaml::Hex32 NameStrp

Definition DWARFYAML.h:137

yaml::Hex64 Code

Definition DWARFYAML.h:138

std::vector< yaml::Hex64 > Values

Definition DWARFYAML.h:139

Definition DWARFYAML.h:142

std::vector< DebugNameAbbreviation > Abbrevs

Definition DWARFYAML.h:143

std::vector< DebugNameEntry > Entries

Definition DWARFYAML.h:144

Definition DWARFYAML.h:100

std::vector< FormValue > Values

Definition DWARFYAML.h:102

llvm::yaml::Hex32 AbbrCode

Definition DWARFYAML.h:101

Definition DWARFYAML.h:147

StringRef Name

Definition DWARFYAML.h:148

uint64_t DirIdx

Definition DWARFYAML.h:149

uint64_t ModTime

Definition DWARFYAML.h:150

uint64_t Length

Definition DWARFYAML.h:151

Definition DWARFYAML.h:94

StringRef CStr

Definition DWARFYAML.h:96

std::vector< llvm::yaml::Hex8 > BlockData

Definition DWARFYAML.h:97

llvm::yaml::Hex64 Value

Definition DWARFYAML.h:95

Definition DWARFYAML.h:125

dwarf::Index Idx

Definition DWARFYAML.h:126

dwarf::Form Form

Definition DWARFYAML.h:127

Definition DWARFYAML.h:154

dwarf::LineNumberOps Opcode

Definition DWARFYAML.h:155

std::optional< uint64_t > ExtLen

Definition DWARFYAML.h:156

std::vector< llvm::yaml::Hex64 > StandardOpcodeData

Definition DWARFYAML.h:162

File FileEntry

Definition DWARFYAML.h:160

dwarf::LineNumberExtendedOps SubOpcode

Definition DWARFYAML.h:157

std::vector< llvm::yaml::Hex8 > UnknownOpcodeData

Definition DWARFYAML.h:161

uint64_t Data

Definition DWARFYAML.h:158

int64_t SData

Definition DWARFYAML.h:159

Definition DWARFYAML.h:165

uint8_t LineBase

Definition DWARFYAML.h:173

std::optional< uint64_t > Length

Definition DWARFYAML.h:167

std::optional< uint8_t > OpcodeBase

Definition DWARFYAML.h:175

uint8_t LineRange

Definition DWARFYAML.h:174

std::vector< LineTableOpcode > Opcodes

Definition DWARFYAML.h:179

std::optional< uint64_t > PrologueLength

Definition DWARFYAML.h:169

dwarf::DwarfFormat Format

Definition DWARFYAML.h:166

std::vector< File > Files

Definition DWARFYAML.h:178

uint16_t Version

Definition DWARFYAML.h:168

uint8_t MaxOpsPerInst

Definition DWARFYAML.h:171

std::vector< StringRef > IncludeDirs

Definition DWARFYAML.h:177

uint8_t DefaultIsStmt

Definition DWARFYAML.h:172

uint8_t MinInstLength

Definition DWARFYAML.h:170

std::optional< std::vector< uint8_t > > StandardOpcodeLengths

Definition DWARFYAML.h:176

Definition DWARFYAML.h:221

std::optional< std::vector< EntryType > > Entries

Definition DWARFYAML.h:222

std::optional< yaml::BinaryRef > Content

Definition DWARFYAML.h:223

Definition DWARFYAML.h:226

std::optional< yaml::Hex8 > AddrSize

Definition DWARFYAML.h:230

std::optional< std::vector< yaml::Hex64 > > Offsets

Definition DWARFYAML.h:233

yaml::Hex8 SegSelectorSize

Definition DWARFYAML.h:231

dwarf::DwarfFormat Format

Definition DWARFYAML.h:227

std::vector< ListEntries< EntryType > > Lists

Definition DWARFYAML.h:234

std::optional< uint32_t > OffsetEntryCount

Definition DWARFYAML.h:232

std::optional< yaml::Hex64 > Length

Definition DWARFYAML.h:228

yaml::Hex16 Version

Definition DWARFYAML.h:229

Definition DWARFYAML.h:214

std::vector< yaml::Hex64 > Values

Definition DWARFYAML.h:216

std::optional< yaml::Hex64 > DescriptionsLength

Definition DWARFYAML.h:217

dwarf::LoclistEntries Operator

Definition DWARFYAML.h:215

std::vector< DWARFOperation > Descriptions

Definition DWARFYAML.h:218

Definition DWARFYAML.h:79

StringRef Name

Definition DWARFYAML.h:82

llvm::yaml::Hex8 Descriptor

Definition DWARFYAML.h:81

llvm::yaml::Hex32 DieOffset

Definition DWARFYAML.h:80

Definition DWARFYAML.h:85

dwarf::DwarfFormat Format

Definition DWARFYAML.h:86

uint32_t UnitSize

Definition DWARFYAML.h:90

yaml::Hex64 Length

Definition DWARFYAML.h:87

uint32_t UnitOffset

Definition DWARFYAML.h:89

uint16_t Version

Definition DWARFYAML.h:88

std::vector< PubEntry > Entries

Definition DWARFYAML.h:91

Class that describes a range list entry, or a base address selection entry within a range list in the...

Definition DWARFYAML.h:67

llvm::yaml::Hex64 HighOffset

Definition DWARFYAML.h:69

llvm::yaml::Hex64 LowOffset

Definition DWARFYAML.h:68

Class that describes a single range list inside the .debug_ranges section.

Definition DWARFYAML.h:73

std::vector< RangeEntry > Entries

Definition DWARFYAML.h:76

std::optional< llvm::yaml::Hex64 > Offset

Definition DWARFYAML.h:74

std::optional< llvm::yaml::Hex8 > AddrSize

Definition DWARFYAML.h:75

Definition DWARFYAML.h:209

std::vector< yaml::Hex64 > Values

Definition DWARFYAML.h:211

dwarf::RnglistEntries Operator

Definition DWARFYAML.h:210

Definition DWARFYAML.h:182

yaml::Hex64 Address

Definition DWARFYAML.h:184

yaml::Hex64 Segment

Definition DWARFYAML.h:183

Definition DWARFYAML.h:196

yaml::Hex16 Padding

Definition DWARFYAML.h:200

std::optional< yaml::Hex64 > Length

Definition DWARFYAML.h:198

std::vector< yaml::Hex64 > Offsets

Definition DWARFYAML.h:201

dwarf::DwarfFormat Format

Definition DWARFYAML.h:197

yaml::Hex16 Version

Definition DWARFYAML.h:199

Definition DWARFYAML.h:111

uint16_t Version

Definition DWARFYAML.h:114

std::optional< uint64_t > AbbrevTableID

Definition DWARFYAML.h:117

yaml::Hex64 TypeOffset

Definition DWARFYAML.h:120

dwarf::DwarfFormat Format

Definition DWARFYAML.h:112

std::optional< yaml::Hex64 > Length

Definition DWARFYAML.h:113

yaml::Hex64 TypeSignatureOrDwoID

Definition DWARFYAML.h:119

std::optional< uint8_t > AddrSize

Definition DWARFYAML.h:115

llvm::dwarf::UnitType Type

Definition DWARFYAML.h:116

std::vector< Entry > Entries

Definition DWARFYAML.h:122

std::optional< yaml::Hex64 > AbbrOffset

Definition DWARFYAML.h:118

This class should be specialized by any type that needs to be converted to/from a YAML mapping.

This class should be specialized by any integral type that converts to/from a YAML scalar where there...