summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Machata <pmachata@redhat.com>2009-06-16 15:22:04 +0200
committerPetr Machata <pmachata@redhat.com>2009-06-16 15:22:04 +0200
commit9e38b7374a0b9cb7aa77c2ad8afe5aac7182d337 (patch)
treeca307d5078971fdef16f324e8ffd32b25ddd0df1
parent77abb31cb8d55980ef92260917a7ecdd228b1a44 (diff)
parent99d2372b25d1231d786b70278478c7a112f2b27c (diff)
Merge branch 'master' of ssh://pmachata@git.fedorahosted.org/git/elfutils into pmachata/reader_hooksupstream/pmachata/reader_hooks
-rw-r--r--NEWS6
-rw-r--r--backends/ChangeLog5
-rw-r--r--backends/i386_reloc.def3
-rw-r--r--backends/x86_64_reloc.def3
-rw-r--r--configure.ac2
-rw-r--r--libdwfl/ChangeLog6
-rw-r--r--libdwfl/derelocate.c2
-rw-r--r--libdwfl/dwfl_module_getdwarf.c2
-rw-r--r--libdwfl/relocate.c6
-rw-r--r--libelf/ChangeLog21
-rw-r--r--libelf/Makefile.am2
-rw-r--r--libelf/elf.h6
-rw-r--r--libelf/elf32_checksum.c4
-rw-r--r--libelf/elf32_getshdr.c4
-rw-r--r--libelf/elf_getshdrnum.c (renamed from libelf/elf_getshnum.c)10
-rw-r--r--libelf/elf_getshdrstrndx.c (renamed from libelf/elf_getshstrndx.c)8
-rw-r--r--libelf/libelf.h16
-rw-r--r--libelf/libelf.map5
-rw-r--r--libelf/libelfP.h9
-rw-r--r--src/ChangeLog19
-rw-r--r--src/ld.h4
-rw-r--r--src/ldgeneric.c12
-rw-r--r--src/nm.c6
-rw-r--r--src/objdump.c2
-rw-r--r--src/readelf.c181
-rw-r--r--src/size.c4
-rw-r--r--src/strip.c4
-rw-r--r--src/unstrip.c10
28 files changed, 264 insertions, 98 deletions
diff --git a/NEWS b/NEWS
index c0f60bca..e3106f71 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,9 @@
+Version 0.142:
+
+libelf: Add elf_getshdrnum alias for elf_getshnum and elf_getshdrstrndx alias
+ for elf_getshstrndx and deprecate original names. Sun screwed up
+ their implementation and asked for a solution.
+
Version 0.141:
libebl: sparc backend fixes;
diff --git a/backends/ChangeLog b/backends/ChangeLog
index c764f9ef..a1aa351f 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,3 +1,8 @@
+2009-06-01 Ulrich Drepper <drepper@redhat.com>
+
+ * i386_reloc.def: Add IRELATIVE entry.
+ * x86_64_reloc.def: Likewise.
+
2009-04-16 Roland McGrath <roland@redhat.com>
* arm_regs.c (arm_register_info): Handle VFP registers.
diff --git a/backends/i386_reloc.def b/backends/i386_reloc.def
index bc1b835d..1befd1b6 100644
--- a/backends/i386_reloc.def
+++ b/backends/i386_reloc.def
@@ -1,5 +1,5 @@
/* List the relocation types for i386. -*- C -*-
- Copyright (C) 2000, 2001, 2002, 2003, 2005 Red Hat, Inc.
+ Copyright (C) 2000, 2001, 2002, 2003, 2005, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -64,3 +64,4 @@ RELOC_TYPE (TLS_TPOFF32, EXEC|DYN)
RELOC_TYPE (TLS_GOTDESC, REL)
RELOC_TYPE (TLS_DESC_CALL, REL)
RELOC_TYPE (TLS_DESC, EXEC)
+RELOC_TYPE (IRELATIVE, EXEC|DYN)
diff --git a/backends/x86_64_reloc.def b/backends/x86_64_reloc.def
index e6c5a84b..5d70f47c 100644
--- a/backends/x86_64_reloc.def
+++ b/backends/x86_64_reloc.def
@@ -1,5 +1,5 @@
/* List the relocation types for x86-64. -*- C -*-
- Copyright (C) 2000, 2001, 2002, 2003, 2005 Red Hat, Inc.
+ Copyright (C) 2000, 2001, 2002, 2003, 2005, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -49,3 +49,4 @@ RELOC_TYPE (TLSLD, REL)
RELOC_TYPE (DTPOFF32, REL)
RELOC_TYPE (GOTTPOFF, REL)
RELOC_TYPE (TPOFF32, REL)
+RELOC_TYPE (IRELATIVE, EXEC|DYN)
diff --git a/configure.ac b/configure.ac
index 4931530c..4d7ec1e6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,7 +16,7 @@ dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software Foundation,
dnl Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
dnl
-AC_INIT([Red Hat elfutils],[0.141],[http://bugzilla.redhat.com/bugzilla/],
+AC_INIT([Red Hat elfutils],[0.142],[http://bugzilla.redhat.com/bugzilla/],
[elfutils])
AC_CONFIG_AUX_DIR([config])
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
index 8f51ca73..97e888f0 100644
--- a/libdwfl/ChangeLog
+++ b/libdwfl/ChangeLog
@@ -1,3 +1,9 @@
+2009-06-13 Ulrich Drepper <drepper@redhat.com>
+
+ * derelocate.c: Don't use deprecated libelf functions.
+ * dwfl_module_getdwarf.c: Likewise.
+ * relocate.c: Likewise.
+
2009-04-23 Ulrich Drepper <drepper@redhat.com>
* dwfl_module_build_id.c: Define versioned symbols only if SHARED is
diff --git a/libdwfl/derelocate.c b/libdwfl/derelocate.c
index c300f84b..56ba25af 100644
--- a/libdwfl/derelocate.c
+++ b/libdwfl/derelocate.c
@@ -94,7 +94,7 @@ cache_sections (Dwfl_Module *mod)
size_t nrefs = 0;
size_t shstrndx;
- if (unlikely (elf_getshstrndx (mod->main.elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (mod->main.elf, &shstrndx) < 0))
{
elf_error:
__libdwfl_seterrno (DWFL_E_LIBELF);
diff --git a/libdwfl/dwfl_module_getdwarf.c b/libdwfl/dwfl_module_getdwarf.c
index 06cb4917..f48fabe7 100644
--- a/libdwfl/dwfl_module_getdwarf.c
+++ b/libdwfl/dwfl_module_getdwarf.c
@@ -148,7 +148,7 @@ static const char *
find_debuglink (Elf *elf, GElf_Word *crc)
{
size_t shstrndx;
- if (elf_getshstrndx (elf, &shstrndx) < 0)
+ if (elf_getshdrstrndx (elf, &shstrndx) < 0)
return NULL;
Elf_Scn *scn = NULL;
diff --git a/libdwfl/relocate.c b/libdwfl/relocate.c
index 2c0f3010..a31fe152 100644
--- a/libdwfl/relocate.c
+++ b/libdwfl/relocate.c
@@ -72,7 +72,7 @@ __libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, size_t *shstrndx,
address and update the section header. */
if (*shstrndx == SHN_UNDEF
- && unlikely (elf_getshstrndx (elf, shstrndx) < 0))
+ && unlikely (elf_getshdrstrndx (elf, shstrndx) < 0))
return DWFL_E_LIBELF;
const char *name = elf_strptr (elf, *shstrndx, refshdr->sh_name);
@@ -582,7 +582,7 @@ __libdwfl_relocate (Dwfl_Module *mod, Elf *debugfile, bool debug)
return DWFL_E_LIBELF;
size_t d_shstrndx;
- if (elf_getshstrndx (debugfile, &d_shstrndx) < 0)
+ if (elf_getshdrstrndx (debugfile, &d_shstrndx) < 0)
return DWFL_E_LIBELF;
RELOC_SYMTAB_CACHE (reloc_symtab);
@@ -626,7 +626,7 @@ __libdwfl_relocate_section (Dwfl_Module *mod, Elf *relocated,
RELOC_SYMTAB_CACHE (reloc_symtab);
size_t shstrndx;
- if (elf_getshstrndx (relocated, &shstrndx) < 0)
+ if (elf_getshdrstrndx (relocated, &shstrndx) < 0)
return DWFL_E_LIBELF;
return (__libdwfl_module_getebl (mod)
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
index bfc3ee5f..a0163db1 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,3 +1,24 @@
+2009-06-13 Ulrich Drepper <drepper@redhat.com>
+
+ * Makefile.am (libelf_a_SOURCES): Replace elf_getshnum.c and
+ elf_getshstrndx.c with elf_getshdrnum.c and elf_getshdrstrndx.c.
+ * elf_getshnum.c: Renamed to...
+ * elf_getshdrnum.c: ...this. Rename function and add old name as
+ alias. Likewise for internal functions with derived names.
+ * elf_getshstrndx.c: Renamed to...
+ * elf_getshdrstrndx.c: ...this. Rename function and add old name as
+ alias. Likewise for internal functions with derived names.
+ * libelf.h: Add prototypes for new names. Make old names as
+ deprecated.
+ * libelfP.h: Rename internal function prototypes.
+ * libelf.map: Export for names.
+ * elf32_checksum.c: Don't use deprecated functions.
+ * elf32_getshdr.c: Likewise.
+
+2009-06-01 Ulrich Drepper <drepper@redhat.com>
+
+ * elf.h: Update from glibc.
+
2009-04-14 Roland McGrath <roland@redhat.com>
* elf.h: Update from glibc.
diff --git a/libelf/Makefile.am b/libelf/Makefile.am
index 84b01a86..fbb19a63 100644
--- a/libelf/Makefile.am
+++ b/libelf/Makefile.am
@@ -91,7 +91,7 @@ libelf_a_SOURCES = elf_version.c elf_hash.c elf_error.c elf_fill.c \
gelf_update_versym.c gelf_update_verneed.c \
gelf_update_vernaux.c gelf_update_verdef.c \
gelf_update_verdaux.c \
- elf_getshnum.c elf_getshstrndx.c \
+ elf_getshdrnum.c elf_getshdrstrndx.c \
gelf_checksum.c elf32_checksum.c elf64_checksum.c \
libelf_crc32.c libelf_next_prime.c \
elf_clone.c \
diff --git a/libelf/elf.h b/libelf/elf.h
index 062ef00f..8fdf74b0 100644
--- a/libelf/elf.h
+++ b/libelf/elf.h
@@ -1177,8 +1177,9 @@ typedef struct
pointer to code and to
argument, returning the TLS
offset for the symbol. */
+#define R_386_IRELATIVE 42 /* Adjust indirectly by program base */
/* Keep this the last entry. */
-#define R_386_NUM 42
+#define R_386_NUM 43
/* SUN SPARC specific definitions. */
@@ -2625,8 +2626,9 @@ typedef Elf32_Addr Elf32_Conflict;
#define R_X86_64_TLSDESC_CALL 35 /* Marker for call through TLS
descriptor. */
#define R_X86_64_TLSDESC 36 /* TLS descriptor. */
+#define R_X86_64_IRELATIVE 37 /* Adjust indirectly by program base */
-#define R_X86_64_NUM 37
+#define R_X86_64_NUM 38
/* AM33 relocations. */
diff --git a/libelf/elf32_checksum.c b/libelf/elf32_checksum.c
index 32b4a02d..ad040b80 100644
--- a/libelf/elf32_checksum.c
+++ b/libelf/elf32_checksum.c
@@ -1,5 +1,5 @@
/* Compute simple checksum from permanent parts of the ELF file.
- Copyright (C) 2002, 2003, 2004, 2005 Red Hat, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -90,7 +90,7 @@ elfw2(LIBELFBITS,checksum) (elf)
return -1l;
/* Find the section header string table. */
- if (INTUSE(elf_getshstrndx) (elf, &shstrndx) < 0)
+ if (INTUSE(elf_getshdrstrndx) (elf, &shstrndx) < 0)
{
/* This can only happen if the ELF handle is not for real. */
__libelf_seterrno (ELF_E_INVALID_HANDLE);
diff --git a/libelf/elf32_getshdr.c b/libelf/elf32_getshdr.c
index 91f5b3a1..8d650d9f 100644
--- a/libelf/elf32_getshdr.c
+++ b/libelf/elf32_getshdr.c
@@ -1,5 +1,5 @@
/* Return section header.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005, 2007 Red Hat, Inc.
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005, 2007, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 1998.
@@ -81,7 +81,7 @@ load_shdr_wrlock (Elf_Scn *scn)
goto out;
size_t shnum;
- if (__elf_getshnum_rdlock (elf, &shnum) != 0)
+ if (__elf_getshdrnum_rdlock (elf, &shnum) != 0)
goto out;
size_t size = shnum * sizeof (ElfW2(LIBELFBITS,Shdr));
diff --git a/libelf/elf_getshnum.c b/libelf/elf_getshdrnum.c
index 3c65ef4c..ed1149bb 100644
--- a/libelf/elf_getshnum.c
+++ b/libelf/elf_getshdrnum.c
@@ -1,5 +1,5 @@
/* Return number of sections in the ELF file.
- Copyright (C) 2002 Red Hat, Inc.
+ Copyright (C) 2002, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -60,7 +60,7 @@
int
-__elf_getshnum_rdlock (elf, dst)
+__elf_getshdrnum_rdlock (elf, dst)
Elf *elf;
size_t *dst;
{
@@ -92,7 +92,7 @@ __elf_getshnum_rdlock (elf, dst)
}
int
-elf_getshnum (elf, dst)
+elf_getshdrnum (elf, dst)
Elf *elf;
size_t *dst;
{
@@ -102,8 +102,10 @@ elf_getshnum (elf, dst)
return -1;
rwlock_rdlock (elf->lock);
- result = __elf_getshnum_rdlock (elf, dst);
+ result = __elf_getshdrnum_rdlock (elf, dst);
rwlock_unlock (elf->lock);
return result;
}
+/* Alias for the deprecated name. */
+strong_alias (elf_getshdrnum, elf_getshnum)
diff --git a/libelf/elf_getshstrndx.c b/libelf/elf_getshdrstrndx.c
index 52516a8e..5e89b343 100644
--- a/libelf/elf_getshstrndx.c
+++ b/libelf/elf_getshdrstrndx.c
@@ -1,5 +1,5 @@
/* Return section index of section header string table.
- Copyright (C) 2002, 2005 Red Hat, Inc.
+ Copyright (C) 2002, 2005, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2002.
@@ -64,7 +64,7 @@
int
-elf_getshstrndx (elf, dst)
+elf_getshdrstrndx (elf, dst)
Elf *elf;
size_t *dst;
{
@@ -200,4 +200,6 @@ elf_getshstrndx (elf, dst)
return result;
}
-INTDEF(elf_getshstrndx)
+INTDEF(elf_getshdrstrndx)
+/* Alias for the deprecated name. */
+strong_alias (elf_getshdrstrndx, elf_getshstrndx)
diff --git a/libelf/libelf.h b/libelf/libelf.h
index dea0d838..16c7a7a2 100644
--- a/libelf/libelf.h
+++ b/libelf/libelf.h
@@ -1,5 +1,5 @@
/* Interface for libelf.
- Copyright (C) 1998, 1999, 2000, 2002, 2004, 2005, 2006, 2007 Red Hat, Inc.
+ Copyright (C) 1998-2000, 2002, 2004-2007, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -256,14 +256,24 @@ extern int elf_scnshndx (Elf_Scn *__scn);
sections than can be represented in the e_shnum field of the ELF
header the information from the sh_size field in the zeroth section
header is used. */
-extern int elf_getshnum (Elf *__elf, size_t *__dst);
+extern int elf_getshdrnum (Elf *__elf, size_t *__dst);
+/* Sun messed up the implementation of 'elf_getshnum' in their implementation.
+ It was agreed to make the same functionality available under a different
+ name and obsolete the old name. */
+extern int elf_getshnum (Elf *__elf, size_t *__dst)
+ __attribute__ ((__deprecated__));
/* Get the section index of the section header string table in the ELF
file. If the index cannot be represented in the e_shnum field of
the ELF header the information from the sh_link field in the zeroth
section header is used. */
-extern int elf_getshstrndx (Elf *__elf, size_t *__dst);
+extern int elf_getshdrstrndx (Elf *__elf, size_t *__dst);
+/* Sun messed up the implementation of 'elf_getshnum' in their implementation.
+ It was agreed to make the same functionality available under a different
+ name and obsolete the old name. */
+extern int elf_getshstrndx (Elf *__elf, size_t *__dst)
+ __attribute__ ((__deprecated__));
/* Retrieve section header of ELFCLASS32 binary. */
diff --git a/libelf/libelf.map b/libelf/libelf.map
index c2537774..e0f40eb8 100644
--- a/libelf/libelf.map
+++ b/libelf/libelf.map
@@ -128,3 +128,8 @@ ELFUTILS_1.4 {
global:
elf_scnshndx;
} ELFUTILS_1.3;
+
+ELFUTILS_1.5 {
+ global:
+ elf_getshdrnum; elf_getshdrstrndx;
+} ELFUTILS_1.4;
diff --git a/libelf/libelfP.h b/libelf/libelfP.h
index 818f42ac..47d7c2c5 100644
--- a/libelf/libelfP.h
+++ b/libelf/libelfP.h
@@ -533,11 +533,12 @@ extern Elf32_Phdr *__elf32_newphdr_internal (Elf *__elf, size_t __cnt)
extern Elf64_Phdr *__elf64_newphdr_internal (Elf *__elf, size_t __cnt)
attribute_hidden;
extern Elf_Scn *__elf32_offscn_internal (Elf *__elf, Elf32_Off __offset)
- attribute_hidden;
+ attribute_hidden;
extern Elf_Scn *__elf64_offscn_internal (Elf *__elf, Elf64_Off __offset)
- attribute_hidden;
-extern int __elf_getshnum_rdlock (Elf *__elf, size_t *__dst) internal_function;
-extern int __elf_getshstrndx_internal (Elf *__elf, size_t *__dst)
+ attribute_hidden;
+extern int __elf_getshdrnum_rdlock (Elf *__elf, size_t *__dst)
+ internal_function;
+extern int __elf_getshdrstrndx_internal (Elf *__elf, size_t *__dst)
attribute_hidden;
extern Elf32_Shdr *__elf32_getshdr_rdlock (Elf_Scn *__scn) internal_function;
extern Elf64_Shdr *__elf64_getshdr_rdlock (Elf_Scn *__scn) internal_function;
diff --git a/src/ChangeLog b/src/ChangeLog
index f6fd86f3..f74b31d5 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,22 @@
+2009-06-13 Ulrich Drepper <drepper@redhat.com>
+
+ * ldgeneric.c: Don't use deprecated libelf functions.
+ * nm.c: Likewise.
+ * objdump.c: Likewise.
+ * readelf.c: Likewise.
+ * size.c: Likewise.
+ * strip.c: Likewise.
+ * unstrip.c: Likewise.
+ * ld.h: Fix up comment.
+
+2009-06-01 Ulrich Drepper <drepper@redhat.com>
+
+ * readelf.c (print_relocs): Expect ELF header argument and pass on
+ to handle_relocs_rel* functions. Adjust caller.
+ (handle_relocs_rel): Add ELF header argument. Add special case for
+ the IRELATIVE relocations in statically linked executables.
+ (handle_relocs_rela): Likewise.
+
2009-04-29 Ulrich Drepper <drepper@redhat.com>
* elflint.c (check_symtab): Add tests of st_other field.
diff --git a/src/ld.h b/src/ld.h
index 535f7cd2..72d5b27b 100644
--- a/src/ld.h
+++ b/src/ld.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001, 2002, 2003, 2005, 2006, 2008 Red Hat, Inc.
+/* Copyright (C) 2001, 2002, 2003, 2005, 2006, 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2001.
@@ -146,7 +146,7 @@ struct usedfiles
separate field and not the e_shstrndx field in the ELF header
since in case of a file with more than 64000 sections the index
might be stored in the section header of section zero. The
- elf_getshstrndx() function can find the value but it is too
+ elf_getshdrstrndx() function can find the value but it is too
costly to repeat this call over and over. */
size_t shstrndx;
diff --git a/src/ldgeneric.c b/src/ldgeneric.c
index 8df2a57e..b2ea2f90 100644
--- a/src/ldgeneric.c
+++ b/src/ldgeneric.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008 Red Hat, Inc.
+/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009 Red Hat, Inc.
This file is part of Red Hat elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2001.
@@ -656,7 +656,7 @@ check_definition (const XElf_Sym *sym, size_t shndx, size_t symidx,
Elf32_Word xndx;
size_t shnum;
- if (elf_getshnum (fileinfo->elf, &shnum) < 0)
+ if (elf_getshdrnum (fileinfo->elf, &shnum) < 0)
error (EXIT_FAILURE, 0,
gettext ("cannot determine number of sections: %s"),
elf_errmsg (-1));
@@ -1117,7 +1117,7 @@ add_relocatable_file (struct usedfiles *fileinfo, GElf_Word secttype)
assert (fileinfo->elf != NULL);
/* Allocate memory for the sections. */
- if (unlikely (elf_getshnum (fileinfo->elf, &scncnt) < 0))
+ if (unlikely (elf_getshdrnum (fileinfo->elf, &scncnt) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot determine number of sections: %s"),
elf_errmsg (-1));
@@ -1619,7 +1619,7 @@ add_relocatable_file (struct usedfiles *fileinfo, GElf_Word secttype)
#ifndef NDEBUG
size_t shnum;
- assert (elf_getshnum (fileinfo->elf, &shnum) == 0);
+ assert (elf_getshdrnum (fileinfo->elf, &shnum) == 0);
assert (shndx < shnum);
#endif
@@ -2038,7 +2038,7 @@ file_process2 (struct usedfiles *fileinfo)
}
/* Determine the section header string table section index. */
- if (unlikely (elf_getshstrndx (fileinfo->elf, &fileinfo->shstrndx)
+ if (unlikely (elf_getshdrstrndx (fileinfo->elf, &fileinfo->shstrndx)
< 0))
{
fprintf (stderr, gettext ("\
@@ -4148,7 +4148,7 @@ compute_hash_sum (void (*hashfct) (const void *, size_t, void *), void *ctx)
{
/* The call cannot fail. */
size_t shstrndx;
- (void) elf_getshstrndx (ld_state.outelf, &shstrndx);
+ (void) elf_getshdrstrndx (ld_state.outelf, &shstrndx);
const char *ident = elf_getident (ld_state.outelf, NULL);
bool same_byte_order = ((ident[EI_DATA] == ELFDATA2LSB
diff --git a/src/nm.c b/src/nm.c
index 8833948a..01519a5a 100644
--- a/src/nm.c
+++ b/src/nm.c
@@ -724,7 +724,7 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx,
int longest_where)
{
size_t shnum;
- if (elf_getshnum (ebl->elf, &shnum) < 0)
+ if (elf_getshdrnum (ebl->elf, &shnum) < 0)
INTERNAL_ERROR (fullname);
bool scnnames_malloced = shnum * sizeof (const char *) > 128 * 1024;
@@ -735,7 +735,7 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx,
scnnames = (const char **) alloca (sizeof (const char *) * shnum);
/* Get the section header string table index. */
size_t shstrndx;
- if (elf_getshstrndx (ebl->elf, &shstrndx) < 0)
+ if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -997,7 +997,7 @@ show_symbols (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, Elf_Scn *xndxscn,
{
/* Get the section header string table index. */
size_t shstrndx;
- if (elf_getshstrndx (ebl->elf, &shstrndx) < 0)
+ if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
diff --git a/src/objdump.c b/src/objdump.c
index af8abf78..1234c794 100644
--- a/src/objdump.c
+++ b/src/objdump.c
@@ -739,7 +739,7 @@ handle_elf (Elf *elf, const char *prefix, const char *fname,
/* Get the section header string table index. */
size_t shstrndx;
- if (elf_getshstrndx (ebl->elf, &shstrndx) < 0)
+ if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
diff --git a/src/readelf.c b/src/readelf.c
index 1c790650..ca9772e4 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -211,9 +211,11 @@ static void print_shdr (Ebl *ebl, GElf_Ehdr *ehdr);
static void print_phdr (Ebl *ebl, GElf_Ehdr *ehdr);
static void print_scngrp (Ebl *ebl);
static void print_dynamic (Ebl *ebl, GElf_Ehdr *ehdr);
-static void print_relocs (Ebl *ebl);
-static void handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr);
-static void handle_relocs_rela (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr);
+static void print_relocs (Ebl *ebl, GElf_Ehdr *ehdr);
+static void handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn,
+ GElf_Shdr *shdr);
+static void handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn,
+ GElf_Shdr *shdr);
static void print_symtab (Ebl *ebl, int type);
static void handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr);
static void print_verinfo (Ebl *ebl);
@@ -606,7 +608,7 @@ process_elf_file (Dwfl_Module *dwflmod, int fd)
}
/* Determine the number of sections. */
- if (unlikely (elf_getshnum (ebl->elf, &shnum) < 0))
+ if (unlikely (elf_getshdrnum (ebl->elf, &shnum) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot determine number of sections: %s"),
elf_errmsg (-1));
@@ -652,7 +654,7 @@ process_elf_file (Dwfl_Module *dwflmod, int fd)
if (print_dynamic_table)
print_dynamic (ebl, ehdr);
if (print_relocations)
- print_relocs (pure_ebl);
+ print_relocs (pure_ebl, ehdr);
if (print_histogram)
handle_hash (ebl);
if (print_symbol_table)
@@ -845,7 +847,7 @@ There are %d section headers, starting at offset %#" PRIx64 ":\n\
ehdr->e_shnum, ehdr->e_shoff);
/* Get the section header string table index. */
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -988,7 +990,7 @@ print_phdr (Ebl *ebl, GElf_Ehdr *ehdr)
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -1129,7 +1131,7 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -1311,7 +1313,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
return;
/* Get the section header string table index. */
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -1449,7 +1451,7 @@ print_dynamic (Ebl *ebl, GElf_Ehdr *ehdr)
/* Print relocations. */
static void
-print_relocs (Ebl *ebl)
+print_relocs (Ebl *ebl, GElf_Ehdr *ehdr)
{
/* Find all relocation sections and handle them. */
Elf_Scn *scn = NULL;
@@ -1463,9 +1465,9 @@ print_relocs (Ebl *ebl)
if (likely (shdr != NULL))
{
if (shdr->sh_type == SHT_REL)
- handle_relocs_rel (ebl, scn, shdr);
+ handle_relocs_rel (ebl, ehdr, scn, shdr);
else if (shdr->sh_type == SHT_RELA)
- handle_relocs_rela (ebl, scn, shdr);
+ handle_relocs_rela (ebl, ehdr, scn, shdr);
}
}
}
@@ -1473,7 +1475,7 @@ print_relocs (Ebl *ebl)
/* Handle a relocation section. */
static void
-handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
+handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr)
{
int class = gelf_getclass (ebl->elf);
int nentries = shdr->sh_size / shdr->sh_entsize;
@@ -1509,7 +1511,7 @@ handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -1545,6 +1547,7 @@ handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
Offset Type Value Name\n"),
stdout);
+ int is_statically_linked = 0;
for (int cnt = 0; cnt < nentries; ++cnt)
{
GElf_Rel relmem;
@@ -1558,16 +1561,56 @@ handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
GELF_R_SYM (rel->r_info),
&symmem, &xndx);
if (unlikely (sym == NULL))
- printf (" %#0*" PRIx64 " %-20s <%s %ld>\n",
- class == ELFCLASS32 ? 10 : 18, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- /* Avoid the leading R_ which isn't carrying any
- information. */
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf)) + 2
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SYMBOL"),
- (long int) GELF_R_SYM (rel->r_info));
+ {
+ /* As a special case we have to handle relocations in static
+ executables. This only happens for IRELATIVE relocations
+ (so far). There is no symbol table. */
+ if (is_statically_linked == 0)
+ {
+ /* Find the program header and look for a PT_INTERP entry. */
+ is_statically_linked = -1;
+ if (ehdr->e_type == ET_EXEC)
+ {
+ is_statically_linked = 1;
+
+ for (size_t inner = 0; inner < ehdr->e_phnum; ++inner)
+ {
+ GElf_Phdr phdr_mem;
+ GElf_Phdr *phdr = gelf_getphdr (ebl->elf, inner,
+ &phdr_mem);
+ if (phdr != NULL && phdr->p_type == PT_INTERP)
+ {
+ is_statically_linked = -1;
+ break;
+ }
+ }
+ }
+ }
+
+ if (is_statically_linked > 0 && shdr->sh_link == 0)
+ printf ("\
+ %#0*" PRIx64 " %-20s %*s %s\n",
+ class == ELFCLASS32 ? 10 : 18, rel->r_offset,
+ ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
+ /* Avoid the leading R_ which isn't carrying any
+ information. */
+ ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
+ buf, sizeof (buf)) + 2
+ : gettext ("<INVALID RELOC>"),
+ class == ELFCLASS32 ? 10 : 18, "",
+ elf_strptr (ebl->elf, shstrndx, destshdr->sh_name));
+ else
+ printf (" %#0*" PRIx64 " %-20s <%s %ld>\n",
+ class == ELFCLASS32 ? 10 : 18, rel->r_offset,
+ ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
+ /* Avoid the leading R_ which isn't carrying any
+ information. */
+ ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
+ buf, sizeof (buf)) + 2
+ : gettext ("<INVALID RELOC>"),
+ gettext ("INVALID SYMBOL"),
+ (long int) GELF_R_SYM (rel->r_info));
+ }
else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION)
printf (" %#0*" PRIx64 " %-20s %#0*" PRIx64 " %s\n",
class == ELFCLASS32 ? 10 : 18, rel->r_offset,
@@ -1618,7 +1661,7 @@ handle_relocs_rel (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Handle a relocation section. */
static void
-handle_relocs_rela (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
+handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr)
{
int class = gelf_getclass (ebl->elf);
int nentries = shdr->sh_size / shdr->sh_entsize;
@@ -1654,7 +1697,7 @@ handle_relocs_rela (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -1676,6 +1719,7 @@ handle_relocs_rela (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
Offset Type Value Addend Name\n"),
stdout);
+ int is_statically_linked = 0;
for (int cnt = 0; cnt < nentries; ++cnt)
{
GElf_Rela relmem;
@@ -1690,16 +1734,57 @@ handle_relocs_rela (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
&symmem, &xndx);
if (unlikely (sym == NULL))
- printf (" %#0*" PRIx64 " %-15s <%s %ld>\n",
- class == ELFCLASS32 ? 10 : 18, rel->r_offset,
- ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
- /* Avoid the leading R_ which isn't carrying any
- information. */
- ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
- buf, sizeof (buf)) + 2
- : gettext ("<INVALID RELOC>"),
- gettext ("INVALID SYMBOL"),
- (long int) GELF_R_SYM (rel->r_info));
+ {
+ /* As a special case we have to handle relocations in static
+ executables. This only happens for IRELATIVE relocations
+ (so far). There is no symbol table. */
+ if (is_statically_linked == 0)
+ {
+ /* Find the program header and look for a PT_INTERP entry. */
+ is_statically_linked = -1;
+ if (ehdr->e_type == ET_EXEC)
+ {
+ is_statically_linked = 1;
+
+ for (size_t inner = 0; inner < ehdr->e_phnum; ++inner)
+ {
+ GElf_Phdr phdr_mem;
+ GElf_Phdr *phdr = gelf_getphdr (ebl->elf, inner,
+ &phdr_mem);
+ if (phdr != NULL && phdr->p_type == PT_INTERP)
+ {
+ is_statically_linked = -1;
+ break;
+ }
+ }
+ }
+ }
+
+ if (is_statically_linked > 0 && shdr->sh_link == 0)
+ printf ("\
+ %#0*" PRIx64 " %-15s %*s %#6" PRIx64 " %s\n",
+ class == ELFCLASS32 ? 10 : 18, rel->r_offset,
+ ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
+ /* Avoid the leading R_ which isn't carrying any
+ information. */
+ ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
+ buf, sizeof (buf)) + 2
+ : gettext ("<INVALID RELOC>"),
+ class == ELFCLASS32 ? 10 : 18, "",
+ rel->r_addend,
+ elf_strptr (ebl->elf, shstrndx, destshdr->sh_name));
+ else
+ printf (" %#0*" PRIx64 " %-15s <%s %ld>\n",
+ class == ELFCLASS32 ? 10 : 18, rel->r_offset,
+ ebl_reloc_type_check (ebl, GELF_R_TYPE (rel->r_info))
+ /* Avoid the leading R_ which isn't carrying any
+ information. */
+ ? ebl_reloc_type_name (ebl, GELF_R_TYPE (rel->r_info),
+ buf, sizeof (buf)) + 2
+ : gettext ("<INVALID RELOC>"),
+ gettext ("INVALID SYMBOL"),
+ (long int) GELF_R_SYM (rel->r_info));
+ }
else if (GELF_ST_TYPE (sym->st_info) != STT_SECTION)
printf ("\
%#0*" PRIx64 " %-15s %#0*" PRIx64 " %+6" PRId64 " %s\n",
@@ -1822,7 +1907,7 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -2076,7 +2161,7 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -2142,7 +2227,7 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -2220,7 +2305,7 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -2717,7 +2802,7 @@ handle_hash (Ebl *ebl)
{
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -2753,7 +2838,7 @@ print_liblist (Ebl *ebl)
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -2815,7 +2900,7 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr)
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -4602,7 +4687,7 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
{
size_t shstrndx;
/* We know this call will succeed since it did in the caller. */
- (void) elf_getshstrndx (ebl->elf, &shstrndx);
+ (void) elf_getshdrstrndx (ebl->elf, &shstrndx);
const char *scnname = elf_strptr (ebl->elf, shstrndx, shdr->sh_name);
Elf_Data *data = elf_rawdata (scn, NULL);
@@ -6307,7 +6392,7 @@ print_debug (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr)
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -7173,7 +7258,7 @@ handle_notes (Ebl *ebl, GElf_Ehdr *ehdr)
{
/* Get the section header string table index. */
size_t shstrndx;
- if (elf_getshstrndx (ebl->elf, &shstrndx) < 0)
+ if (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0)
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -7318,7 +7403,7 @@ for_each_section_argument (Elf *elf, const struct section_argument *list,
{
/* Get the section header string table index. */
size_t shstrndx;
- if (elf_getshstrndx (elf, &shstrndx) < 0)
+ if (elf_getshdrstrndx (elf, &shstrndx) < 0)
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -7387,7 +7472,7 @@ print_strings (Ebl *ebl)
{
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (ebl->elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (ebl->elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
diff --git a/src/size.c b/src/size.c
index 4698c350..d3dc1fe5 100644
--- a/src/size.c
+++ b/src/size.c
@@ -420,7 +420,7 @@ show_sysv (Elf *elf, const char *prefix, const char *fname,
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -494,7 +494,7 @@ show_sysv_one_line (Elf *elf)
{
/* Get the section header string table index. */
size_t shstrndx;
- if (unlikely (elf_getshstrndx (elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
diff --git a/src/strip.c b/src/strip.c
index d788ebf2..32cf0d70 100644
--- a/src/strip.c
+++ b/src/strip.c
@@ -477,7 +477,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
INTERNAL_ERROR (fname);
/* Get the section header string table index. */
- if (unlikely (elf_getshstrndx (elf, &shstrndx) < 0))
+ if (unlikely (elf_getshdrstrndx (elf, &shstrndx) < 0))
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@@ -537,7 +537,7 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname,
/* Number of sections. */
size_t shnum;
- if (unlikely (elf_getshnum (elf, &shnum) < 0))
+ if (unlikely (elf_getshdrnum (elf, &shnum) < 0))
{
error (0, 0, gettext ("cannot determine number of sections: %s"),
elf_errmsg (-1));
diff --git a/src/unstrip.c b/src/unstrip.c
index 97b73c6f..284607b3 100644
--- a/src/unstrip.c
+++ b/src/unstrip.c
@@ -1218,19 +1218,19 @@ copy_elided_sections (Elf *unstripped, Elf *stripped,
const GElf_Ehdr *stripped_ehdr, GElf_Addr bias)
{
size_t unstripped_shstrndx;
- ELF_CHECK (elf_getshstrndx (unstripped, &unstripped_shstrndx) == 0,
+ ELF_CHECK (elf_getshdrstrndx (unstripped, &unstripped_shstrndx) == 0,
_("cannot get section header string table section index: %s"));
size_t stripped_shstrndx;
- ELF_CHECK (elf_getshstrndx (stripped, &stripped_shstrndx) == 0,
+ ELF_CHECK (elf_getshdrstrndx (stripped, &stripped_shstrndx) == 0,
_("cannot get section header string table section index: %s"));
size_t unstripped_shnum;
- ELF_CHECK (elf_getshnum (unstripped, &unstripped_shnum) == 0,
+ ELF_CHECK (elf_getshdrnum (unstripped, &unstripped_shnum) == 0,
_("cannot get section count: %s"));
size_t stripped_shnum;
- ELF_CHECK (elf_getshnum (stripped, &stripped_shnum) == 0,
+ ELF_CHECK (elf_getshdrnum (stripped, &stripped_shnum) == 0,
_("cannot get section count: %s"));
/* Cache the stripped file's section details. */
@@ -1461,7 +1461,7 @@ copy_elided_sections (Elf *unstripped, Elf *stripped,
strtab);
/* Get the updated section count. */
- ELF_CHECK (elf_getshnum (unstripped, &unstripped_shnum) == 0,
+ ELF_CHECK (elf_getshdrnum (unstripped, &unstripped_shnum) == 0,
_("cannot get section count: %s"));
bool placed[unstripped_shnum - 1];