[llvm] r212880 - [ELFYAML] Group ELF section type flags to target specific blocks.
Simon Atanasyan
simon at atanasyan.com
Sat Jul 12 11:25:08 PDT 2014
Author: atanasyan
Date: Sat Jul 12 13:25:08 2014
New Revision: 212880
URL: http://llvm.org/viewvc/llvm-project?rev=212880&view=rev
Log:
[ELFYAML] Group ELF section type flags to target specific blocks.
Recognize only flags which correspond to the current target.
Added:
llvm/trunk/test/Object/Inputs/unwind-section.elf-x86-64
Modified:
llvm/trunk/lib/Object/ELFYAML.cpp
llvm/trunk/test/Object/obj2yaml.test
Modified: llvm/trunk/lib/Object/ELFYAML.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ELFYAML.cpp?rev=212880&r1=212879&r2=212880&view=diff
==============================================================================
--- llvm/trunk/lib/Object/ELFYAML.cpp (original)
+++ llvm/trunk/lib/Object/ELFYAML.cpp Sat Jul 12 13:25:08 2014
@@ -298,6 +298,8 @@ void ScalarBitSetTraits<ELFYAML::ELF_EF>
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::EL
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
}
Added: llvm/trunk/test/Object/Inputs/unwind-section.elf-x86-64
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/Inputs/unwind-section.elf-x86-64?rev=212880&view=auto
==============================================================================
Binary files llvm/trunk/test/Object/Inputs/unwind-section.elf-x86-64 (added) and llvm/trunk/test/Object/Inputs/unwind-section.elf-x86-64 Sat Jul 12 13:25:08 2014 differ
Modified: llvm/trunk/test/Object/obj2yaml.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/obj2yaml.test?rev=212880&r1=212879&r2=212880&view=diff
==============================================================================
--- llvm/trunk/test/Object/obj2yaml.test (original)
+++ llvm/trunk/test/Object/obj2yaml.test Sat Jul 12 13:25:08 2014
@@ -3,6 +3,8 @@ RUN: obj2yaml %p/Inputs/trivial-object-t
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:
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: ''
More information about the llvm-commits
mailing list