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;
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
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...