Update to 0.156.

- #890447 - Add __bss_start and __TMC_END__ to elflint.
  - #909481 - Only try opening files with installed compression libraries.
  - #914908 - Add __bss_start__ to elflint.
  - #853757 - Updated Polish translation.
  - #985438 - Incorrect prototype of __libdwfl_find_elf_build_id.
  - Drop upstreamed elfutils-0.155-binutils-pr-ld-13621.patch.
  - Drop upstreamed elfutils-0.155-mem-align.patch.
  - Drop upstreamed elfutils-0.155-sizeof-pointer-memaccess.patch.
This commit is contained in:
Jan Kratochvil 2013-07-25 14:33:04 +02:00
parent e15f354dc7
commit 20454159c6
8 changed files with 680 additions and 1032 deletions

4
.gitignore vendored
View File

@ -1,3 +1 @@
/elfutils-0.154.tar.bz2
/elfutils-*/
/elfutils-0.155.tar.bz2
/elfutils-0.156.tar.bz2

View File

@ -1,97 +0,0 @@
commit 3bdc16ce98295463c071192eab2ec611a8edc508
Author: Mark Wielaard <mjw@redhat.com>
Date: Wed Feb 6 16:20:17 2013 +0100
elflint: Add two more symbols to gnuld list of allowed bad values.
Add __bss_start and __TMC_END__ to the list of symbols allowed to have
out of section values because of the following GNU ld bug:
http://sourceware.org/bugzilla/show_bug.cgi?id=13621.
Allow them to appear in either .symtab or .dynsym, but only when they
are zero sized. It is impossible to define a general rule for this bug,
but this should catch most common issues that are mostly harmless
because the symbols signify the removed section was empty to being with.
This catches at least all symbols often flagged in the tests.
Signed-off-by: Mark Wielaard <mjw@redhat.com>
diff --git a/src/ChangeLog b/src/ChangeLog
index f3f9b51..7d7b66f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,10 @@
+2013-02-06 Mark Wielaard <mjw@redhat.com>
+
+ * elflint.c (check_symtab): Add __bss_start and __TMC_END__ to the
+ list of symbols allowed to have out of section values because of
+ GNU ld bugs in either .symtab or .dynsym, but only when they are
+ zero sized.
+
2012-08-27 Mark Wielaard <mjw@redhat.com>
* readelf.c (print_debug_macro_section): Print offset as PRIx64.
diff --git a/src/elflint.c b/src/elflint.c
index 4084987..bc5ed33 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -767,15 +767,22 @@ section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"),
{
/* GNU ld has severe bugs. When it decides to remove
empty sections it leaves symbols referencing them
- behind. These are symbols in .symtab. */
+ behind. These are symbols in .symtab or .dynsym
+ and for the named symbols have zero size. See
+ sourceware PR13621. */
if (!gnuld
- || strcmp (section_name (ebl, idx), ".symtab")
+ || (strcmp (section_name (ebl, idx), ".symtab")
+ && strcmp (section_name (ebl, idx),
+ ".dynsym"))
+ || sym->st_size != 0
|| (strcmp (name, "__preinit_array_start") != 0
&& strcmp (name, "__preinit_array_end") != 0
&& strcmp (name, "__init_array_start") != 0
&& strcmp (name, "__init_array_end") != 0
&& strcmp (name, "__fini_array_start") != 0
- && strcmp (name, "__fini_array_end") != 0))
+ && strcmp (name, "__fini_array_end") != 0
+ && strcmp (name, "__bss_start") != 0
+ && strcmp (name, "__TMC_END__") != 0))
ERROR (gettext ("\
section [%2d] '%s': symbol %zu: st_value out of bounds\n"),
idx, section_name (ebl, idx), cnt);
commit b94cceae503b56fb360cd597f154fa2b33552887
Author: Mark Wielaard <mjw@redhat.com>
Date: Sun Feb 24 22:58:49 2013 +0100
elflint.c (check_symtab): Add __bss_start__ to the list of allowed symbols.
Some architectures (ARM) use __bss_start__ instead of __bss_start.
Signed-off-by: Mark Wielaard <mjw@redhat.com>
diff --git a/src/ChangeLog b/src/ChangeLog
index 7d7b66f..6e219e6 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2013-02-24 Mark Wielaard <mjw@redhat.com>
+
+ * elflint.c (check_symtab): Add __bss_start__ to the list of symbols
+ allowed to have out of section values because of GNU ld bugs.
+
2013-02-06 Mark Wielaard <mjw@redhat.com>
* elflint.c (check_symtab): Add __bss_start and __TMC_END__ to the
diff --git a/src/elflint.c b/src/elflint.c
index bc5ed33..acd458b 100644
--- a/src/elflint.c
+++ b/src/elflint.c
@@ -782,6 +782,7 @@ section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"),
&& strcmp (name, "__fini_array_start") != 0
&& strcmp (name, "__fini_array_end") != 0
&& strcmp (name, "__bss_start") != 0
+ && strcmp (name, "__bss_start__") != 0
&& strcmp (name, "__TMC_END__") != 0))
ERROR (gettext ("\
section [%2d] '%s': symbol %zu: st_value out of bounds\n"),

View File

@ -1,194 +0,0 @@
--- a/libdw/ChangeLog 2012-08-27 20:29:31.000000000 +0200
+++ b/libdw/ChangeLog 2013-01-10 10:59:28.039026230 +0100
@@ -1,3 +1,9 @@
+2013-01-07 Roland McGrath <roland@hack.frob.com>
+
+ * memory-access.h
+ [ALLOW_UNALIGNED] (read_8ubyte_unaligned_noncvt): New macro.
+ [!ALLOW_UNALIGNED] (read_8ubyte_unaligned_noncvt): New inline function.
+
2012-08-24 Mark Wielaard <mjw@redhat.com>
* dwarf_begin_elf.c (check_section): Only probe for dwz multi files
--- a/libdw/memory-access.h 2012-08-27 20:27:31.000000000 +0200
+++ b/libdw/memory-access.h 2013-01-10 10:56:07.171152555 +0100
@@ -1,5 +1,5 @@
/* Unaligned memory access functionality.
- Copyright (C) 2000-2010 Red Hat, Inc.
+ Copyright (C) 2000-2013 Red Hat, Inc.
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2001.
@@ -147,6 +147,8 @@
? (int32_t) bswap_32 (*((const int32_t *) (Addr))) \
: *((const int32_t *) (Addr)))
+# define read_8ubyte_unaligned_noncvt(Addr) \
+ *((const uint64_t *) (Addr))
# define read_8ubyte_unaligned(Dbg, Addr) \
(unlikely ((Dbg)->other_byte_order) \
? bswap_64 (*((const uint64_t *) (Addr))) \
@@ -223,6 +225,12 @@
}
static inline uint64_t
+read_8ubyte_unaligned_noncvt (const void *p)
+{
+ const union unaligned *up = p;
+ return up->u8;
+}
+static inline uint64_t
read_8ubyte_unaligned_1 (bool other_byte_order, const void *p)
{
const union unaligned *up = p;
--- a/libdwfl/ChangeLog 2013-01-10 10:59:53.882008409 +0100
+++ b/libdwfl/ChangeLog 2013-01-10 10:57:48.451130775 +0100
@@ -1,3 +1,9 @@
+2013-01-07 Roland McGrath <roland@hack.frob.com>
+
+ * link_map.c (auxv_format_probe): Handle unaligned 64-bit data, but
+ still assume the data is at least 32-bit aligned anyway.
+ (dwfl_link_map_report): Handle unaligned auxv data.
+
2012-08-01 Petr Machata <pmachata@redhat.com>
* offline.c (process_archive_member): Ignore entry "/SYM64/".
--- a/libdwfl/link_map.c 2012-08-27 20:27:31.000000000 +0200
+++ b/libdwfl/link_map.c 2013-01-10 10:56:07.207002831 +0100
@@ -1,5 +1,5 @@
/* Report modules by examining dynamic linker data structures.
- Copyright (C) 2008-2010 Red Hat, Inc.
+ Copyright (C) 2008-2013 Red Hat, Inc.
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -28,6 +28,7 @@
#include <config.h>
#include "libdwflP.h"
+#include "../libdw/memory-access.h"
#include <byteswap.h>
#include <endian.h>
@@ -66,15 +67,22 @@
inline bool check64 (size_t i)
{
- if (u->a64[i].a_type == BE64 (PROBE_TYPE)
- && u->a64[i].a_un.a_val == BE64 (PROBE_VAL64))
+ /* The AUXV pointer might not even be naturally aligned for 64-bit
+ data, because note payloads in a core file are not aligned.
+ But we assume the data is 32-bit aligned. */
+
+ uint64_t type = read_8ubyte_unaligned_noncvt (&u->a64[i].a_type);
+ uint64_t val = read_8ubyte_unaligned_noncvt (&u->a64[i].a_un.a_val);
+
+ if (type == BE64 (PROBE_TYPE)
+ && val == BE64 (PROBE_VAL64))
{
*elfdata = ELFDATA2MSB;
return true;
}
- if (u->a64[i].a_type == LE64 (PROBE_TYPE)
- && u->a64[i].a_un.a_val == LE64 (PROBE_VAL64))
+ if (type == LE64 (PROBE_TYPE)
+ && val == LE64 (PROBE_VAL64))
{
*elfdata = ELFDATA2LSB;
return true;
@@ -618,29 +626,32 @@
GElf_Xword phent = 0;
GElf_Xword phnum = 0;
-#define AUXV_SCAN(NN, BL) do \
- { \
- const Elf##NN##_auxv_t *av = auxv; \
- for (size_t i = 0; i < auxv_size / sizeof av[0]; ++i) \
- { \
- Elf##NN##_Addr val = BL##NN (av[i].a_un.a_val); \
- if (av[i].a_type == BL##NN (AT_ENTRY)) \
- entry = val; \
- else if (av[i].a_type == BL##NN (AT_PHDR)) \
- phdr = val; \
- else if (av[i].a_type == BL##NN (AT_PHNUM)) \
- phnum = val; \
- else if (av[i].a_type == BL##NN (AT_PHENT)) \
- phent = val; \
- else if (av[i].a_type == BL##NN (AT_PAGESZ)) \
- { \
- if (val > 1 \
- && (dwfl->segment_align == 0 \
- || val < dwfl->segment_align)) \
- dwfl->segment_align = val; \
- } \
- } \
- } \
+#define READ_AUXV32(ptr) read_4ubyte_unaligned_noncvt (ptr)
+#define READ_AUXV64(ptr) read_8ubyte_unaligned_noncvt (ptr)
+#define AUXV_SCAN(NN, BL) do \
+ { \
+ const Elf##NN##_auxv_t *av = auxv; \
+ for (size_t i = 0; i < auxv_size / sizeof av[0]; ++i) \
+ { \
+ uint##NN##_t type = READ_AUXV##NN (&av[i].a_type); \
+ uint##NN##_t val = BL##NN (READ_AUXV##NN (&av[i].a_un.a_val)); \
+ if (type == BL##NN (AT_ENTRY)) \
+ entry = val; \
+ else if (type == BL##NN (AT_PHDR)) \
+ phdr = val; \
+ else if (type == BL##NN (AT_PHNUM)) \
+ phnum = val; \
+ else if (type == BL##NN (AT_PHENT)) \
+ phent = val; \
+ else if (type == BL##NN (AT_PAGESZ)) \
+ { \
+ if (val > 1 \
+ && (dwfl->segment_align == 0 \
+ || val < dwfl->segment_align)) \
+ dwfl->segment_align = val; \
+ } \
+ } \
+ } \
while (0)
if (elfclass == ELFCLASS32)
--- a/libelf/ChangeLog 2013-01-10 10:59:53.884010033 +0100
+++ b/libelf/ChangeLog 2013-01-10 10:58:57.505003982 +0100
@@ -1,3 +1,13 @@
+2013-01-07 Roland McGrath <roland@hack.frob.com>
+
+ * elf_getarsym.c (elf_getarsym): Copy FILE_DATA into stack space if it
+ would be unaligned and !ALLOW_UNALIGNED.
+
+2013-01-07 Roland McGrath <roland@hack.frob.com>
+
+ * elf_getarsym.c (read_number_entries): Use memcpy instead of pointer
+ dereference so as not to assume the field is naturally aligned.
+
2012-08-16 Roland McGrath <roland@hack.frob.com>
* elf.h: Update from glibc.
--- a/libelf/elf_getarsym.c 2013-01-10 10:59:53.888006636 +0100
+++ b/libelf/elf_getarsym.c 2013-01-10 10:56:07.210254028 +0100
@@ -57,7 +57,9 @@
size_t w = index64_p ? 8 : 4;
if (elf->map_address != NULL)
- u = *(union u *) (elf->map_address + *offp);
+ /* Use memcpy instead of pointer dereference so as not to assume the
+ field is naturally aligned within the file. */
+ memcpy (&u, elf->map_address + *offp, sizeof u);
else if ((size_t) pread_retry (elf->fildes, &u, w, *offp) != w)
return -1;
@@ -241,6 +243,9 @@
else
{
file_data = (void *) (elf->map_address + off);
+ if (!ALLOW_UNALIGNED
+ && ((uintptr_t) file_data & -(uintptr_t) n) != 0)
+ file_data = memcpy (alloca (sz), elf->map_address + off, sz);
str_data = (char *) (elf->map_address + off + sz);
}

View File

@ -1,68 +0,0 @@
commit 1a4d0668d18bf1090c5c08cdb5cb3ba2b8eb5410
Author: David Abdurachmanov <David.Abdurachmanov@cern.ch>
Date: Sun Jan 13 16:44:21 2013 +0100
ar.c (do_oper_delete): Fix num passed to memset.
Signed-off-by: David Abdurachmanov <David.Abdurachmanov@cern.ch>
diff --git a/src/ar.c b/src/ar.c
index 03da1b7..2d6ad60 100644
--- a/src/ar.c
+++ b/src/ar.c
@@ -919,7 +919,7 @@ do_oper_delete (const char *arfname, char **argv, int argc,
long int instance)
{
bool *found = alloca (sizeof (bool) * argc);
- memset (found, '\0', sizeof (found));
+ memset (found, '\0', sizeof (bool) * argc);
/* List of the files we keep. */
struct armem *to_copy = NULL;
commit 57bd66cabf6e6b9ecf622cdbf350804897a8df58
Author: Roland McGrath <roland@hack.frob.com>
Date: Tue Dec 11 09:42:07 2012 -0800
nm: Fix size passed to snprintf for invalid sh_name case.
Signed-off-by: Roland McGrath <roland@hack.frob.com>
diff --git a/src/nm.c b/src/nm.c
index f50da0b..8a1c57a 100644
--- a/src/nm.c
+++ b/src/nm.c
@@ -769,8 +769,9 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname,
gelf_getshdr (scn, &shdr_mem)->sh_name);
if (unlikely (name == NULL))
{
- name = alloca (sizeof "[invalid sh_name 0x12345678]");
- snprintf (name, sizeof name, "[invalid sh_name %#" PRIx32 "]",
+ const size_t bufsz = sizeof "[invalid sh_name 0x12345678]"
+ name = alloca (bufsz);
+ snprintf (name, bufsz, "[invalid sh_name %#" PRIx32 "]",
gelf_getshdr (scn, &shdr_mem)->sh_name);
}
scnnames[elf_ndxscn (scn)] = name;
commit 7df3d2cd70932cd70515dbeb75e4db66fd27f192
Author: Mark Wielaard <mjw@redhat.com>
Date: Tue Dec 11 22:27:05 2012 +0100
Add missing semicolon in show_symbols_sysv
Signed-off-by: Mark Wielaard <mjw@redhat.com>
diff --git a/src/nm.c b/src/nm.c
index 8a1c57a..7aae84b 100644
--- a/src/nm.c
+++ b/src/nm.c
@@ -769,7 +769,7 @@ show_symbols_sysv (Ebl *ebl, GElf_Word strndx, const char *fullname,
gelf_getshdr (scn, &shdr_mem)->sh_name);
if (unlikely (name == NULL))
{
- const size_t bufsz = sizeof "[invalid sh_name 0x12345678]"
+ const size_t bufsz = sizeof "[invalid sh_name 0x12345678]";
name = alloca (bufsz);
snprintf (name, bufsz, "[invalid sh_name %#" PRIx32 "]",
gelf_getshdr (scn, &shdr_mem)->sh_name);

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
--- elfutils/libdwfl/ChangeLog
+++ elfutils/libdwfl/ChangeLog
@@ -52,6 +52,11 @@
@@ -291,6 +291,11 @@
* dwfl_module_getdwarf.c (open_elf): Clear errno before CBFAIL.
Reported by Kurt Roeckx <kurt@roeckx.be>.
@ -21,7 +21,7 @@
This file is part of elfutils.
This file is free software; you can redistribute it and/or modify
@@ -457,7 +457,10 @@ relocate_section (Dwfl_Module *mod, Elf
@@ -456,7 +456,10 @@ relocate_section (Dwfl_Module *mod, Elf
}
}
@ -33,7 +33,7 @@
size_t complete = 0;
if (shdr->sh_type == SHT_REL)
for (size_t relidx = 0; !result && relidx < nrels; ++relidx)
@@ -559,7 +562,7 @@ relocate_section (Dwfl_Module *mod, Elf
@@ -558,7 +561,7 @@ relocate_section (Dwfl_Module *mod, Elf
nrels = next;
}
@ -44,7 +44,7 @@
--- elfutils/libelf/ChangeLog
+++ elfutils/libelf/ChangeLog
@@ -703,10 +703,53 @@
@@ -715,10 +715,53 @@
If section content hasn't been read yet, do it before looking for the
block size. If no section data present, infer size of section header.
@ -253,7 +253,7 @@
--- elfutils/libelf/elf_getarsym.c
+++ elfutils/libelf/elf_getarsym.c
@@ -181,6 +181,9 @@ elf_getarsym (elf, ptr)
@@ -183,6 +183,9 @@ elf_getarsym (elf, ptr)
size_t index_size = atol (tmpbuf);
if (SARMAG + sizeof (struct ar_hdr) + index_size > elf->maximum_size
@ -408,46 +408,6 @@
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
goto out;
--- elfutils/libelf/gelf_getrela.c
+++ elfutils/libelf/gelf_getrela.c
@@ -1,5 +1,5 @@
/* Get RELA relocation information at given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
+ Copyright (C) 2000-2009 Red Hat, Inc.
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2000.
@@ -50,12 +50,6 @@ gelf_getrela (data, ndx, dst)
if (data_scn == NULL)
return NULL;
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return NULL;
- }
-
if (unlikely (data_scn->d.d_type != ELF_T_RELA))
{
__libelf_seterrno (ELF_E_INVALID_HANDLE);
@@ -72,7 +66,7 @@ gelf_getrela (data, ndx, dst)
if (scn->elf->class == ELFCLASS32)
{
/* We have to convert the data. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size))
+ if (INVALID_NDX (ndx, Elf32_Rela, &data_scn->d))
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
result = NULL;
@@ -93,7 +87,7 @@ gelf_getrela (data, ndx, dst)
{
/* Simply copy the data after we made sure we are actually getting
correct data. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size))
+ if (INVALID_NDX (ndx, Elf64_Rela, &data_scn->d))
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
result = NULL;
--- elfutils/libelf/gelf_getrel.c
+++ elfutils/libelf/gelf_getrel.c
@@ -1,5 +1,5 @@
@ -488,6 +448,46 @@
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
result = NULL;
--- elfutils/libelf/gelf_getrela.c
+++ elfutils/libelf/gelf_getrela.c
@@ -1,5 +1,5 @@
/* Get RELA relocation information at given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
+ Copyright (C) 2000-2009 Red Hat, Inc.
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2000.
@@ -50,12 +50,6 @@ gelf_getrela (data, ndx, dst)
if (data_scn == NULL)
return NULL;
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return NULL;
- }
-
if (unlikely (data_scn->d.d_type != ELF_T_RELA))
{
__libelf_seterrno (ELF_E_INVALID_HANDLE);
@@ -72,7 +66,7 @@ gelf_getrela (data, ndx, dst)
if (scn->elf->class == ELFCLASS32)
{
/* We have to convert the data. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size))
+ if (INVALID_NDX (ndx, Elf32_Rela, &data_scn->d))
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
result = NULL;
@@ -93,7 +87,7 @@ gelf_getrela (data, ndx, dst)
{
/* Simply copy the data after we made sure we are actually getting
correct data. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size))
+ if (INVALID_NDX (ndx, Elf64_Rela, &data_scn->d))
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
result = NULL;
--- elfutils/libelf/gelf_getsym.c
+++ elfutils/libelf/gelf_getsym.c
@@ -1,5 +1,5 @@
@ -678,46 +678,6 @@
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
return 0;
--- elfutils/libelf/gelf_update_rela.c
+++ elfutils/libelf/gelf_update_rela.c
@@ -1,5 +1,5 @@
/* Update RELA relocation information at given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
+ Copyright (C) 2000-2009 Red Hat, Inc.
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2000.
@@ -47,12 +47,6 @@ gelf_update_rela (Elf_Data *dst, int ndx
if (dst == NULL)
return 0;
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
if (unlikely (data_scn->d.d_type != ELF_T_RELA))
{
/* The type of the data better should match. */
@@ -80,7 +74,7 @@ gelf_update_rela (Elf_Data *dst, int ndx
}
/* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size))
+ if (INVALID_NDX (ndx, Elf32_Rela, &data_scn->d))
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
goto out;
@@ -96,7 +90,7 @@ gelf_update_rela (Elf_Data *dst, int ndx
else
{
/* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size))
+ if (INVALID_NDX (ndx, Elf64_Rela, &data_scn->d))
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
goto out;
--- elfutils/libelf/gelf_update_rel.c
+++ elfutils/libelf/gelf_update_rel.c
@@ -1,5 +1,5 @@
@ -758,6 +718,46 @@
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
goto out;
--- elfutils/libelf/gelf_update_rela.c
+++ elfutils/libelf/gelf_update_rela.c
@@ -1,5 +1,5 @@
/* Update RELA relocation information at given index.
- Copyright (C) 2000, 2001, 2002 Red Hat, Inc.
+ Copyright (C) 2000-2009 Red Hat, Inc.
This file is part of elfutils.
Written by Ulrich Drepper <drepper@redhat.com>, 2000.
@@ -47,12 +47,6 @@ gelf_update_rela (Elf_Data *dst, int ndx
if (dst == NULL)
return 0;
- if (unlikely (ndx < 0))
- {
- __libelf_seterrno (ELF_E_INVALID_INDEX);
- return 0;
- }
-
if (unlikely (data_scn->d.d_type != ELF_T_RELA))
{
/* The type of the data better should match. */
@@ -80,7 +74,7 @@ gelf_update_rela (Elf_Data *dst, int ndx
}
/* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf32_Rela) > data_scn->d.d_size))
+ if (INVALID_NDX (ndx, Elf32_Rela, &data_scn->d))
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
goto out;
@@ -96,7 +90,7 @@ gelf_update_rela (Elf_Data *dst, int ndx
else
{
/* Check whether we have to resize the data buffer. */
- if (unlikely ((ndx + 1) * sizeof (Elf64_Rela) > data_scn->d.d_size))
+ if (INVALID_NDX (ndx, Elf64_Rela, &data_scn->d))
{
__libelf_seterrno (ELF_E_INVALID_INDEX);
goto out;
--- elfutils/libelf/gelf_update_sym.c
+++ elfutils/libelf/gelf_update_sym.c
@@ -1,5 +1,5 @@
@ -902,7 +902,7 @@
#endif /* libelfP.h */
--- elfutils/src/ChangeLog
+++ elfutils/src/ChangeLog
@@ -344,6 +344,12 @@
@@ -504,6 +504,12 @@
* readelf.c (dwarf_attr_string): Grok DW_AT_GNU_odr_signature.
@ -915,7 +915,7 @@
2011-02-11 Roland McGrath <roland@redhat.com>
* elfcmp.c (verbose): New variable.
@@ -2056,6 +2062,16 @@
@@ -2216,6 +2222,16 @@
object symbols or symbols with unknown type.
(check_rel): Likewise.
@ -932,7 +932,7 @@
2005-06-08 Roland McGrath <roland@redhat.com>
* readelf.c (print_ops): Add consts.
@@ -2101,6 +2117,19 @@
@@ -2261,6 +2277,19 @@
* readelf.c (dwarf_tag_string): Add new tags.
@ -1027,7 +1027,7 @@
}
if (sym->st_shndx == SHN_XINDEX)
@@ -1032,9 +1042,11 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e
@@ -1040,9 +1050,11 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e
{
GElf_Shdr rcshdr_mem;
const GElf_Shdr *rcshdr = gelf_getshdr (scn, &rcshdr_mem);
@ -1041,7 +1041,7 @@
{
/* Found the dynamic section. Look through it. */
Elf_Data *d = elf_getdata (scn, NULL);
@@ -1044,7 +1056,9 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e
@@ -1052,7 +1064,9 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e
{
GElf_Dyn dyn_mem;
GElf_Dyn *dyn = gelf_getdyn (d, cnt, &dyn_mem);
@ -1052,7 +1052,7 @@
if (dyn->d_tag == DT_RELCOUNT)
{
@@ -1058,7 +1072,9 @@ section [%2d] '%s': DT_RELCOUNT used for
@@ -1066,7 +1080,9 @@ section [%2d] '%s': DT_RELCOUNT used for
/* Does the number specified number of relative
relocations exceed the total number of
relocations? */
@ -1063,7 +1063,7 @@
ERROR (gettext ("\
section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"),
idx, section_name (ebl, idx),
@@ -1218,7 +1234,8 @@ section [%2d] '%s': no relocations for m
@@ -1226,7 +1242,8 @@ section [%2d] '%s': no relocations for m
}
}
@ -1073,7 +1073,7 @@
ERROR (gettext (reltype == ELF_T_RELA ? "\
section [%2d] '%s': section entry size does not match ElfXX_Rela\n" : "\
section [%2d] '%s': section entry size does not match ElfXX_Rel\n"),
@@ -1441,7 +1458,8 @@ check_rela (Ebl *ebl, GElf_Ehdr *ehdr, G
@@ -1449,7 +1466,8 @@ check_rela (Ebl *ebl, GElf_Ehdr *ehdr, G
Elf_Data *symdata = elf_getdata (symscn, NULL);
enum load_state state = state_undecided;
@ -1083,7 +1083,7 @@
{
GElf_Rela rela_mem;
GElf_Rela *rela = gelf_getrela (data, cnt, &rela_mem);
@@ -1491,7 +1509,8 @@ check_rel (Ebl *ebl, GElf_Ehdr *ehdr, GE
@@ -1499,7 +1517,8 @@ check_rel (Ebl *ebl, GElf_Ehdr *ehdr, GE
Elf_Data *symdata = elf_getdata (symscn, NULL);
enum load_state state = state_undecided;
@ -1093,7 +1093,7 @@
{
GElf_Rel rel_mem;
GElf_Rel *rel = gelf_getrel (data, cnt, &rel_mem);
@@ -1590,7 +1609,8 @@ section [%2d] '%s': referenced as string
@@ -1598,7 +1617,8 @@ section [%2d] '%s': referenced as string
shdr->sh_link, section_name (ebl, shdr->sh_link),
idx, section_name (ebl, idx));
@ -1103,7 +1103,7 @@
ERROR (gettext ("\
section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"),
idx, section_name (ebl, idx));
@@ -1600,7 +1620,7 @@ section [%2d] '%s': section entry size d
@@ -1608,7 +1628,7 @@ section [%2d] '%s': section entry size d
idx, section_name (ebl, idx));
bool non_null_warned = false;
@ -1112,7 +1112,7 @@
{
GElf_Dyn dyn_mem;
GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dyn_mem);
@@ -1872,6 +1892,8 @@ section [%2d] '%s': entry size does not
@@ -1880,6 +1900,8 @@ section [%2d] '%s': entry size does not
idx, section_name (ebl, idx));
if (symshdr != NULL
@ -1121,7 +1121,7 @@
&& (shdr->sh_size / shdr->sh_entsize
< symshdr->sh_size / symshdr->sh_entsize))
ERROR (gettext ("\
@@ -1898,6 +1920,12 @@ section [%2d] '%s': extended section ind
@@ -1906,6 +1928,12 @@ section [%2d] '%s': extended section ind
}
Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
@ -1134,7 +1134,7 @@
if (*((Elf32_Word *) data->d_buf) != 0)
ERROR (gettext ("symbol 0 should have zero extended section index\n"));
@@ -1940,7 +1968,7 @@ section [%2d] '%s': hash table section i
@@ -1948,7 +1976,7 @@ section [%2d] '%s': hash table section i
size_t maxidx = nchain;
@ -1143,7 +1143,7 @@
{
size_t symsize = symshdr->sh_size / symshdr->sh_entsize;
@@ -1951,18 +1979,28 @@ section [%2d] '%s': hash table section i
@@ -1959,18 +1987,28 @@ section [%2d] '%s': hash table section i
maxidx = symsize;
}
@ -1174,7 +1174,7 @@
}
@@ -1992,18 +2030,28 @@ section [%2d] '%s': hash table section i
@@ -2000,18 +2038,28 @@ section [%2d] '%s': hash table section i
maxidx = symsize;
}
@ -1206,7 +1206,7 @@
}
@@ -2028,7 +2076,7 @@ section [%2d] '%s': bitmask size not pow
@@ -2036,7 +2084,7 @@ section [%2d] '%s': bitmask size not pow
if (shdr->sh_size < (4 + bitmask_words + nbuckets) * sizeof (Elf32_Word))
{
ERROR (gettext ("\
@ -1215,7 +1215,7 @@
idx, section_name (ebl, idx), (long int) shdr->sh_size,
(long int) ((4 + bitmask_words + nbuckets) * sizeof (Elf32_Word)));
return;
@@ -2700,8 +2748,9 @@ section [%2d] '%s' refers in sh_link to
@@ -2708,8 +2756,9 @@ section [%2d] '%s' refers in sh_link to
/* The number of elements in the version symbol table must be the
same as the number of symbols. */
@ -1229,7 +1229,7 @@
idx, section_name (ebl, idx),
--- elfutils/src/readelf.c
+++ elfutils/src/readelf.c
@@ -1189,6 +1189,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
@@ -1363,6 +1363,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
Elf32_Word *grpref = (Elf32_Word *) data->d_buf;
GElf_Sym sym_mem;
@ -1238,7 +1238,7 @@
printf ((grpref[0] & GRP_COMDAT)
? ngettext ("\
\nCOMDAT section group [%2zu] '%s' with signature '%s' contains %zu entry:\n",
@@ -1201,8 +1203,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
@@ -1375,8 +1377,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
data->d_size / sizeof (Elf32_Word) - 1),
elf_ndxscn (scn),
elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
@ -1249,7 +1249,7 @@
?: gettext ("<INVALID SYMBOL>"),
data->d_size / sizeof (Elf32_Word) - 1);
@@ -1353,10 +1355,12 @@ static void
@@ -1527,10 +1529,12 @@ static void
handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
{
int class = gelf_getclass (ebl->elf);
@ -1263,7 +1263,7 @@
/* Get the data of the section. */
data = elf_getdata (scn, NULL);
@@ -1368,21 +1372,26 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn,
@@ -1542,21 +1546,26 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn,
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@ -1296,7 +1296,7 @@
{
GElf_Dyn dynmem;
GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dynmem);
@@ -1531,7 +1540,8 @@ static void
@@ -1705,7 +1714,8 @@ static void
handle_relocs_rel (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr)
{
int class = gelf_getclass (ebl->elf);
@ -1306,7 +1306,7 @@
/* Get the data of the section. */
Elf_Data *data = elf_getdata (scn, NULL);
@@ -1717,7 +1727,8 @@ static void
@@ -1891,7 +1901,8 @@ static void
handle_relocs_rela (Ebl *ebl, GElf_Ehdr *ehdr, Elf_Scn *scn, GElf_Shdr *shdr)
{
int class = gelf_getclass (ebl->elf);
@ -1316,7 +1316,7 @@
/* Get the data of the section. */
Elf_Data *data = elf_getdata (scn, NULL);
@@ -1964,6 +1975,13 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
@@ -2138,6 +2149,13 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@ -1330,7 +1330,7 @@
/* Now we can compute the number of entries in the section. */
unsigned int nsyms = data->d_size / (class == ELFCLASS32
? sizeof (Elf32_Sym)
@@ -1974,15 +1992,12 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
@@ -2148,15 +2166,12 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
nsyms),
(unsigned int) elf_ndxscn (scn),
elf_strptr (ebl->elf, shstrndx, shdr->sh_name), nsyms);
@ -1347,7 +1347,7 @@
fputs_unlocked (class == ELFCLASS32
? gettext ("\
@@ -2218,7 +2233,13 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn,
@@ -2392,7 +2407,13 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn,
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@ -1362,7 +1362,7 @@
printf (ngettext ("\
\nVersion needs section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
"\
@@ -2229,9 +2250,7 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn,
@@ -2403,9 +2424,7 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn,
class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
shdr->sh_offset,
(unsigned int) shdr->sh_link,
@ -1373,7 +1373,7 @@
unsigned int offset = 0;
for (int cnt = shdr->sh_info; --cnt >= 0; )
@@ -2284,8 +2303,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
@@ -2458,8 +2477,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
error (EXIT_FAILURE, 0,
gettext ("cannot get section header string table index"));
@ -1389,7 +1389,7 @@
printf (ngettext ("\
\nVersion definition section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
"\
@@ -2297,9 +2322,7 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
@@ -2471,9 +2496,7 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
shdr->sh_offset,
(unsigned int) shdr->sh_link,
@ -1400,7 +1400,7 @@
unsigned int offset = 0;
for (int cnt = shdr->sh_info; --cnt >= 0; )
@@ -2561,25 +2584,30 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G
@@ -2735,25 +2758,30 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G
filename = NULL;
}
@ -1438,7 +1438,7 @@
{
if (cnt % 2 == 0)
printf ("\n %4d:", cnt);
@@ -2628,7 +2656,17 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
@@ -2802,7 +2830,17 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt)
++counts[lengths[cnt]];
@ -1457,7 +1457,7 @@
printf (ngettext ("\
\nHistogram for bucket list length in section [%2u] '%s' (total of %d bucket):\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
"\
@@ -2641,9 +2679,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
@@ -2815,9 +2853,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
shdr->sh_addr,
shdr->sh_offset,
(unsigned int) shdr->sh_link,
@ -1468,7 +1468,7 @@
if (extrastr != NULL)
fputs (extrastr, stdout);
@@ -2903,7 +2939,8 @@ print_liblist (Ebl *ebl)
@@ -3077,7 +3113,8 @@ print_liblist (Ebl *ebl)
if (shdr != NULL && shdr->sh_type == SHT_GNU_LIBLIST)
{
@ -1478,7 +1478,7 @@
printf (ngettext ("\
\nLibrary list section [%2zu] '%s' at offset %#0" PRIx64 " contains %d entry:\n",
"\
@@ -4164,6 +4201,16 @@ print_debug_aranges_section (Dwfl_Module
@@ -4397,6 +4434,16 @@ print_decoded_aranges_section (Ebl *ebl,
return;
}
@ -1497,7 +1497,7 @@
"\
--- elfutils/src/strip.c
+++ elfutils/src/strip.c
@@ -564,6 +564,11 @@ handle_elf (int fd, Elf *elf, const char
@@ -565,6 +565,11 @@ handle_elf (int fd, Elf *elf, const char
goto fail_close;
}
@ -1509,7 +1509,7 @@
/* Storage for section information. We leave room for two more
entries since we unconditionally create a section header string
table. Maybe some weird tool created an ELF file without one.
@@ -585,7 +590,7 @@ handle_elf (int fd, Elf *elf, const char
@@ -586,7 +591,7 @@ handle_elf (int fd, Elf *elf, const char
{
/* This should always be true (i.e., there should not be any
holes in the numbering). */
@ -1518,7 +1518,7 @@
shdr_info[cnt].scn = scn;
@@ -598,6 +603,7 @@ handle_elf (int fd, Elf *elf, const char
@@ -599,6 +604,7 @@ handle_elf (int fd, Elf *elf, const char
shdr_info[cnt].shdr.sh_name);
if (shdr_info[cnt].name == NULL)
{
@ -1526,7 +1526,7 @@
error (0, 0, gettext ("illformed file '%s'"), fname);
goto fail_close;
}
@@ -607,6 +613,8 @@ handle_elf (int fd, Elf *elf, const char
@@ -608,6 +614,8 @@ handle_elf (int fd, Elf *elf, const char
/* Remember the shdr.sh_link value. */
shdr_info[cnt].old_sh_link = shdr_info[cnt].shdr.sh_link;
@ -1535,7 +1535,7 @@
/* Sections in files other than relocatable object files which
are not loaded can be freely moved by us. In relocatable
@@ -619,7 +627,7 @@ handle_elf (int fd, Elf *elf, const char
@@ -620,7 +628,7 @@ handle_elf (int fd, Elf *elf, const char
appropriate reference. */
if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_SYMTAB_SHNDX))
{
@ -1544,7 +1544,7 @@
shdr_info[shdr_info[cnt].shdr.sh_link].symtab_idx = cnt;
}
else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GROUP))
@@ -636,7 +644,12 @@ handle_elf (int fd, Elf *elf, const char
@@ -637,7 +645,12 @@ handle_elf (int fd, Elf *elf, const char
for (inner = 1;
inner < shdr_info[cnt].data->d_size / sizeof (Elf32_Word);
++inner)
@ -1557,7 +1557,7 @@
if (inner == 1 || (inner == 2 && (grpref[0] & GRP_COMDAT) == 0))
/* If the section group contains only one element and this
@@ -647,7 +660,7 @@ handle_elf (int fd, Elf *elf, const char
@@ -648,7 +661,7 @@ handle_elf (int fd, Elf *elf, const char
}
else if (unlikely (shdr_info[cnt].shdr.sh_type == SHT_GNU_versym))
{
@ -1566,7 +1566,7 @@
shdr_info[shdr_info[cnt].shdr.sh_link].version_idx = cnt;
}
@@ -655,7 +668,7 @@ handle_elf (int fd, Elf *elf, const char
@@ -656,7 +669,7 @@ handle_elf (int fd, Elf *elf, const char
discarded right away. */
if ((shdr_info[cnt].shdr.sh_flags & SHF_GROUP) != 0)
{
@ -1575,7 +1575,7 @@
if (shdr_info[shdr_info[cnt].group_idx].idx == 0)
{
@@ -731,10 +744,14 @@ handle_elf (int fd, Elf *elf, const char
@@ -732,10 +745,14 @@ handle_elf (int fd, Elf *elf, const char
{
/* If a relocation section is marked as being removed make
sure the section it is relocating is removed, too. */
@ -1593,7 +1593,7 @@
/* If a group section is marked as being removed make
sure all the sections it contains are being removed, too. */
@@ -778,7 +795,7 @@ handle_elf (int fd, Elf *elf, const char
@@ -779,7 +796,7 @@ handle_elf (int fd, Elf *elf, const char
if (shdr_info[cnt].symtab_idx != 0
&& shdr_info[shdr_info[cnt].symtab_idx].data == NULL)
{
@ -1602,7 +1602,7 @@
shdr_info[shdr_info[cnt].symtab_idx].data
= elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn,
@@ -818,6 +835,9 @@ handle_elf (int fd, Elf *elf, const char
@@ -819,6 +836,9 @@ handle_elf (int fd, Elf *elf, const char
else if (scnidx == SHN_XINDEX)
scnidx = xndx;
@ -1612,7 +1612,7 @@
if (shdr_info[scnidx].idx == 0)
/* This symbol table has a real symbol in
a discarded section. So preserve the
@@ -848,12 +868,16 @@ handle_elf (int fd, Elf *elf, const char
@@ -849,12 +869,16 @@ handle_elf (int fd, Elf *elf, const char
}
/* Handle references through sh_info. */
@ -1631,7 +1631,7 @@
/* Mark the section as investigated. */
shdr_info[cnt].idx = 2;
@@ -994,7 +1018,7 @@ handle_elf (int fd, Elf *elf, const char
@@ -995,7 +1019,7 @@ handle_elf (int fd, Elf *elf, const char
error (EXIT_FAILURE, 0, gettext ("while generating output file: %s"),
elf_errmsg (-1));
@ -1640,7 +1640,7 @@
/* Add this name to the section header string table. */
shdr_info[cnt].se = ebl_strtabadd (shst, shdr_info[cnt].name, 0);
@@ -1031,7 +1055,7 @@ handle_elf (int fd, Elf *elf, const char
@@ -1032,7 +1056,7 @@ handle_elf (int fd, Elf *elf, const char
error (EXIT_FAILURE, 0,
gettext ("while create section header section: %s"),
elf_errmsg (-1));
@ -1649,7 +1649,7 @@
shdr_info[cnt].data = elf_newdata (shdr_info[cnt].newscn);
if (shdr_info[cnt].data == NULL)
@@ -1087,7 +1111,7 @@ handle_elf (int fd, Elf *elf, const char
@@ -1089,7 +1113,7 @@ handle_elf (int fd, Elf *elf, const char
error (EXIT_FAILURE, 0,
gettext ("while create section header section: %s"),
elf_errmsg (-1));
@ -1658,7 +1658,7 @@
/* Finalize the string table and fill in the correct indices in the
section headers. */
@@ -1177,20 +1201,20 @@ handle_elf (int fd, Elf *elf, const char
@@ -1179,20 +1203,20 @@ handle_elf (int fd, Elf *elf, const char
shndxdata = elf_getdata (shdr_info[shdr_info[cnt].symtab_idx].scn,
NULL);
@ -1682,7 +1682,7 @@
>= shdr_info[cnt].data->d_size / elsize);
}
@@ -1245,7 +1269,7 @@ handle_elf (int fd, Elf *elf, const char
@@ -1247,7 +1271,7 @@ handle_elf (int fd, Elf *elf, const char
sec = shdr_info[sym->st_shndx].idx;
else
{
@ -1691,7 +1691,7 @@
sec = shdr_info[xshndx].idx;
}
@@ -1266,7 +1290,7 @@ handle_elf (int fd, Elf *elf, const char
@@ -1268,7 +1292,7 @@ handle_elf (int fd, Elf *elf, const char
nxshndx = sec;
}
@ -1700,7 +1700,7 @@
if ((inner != destidx || nshndx != sym->st_shndx
|| (shndxdata != NULL && nxshndx != xshndx))
@@ -1293,9 +1317,11 @@ handle_elf (int fd, Elf *elf, const char
@@ -1295,9 +1319,11 @@ handle_elf (int fd, Elf *elf, const char
{
size_t sidx = (sym->st_shndx != SHN_XINDEX
? sym->st_shndx : xshndx);
@ -1715,7 +1715,7 @@
}
}
@@ -1483,11 +1509,11 @@ handle_elf (int fd, Elf *elf, const char
@@ -1485,11 +1511,11 @@ handle_elf (int fd, Elf *elf, const char
{
GElf_Sym sym_mem;
GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem);
@ -1729,7 +1729,7 @@
size_t hidx = elf_hash (name) % nbucket;
if (bucket[hidx] == 0)
@@ -1506,8 +1532,8 @@ handle_elf (int fd, Elf *elf, const char
@@ -1508,8 +1534,8 @@ handle_elf (int fd, Elf *elf, const char
else
{
/* Alpha and S390 64-bit use 64-bit SHT_HASH entries. */
@ -1740,7 +1740,7 @@
Elf64_Xword *bucket = (Elf64_Xword *) hashd->d_buf;
@@ -1537,11 +1563,11 @@ handle_elf (int fd, Elf *elf, const char
@@ -1539,11 +1565,11 @@ handle_elf (int fd, Elf *elf, const char
{
GElf_Sym sym_mem;
GElf_Sym *sym = gelf_getsym (symd, inner, &sym_mem);

View File

@ -1,7 +1,7 @@
Name: elfutils
Summary: A collection of utilities and DSOs to handle compiled objects
Version: 0.155
%global baserelease 6
Version: 0.156
%global baserelease 1
URL: https://fedorahosted.org/elfutils/
%global source_url http://fedorahosted.org/releases/e/l/elfutils/%{version}/
License: GPLv3+ and (GPLv2+ or LGPLv3+)
@ -45,9 +45,6 @@ Group: Development/Tools
Source: %{?source_url}%{name}-%{version}.tar.bz2
Patch1: %{?source_url}elfutils-robustify.patch
Patch2: %{?source_url}elfutils-portability.patch
Patch3: elfutils-0.155-binutils-pr-ld-13621.patch
Patch4: elfutils-0.155-mem-align.patch
Patch5: elfutils-0.155-sizeof-pointer-memaccess.patch
%if !%{compat}
Release: %{baserelease}%{?dist}
@ -212,10 +209,6 @@ sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c
%endif
%endif
%patch3 -p1 -b .binutils-pr-ld-13621
%patch4 -p1 -b .mem-align
%patch5 -p1 -b .sizeof-pointer-memaccess
find . -name \*.sh ! -perm -0100 -print | xargs chmod +x
%build
@ -331,6 +324,17 @@ rm -rf ${RPM_BUILD_ROOT}
%{_libdir}/libelf.a
%changelog
* Thu Jul 25 2013 Jan Kratochvil <jan.kratochvil@redhat.com> 0.156-1
- Update to 0.156.
- #890447 - Add __bss_start and __TMC_END__ to elflint.
- #909481 - Only try opening files with installed compression libraries.
- #914908 - Add __bss_start__ to elflint.
- #853757 - Updated Polish translation.
- #985438 - Incorrect prototype of __libdwfl_find_elf_build_id.
- Drop upstreamed elfutils-0.155-binutils-pr-ld-13621.patch.
- Drop upstreamed elfutils-0.155-mem-align.patch.
- Drop upstreamed elfutils-0.155-sizeof-pointer-memaccess.patch.
* Tue Jul 02 2013 Karsten Hopp <karsten@redhat.com> 0.155-6
- bump release and rebuild to fix dependencies on PPC
@ -359,7 +363,7 @@ rm -rf ${RPM_BUILD_ROOT}
* Wed Aug 01 2012 Mark Wielaard <mjw@redhat.com> 0.154-3
- Add dwz support
* Mon Jul 18 2012 Mark Wielaard <mjw@redhat.com> 0.154-2
* Wed Jul 18 2012 Mark Wielaard <mjw@redhat.com> 0.154-2
- Add upstream xlatetom fix (#835877)
* Mon Jul 02 2012 Karsten Hopp <karsten@redhat.com> 0.154-1.1

View File

@ -1 +1 @@
163a5712b86f6bdfebdf233cc6e2192d elfutils-0.155.tar.bz2
f3b5cbb63b0757f571c6cc109df4c55b elfutils-0.156.tar.bz2