summaryrefslogtreecommitdiff
path: root/libelf
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2005-08-15 21:36:27 +0000
committerUlrich Drepper <drepper@redhat.com>2005-08-15 21:36:27 +0000
commit5d83229c852a7e7359c12b58864751db2c755926 (patch)
tree1af36916be07e38cd054e1937e74c0ce26946a2c /libelf
parent104532fcdb87e769d8ebf5771b9c4370e4361a7b (diff)
downloadelfutils-5d83229c852a7e7359c12b58864751db2c755926.tar.gz
Implement ranlib. This required one little extension to libelf.
Diffstat (limited to 'libelf')
-rw-r--r--libelf/ChangeLog7
-rw-r--r--libelf/Makefile.am3
-rw-r--r--libelf/elf_getaroff.c42
-rw-r--r--libelf/libelf.h3
-rw-r--r--libelf/libelf.map1
5 files changed, 55 insertions, 1 deletions
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
index acb026ef..0ef52dc1 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,3 +1,10 @@
+2005-08-15 Ulrich Drepper <drepper@redhat.com>
+
+ * Makefile (libelf_a_SOURCES): Add elf_getaroff.c.
+ * libelf.map: Export elf_getaroff.
+ * libelf.h: Declare elf_getaroff.
+ * elf_getaroff.c: New file.
+
2005-08-13 Ulrich Drepper <drepper@redhat.com>
* elf_begin.c (get_shnum): Optimize memory handling. Always read from
diff --git a/libelf/Makefile.am b/libelf/Makefile.am
index 3853608b..28d0d6ed 100644
--- a/libelf/Makefile.am
+++ b/libelf/Makefile.am
@@ -83,7 +83,8 @@ libelf_a_SOURCES = elf_version.c elf_hash.c elf_error.c elf_fill.c \
libelf_crc32.c libelf_next_prime.c \
elf_clone.c \
gelf_getlib.c gelf_update_lib.c \
- elf32_offscn.c elf64_offscn.c gelf_offscn.c
+ elf32_offscn.c elf64_offscn.c gelf_offscn.c \
+ elf_getaroff.c
if !MUDFLAP
libelf_pic_a_SOURCES =
diff --git a/libelf/elf_getaroff.c b/libelf/elf_getaroff.c
new file mode 100644
index 00000000..67e2d773
--- /dev/null
+++ b/libelf/elf_getaroff.c
@@ -0,0 +1,42 @@
+/* Return offset in archive for current file ELF.
+ Copyright (C) 2005 Red Hat, Inc.
+ Contributed by Ulrich Drepper <drepper@redhat.com>, 2005.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, version 2.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <assert.h>
+#include <libelf.h>
+#include <stddef.h>
+
+#include "libelfP.h"
+
+
+off_t
+elf_getaroff (elf)
+ Elf *elf;
+{
+ /* Be gratious, the specs demand it. */
+ if (elf == NULL || elf->parent == NULL)
+ return ELF_C_NULL;
+
+ /* We can be sure the parent is an archive. */
+ Elf *parent = elf->parent;
+ assert (parent->kind == ELF_K_AR);
+
+ return parent->state.ar.offset;
+}
diff --git a/libelf/libelf.h b/libelf/libelf.h
index 05a03412..96787dbe 100644
--- a/libelf/libelf.h
+++ b/libelf/libelf.h
@@ -271,6 +271,9 @@ extern char *elf_strptr (Elf *__elf, size_t __index, size_t __offset);
/* Return header of archive. */
extern Elf_Arhdr *elf_getarhdr (Elf *__elf);
+/* Return offset in archive for current file ELF. */
+extern off_t elf_getaroff (Elf *__elf);
+
/* Select archive element at OFFSET. */
extern size_t elf_rand (Elf *__elf, size_t __offset);
diff --git a/libelf/libelf.map b/libelf/libelf.map
index d8451084..b2a65e84 100644
--- a/libelf/libelf.map
+++ b/libelf/libelf.map
@@ -110,4 +110,5 @@ ELFUTILS_1.1.1 {
elf32_offscn;
elf64_offscn;
gelf_offscn;
+ elf_getaroff;
} ELFUTILS_1.1;