1441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Interface for libelf. 2cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Copyright (C) 1998, 1999, 2000, 2002, 2004, 2005, 2006, 2007 Red Hat, Inc. 3cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng This file is part of Red Hat elfutils. 4cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 5cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is free software; you can redistribute it and/or modify 6cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng it under the terms of the GNU General Public License as published by the 7cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Free Software Foundation; version 2 of the License. 8cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 9cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is distributed in the hope that it will be useful, but 10cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng WITHOUT ANY WARRANTY; without even the implied warranty of 11cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng General Public License for more details. 13cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 14cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng You should have received a copy of the GNU General Public License along 15cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng with Red Hat elfutils; if not, write to the Free Software Foundation, 16cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. 17cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 18cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng In addition, as a special exception, Red Hat, Inc. gives You the 19cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng additional right to link the code of Red Hat elfutils with code licensed 20cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng under any Open Source Initiative certified open source license 21cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng (http://www.opensource.org/licenses/index.php) which requires the 22cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng distribution of source code with any binary distribution and to 23cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng distribute linked combinations of the two. Non-GPL Code permitted under 24cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng this exception must only link to the code of Red Hat elfutils through 25cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng those well defined interfaces identified in the file named EXCEPTION 26cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng found in the source code files (the "Approved Interfaces"). The files 27cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng of Non-GPL Code may instantiate templates or use macros or inline 28cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng functions from the Approved Interfaces without causing the resulting 29cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng work to be covered by the GNU General Public License. Only Red Hat, 30cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Inc. may make changes or additions to the list of Approved Interfaces. 31cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat's grant of this exception is conditioned upon your not adding 32cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng any new exceptions. If you wish to add a new Approved Interface or 33cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng exception, please contact Red Hat. You must obey the GNU General Public 34cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng License in all respects for all of the Red Hat elfutils code and other 35cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng code used in conjunction with Red Hat elfutils except the Non-GPL Code 36cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng covered by this exception. If you modify this file, you may extend this 37cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng exception to your version of the file, but you are not obligated to do 38cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng so. If you do not wish to provide this exception without modification, 39cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng you must delete this exception statement from your version and license 40cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng this file solely under the GPL without exception. 41cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 42cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is an included package of the Open Invention Network. 43cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng An included package of the Open Invention Network is a package for which 44cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Open Invention Network licensees cross-license their patents. No patent 45cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng license is granted, either expressly or impliedly, by designation as an 46cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng included package. Should you wish to participate in the Open Invention 47cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Network licensing program, please visit www.openinventionnetwork.com 48cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng <http://www.openinventionnetwork.com>. */ 49441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 50441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#ifndef _LIBELF_H 51441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define _LIBELF_H 1 52441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 53441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <sys/types.h> 54441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 55441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get the ELF types. */ 56441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <elf.h> 57441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 58441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 59441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Known translation types. */ 60441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef enum 61441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 62441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_BYTE, /* unsigned char */ 63441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_ADDR, /* Elf32_Addr, Elf64_Addr, ... */ 64441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_DYN, /* Dynamic section record. */ 65441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_EHDR, /* ELF header. */ 66441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_HALF, /* Elf32_Half, Elf64_Half, ... */ 67441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_OFF, /* Elf32_Off, Elf64_Off, ... */ 68441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_PHDR, /* Program header. */ 69441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_RELA, /* Relocation entry with addend. */ 70441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_REL, /* Relocation entry. */ 71441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_SHDR, /* Section header. */ 72441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_SWORD, /* Elf32_Sword, Elf64_Sword, ... */ 73441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_SYM, /* Symbol record. */ 74441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_WORD, /* Elf32_Word, Elf64_Word, ... */ 75441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_XWORD, /* Elf32_Xword, Elf64_Xword, ... */ 76441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_SXWORD, /* Elf32_Sxword, Elf64_Sxword, ... */ 77441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_VDEF, /* Elf32_Verdef, Elf64_Verdef, ... */ 78441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_VDAUX, /* Elf32_Verdaux, Elf64_Verdaux, ... */ 79441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_VNEED, /* Elf32_Verneed, Elf64_Verneed, ... */ 80441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_VNAUX, /* Elf32_Vernaux, Elf64_Vernaux, ... */ 81441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_NHDR, /* Elf32_Nhdr, Elf64_Nhdr, ... */ 82441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_SYMINFO, /* Elf32_Syminfo, Elf64_Syminfo, ... */ 83441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_MOVE, /* Elf32_Move, Elf64_Move, ... */ 84441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_LIB, /* Elf32_Lib, Elf64_Lib, ... */ 85cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng ELF_T_GNUHASH, /* GNU-style hash section. */ 86cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng ELF_T_AUXV, /* Elf32_auxv_t, Elf64_auxv_t, ... */ 87441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Keep this the last entry. */ 88441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_T_NUM 89441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} Elf_Type; 90441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 91441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Descriptor for data to be converted to or from memory format. */ 92441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct 93441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 94441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project void *d_buf; /* Pointer to the actual data. */ 95441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Elf_Type d_type; /* Type of this piece of data. */ 96441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int d_version; /* ELF version. */ 97441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t d_size; /* Size in bytes. */ 98fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng /* ANDROID_CHANGE_BEGIN */ 99fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#if 0 100cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng loff_t d_off; /* Offset into section. */ 101fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#else 102fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng off_t d_off; /* Offset into section. */ 103fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#endif 104fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng /* ANDROID_CHANGE_END */ 105441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t d_align; /* Alignment in section. */ 106441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} Elf_Data; 107441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 108441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 109441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Commands for `...'. */ 110441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef enum 111441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 112441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_NULL, /* Nothing, terminate, or compute only. */ 113441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_READ, /* Read .. */ 114441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_RDWR, /* Read and write .. */ 115441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_WRITE, /* Write .. */ 116441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_CLR, /* Clear flag. */ 117441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_SET, /* Set flag. */ 118441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_FDDONE, /* Signal that file descriptor will not be 119441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project used anymore. */ 120441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_FDREAD, /* Read rest of data so that file descriptor 121441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project is not used anymore. */ 122441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* The following are extensions. */ 123441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_READ_MMAP, /* Read, but mmap the file if possible. */ 124441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_RDWR_MMAP, /* Read and write, with mmap. */ 125441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_WRITE_MMAP, /* Write, with mmap. */ 126441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_READ_MMAP_PRIVATE, /* Read, but memory is writable, results are 127441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project not written to the file. */ 128441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_EMPTY, /* Copy basic file data but not the content. */ 129441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Keep this the last entry. */ 130441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_C_NUM 131441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} Elf_Cmd; 132441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 133441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 134441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Flags for the ELF structures. */ 135441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectenum 136441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 137441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_F_DIRTY = 0x1, 138441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define ELF_F_DIRTY ELF_F_DIRTY 139441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_F_LAYOUT = 0x4, 140441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define ELF_F_LAYOUT ELF_F_LAYOUT 141441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_F_PERMISSIVE = 0x8 142441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#define ELF_F_PERMISSIVE ELF_F_PERMISSIVE 143441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project}; 144441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 145441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 146441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Identification values for recognized object files. */ 147441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef enum 148441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 149441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_K_NONE, /* Unknown. */ 150441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_K_AR, /* Archive. */ 151441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_K_COFF, /* Stupid old COFF. */ 152441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_K_ELF, /* ELF file. */ 153441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Keep this the last entry. */ 154441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project ELF_K_NUM 155441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} Elf_Kind; 156441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 157441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 158441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Archive member header. */ 159441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct 160441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 161441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project char *ar_name; /* Name of archive member. */ 162441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project time_t ar_date; /* File date. */ 163441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project uid_t ar_uid; /* User ID. */ 164441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project gid_t ar_gid; /* Group ID. */ 165441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project mode_t ar_mode; /* File mode. */ 166fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng /* ANDROID_CHANGE_BEGIN */ 167fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#if 0 168cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng loff_t ar_size; /* File size. */ 169fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#else 170fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng off_t ar_size; /* File size. */ 171fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#endif 172fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng /* ANDROID_CHANGE_END */ 173441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project char *ar_rawname; /* Original name of archive member. */ 174441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} Elf_Arhdr; 175441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 176441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 177441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Archive symbol table entry. */ 178441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct 179441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 180441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project char *as_name; /* Symbol name. */ 181441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t as_off; /* Offset for this file in the archive. */ 182441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned long int as_hash; /* Hash value of the name. */ 183441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} Elf_Arsym; 184441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 185441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 186441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Descriptor for the ELF file. */ 187441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct Elf Elf; 188441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 189441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Descriptor for ELF file section. */ 190441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projecttypedef struct Elf_Scn Elf_Scn; 191441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 192441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 193441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#ifdef __cplusplus 194441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern "C" { 195441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#endif 196441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 197441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return descriptor for ELF file to work according to CMD. */ 198441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf *elf_begin (int __fildes, Elf_Cmd __cmd, Elf *__ref); 199441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 200441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Create a clone of an existing ELF descriptor. */ 201441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project extern Elf *elf_clone (Elf *__elf, Elf_Cmd __cmd); 202441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 203441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Create descriptor for memory region. */ 204441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf *elf_memory (char *__image, size_t __size); 205441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 206441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Advance archive descriptor to next element. */ 207441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Cmd elf_next (Elf *__elf); 208441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 209441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Free resources allocated for ELF. */ 210441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int elf_end (Elf *__elf); 211441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 212441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Update ELF descriptor and write file to disk. */ 213fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng/* ANDROID_CHANGE_BEGIN */ 214fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#if 0 215fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Chengextern off_t elf_update (Elf *__elf, Elf_Cmd __cmd); 216fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#else 217fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#endif 218fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng/* ANDROID_CHANGE_END */ 219fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng 220441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 221441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Determine what kind of file is associated with ELF. */ 222441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Kind elf_kind (Elf *__elf) __attribute__ ((__pure__)); 223441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 224441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get the base offset for an object file. */ 225fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng/* ANDROID_CHANGE_BEGIN */ 226fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#if 0 227cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern loff_t elf_getbase (Elf *__elf); 228fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#else 229fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Chengextern off_t elf_getbase (Elf *__elf); 230fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#endif 231fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng/* ANDROID_CHANGE_END */ 232441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 233441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 234441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Retrieve file identification data. */ 235cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern char *elf_getident (Elf *__elf, size_t *__nbytes); 236441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 237441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Retrieve class-dependent object file header. */ 238441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf32_Ehdr *elf32_getehdr (Elf *__elf); 239441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similar but this time the binary calls is ELFCLASS64. */ 240441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf64_Ehdr *elf64_getehdr (Elf *__elf); 241441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 242441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Create ELF header if none exists. */ 243441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf32_Ehdr *elf32_newehdr (Elf *__elf); 244441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similar but this time the binary calls is ELFCLASS64. */ 245441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf64_Ehdr *elf64_newehdr (Elf *__elf); 246441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 247441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Retrieve class-dependent program header table. */ 248441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf32_Phdr *elf32_getphdr (Elf *__elf); 249441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similar but this time the binary calls is ELFCLASS64. */ 250441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf64_Phdr *elf64_getphdr (Elf *__elf); 251441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 252441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Create ELF program header. */ 253441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf32_Phdr *elf32_newphdr (Elf *__elf, size_t __cnt); 254441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similar but this time the binary calls is ELFCLASS64. */ 255441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf64_Phdr *elf64_newphdr (Elf *__elf, size_t __cnt); 256441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 257441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 258441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get section at INDEX. */ 259441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Scn *elf_getscn (Elf *__elf, size_t __index); 260441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 261cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Get section at OFFSET. */ 262cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern Elf_Scn *elf32_offscn (Elf *__elf, Elf32_Off __offset); 263cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Similar bug this time the binary calls is ELFCLASS64. */ 264cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern Elf_Scn *elf64_offscn (Elf *__elf, Elf64_Off __offset); 265cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 266441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get index of section. */ 267441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern size_t elf_ndxscn (Elf_Scn *__scn); 268441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 269441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get section with next section index. */ 270441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Scn *elf_nextscn (Elf *__elf, Elf_Scn *__scn); 271441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 272441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Create a new section and append it at the end of the table. */ 273441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Scn *elf_newscn (Elf *__elf); 274441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 275cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Get the section index of the extended section index table for the 276cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng given symbol table. */ 277cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern int elf_scnshndx (Elf_Scn *__scn); 278cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 279441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get the number of sections in the ELF file. If the file uses more 280441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project sections than can be represented in the e_shnum field of the ELF 281441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project header the information from the sh_size field in the zeroth section 282441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project header is used. */ 283441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int elf_getshnum (Elf *__elf, size_t *__dst); 284441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 285441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 286441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get the section index of the section header string table in the ELF 287441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project file. If the index cannot be represented in the e_shnum field of 288441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project the ELF header the information from the sh_link field in the zeroth 289441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project section header is used. */ 290441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int elf_getshstrndx (Elf *__elf, size_t *__dst); 291441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 292441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 293441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Retrieve section header of ELFCLASS32 binary. */ 294441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf32_Shdr *elf32_getshdr (Elf_Scn *__scn); 295441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similar for ELFCLASS64. */ 296441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf64_Shdr *elf64_getshdr (Elf_Scn *__scn); 297441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 298441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 299441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Set or clear flags for ELF file. */ 300441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned int elf_flagelf (Elf *__elf, Elf_Cmd __cmd, 301441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __flags); 302441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similarly for the ELF header. */ 303441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned int elf_flagehdr (Elf *__elf, Elf_Cmd __cmd, 304441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __flags); 305441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similarly for the ELF program header. */ 306441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned int elf_flagphdr (Elf *__elf, Elf_Cmd __cmd, 307441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __flags); 308441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similarly for the given ELF section. */ 309441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned int elf_flagscn (Elf_Scn *__scn, Elf_Cmd __cmd, 310441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __flags); 311441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similarly for the given ELF data. */ 312441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned int elf_flagdata (Elf_Data *__data, Elf_Cmd __cmd, 313441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __flags); 314441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similarly for the given ELF section header. */ 315441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned int elf_flagshdr (Elf_Scn *__scn, Elf_Cmd __cmd, 316441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __flags); 317441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 318441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 319441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get data from section while translating from file representation 320441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project to memory representation. */ 321441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Data *elf_getdata (Elf_Scn *__scn, Elf_Data *__data); 322441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 323441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Get uninterpreted section content. */ 324441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Data *elf_rawdata (Elf_Scn *__scn, Elf_Data *__data); 325441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 326441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Create new data descriptor for section SCN. */ 327441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Data *elf_newdata (Elf_Scn *__scn); 328441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 329cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Get data translated from a chunk of the file contents as section data 330cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng would be for TYPE. The resulting Elf_Data pointer is valid until 331cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng elf_end (ELF) is called. */ 332fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng/* ANDROID_CHANGE_BEGIN */ 333fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#if 0 334cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern Elf_Data *elf_getdata_rawchunk (Elf *__elf, 335cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng loff_t __offset, size_t __size, 336cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Elf_Type __type); 337fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#else 338fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Chengextern Elf_Data *elf_getdata_rawchunk (Elf *__elf, 339fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng off_t __offset, size_t __size, 340fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng Elf_Type __type); 341fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#endif 342fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng/* ANDROID_CHANGE_END */ 343cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 344441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 345441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return pointer to string at OFFSET in section INDEX. */ 346441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern char *elf_strptr (Elf *__elf, size_t __index, size_t __offset); 347441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 348441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 349441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return header of archive. */ 350441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Arhdr *elf_getarhdr (Elf *__elf); 351441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 352cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Return offset in archive for current file ELF. */ 353fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng/* ANDROID_CHANGE_BEGIN */ 354fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#if 0 355cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern loff_t elf_getaroff (Elf *__elf); 356fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#else 357fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Chengextern off_t elf_getaroff (Elf *__elf); 358fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng#endif 359fac061ffdea9dc61a3b7c53cb85a44594a4354baBen Cheng/* ANDROID_CHANGE_END */ 360cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 361441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Select archive element at OFFSET. */ 362441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern size_t elf_rand (Elf *__elf, size_t __offset); 363441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 364cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Get symbol table of archive. */ 365cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern Elf_Arsym *elf_getarsym (Elf *__elf, size_t *__narsyms); 366441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 367441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 368441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Control ELF descriptor. */ 369441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int elf_cntl (Elf *__elf, Elf_Cmd __cmd); 370441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 371441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Retrieve uninterpreted file contents. */ 372cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern char *elf_rawfile (Elf *__elf, size_t *__nbytes); 373441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 374441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 375441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return size of array of COUNT elements of the type denoted by TYPE 376441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project in the external representation. The binary class is taken from ELF. 377441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project The result is based on version VERSION of the ELF standard. */ 378441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern size_t elf32_fsize (Elf_Type __type, size_t __count, 379441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __version) 380441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __attribute__ ((__const__)); 381441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similar but this time the binary calls is ELFCLASS64. */ 382441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern size_t elf64_fsize (Elf_Type __type, size_t __count, 383441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __version) 384441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __attribute__ ((__const__)); 385441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 386441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 387441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Convert data structure from the representation in the file represented 388441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project by ELF to their memory representation. */ 389441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Data *elf32_xlatetom (Elf_Data *__dest, const Elf_Data *__src, 390441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __encode); 391441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Same for 64 bit class. */ 392441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Data *elf64_xlatetom (Elf_Data *__dest, const Elf_Data *__src, 393441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __encode); 394441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 395441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Convert data structure from to the representation in memory 396441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project represented by ELF file representation. */ 397441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Data *elf32_xlatetof (Elf_Data *__dest, const Elf_Data *__src, 398441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __encode); 399441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Same for 64 bit class. */ 400441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern Elf_Data *elf64_xlatetof (Elf_Data *__dest, const Elf_Data *__src, 401441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project unsigned int __encode); 402441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 403441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 404441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return error code of last failing function call. This value is kept 405441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project separately for each thread. */ 406441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern int elf_errno (void); 407441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 408441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Return error string for ERROR. If ERROR is zero, return error string 409441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project for most recent error or NULL is none occurred. If ERROR is -1 the 410441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project behaviour is similar to the last case except that not NULL but a legal 411441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project string is returned. */ 412441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern const char *elf_errmsg (int __error); 413441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 414441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 415441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Coordinate ELF library and application versions. */ 416441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned int elf_version (unsigned int __version); 417441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 418441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Set fill bytes used to fill holes in data structures. */ 419441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern void elf_fill (int __fill); 420441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 421441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Compute hash value. */ 422441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern unsigned long int elf_hash (const char *__string) 423441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project __attribute__ ((__pure__)); 424441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 425cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Compute hash value using the GNU-specific hash function. */ 426cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengextern unsigned long int elf_gnu_hash (const char *__string) 427cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng __attribute__ ((__pure__)); 428cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 429441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 430441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Compute simple checksum from permanent parts of the ELF file. */ 431441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern long int elf32_checksum (Elf *__elf); 432441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project/* Similar but this time the binary calls is ELFCLASS64. */ 433441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectextern long int elf64_checksum (Elf *__elf); 434441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 435441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#ifdef __cplusplus 436441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} 437441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#endif 438441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 439441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#endif /* libelf.h */ 440