15 #ifndef LLVM_OBJECTYAML_DWARFYAML_H
16 #define LLVM_OBJECTYAML_DWARFYAML_H
25 #include <unordered_map>
38 std::optional<yaml::Hex64>
Code;
45 std::optional<uint64_t>
ID;
73 std::optional<llvm::yaml::Hex64>
Offset;
196 std::optional<std::vector<EntryType>>
Entries;
207 std::optional<std::vector<yaml::Hex64>>
Offsets;
208 std::vector<ListEntries<EntryType>>
Lists;
244 mutable std::unordered_map<uint64_t, AbbrevTableInfo> AbbrevTableInfoMap;
245 mutable std::unordered_map<uint64_t, std::string> AbbrevTableContents;
283 template <>
struct MappingTraits<DWARFYAML::
Data> {
284 static void mapping(IO &IO, DWARFYAML::Data &DWARF);
287 template <>
struct MappingTraits<DWARFYAML::AbbrevTable> {
288 static void mapping(IO &IO, DWARFYAML::AbbrevTable &AbbrevTable);
291 template <>
struct MappingTraits<DWARFYAML::Abbrev> {
292 static void mapping(IO &IO, DWARFYAML::Abbrev &Abbrev);
295 template <>
struct MappingTraits<DWARFYAML::AttributeAbbrev> {
296 static void mapping(IO &IO, DWARFYAML::AttributeAbbrev &AttAbbrev);
299 template <>
struct MappingTraits<DWARFYAML::ARangeDescriptor> {
300 static void mapping(IO &IO, DWARFYAML::ARangeDescriptor &Descriptor);
303 template <>
struct MappingTraits<DWARFYAML::ARange> {
304 static void mapping(IO &IO, DWARFYAML::ARange &ARange);
307 template <>
struct MappingTraits<DWARFYAML::RangeEntry> {
308 static void mapping(IO &IO, DWARFYAML::RangeEntry &Entry);
311 template <>
struct MappingTraits<DWARFYAML::
Ranges> {
312 static void mapping(IO &IO, DWARFYAML::Ranges &Ranges);
315 template <>
struct MappingTraits<DWARFYAML::PubEntry> {
316 static void mapping(IO &IO, DWARFYAML::PubEntry &Entry);
319 template <>
struct MappingTraits<DWARFYAML::PubSection> {
320 static void mapping(IO &IO, DWARFYAML::PubSection &Section);
323 template <>
struct MappingTraits<DWARFYAML::Unit> {
324 static void mapping(IO &IO, DWARFYAML::Unit &Unit);
327 template <>
struct MappingTraits<DWARFYAML::Entry> {
328 static void mapping(IO &IO, DWARFYAML::Entry &Entry);
331 template <>
struct MappingTraits<DWARFYAML::FormValue> {
332 static void mapping(IO &IO, DWARFYAML::FormValue &FormValue);
335 template <>
struct MappingTraits<DWARFYAML::
File> {
336 static void mapping(IO &IO, DWARFYAML::File &File);
339 template <>
struct MappingTraits<DWARFYAML::LineTableOpcode> {
340 static void mapping(IO &IO, DWARFYAML::LineTableOpcode &LineTableOpcode);
343 template <>
struct MappingTraits<DWARFYAML::LineTable> {
344 static void mapping(IO &IO, DWARFYAML::LineTable &LineTable);
347 template <>
struct MappingTraits<DWARFYAML::SegAddrPair> {
348 static void mapping(IO &IO, DWARFYAML::SegAddrPair &SegAddrPair);
351 template <>
struct MappingTraits<DWARFYAML::DWARFOperation> {
352 static void mapping(IO &IO, DWARFYAML::DWARFOperation &DWARFOperation);
355 template <
typename EntryType>
356 struct MappingTraits<DWARFYAML::ListTable<EntryType>> {
357 static void mapping(IO &IO, DWARFYAML::ListTable<EntryType> &ListTable);
360 template <
typename EntryType>
361 struct MappingTraits<DWARFYAML::ListEntries<EntryType>> {
362 static void mapping(IO &IO, DWARFYAML::ListEntries<EntryType> &ListEntries);
364 DWARFYAML::ListEntries<EntryType> &ListEntries);
367 template <>
struct MappingTraits<DWARFYAML::RnglistEntry> {
368 static void mapping(IO &IO, DWARFYAML::RnglistEntry &RnglistEntry);
371 template <>
struct MappingTraits<DWARFYAML::LoclistEntry> {
372 static void mapping(IO &IO, DWARFYAML::LoclistEntry &LoclistEntry);
375 template <>
struct MappingTraits<DWARFYAML::AddrTableEntry> {
376 static void mapping(IO &IO, DWARFYAML::AddrTableEntry &AddrTable);
379 template <>
struct MappingTraits<DWARFYAML::StringOffsetsTable> {
380 static void mapping(IO &IO, DWARFYAML::StringOffsetsTable &StrOffsetsTable);
383 template <>
struct ScalarEnumerationTraits<dwarf::
DwarfFormat> {
390 #define HANDLE_DW_TAG(unused, name, unused2, unused3, unused4) \
391 io.enumCase(value, "DW_TAG_" #name, dwarf::DW_TAG_##name);
393 template <>
struct ScalarEnumerationTraits<dwarf::
Tag> {
394 static void enumeration(IO &io,
dwarf::Tag &value) {
395 #include "llvm/BinaryFormat/Dwarf.def"
396 io.enumFallback<Hex16>(value);
400 #define HANDLE_DW_LNS(unused, name) \
401 io.enumCase(value, "DW_LNS_" #name, dwarf::DW_LNS_##name);
403 template <>
struct ScalarEnumerationTraits<dwarf::
LineNumberOps> {
405 #include "llvm/BinaryFormat/Dwarf.def"
406 io.enumFallback<Hex8>(value);
410 #define HANDLE_DW_LNE(unused, name) \
411 io.enumCase(value, "DW_LNE_" #name, dwarf::DW_LNE_##name);
415 #include "llvm/BinaryFormat/Dwarf.def"
416 io.enumFallback<Hex16>(value);
420 #define HANDLE_DW_AT(unused, name, unused2, unused3) \
421 io.enumCase(value, "DW_AT_" #name, dwarf::DW_AT_##name);
423 template <>
struct ScalarEnumerationTraits<dwarf::
Attribute> {
425 #include "llvm/BinaryFormat/Dwarf.def"
426 io.enumFallback<Hex16>(value);
430 #define HANDLE_DW_FORM(unused, name, unused2, unused3) \
431 io.enumCase(value, "DW_FORM_" #name, dwarf::DW_FORM_##name);
433 template <>
struct ScalarEnumerationTraits<dwarf::
Form> {
434 static void enumeration(IO &io,
dwarf::Form &value) {
435 #include "llvm/BinaryFormat/Dwarf.def"
436 io.enumFallback<Hex16>(value);
440 #define HANDLE_DW_UT(unused, name) \
441 io.enumCase(value, "DW_UT_" #name, dwarf::DW_UT_##name);
443 template <>
struct ScalarEnumerationTraits<dwarf::
UnitType> {
445 #include "llvm/BinaryFormat/Dwarf.def"
446 io.enumFallback<Hex8>(value);
450 template <>
struct ScalarEnumerationTraits<dwarf::
Constants> {
454 io.enumFallback<Hex16>(value);
458 #define HANDLE_DW_RLE(unused, name) \
459 io.enumCase(value, "DW_RLE_" #name, dwarf::DW_RLE_##name);
461 template <>
struct ScalarEnumerationTraits<dwarf::
RnglistEntries> {
463 #include "llvm/BinaryFormat/Dwarf.def"
467 #define HANDLE_DW_LLE(unused, name) \
468 io.enumCase(value, "DW_LLE_" #name, dwarf::DW_LLE_##name);
470 template <>
struct ScalarEnumerationTraits<dwarf::
LoclistEntries> {
472 #include "llvm/BinaryFormat/Dwarf.def"
476 #define HANDLE_DW_OP(id, name, version, vendor) \
477 io.enumCase(value, "DW_OP_" #name, dwarf::DW_OP_##name);
479 template <>
struct ScalarEnumerationTraits<dwarf::
LocationAtom> {
481 #include "llvm/BinaryFormat/Dwarf.def"
482 io.enumFallback<yaml::Hex8>(value);
489 #endif // LLVM_OBJECTYAML_DWARFYAML_H