diff --git a/llvm/include/llvm/ObjectYAML/DWARFYAML.h b/llvm/include/llvm/ObjectYAML/DWARFYAML.h --- a/llvm/include/llvm/ObjectYAML/DWARFYAML.h +++ b/llvm/include/llvm/ObjectYAML/DWARFYAML.h @@ -64,7 +64,8 @@ }; struct ARange { - InitialLength Length; + dwarf::DwarfFormat Format; + uint64_t Length; uint16_t Version; uint32_t CuOffset; uint8_t AddrSize; @@ -263,6 +264,13 @@ static void mapping(IO &IO, DWARFYAML::InitialLength &DWARF); }; +template <> struct ScalarEnumerationTraits { + static void enumeration(IO &IO, dwarf::DwarfFormat &Format) { + IO.enumCase(Format, "DWARF32", dwarf::DWARF32); + IO.enumCase(Format, "DWARF64", dwarf::DWARF64); + } +}; + #define HANDLE_DW_TAG(unused, name, unused2, unused3, unused4) \ io.enumCase(value, "DW_TAG_" #name, dwarf::DW_TAG_##name); diff --git a/llvm/lib/ObjectYAML/DWARFEmitter.cpp b/llvm/lib/ObjectYAML/DWARFEmitter.cpp --- a/llvm/lib/ObjectYAML/DWARFEmitter.cpp +++ b/llvm/lib/ObjectYAML/DWARFEmitter.cpp @@ -15,6 +15,7 @@ #include "DWARFVisitor.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" +#include "llvm/BinaryFormat/Dwarf.h" #include "llvm/ObjectYAML/DWARFYAML.h" #include "llvm/Support/Error.h" #include "llvm/Support/Host.h" @@ -94,7 +95,11 @@ void DWARFYAML::EmitDebugAranges(raw_ostream &OS, const DWARFYAML::Data &DI) { for (auto Range : DI.ARanges) { auto HeaderStart = OS.tell(); - writeInitialLength(Range.Length, OS, DI.IsLittleEndian); + if (Range.Format == dwarf::DWARF64) { + writeInteger((uint32_t)dwarf::DW_LENGTH_DWARF64, OS, DI.IsLittleEndian); + writeInteger((uint64_t)Range.Length, OS, DI.IsLittleEndian); + } else + writeInteger((uint32_t)Range.Length, OS, DI.IsLittleEndian); writeInteger((uint16_t)Range.Version, OS, DI.IsLittleEndian); writeInteger((uint32_t)Range.CuOffset, OS, DI.IsLittleEndian); writeInteger((uint8_t)Range.AddrSize, OS, DI.IsLittleEndian); diff --git a/llvm/lib/ObjectYAML/DWARFYAML.cpp b/llvm/lib/ObjectYAML/DWARFYAML.cpp --- a/llvm/lib/ObjectYAML/DWARFYAML.cpp +++ b/llvm/lib/ObjectYAML/DWARFYAML.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "llvm/ObjectYAML/DWARFYAML.h" +#include "llvm/BinaryFormat/Dwarf.h" namespace llvm { @@ -74,6 +75,7 @@ void MappingTraits::mapping(IO &IO, DWARFYAML::ARange &ARange) { + IO.mapOptional("Format", ARange.Format, dwarf::DWARF32); IO.mapRequired("Length", ARange.Length); IO.mapRequired("Version", ARange.Version); IO.mapRequired("CuOffset", ARange.CuOffset); diff --git a/llvm/test/ObjectYAML/MachO/DWARF-debug_aranges.yaml b/llvm/test/ObjectYAML/MachO/DWARF-debug_aranges.yaml --- a/llvm/test/ObjectYAML/MachO/DWARF-debug_aranges.yaml +++ b/llvm/test/ObjectYAML/MachO/DWARF-debug_aranges.yaml @@ -313,8 +313,7 @@ - _main DWARF: debug_aranges: - - Length: - TotalLength: 44 + - Length: 44 Version: 2 CuOffset: 0 AddrSize: 8 @@ -326,8 +325,7 @@ #CHECK: DWARF: #CHECK: debug_aranges: -#CHECK: - Length: -#CHECK: TotalLength: 44 +#CHECK: - Length: 44 #CHECK: Version: 2 #CHECK: CuOffset: 0 #CHECK: AddrSize: 8 diff --git a/llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml b/llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml --- a/llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml +++ b/llvm/test/ObjectYAML/MachO/DWARF-debug_info.yaml @@ -375,8 +375,7 @@ - Attribute: DW_AT_type Form: DW_FORM_ref4 debug_aranges: - - Length: - TotalLength: 44 + - Length: 44 Version: 2 CuOffset: 0 AddrSize: 8 diff --git a/llvm/test/ObjectYAML/MachO/DWARF-debug_line.yaml b/llvm/test/ObjectYAML/MachO/DWARF-debug_line.yaml --- a/llvm/test/ObjectYAML/MachO/DWARF-debug_line.yaml +++ b/llvm/test/ObjectYAML/MachO/DWARF-debug_line.yaml @@ -394,8 +394,7 @@ - Attribute: DW_AT_type Form: DW_FORM_ref4 debug_aranges: - - Length: - TotalLength: 44 + - Length: 44 Version: 2 CuOffset: 0 AddrSize: 8 diff --git a/llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml b/llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml --- a/llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml +++ b/llvm/test/ObjectYAML/MachO/DWARF5-debug_info.yaml @@ -375,8 +375,7 @@ - Attribute: DW_AT_type Form: DW_FORM_ref4 debug_aranges: - - Length: - TotalLength: 44 + - Length: 44 Version: 2 CuOffset: 0 AddrSize: 8 diff --git a/llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml b/llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml --- a/llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml +++ b/llvm/test/tools/llvm-gsymutil/ARM_AArch64/fat-macho-dwarf.yaml @@ -378,8 +378,7 @@ - Attribute: DW_AT_type Form: DW_FORM_ref_addr debug_aranges: - - Length: - TotalLength: 28 + - Length: 28 Version: 2 CuOffset: 0 AddrSize: 4 @@ -859,8 +858,7 @@ - Attribute: DW_AT_type Form: DW_FORM_ref_addr debug_aranges: - - Length: - TotalLength: 44 + - Length: 44 Version: 2 CuOffset: 0 AddrSize: 8 diff --git a/llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml b/llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml --- a/llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml +++ b/llvm/test/tools/llvm-gsymutil/X86/mach-dwarf.yaml @@ -539,8 +539,7 @@ - Attribute: DW_AT_type Form: DW_FORM_ref_addr debug_aranges: - - Length: - TotalLength: 60 + - Length: 60 Version: 2 CuOffset: 0 AddrSize: 8 diff --git a/llvm/test/tools/obj2yaml/MachO/DWARF-debug_aranges-error.yaml b/llvm/test/tools/obj2yaml/MachO/DWARF-debug_aranges-error.yaml --- a/llvm/test/tools/obj2yaml/MachO/DWARF-debug_aranges-error.yaml +++ b/llvm/test/tools/obj2yaml/MachO/DWARF-debug_aranges-error.yaml @@ -287,8 +287,7 @@ reserved3: 0x00000000 DWARF: debug_aranges: - - Length: - TotalLength: 45 + - Length: 45 Version: 2 CuOffset: 0 AddrSize: 8 diff --git a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-aranges.yaml b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-aranges.yaml --- a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-aranges.yaml +++ b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-aranges.yaml @@ -2,9 +2,9 @@ ## a) Generate the .debug_aranges section from the "DWARF" entry. -## Generate and verify a big endian object file. +## Generate and verify a big endian DWARF32 .debug_aranges section. -# RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2MSB %s -o %t.be.o +# RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2MSB -DFORMAT=DWARF32 %s -o %t.be.o # RUN: llvm-readobj --sections --section-data %t.be.o | \ # RUN: FileCheck %s -DADDRALIGN=1 -DSIZE=96 --check-prefixes=DWARF-BE-HEADER,DWARF-BE-CONTENT @@ -69,8 +69,8 @@ Machine: EM_X86_64 DWARF: debug_aranges: - - Length: - TotalLength: 0x2c + - Format: [[FORMAT]] + Length: 0x2c Version: 2 CuOffset: 0 AddrSize: 0x04 @@ -78,8 +78,8 @@ Descriptors: - Address: 0x00001234 Length: 0x20 - - Length: - TotalLength: 0x2c + - Format: [[FORMAT]] + Length: 0x2c Version: 2 CuOffset: 0x65 AddrSize: 0x08 @@ -90,9 +90,9 @@ - Address: 0x0000000056780000 Length: 0x10 -## Generate and verify a little endian object file. +## Generate and verify a little endian DWARF32 .debug_aranges section. -# RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2LSB %s -o %t.le.o +# RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2LSB -DFORMAT=DWARF32 %s -o %t.le.o # RUN: llvm-readobj --sections --section-data %t.le.o | \ # RUN: FileCheck %s --check-prefixes=DWARF-LE-DEFAULT @@ -211,8 +211,7 @@ Size: 0x10 DWARF: debug_aranges: - - Length: - TotalLength: 0x2c + - Length: 0x2c Version: 2 CuOffset: 0 AddrSize: 0x08 @@ -238,8 +237,7 @@ Content: "00" DWARF: debug_aranges: - - Length: - TotalLength: 0x2c + - Length: 0x2c Version: 2 CuOffset: 0 AddrSize: 0x08 @@ -304,8 +302,7 @@ Type: SHT_STRTAB DWARF: debug_aranges: - - Length: - TotalLength: 0x2c + - Length: 0x2c Version: 2 CuOffset: 0 AddrSize: 0x08 diff --git a/llvm/tools/obj2yaml/dwarf2yaml.cpp b/llvm/tools/obj2yaml/dwarf2yaml.cpp --- a/llvm/tools/obj2yaml/dwarf2yaml.cpp +++ b/llvm/tools/obj2yaml/dwarf2yaml.cpp @@ -68,7 +68,8 @@ if (Error E = Set.extract(ArangesData, &Offset)) return E; DWARFYAML::ARange Range; - Range.Length.setLength(Set.getHeader().Length); + Range.Format = Set.getHeader().Format; + Range.Length = Set.getHeader().Length; Range.Version = Set.getHeader().Version; Range.CuOffset = Set.getHeader().CuOffset; Range.AddrSize = Set.getHeader().AddrSize;