1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 #ifndef _ELF_H 30 #define _ELF_H 31 32 #include <sys/cdefs.h> 33 34 #include <bits/auxvec.h> 35 #include <bits/elf_arm.h> 36 #include <bits/elf_arm64.h> 37 #include <bits/elf_mips.h> 38 #include <bits/elf_x86.h> 39 #include <bits/elf_x86_64.h> 40 #include <linux/elf.h> 41 #include <linux/elf-em.h> 42 43 #define ELF32_R_INFO(sym, type) ((((Elf32_Word)sym) << 8) | ((type) & 0xff)) 44 #define ELF64_R_INFO(sym, type) ((((Elf64_Xword)sym) << 32) | ((type) & 0xffffffff)) 45 46 typedef __s64 Elf32_Sxword; 47 48 typedef struct { 49 __u32 a_type; 50 union { 51 __u32 a_val; 52 } a_un; 53 } Elf32_auxv_t; 54 55 typedef struct { 56 __u64 a_type; 57 union { 58 __u64 a_val; 59 } a_un; 60 } Elf64_auxv_t; 61 62 typedef Elf32_Half Elf32_Versym; 63 typedef Elf64_Half Elf64_Versym; 64 65 typedef struct { 66 Elf32_Half vd_version; 67 Elf32_Half vd_flags; 68 Elf32_Half vd_ndx; 69 Elf32_Half vd_cnt; 70 Elf32_Word vd_hash; 71 Elf32_Word vd_aux; 72 Elf32_Word vd_next; 73 } Elf32_Verdef; 74 75 typedef struct { 76 Elf32_Word vda_name; 77 Elf32_Word vda_next; 78 } Elf32_Verdaux; 79 80 typedef struct { 81 Elf64_Half vd_version; 82 Elf64_Half vd_flags; 83 Elf64_Half vd_ndx; 84 Elf64_Half vd_cnt; 85 Elf64_Word vd_hash; 86 Elf64_Word vd_aux; 87 Elf64_Word vd_next; 88 } Elf64_Verdef; 89 90 typedef struct { 91 Elf64_Word vda_name; 92 Elf64_Word vda_next; 93 } Elf64_Verdaux; 94 95 typedef struct { 96 Elf32_Half vn_version; 97 Elf32_Half vn_cnt; 98 Elf32_Word vn_file; 99 Elf32_Word vn_aux; 100 Elf32_Word vn_next; 101 } Elf32_Verneed; 102 103 typedef struct { 104 Elf32_Word vna_hash; 105 Elf32_Half vna_flags; 106 Elf32_Half vna_other; 107 Elf32_Word vna_name; 108 Elf32_Word vna_next; 109 } Elf32_Vernaux; 110 111 typedef struct { 112 Elf64_Half vn_version; 113 Elf64_Half vn_cnt; 114 Elf64_Word vn_file; 115 Elf64_Word vn_aux; 116 Elf64_Word vn_next; 117 } Elf64_Verneed; 118 119 typedef struct { 120 Elf64_Word vna_hash; 121 Elf64_Half vna_flags; 122 Elf64_Half vna_other; 123 Elf64_Word vna_name; 124 Elf64_Word vna_next; 125 } Elf64_Vernaux; 126 127 #define DF_ORIGIN 0x00000001 128 #define DF_SYMBOLIC 0x00000002 129 #define DF_TEXTREL 0x00000004 130 #define DF_BIND_NOW 0x00000008 131 #define DF_STATIC_TLS 0x00000010 132 133 #define DF_1_NOW 0x00000001 /* Perform complete relocation processing. */ 134 #define DF_1_GLOBAL 0x00000002 /* implies RTLD_GLOBAL */ 135 #define DF_1_GROUP 0x00000004 136 #define DF_1_NODELETE 0x00000008 /* implies RTLD_NODELETE */ 137 #define DF_1_LOADFLTR 0x00000010 138 #define DF_1_INITFIRST 0x00000020 139 #define DF_1_NOOPEN 0x00000040 /* Object can not be used with dlopen(3) */ 140 #define DF_1_ORIGIN 0x00000080 141 #define DF_1_DIRECT 0x00000100 142 #define DF_1_TRANS 0x00000200 143 #define DF_1_INTERPOSE 0x00000400 144 #define DF_1_NODEFLIB 0x00000800 145 #define DF_1_NODUMP 0x00001000 /* Object cannot be dumped with dldump(3) */ 146 #define DF_1_CONFALT 0x00002000 147 #define DF_1_ENDFILTEE 0x00004000 148 #define DF_1_DISPRELDNE 0x00008000 149 #define DF_1_DISPRELPND 0x00010000 150 #define DF_1_NODIRECT 0x00020000 151 #define DF_1_IGNMULDEF 0x00040000 /* Internal use */ 152 #define DF_1_NOKSYMS 0x00080000 /* Internal use */ 153 #define DF_1_NOHDR 0x00100000 /* Internal use */ 154 #define DF_1_EDITED 0x00200000 155 #define DF_1_NORELOC 0x00400000 /* Internal use */ 156 #define DF_1_SYMINTPOSE 0x00800000 157 #define DF_1_GLOBAUDIT 0x01000000 158 #define DF_1_SINGLETON 0x02000000 159 #define DF_1_STUB 0x04000000 160 #define DF_1_PIE 0x08000000 161 162 #define DT_BIND_NOW 24 163 #define DT_INIT_ARRAY 25 164 #define DT_FINI_ARRAY 26 165 #define DT_INIT_ARRAYSZ 27 166 #define DT_FINI_ARRAYSZ 28 167 #define DT_RUNPATH 29 168 #define DT_FLAGS 30 169 /* glibc and BSD disagree for DT_ENCODING; glibc looks wrong. */ 170 #define DT_PREINIT_ARRAY 32 171 #define DT_PREINIT_ARRAYSZ 33 172 173 /* Android compressed rel/rela sections */ 174 #define DT_ANDROID_REL (DT_LOOS + 2) 175 #define DT_ANDROID_RELSZ (DT_LOOS + 3) 176 177 #define DT_ANDROID_RELA (DT_LOOS + 4) 178 #define DT_ANDROID_RELASZ (DT_LOOS + 5) 179 180 /* gnu hash entry */ 181 #define DT_GNU_HASH 0x6ffffef5 182 183 #define ELFOSABI_SYSV 0 /* Synonym for ELFOSABI_NONE used by valgrind. */ 184 185 #define PT_GNU_RELRO 0x6474e552 186 187 #undef ELF_ST_TYPE 188 #define ELF_ST_TYPE(x) ((x) & 0xf) 189 #define ELF_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) 190 #define ELF32_ST_INFO(b,t) ELF_ST_INFO(b,t) 191 #define ELF64_ST_INFO(b,t) ELF_ST_INFO(b,t) 192 193 #define STB_LOOS 10 194 #define STB_HIOS 12 195 #define STB_LOPROC 13 196 #define STB_HIPROC 15 197 198 #define SHT_LOOS 0x60000000 199 #define SHT_HIOS 0x6fffffff 200 201 #define STT_GNU_IFUNC 10 202 #define STT_LOOS 10 203 #define STT_HIOS 12 204 #define STT_LOPROC 13 205 #define STT_HIPROC 15 206 207 #define STV_DEFAULT 0 208 #define STV_INTERNAL 1 209 #define STV_HIDDEN 2 210 #define STV_PROTECTED 3 211 212 /* The kernel uses NT_PRFPREG but glibc also offers NT_FPREGSET */ 213 #define NT_FPREGSET NT_PRFPREG 214 215 #define ELF_NOTE_GNU "GNU" 216 217 #define NT_GNU_BUILD_ID 3 218 219 #define VER_FLG_BASE 0x1 220 #define VER_FLG_WEAK 0x2 221 222 #define VER_NDX_LOCAL 0 223 #define VER_NDX_GLOBAL 1 224 225 #endif /* _ELF_H */ 226