summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object/ELFYAML.cpp
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2014-07-12 18:25:08 +0000
committerSimon Atanasyan <simon@atanasyan.com>2014-07-12 18:25:08 +0000
commit8ebb6aed9b66bcedcea3dce197416a20cc28579b (patch)
treea237d7ab86dd6c4a6693ea13f3e43abf01b5f1a7 /llvm/lib/Object/ELFYAML.cpp
parenta6a362a0866dc74125d08bf05c5f6d2efe01e230 (diff)
downloadbcm5719-llvm-8ebb6aed9b66bcedcea3dce197416a20cc28579b.tar.gz
bcm5719-llvm-8ebb6aed9b66bcedcea3dce197416a20cc28579b.zip
[ELFYAML] Group ELF section type flags to target specific blocks.
Recognize only flags which correspond to the current target. llvm-svn: 212880
Diffstat (limited to 'llvm/lib/Object/ELFYAML.cpp')
-rw-r--r--llvm/lib/Object/ELFYAML.cpp32
1 files changed, 23 insertions, 9 deletions
diff --git a/llvm/lib/Object/ELFYAML.cpp b/llvm/lib/Object/ELFYAML.cpp
index dc3d4678250..a2fb440beaf 100644
--- a/llvm/lib/Object/ELFYAML.cpp
+++ b/llvm/lib/Object/ELFYAML.cpp
@@ -298,6 +298,8 @@ void ScalarBitSetTraits<ELFYAML::ELF_EF>::bitset(IO &IO,
void ScalarEnumerationTraits<ELFYAML::ELF_SHT>::enumeration(
IO &IO, ELFYAML::ELF_SHT &Value) {
+ const auto *Object = static_cast<ELFYAML::Object *>(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<ELFYAML::ELF_SHT>::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
}
OpenPOWER on IntegriCloud