Add new build rules and associated fixes needed by perf.
New static libraries (host and target): libelf, libebl, libdw, and libdwfl
Cleaned up off_t, loff_t, and off64_t usage.
Change-Id: Ic567dce0591aad3c9c61f4054b2e1948b0865d64
diff --git a/android.patch b/android.patch
index 4021901..7d50f4f 100644
--- a/android.patch
+++ b/android.patch
@@ -1,6 +1,6 @@
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdw/dwarf_begin.c ./libdw/dwarf_begin.c
---- /home/bccheng/local/elfutils-0.138/libdw/dwarf_begin.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdw/dwarf_begin.c 2012-03-07 15:56:49.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libdw/dwarf_begin.c ./libdw/dwarf_begin.c
+--- /local/elfutils-0.138/libdw/dwarf_begin.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libdw/dwarf_begin.c 2012-03-09 10:19:33.000000000 -0800
@@ -94,7 +94,9 @@
/* Get an ELF descriptor. */
elf = elf_begin (fd, elfcmd, NULL);
@@ -22,9 +22,9 @@
}
else
{
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdw/dwarf_getpubnames.c ./libdw/dwarf_getpubnames.c
---- /home/bccheng/local/elfutils-0.138/libdw/dwarf_getpubnames.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdw/dwarf_getpubnames.c 2012-03-07 15:56:49.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libdw/dwarf_getpubnames.c ./libdw/dwarf_getpubnames.c
+--- /local/elfutils-0.138/libdw/dwarf_getpubnames.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libdw/dwarf_getpubnames.c 2012-03-12 11:09:29.000000000 -0700
@@ -60,6 +60,9 @@
#include <libdwP.h>
#include <dwarf.h>
@@ -35,23 +35,20 @@
static int
get_offsets (Dwarf *dbg)
-@@ -235,7 +238,13 @@
- gl.die_offset += dbg->pubnames_sets[cnt].cu_offset;
+diff -r -u -d /local/elfutils-0.138/libdw/dwarf_getsrc_file.c ./libdw/dwarf_getsrc_file.c
+--- /local/elfutils-0.138/libdw/dwarf_getsrc_file.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libdw/dwarf_getsrc_file.c 2012-03-12 12:42:46.000000000 -0700
+@@ -59,7 +59,6 @@
- gl.name = (char *) readp;
-+ /* ANDROID_CHANGE_BEGIN */
-+#ifdef __BIONIC__
-+ readp = gl.name + strlen(gl.name) + 1;
-+#else
- readp = (unsigned char *) rawmemchr (gl.name, '\0') + 1;
-+#endif
-+ /* ANDROID_CHANGE_END */
+ #include "libdwP.h"
- /* We found name and DIE offset. Report it. */
- if (callback (dbg, &gl, arg) != DWARF_CB_OK)
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdw/libdw_alloc.c ./libdw/libdw_alloc.c
---- /home/bccheng/local/elfutils-0.138/libdw/libdw_alloc.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdw/libdw_alloc.c 2012-03-07 15:56:49.000000000 -0800
+-
+ int
+ dwarf_getsrc_file (Dwarf *dbg, const char *fname, int lineno, int column,
+ Dwarf_Line ***srcsp, size_t *nsrcs)
+diff -r -u -d /local/elfutils-0.138/libdw/libdw_alloc.c ./libdw/libdw_alloc.c
+--- /local/elfutils-0.138/libdw/libdw_alloc.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libdw/libdw_alloc.c 2012-03-09 10:19:35.000000000 -0800
@@ -58,6 +58,9 @@
#include <sys/param.h>
#include "libdwP.h"
@@ -62,20 +59,18 @@
void *
__libdw_allocate (Dwarf *dbg, size_t minsize, size_t align)
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_build_id_find_elf.c ./libdwfl/dwfl_build_id_find_elf.c
---- /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_build_id_find_elf.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdwfl/dwfl_build_id_find_elf.c 2012-03-07 15:56:49.000000000 -0800
-@@ -52,6 +52,9 @@
+diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_build_id_find_elf.c ./libdwfl/dwfl_build_id_find_elf.c
+--- /local/elfutils-0.138/libdwfl/dwfl_build_id_find_elf.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libdwfl/dwfl_build_id_find_elf.c 2012-03-12 12:23:29.000000000 -0700
+@@ -52,7 +52,6 @@
#include <fcntl.h>
#include <unistd.h>
-+/* ANDROID_CHANGE_BEGIN */
-+#include <AndroidFixup.h>
-+/* ANDROID_CHANGE_END */
-
+-
int
internal_function
-@@ -84,8 +87,16 @@
+ __libdwfl_open_by_build_id (Dwfl_Module *mod, bool debug, char **file_name)
+@@ -84,8 +83,16 @@
".debug");
const Dwfl_Callbacks *const cb = mod->dwfl->callbacks;
@@ -92,7 +87,7 @@
int fd = -1;
char *dir;
-@@ -103,7 +114,6 @@
+@@ -103,7 +110,6 @@
if (unlikely (name == NULL))
break;
memcpy (mempcpy (name, dir, dirlen), id_name, sizeof id_name);
@@ -100,7 +95,7 @@
fd = TEMP_FAILURE_RETRY (open64 (name, O_RDONLY));
if (fd >= 0)
{
-@@ -119,6 +129,12 @@
+@@ -119,6 +125,12 @@
free (name);
}
@@ -113,10 +108,28 @@
/* If we simply found nothing, clear errno. If we had some other error
with the file, report that. Possibly this should treat other errors
like ENOENT too. But ignoring all errors could mask some that should
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_module_build_id.c ./libdwfl/dwfl_module_build_id.c
---- /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_module_build_id.c 2008-12-30 21:48:23.000000000 -0800
-+++ ./libdwfl/dwfl_module_build_id.c 2012-03-07 15:56:49.000000000 -0800
-@@ -139,9 +139,16 @@
+diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_error.c ./libdwfl/dwfl_error.c
+--- /local/elfutils-0.138/libdwfl/dwfl_error.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libdwfl/dwfl_error.c 2012-03-12 12:39:16.000000000 -0700
+@@ -218,7 +218,14 @@
+ switch (error &~ 0xffff)
+ {
+ case OTHER_ERROR (ERRNO):
++ /* ANDROID_CHANGE_BEGIN */
++#ifdef __BIONIC__
++ strerror_r (error & 0xffff, "bad", 0);
++ return NULL;
++#else
+ return strerror_r (error & 0xffff, "bad", 0);
++#endif
++ /* ANDROID_CHANGE_END */
+ case OTHER_ERROR (LIBELF):
+ return elf_errmsg (error & 0xffff);
+ case OTHER_ERROR (LIBDW):
+diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_module_build_id.c ./libdwfl/dwfl_module_build_id.c
+--- /local/elfutils-0.138/libdwfl/dwfl_module_build_id.c 2008-12-30 21:48:23.000000000 -0800
++++ ./libdwfl/dwfl_module_build_id.c 2012-03-12 12:40:16.000000000 -0700
+@@ -139,9 +139,17 @@
return result;
}
@@ -126,6 +139,7 @@
__dwfl_module_build_id (Dwfl_Module *mod,
const unsigned char **bits, GElf_Addr *vaddr)
+#else
++int
+dwfl_module_build_id (Dwfl_Module *mod,
+ const unsigned char **bits, GElf_Addr *vaddr)
+#endif
@@ -133,7 +147,7 @@
{
if (mod == NULL)
return -1;
-@@ -164,6 +171,9 @@
+@@ -164,6 +172,9 @@
*vaddr = mod->build_id_vaddr;
return mod->build_id_len;
}
@@ -143,39 +157,46 @@
extern __typeof__ (dwfl_module_build_id) INTUSE(dwfl_module_build_id)
__attribute__ ((alias ("__dwfl_module_build_id")));
asm (".symver "
-@@ -180,3 +190,5 @@
+@@ -180,3 +191,5 @@
}
asm (".symver "
"_BUG_COMPAT_dwfl_module_build_id, dwfl_module_build_id@ELFUTILS_0.130");
+#endif
+/* ANDROID_CHANGE_END */
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_module_getdwarf.c ./libdwfl/dwfl_module_getdwarf.c
---- /home/bccheng/local/elfutils-0.138/libdwfl/dwfl_module_getdwarf.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdwfl/dwfl_module_getdwarf.c 2012-03-07 15:56:49.000000000 -0800
-@@ -53,6 +53,9 @@
+diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_module_getdwarf.c ./libdwfl/dwfl_module_getdwarf.c
+--- /local/elfutils-0.138/libdwfl/dwfl_module_getdwarf.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libdwfl/dwfl_module_getdwarf.c 2012-03-12 12:24:14.000000000 -0700
+@@ -53,7 +53,6 @@
#include <unistd.h>
#include "../libdw/libdwP.h" /* DWARF_E_* values are here. */
-+/* ANDROID_CHANGE_BEGIN */
-+#include <AndroidFixup.h>
-+/* ANDROID_CHANGE_END */
-
+-
/* Open libelf FILE->fd and compute the load base of ELF as loaded in MOD.
When we return success, FILE->elf and FILE->bias are set up. */
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdwfl/find-debuginfo.c ./libdwfl/find-debuginfo.c
---- /home/bccheng/local/elfutils-0.138/libdwfl/find-debuginfo.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libdwfl/find-debuginfo.c 2012-03-07 15:56:49.000000000 -0800
-@@ -53,6 +53,9 @@
+ static inline Dwfl_Error
+diff -r -u -d /local/elfutils-0.138/libdwfl/dwfl_module_getsrc_file.c ./libdwfl/dwfl_module_getsrc_file.c
+--- /local/elfutils-0.138/libdwfl/dwfl_module_getsrc_file.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libdwfl/dwfl_module_getsrc_file.c 2012-03-12 12:42:55.000000000 -0700
+@@ -50,7 +50,6 @@
+ #include "libdwflP.h"
+ #include "../libdw/libdwP.h"
+
+-
+ int
+ dwfl_module_getsrc_file (Dwfl_Module *mod,
+ const char *fname, int lineno, int column,
+diff -r -u -d /local/elfutils-0.138/libdwfl/find-debuginfo.c ./libdwfl/find-debuginfo.c
+--- /local/elfutils-0.138/libdwfl/find-debuginfo.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libdwfl/find-debuginfo.c 2012-03-12 12:24:39.000000000 -0700
+@@ -53,7 +53,6 @@
#include <unistd.h>
#include "system.h"
-+/* ANDROID_CHANGE_BEGIN */
-+#include <AndroidFixup.h>
-+/* ANDROID_CHANGE_END */
-
+-
/* Try to open64 [DIR/][SUBDIR/]DEBUGLINK, return file descriptor or -1.
On success, *DEBUGINFO_FILE_NAME has the malloc'd name of the open file. */
-@@ -145,8 +148,15 @@
+ static int
+@@ -145,8 +144,15 @@
indicated by the debug directory path setting. */
const Dwfl_Callbacks *const cb = mod->dwfl->callbacks;
@@ -191,7 +212,7 @@
/* A leading - or + in the whole path sets whether to check file CRCs. */
bool defcheck = true;
-@@ -156,8 +166,15 @@
+@@ -156,8 +162,15 @@
++path;
}
@@ -207,7 +228,7 @@
char *p;
while ((p = strsep (&path, ":")) != NULL)
{
-@@ -201,17 +218,36 @@
+@@ -201,17 +214,36 @@
case ENOTDIR:
continue;
default:
@@ -244,23 +265,41 @@
/* No dice. */
errno = 0;
return -1;
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libdwfl/offline.c ./libdwfl/offline.c
---- /home/bccheng/local/elfutils-0.138/libdwfl/offline.c 2008-12-17 16:29:37.000000000 -0800
-+++ ./libdwfl/offline.c 2012-03-07 15:56:49.000000000 -0800
-@@ -51,6 +51,10 @@
- #include <fcntl.h>
- #include <unistd.h>
-
+diff -r -u -d /local/elfutils-0.138/libebl/eblopenbackend.c ./libebl/eblopenbackend.c
+--- /local/elfutils-0.138/libebl/eblopenbackend.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libebl/eblopenbackend.c 2012-03-16 16:55:06.000000000 -0700
+@@ -196,8 +196,15 @@
+ uint32_t descsz, const char *desc);
+ static bool default_debugscn_p (const char *name);
+ static bool default_copy_reloc_p (int reloc);
+/* ANDROID_CHANGE_BEGIN */
-+#include <AndroidFixup.h>
++#ifndef __APPLE__
+ static bool default_none_reloc_p (int reloc);
+ static bool default_relative_reloc_p (int reloc);
++#else
++#define default_none_reloc_p default_copy_reloc_p
++#define default_relative_reloc_p default_copy_reloc_p
++#endif
+/* ANDROID_CHANGE_END */
-+
- /* Since dwfl_report_elf lays out the sections already, this will only be
- called when the section headers of the debuginfo file are being
- consulted instead, or for the section placed at 0. With binutils
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libebl/libeblP.h ./libebl/libeblP.h
---- /home/bccheng/local/elfutils-0.138/libebl/libeblP.h 2008-12-10 20:33:30.000000000 -0800
-+++ ./libebl/libeblP.h 2012-03-07 15:56:49.000000000 -0800
+ static bool default_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr,
+ const GElf_Sym *sym,
+ const char *name,
+@@ -677,8 +684,12 @@
+ {
+ return false;
+ }
++/* ANDROID_CHANGE_BEGIN */
++#ifndef __APPLE__
+ strong_alias (default_copy_reloc_p, default_none_reloc_p)
+ strong_alias (default_copy_reloc_p, default_relative_reloc_p)
++#endif
++/* ANDROID_CHANGE_END */
+
+ static bool
+ default_check_special_symbol (Elf *elf __attribute__ ((unused)),
+diff -r -u -d /local/elfutils-0.138/libebl/libeblP.h ./libebl/libeblP.h
+--- /local/elfutils-0.138/libebl/libeblP.h 2008-12-10 20:33:30.000000000 -0800
++++ ./libebl/libeblP.h 2012-03-09 10:19:37.000000000 -0800
@@ -55,7 +55,6 @@
#include <libebl.h>
#include <libintl.h>
@@ -269,9 +308,9 @@
/* Backend handle. */
struct ebl
{
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libelf/elf32_fsize.c ./libelf/elf32_fsize.c
---- /home/bccheng/local/elfutils-0.138/libelf/elf32_fsize.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/elf32_fsize.c 2012-03-08 15:00:38.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libelf/elf32_fsize.c ./libelf/elf32_fsize.c
+--- /local/elfutils-0.138/libelf/elf32_fsize.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libelf/elf32_fsize.c 2012-03-09 10:19:38.000000000 -0800
@@ -88,5 +88,9 @@
* __libelf_type_sizes[0][ELFW(ELFCLASS,LIBELFBITS) - 1][type]);
#endif
@@ -282,9 +321,9 @@
local_strong_alias (elfw2(LIBELFBITS, fsize), __elfw2(LIBELFBITS, msize))
+#endif
+/* ANDROID_CHANGE_END */
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libelf/elf_begin.c ./libelf/elf_begin.c
---- /home/bccheng/local/elfutils-0.138/libelf/elf_begin.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/elf_begin.c 2012-03-08 15:34:30.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libelf/elf_begin.c ./libelf/elf_begin.c
+--- /local/elfutils-0.138/libelf/elf_begin.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libelf/elf_begin.c 2012-03-09 10:19:38.000000000 -0800
@@ -68,7 +68,6 @@
#include "libelfP.h"
#include "common.h"
@@ -293,9 +332,42 @@
/* Create descriptor for archive in memory. */
static inline Elf *
file_read_ar (int fildes, void *map_address, off_t offset, size_t maxsize,
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libelf/elf.h ./libelf/elf.h
---- /home/bccheng/local/elfutils-0.138/libelf/elf.h 2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/elf.h 2012-03-08 15:06:31.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libelf/elf_getdata_rawchunk.c ./libelf/elf_getdata_rawchunk.c
+--- /local/elfutils-0.138/libelf/elf_getdata_rawchunk.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libelf/elf_getdata_rawchunk.c 2012-03-15 11:14:32.000000000 -0700
+@@ -64,7 +64,13 @@
+ Elf_Data *
+ elf_getdata_rawchunk (elf, offset, size, type)
+ Elf *elf;
++ /* ANDROID_CHANGE_BEGIN */
++#if 0
+ off64_t offset;
++#else
++ off_t offset;
++#endif
++ /* ANDROID_CHANGE_END */
+ size_t size;
+ Elf_Type type;
+ {
+@@ -78,8 +84,15 @@
+ return NULL;
+ }
+
++ /* ANDROID_CHANGE_BEGIN */
++#if 0
+ if (unlikely (size > elf->maximum_size
+ || (off64_t) (elf->maximum_size - size) < offset))
++#else
++ if (unlikely (size > elf->maximum_size
++ || (off_t) (elf->maximum_size - size) < offset))
++#endif
++ /* ANDROID_CHANGE_END */
+ {
+ /* Invalid request. */
+ __libelf_seterrno (ELF_E_INVALID_OP);
+diff -r -u -d /local/elfutils-0.138/libelf/elf.h ./libelf/elf.h
+--- /local/elfutils-0.138/libelf/elf.h 2008-12-10 20:33:30.000000000 -0800
++++ ./libelf/elf.h 2012-03-09 10:19:38.000000000 -0800
@@ -21,7 +21,15 @@
#ifndef _ELF_H
#define _ELF_H 1
@@ -312,9 +384,9 @@
__BEGIN_DECLS
-diff -r -u -d /home/bccheng/local/elfutils-0.138/libelf/gelf_xlate.c ./libelf/gelf_xlate.c
---- /home/bccheng/local/elfutils-0.138/libelf/gelf_xlate.c 2008-12-10 20:33:30.000000000 -0800
-+++ ./libelf/gelf_xlate.c 2012-03-08 15:00:38.000000000 -0800
+diff -r -u -d /local/elfutils-0.138/libelf/gelf_xlate.c ./libelf/gelf_xlate.c
+--- /local/elfutils-0.138/libelf/gelf_xlate.c 2008-12-10 20:33:30.000000000 -0800
++++ ./libelf/gelf_xlate.c 2012-03-09 10:19:39.000000000 -0800
@@ -229,7 +229,11 @@
}
}
@@ -327,3 +399,93 @@
strong_alias (__elf_xfctstom, __elf_xfctstof)
+#endif
+/* ANDROID_CHANGE_END */
+diff -r -u -d /local/elfutils-0.138/libelf/libelf.h ./libelf/libelf.h
+--- /local/elfutils-0.138/libelf/libelf.h 2008-12-17 16:29:37.000000000 -0800
++++ ./libelf/libelf.h 2012-03-15 11:07:48.000000000 -0700
+@@ -95,7 +95,13 @@
+ Elf_Type d_type; /* Type of this piece of data. */
+ unsigned int d_version; /* ELF version. */
+ size_t d_size; /* Size in bytes. */
++ /* ANDROID_CHANGE_BEGIN */
++#if 0
+ loff_t d_off; /* Offset into section. */
++#else
++ off_t d_off; /* Offset into section. */
++#endif
++ /* ANDROID_CHANGE_END */
+ size_t d_align; /* Alignment in section. */
+ } Elf_Data;
+
+@@ -157,7 +163,13 @@
+ uid_t ar_uid; /* User ID. */
+ gid_t ar_gid; /* Group ID. */
+ mode_t ar_mode; /* File mode. */
++ /* ANDROID_CHANGE_BEGIN */
++#if 0
+ loff_t ar_size; /* File size. */
++#else
++ off_t ar_size; /* File size. */
++#endif
++ /* ANDROID_CHANGE_END */
+ char *ar_rawname; /* Original name of archive member. */
+ } Elf_Arhdr;
+
+@@ -198,13 +210,25 @@
+ extern int elf_end (Elf *__elf);
+
+ /* Update ELF descriptor and write file to disk. */
+-extern loff_t elf_update (Elf *__elf, Elf_Cmd __cmd);
++/* ANDROID_CHANGE_BEGIN */
++#if 0
++extern off_t elf_update (Elf *__elf, Elf_Cmd __cmd);
++#else
++#endif
++/* ANDROID_CHANGE_END */
++
+
+ /* Determine what kind of file is associated with ELF. */
+ extern Elf_Kind elf_kind (Elf *__elf) __attribute__ ((__pure__));
+
+ /* Get the base offset for an object file. */
++/* ANDROID_CHANGE_BEGIN */
++#if 0
+ extern loff_t elf_getbase (Elf *__elf);
++#else
++extern off_t elf_getbase (Elf *__elf);
++#endif
++/* ANDROID_CHANGE_END */
+
+
+ /* Retrieve file identification data. */
+@@ -305,9 +329,17 @@
+ /* Get data translated from a chunk of the file contents as section data
+ would be for TYPE. The resulting Elf_Data pointer is valid until
+ elf_end (ELF) is called. */
++/* ANDROID_CHANGE_BEGIN */
++#if 0
+ extern Elf_Data *elf_getdata_rawchunk (Elf *__elf,
+ loff_t __offset, size_t __size,
+ Elf_Type __type);
++#else
++extern Elf_Data *elf_getdata_rawchunk (Elf *__elf,
++ off_t __offset, size_t __size,
++ Elf_Type __type);
++#endif
++/* ANDROID_CHANGE_END */
+
+
+ /* Return pointer to string at OFFSET in section INDEX. */
+@@ -318,7 +350,13 @@
+ extern Elf_Arhdr *elf_getarhdr (Elf *__elf);
+
+ /* Return offset in archive for current file ELF. */
++/* ANDROID_CHANGE_BEGIN */
++#if 0
+ extern loff_t elf_getaroff (Elf *__elf);
++#else
++extern off_t elf_getaroff (Elf *__elf);
++#endif
++/* ANDROID_CHANGE_END */
+
+ /* Select archive element at OFFSET. */
+ extern size_t elf_rand (Elf *__elf, size_t __offset);