elf.h revision 16016df79f846d6d21266c3b1dce1e7c24dc4be1
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 <linux/auxvec.h> 35#include <linux/elf.h> 36#include <linux/elf-em.h> 37#include <machine/elf_machdep.h> 38 39#define ELF32_R_INFO(sym, type) ((((Elf32_Word)sym) << 8) | ((type) & 0xff)) 40#define ELF64_R_INFO(sym, type) ((((Elf64_Xword)sym) << 32) | ((type) & 0xffffffff)) 41 42typedef __s64 Elf32_Sxword; 43 44typedef struct { 45 __u32 a_type; 46 union { 47 __u32 a_val; 48 } a_un; 49} Elf32_auxv_t; 50 51typedef struct { 52 __u64 a_type; 53 union { 54 __u64 a_val; 55 } a_un; 56} Elf64_auxv_t; 57 58typedef Elf32_Half Elf32_Versym; 59typedef Elf64_Half Elf64_Versym; 60 61typedef struct { 62 Elf32_Half vd_version; 63 Elf32_Half vd_flags; 64 Elf32_Half vd_ndx; 65 Elf32_Half vd_cnt; 66 Elf32_Word vd_hash; 67 Elf32_Word vd_aux; 68 Elf32_Word vd_next; 69} Elf32_Verdef; 70 71typedef struct { 72 Elf32_Word vda_name; 73 Elf32_Word vda_next; 74} Elf32_Verdaux; 75 76typedef struct { 77 Elf64_Half vd_version; 78 Elf64_Half vd_flags; 79 Elf64_Half vd_ndx; 80 Elf64_Half vd_cnt; 81 Elf64_Word vd_hash; 82 Elf64_Word vd_aux; 83 Elf64_Word vd_next; 84} Elf64_Verdef; 85 86typedef struct { 87 Elf64_Word vda_name; 88 Elf64_Word vda_next; 89} Elf64_Verdaux; 90 91typedef struct { 92 Elf32_Half vn_version; 93 Elf32_Half vn_cnt; 94 Elf32_Word vn_file; 95 Elf32_Word vn_aux; 96 Elf32_Word vn_next; 97} Elf32_Verneed; 98 99typedef struct { 100 Elf32_Word vna_hash; 101 Elf32_Half vna_flags; 102 Elf32_Half vna_other; 103 Elf32_Word vna_name; 104 Elf32_Word vna_next; 105} Elf32_Vernaux; 106 107typedef struct { 108 Elf64_Half vn_version; 109 Elf64_Half vn_cnt; 110 Elf64_Word vn_file; 111 Elf64_Word vn_aux; 112 Elf64_Word vn_next; 113} Elf64_Verneed; 114 115typedef struct { 116 Elf64_Word vna_hash; 117 Elf64_Half vna_flags; 118 Elf64_Half vna_other; 119 Elf64_Word vna_name; 120 Elf64_Word vna_next; 121} Elf64_Vernaux; 122 123#define DF_ORIGIN 0x00000001 124#define DF_SYMBOLIC 0x00000002 125#define DF_TEXTREL 0x00000004 126#define DF_BIND_NOW 0x00000008 127#define DF_STATIC_TLS 0x00000010 128 129#define DF_1_NOW 0x00000001 /* Perform complete relocation processing. */ 130#define DF_1_GLOBAL 0x00000002 /* implies RTLD_GLOBAL */ 131#define DF_1_GROUP 0x00000004 132#define DF_1_NODELETE 0x00000008 /* implies RTLD_NODELETE */ 133#define DF_1_LOADFLTR 0x00000010 134#define DF_1_INITFIRST 0x00000020 135#define DF_1_NOOPEN 0x00000040 /* Object can not be used with dlopen(3) */ 136#define DF_1_ORIGIN 0x00000080 137#define DF_1_DIRECT 0x00000100 138#define DF_1_TRANS 0x00000200 139#define DF_1_INTERPOSE 0x00000400 140#define DF_1_NODEFLIB 0x00000800 141#define DF_1_NODUMP 0x00001000 /* Object cannot be dumped with dldump(3) */ 142#define DF_1_CONFALT 0x00002000 143#define DF_1_ENDFILTEE 0x00004000 144#define DF_1_DISPRELDNE 0x00008000 145#define DF_1_DISPRELPND 0x00010000 146#define DF_1_NODIRECT 0x00020000 147#define DF_1_IGNMULDEF 0x00040000 /* Internal use */ 148#define DF_1_NOKSYMS 0x00080000 /* Internal use */ 149#define DF_1_NOHDR 0x00100000 /* Internal use */ 150#define DF_1_EDITED 0x00200000 151#define DF_1_NORELOC 0x00400000 /* Internal use */ 152#define DF_1_SYMINTPOSE 0x00800000 153#define DF_1_GLOBAUDIT 0x01000000 154#define DF_1_SINGLETON 0x02000000 155#define DF_1_STUB 0x04000000 156#define DF_1_PIE 0x08000000 157 158#define DT_BIND_NOW 24 159#define DT_INIT_ARRAY 25 160#define DT_FINI_ARRAY 26 161#define DT_INIT_ARRAYSZ 27 162#define DT_FINI_ARRAYSZ 28 163#define DT_RUNPATH 29 164#define DT_FLAGS 30 165/* glibc and BSD disagree for DT_ENCODING; glibc looks wrong. */ 166#define DT_PREINIT_ARRAY 32 167#define DT_PREINIT_ARRAYSZ 33 168 169/* Android compressed rel/rela sections */ 170#define DT_ANDROID_REL (DT_LOOS + 2) 171#define DT_ANDROID_RELSZ (DT_LOOS + 3) 172 173#define DT_ANDROID_RELA (DT_LOOS + 4) 174#define DT_ANDROID_RELASZ (DT_LOOS + 5) 175 176/* gnu hash entry */ 177#define DT_GNU_HASH 0x6ffffef5 178 179#define ELFOSABI_SYSV 0 /* Synonym for ELFOSABI_NONE used by valgrind. */ 180 181#define PT_GNU_RELRO 0x6474e552 182 183#define STB_LOOS 10 184#define STB_HIOS 12 185#define STB_LOPROC 13 186#define STB_HIPROC 15 187 188#define SHT_LOOS 0x60000000 189#define SHT_HIOS 0x6fffffff 190 191#define STT_GNU_IFUNC 10 192#define STT_LOOS 10 193#define STT_HIOS 12 194#define STT_LOPROC 13 195#define STT_HIPROC 15 196 197#define STV_DEFAULT 0 198#define STV_INTERNAL 1 199#define STV_HIDDEN 2 200#define STV_PROTECTED 3 201 202/* The kernel uses NT_PRFPREG but glibc also offers NT_FPREGSET */ 203#define NT_FPREGSET NT_PRFPREG 204 205#define ELF_NOTE_GNU "GNU" 206 207#define NT_GNU_BUILD_ID 3 208 209#define VER_FLG_BASE 0x1 210#define VER_FLG_WEAK 0x2 211 212#define VER_NDX_LOCAL 0 213#define VER_NDX_GLOBAL 1 214 215#endif /* _ELF_H */ 216