elf_traits.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef _ELF_TRAITS_H_ 6#define _ELF_TRAITS_H_ 7 8// NOTE: <stdint.h> is required here before <elf.h>. This is a NDK header bug. 9#include <stdint.h> 10#include <elf.h> 11 12// ELF is a traits structure used to provide convenient aliases for 13// 32/64 bit Elf types, depending on the target CPU bitness. 14#if __SIZEOF_POINTER__ == 4 15struct ELF { 16 typedef Elf32_Ehdr Ehdr; 17 typedef Elf32_Phdr Phdr; 18 typedef Elf32_Word Word; 19 typedef Elf32_Sword Sword; 20 typedef Elf32_Addr Addr; 21 typedef Elf32_Dyn Dyn; 22 typedef Elf32_Sym Sym; 23 typedef Elf32_Rel Rel; 24 typedef Elf32_Rela Rela; 25 typedef Elf32_auxv_t auxv_t; 26 27 enum { kElfClass = ELFCLASS32 }; 28 enum { kElfBits = 32 }; 29 30#ifndef ELF_R_TYPE 31#define ELF_R_TYPE ELF32_R_TYPE 32#endif 33 34#ifndef ELF_R_SYM 35#define ELF_R_SYM ELF32_R_SYM 36#endif 37}; 38#elif __SIZEOF_POINTER__ == 8 39struct ELF { 40 typedef Elf64_Ehdr Ehdr; 41 typedef Elf64_Phdr Phdr; 42 typedef Elf64_Word Word; 43 typedef Elf64_Sword Sword; 44 typedef Elf64_Addr Addr; 45 typedef Elf64_Dyn Dyn; 46 typedef Elf64_Sym Sym; 47 typedef Elf64_Rel Rel; 48 typedef Elf64_Rela Rela; 49 typedef Elf64_auxv_t auxv_t; 50 51 enum { kElfClass = ELFCLASS64 }; 52 enum { kElfBits = 64 }; 53 54#ifndef ELF_R_TYPE 55#define ELF_R_TYPE ELF64_R_TYPE 56#endif 57 58#ifndef ELF_R_SYM 59#define ELF_R_SYM ELF64_R_SYM 60#endif 61}; 62#else 63#error "Unsupported target CPU bitness" 64#endif 65 66#ifdef __arm__ 67#define ELF_MACHINE EM_ARM 68#elif defined(__i386__) 69#define ELF_MACHINE EM_386 70#elif defined(__x86_64__) 71#define ELF_MACHINE EM_X86_64 72#elif defined(__mips__) && !defined(__LP64__) // mips64el defines __mips__ too 73#define ELF_MACHINE EM_MIPS 74#elif defined(__aarch64__) 75#define ELF_MACHINE EM_AARCH64 76#else 77#error "Unsupported target CPU architecture" 78#endif 79 80#endif // _ELF_TRAITS_H_ 81