From: Simon Atanasyan Date: Sat, 12 Jul 2014 18:25:08 +0000 (+0000) Subject: [ELFYAML] Group ELF section type flags to target specific blocks. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dafce2c9a66bd587a1cb8c4b3ff928a7bdd12bfa;p=llvm [ELFYAML] Group ELF section type flags to target specific blocks. Recognize only flags which correspond to the current target. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212880 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Object/ELFYAML.cpp b/lib/Object/ELFYAML.cpp index dc3d4678250..a2fb440beaf 100644 --- a/lib/Object/ELFYAML.cpp +++ b/lib/Object/ELFYAML.cpp @@ -298,6 +298,8 @@ void ScalarBitSetTraits::bitset(IO &IO, void ScalarEnumerationTraits::enumeration( IO &IO, ELFYAML::ELF_SHT &Value) { + const auto *Object = static_cast(IO.getContext()); + assert(Object && "The IO context is not initialized"); #define ECase(X) IO.enumCase(Value, #X, ELF::X); ECase(SHT_NULL) ECase(SHT_PROGBITS) @@ -325,15 +327,27 @@ void ScalarEnumerationTraits::enumeration( ECase(SHT_GNU_versym) ECase(SHT_HIOS) ECase(SHT_LOPROC) - ECase(SHT_ARM_EXIDX) - ECase(SHT_ARM_PREEMPTMAP) - ECase(SHT_ARM_ATTRIBUTES) - ECase(SHT_ARM_DEBUGOVERLAY) - ECase(SHT_ARM_OVERLAYSECTION) - ECase(SHT_HEX_ORDERED) - ECase(SHT_X86_64_UNWIND) - ECase(SHT_MIPS_REGINFO) - ECase(SHT_MIPS_OPTIONS) + switch (Object->Header.Machine) { + case ELF::EM_ARM: + ECase(SHT_ARM_EXIDX) + ECase(SHT_ARM_PREEMPTMAP) + ECase(SHT_ARM_ATTRIBUTES) + ECase(SHT_ARM_DEBUGOVERLAY) + ECase(SHT_ARM_OVERLAYSECTION) + break; + case ELF::EM_HEXAGON: + ECase(SHT_HEX_ORDERED) + break; + case ELF::EM_X86_64: + ECase(SHT_X86_64_UNWIND) + break; + case ELF::EM_MIPS: + ECase(SHT_MIPS_REGINFO) + ECase(SHT_MIPS_OPTIONS) + default: + // Nothing to do. + break; + } #undef ECase } diff --git a/test/Object/Inputs/unwind-section.elf-x86-64 b/test/Object/Inputs/unwind-section.elf-x86-64 new file mode 100644 index 00000000000..3a845086510 Binary files /dev/null and b/test/Object/Inputs/unwind-section.elf-x86-64 differ diff --git a/test/Object/obj2yaml.test b/test/Object/obj2yaml.test index 98b40d5cdab..c986b91281e 100644 --- a/test/Object/obj2yaml.test +++ b/test/Object/obj2yaml.test @@ -3,6 +3,8 @@ RUN: obj2yaml %p/Inputs/trivial-object-test.coff-x86-64 | FileCheck %s --check-p RUN: obj2yaml %p/Inputs/trivial-object-test.elf-mipsel | FileCheck %s --check-prefix ELF-MIPSEL RUN: obj2yaml %p/Inputs/trivial-object-test.elf-mips64el | FileCheck %s --check-prefix ELF-MIPS64EL RUN: obj2yaml %p/Inputs/trivial-object-test.elf-x86-64 | FileCheck %s --check-prefix ELF-X86-64 +RUN: obj2yaml %p/Inputs/unwind-section.elf-x86-64 \ +RUN: | FileCheck %s --check-prefix ELF-X86-64-UNWIND COFF-I386: header: COFF-I386-NEXT: Machine: IMAGE_FILE_MACHINE_I386 @@ -405,3 +407,9 @@ ELF-X86-64-NEXT: Section: .text ELF-X86-64-NEXT: Size: 0x0000000000000026 ELF-X86-64-NEXT: - Name: SomeOtherFunction ELF-X86-64-NEXT: - Name: puts + +ELF-X86-64-UNWIND: - Name: .eh_frame +ELF-X86-64-UNWIND-NEXT: Type: SHT_X86_64_UNWIND +ELF-X86-64-UNWIND-NEXT: Flags: [ SHF_ALLOC ] +ELF-X86-64-UNWIND-NEXT: AddressAlign: 0x0000000000000001 +ELF-X86-64-UNWIND-NEXT: Content: ''