Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / android_crazy_linker / src / src / elf_traits.h
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
15 struct 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
39 struct 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_