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