Define endianness-aware type for Elf_Chdr.

llvm-svn: 274728
This commit is contained in:
Rui Ueyama 2016-07-07 03:53:00 +00:00
parent 7f92eab5af
commit 830c078d8b
1 changed files with 20 additions and 0 deletions

View File

@ -34,6 +34,7 @@ template <class ELFT> struct Elf_Vernaux_Impl;
template <class ELFT> struct Elf_Versym_Impl;
template <class ELFT> struct Elf_Hash_Impl;
template <class ELFT> struct Elf_GnuHash_Impl;
template <class ELFT> struct Elf_Chdr_Impl;
template <endianness E, bool Is64> struct ELFType {
private:
@ -59,6 +60,7 @@ public:
typedef Elf_Versym_Impl<ELFType<E, Is64>> Versym;
typedef Elf_Hash_Impl<ELFType<E, Is64>> Hash;
typedef Elf_GnuHash_Impl<ELFType<E, Is64>> GnuHash;
typedef Elf_Chdr_Impl<ELFType<E, Is64>> Chdr;
typedef ArrayRef<Dyn> DynRange;
typedef ArrayRef<Shdr> ShdrRange;
typedef ArrayRef<Sym> SymRange;
@ -558,6 +560,24 @@ struct Elf_GnuHash_Impl {
}
};
// Compressed section headers.
template <endianness TargetEndianness>
struct Elf_Chdr_Impl<ELFType<TargetEndianness, false>> {
LLVM_ELF_IMPORT_TYPES(TargetEndianness, false)
Elf_Word ch_type;
Elf_Word ch_size;
Elf_Word ch_addralign;
};
template <endianness TargetEndianness>
struct Elf_Chdr_Impl<ELFType<TargetEndianness, true>> {
LLVM_ELF_IMPORT_TYPES(TargetEndianness, true)
Elf_Word ch_type;
Elf_Word ch_reserved;
Elf_Xword ch_size;
Elf_Xword ch_addralign;
};
// MIPS .reginfo section
template <class ELFT>
struct Elf_Mips_RegInfo;