From dafce2c9a66bd587a1cb8c4b3ff928a7bdd12bfa Mon Sep 17 00:00:00 2001 From: Simon Atanasyan Date: Sat, 12 Jul 2014 18:25:08 +0000 Subject: [PATCH] [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 --- lib/Object/ELFYAML.cpp | 32 +++++++++++++++++++-------- test/Object/Inputs/unwind-section.elf-x86-64 | Bin 0 -> 2369 bytes test/Object/obj2yaml.test | 8 +++++++ 3 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 test/Object/Inputs/unwind-section.elf-x86-64 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 0000000000000000000000000000000000000000..3a845086510a010513041c42cfef7871a3306214 GIT binary patch literal 2369 zcmbtWJ5R$f5WZmE&+;l=Sh|3angKB|p)NcIRIwm2Afc2dfS{yGQmL@O$i&WHU}xs9 zahIG+xFnKkPO{JU-F@e?>$rY7JUtq-ECnnU9Dt>bl&++}W{fwX2J3O`658ah5N=2A zAOic*k6avvIJ|qj!@eDciO+630oXTz-|sQt`92elTjz~1a<1>e_K*g)dwb;tPS=HJ zw}aN;`k~*UQFt3hLFBY?r1eubwgbQ8L=M<--$?4fv~q&o6aZLJqmEV7X#wSA3+c-_ zDVmH;v#z2Z!#2*g)wFw3zPS1(IY