From: George Rimar Date: Thu, 7 Mar 2019 12:09:19 +0000 (+0000) Subject: [yaml2obj] - Allow producing ELFDATANONE ELFs X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dba0a79dfc7626795e39e5efc8af56dc8475c684;p=llvm [yaml2obj] - Allow producing ELFDATANONE ELFs I need this to remove a binary from LLD test suite. The patch also simplifies the code a bit. Differential revision: https://reviews.llvm.org/D59082 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@355591 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ObjectYAML/ELFYAML.cpp b/lib/ObjectYAML/ELFYAML.cpp index c374cc2a9e1..c8585bd3b1e 100644 --- a/lib/ObjectYAML/ELFYAML.cpp +++ b/lib/ObjectYAML/ELFYAML.cpp @@ -232,8 +232,9 @@ void ScalarEnumerationTraits::enumeration( void ScalarEnumerationTraits::enumeration( IO &IO, ELFYAML::ELF_ELFDATA &Value) { #define ECase(X) IO.enumCase(Value, #X, ELF::X) - // Since the semantics of ELFDATANONE is "invalid", just don't accept it - // here. + // ELFDATANONE is an invalid data encoding, but we accept it because + // we want to be able to produce invalid binaries for the tests. + ECase(ELFDATANONE); ECase(ELFDATA2LSB); ECase(ELFDATA2MSB); #undef ECase diff --git a/test/tools/yaml2obj/elf-header-elfdatanone.yaml b/test/tools/yaml2obj/elf-header-elfdatanone.yaml new file mode 100644 index 00000000000..0e1d065ddcf --- /dev/null +++ b/test/tools/yaml2obj/elf-header-elfdatanone.yaml @@ -0,0 +1,15 @@ +## We have a YAML file describing an invalid data type. +## Check we are able to produce the invalid binary. + +# RUN: yaml2obj %s -o %t.o + +## Check that EI_DATA field is ELFDATANONE(0) +# RUN: od -b %t.o +5 | FileCheck %s +# CHECK: 0000005 000 + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATANONE + Type: ET_REL + Machine: EM_X86_64 diff --git a/tools/yaml2obj/yaml2elf.cpp b/tools/yaml2obj/yaml2elf.cpp index 7b5841b5d3d..3e7234a4963 100644 --- a/tools/yaml2obj/yaml2elf.cpp +++ b/tools/yaml2obj/yaml2elf.cpp @@ -207,8 +207,7 @@ void ELFState::initELFHeader(Elf_Ehdr &Header) { Header.e_ident[EI_MAG2] = 'L'; Header.e_ident[EI_MAG3] = 'F'; Header.e_ident[EI_CLASS] = ELFT::Is64Bits ? ELFCLASS64 : ELFCLASS32; - bool IsLittleEndian = ELFT::TargetEndianness == support::little; - Header.e_ident[EI_DATA] = IsLittleEndian ? ELFDATA2LSB : ELFDATA2MSB; + Header.e_ident[EI_DATA] = Doc.Header.Data; Header.e_ident[EI_VERSION] = EV_CURRENT; Header.e_ident[EI_OSABI] = Doc.Header.OSABI; Header.e_ident[EI_ABIVERSION] = Doc.Header.ABIVersion;