From b6020c330d3826aa542164842d6ba71fdee3650b Mon Sep 17 00:00:00 2001 From: Xing GUO Date: Thu, 4 Jun 2020 09:25:26 +0800 Subject: [PATCH] [ObjectYAML][ELF] Let the endianness of DWARF sections be inferred from FileHeader. This patch helps infer the endianness of DWARF sections from `FileHeader`. Reviewed By: jhenderson, grimar Differential Revision: https://reviews.llvm.org/D81051 --- llvm/lib/ObjectYAML/ELFYAML.cpp | 3 + .../tools/yaml2obj/ELF/DWARF/debug-aranges.yaml | 65 +++++++++++++++++++++- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/llvm/lib/ObjectYAML/ELFYAML.cpp b/llvm/lib/ObjectYAML/ELFYAML.cpp index 250f97d..98a40c9 100644 --- a/llvm/lib/ObjectYAML/ELFYAML.cpp +++ b/llvm/lib/ObjectYAML/ELFYAML.cpp @@ -1654,6 +1654,9 @@ void MappingTraits::mapping(IO &IO, ELFYAML::Object &Object) { IO.mapOptional("Symbols", Object.Symbols); IO.mapOptional("DynamicSymbols", Object.DynamicSymbols); IO.mapOptional("DWARF", Object.DWARF); + if (Object.DWARF) + Object.DWARF->IsLittleEndian = + Object.Header.Data == ELFYAML::ELF_ELFDATA(ELF::ELFDATA2LSB); IO.setContext(nullptr); } diff --git a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-aranges.yaml b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-aranges.yaml index 6c4556d..0d8b4ee 100644 --- a/llvm/test/tools/yaml2obj/ELF/DWARF/debug-aranges.yaml +++ b/llvm/test/tools/yaml2obj/ELF/DWARF/debug-aranges.yaml @@ -4,8 +4,8 @@ ## Generate and verify a big endian object file. -# RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2MSB %s -o %t1.o -# RUN: llvm-readobj --sections --section-data %t1.o | \ +# RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2MSB %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 # DWARF-BE-HEADER: Index: 1 @@ -90,6 +90,67 @@ DWARF: - Address: 0x0000000056780000 Length: 0x10 +## Generate and verify a little endian object file. + +# RUN: yaml2obj --docnum=1 -DENDIAN=ELFDATA2LSB %s -o %t.le.o +# RUN: llvm-readobj --sections --section-data %t.le.o | \ +# RUN: FileCheck %s --check-prefixes=DWARF-LE-DEFAULT + +# DWARF-LE-DEFAULT: Section { +# DWARF-LE-DEFAULT: Index: 1 +# DWARF-LE-DEFAULT-NEXT: Name: .debug_aranges (1) +# DWARF-LE-DEFAULT-NEXT: Type: SHT_PROGBITS (0x1) +# DWARF-LE-DEFAULT-NEXT: Flags [ (0x0) +# DWARF-LE-DEFAULT-NEXT: ] +# DWARF-LE-DEFAULT-NEXT: Address: 0x0 +# DWARF-LE-DEFAULT-NEXT: Offset: 0x40 +# DWARF-LE-DEFAULT-NEXT: Size: 96 +# DWARF-LE-DEFAULT-NEXT: Link: 0 +# DWARF-LE-DEFAULT-NEXT: Info: 0 +# DWARF-LE-DEFAULT-NEXT: AddressAlignment: 1 +# DWARF-LE-DEFAULT-NEXT: EntrySize: 0 +# DWARF-LE-DEFAULT-NEXT: SectionData ( +# DWARF-LE-DEFAULT-NEXT: 0000: 2C000000 02000000 00000400 00000000 +## | | | | | | +## | | | | | +------- Padding zeros (4-byte) +## | | | | +- SegSize (1-byte) 0x00 +## | | | +- AddrSize (1-byte) 0x04 +## | | +-------- CuOffset (4-byte) 0x00 +## | +--- Version (2-byte) 0x02 +## +------- InitialLength (4-byte) 0x2c +## +# DWARF-LE-DEFAULT-NEXT: 0010: 34120000 20000000 00000000 00000000 +## | | | +## | | +---------------- Terminating Entry +## | +------- Length (4-byte) 0x20 +## +------- Address (4-byte) 0x1234 +## +# DWARF-LE-DEFAULT-NEXT: 0020: 2C000000 02006500 00000800 00000000 +## | | | | | | +## | | | | | +------- Padding zeros (4-byte) +## | | | | +- SegSize (1-byte) 0x00 +## | | | +- AddrSize (1-byte) 0x08 +## | | +-------- CuOffset (4-byte) 0x00 +## | +--- Version (2-byte) 0x02 +## +------- InitialLength (4-byte) 0x2c +## +# DWARF-LE-DEFAULT-NEXT: 0030: 78560000 00000000 20000000 00000000 +## | | +## | +---------------- Length (8-byte) 0x20 +## +---------------- Address (8-byte) 0x5678 +## +# DWARF-LE-DEFAULT-NEXT: 0040: 00007856 00000000 10000000 00000000 +## | | +## | +---------------- Length (8-byte) 0x10 +## +---------------- Address (8-byte) 0x5678 +## +# DWARF-LE-DEFAULT-NEXT: 0050: 00000000 00000000 00000000 00000000 +## | +## +---------------------------------- Terminating entry +## +# DWARF-LE-DEFAULT-NEXT: ) +# DWARF-LE-DEFAULT-NEXT: } + ## b) Generate the .debug_aranges section from raw section content. # RUN: yaml2obj --docnum=2 %s -o %t2.o -- 2.7.4