This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
PING: [PATCH] [BZ #18410]: Incorrect handling of missing DT_PLTRELSZ
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Date: Fri, 22 May 2015 10:57:33 -0700
- Subject: PING: [PATCH] [BZ #18410]: Incorrect handling of missing DT_PLTRELSZ
- Authentication-results: sourceware.org; auth=none
On Fri, May 15, 2015 at 12:25 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> A shared object doesn't need PLT if there are no PLT relocations. It
> shouldn't be an error if DT_PLTRELSZ is missing.
>
> OK for master?
>
>
> H.J.
> --
> [BZ #18410]
> * elf/dl-reloc.c (_dl_relocate_object): Don't issue an error
> for missing DT_PLTRELSZ.
> ---
> elf/dl-reloc.c | 14 +++-----------
> 1 file changed, 3 insertions(+), 11 deletions(-)
>
> diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c
> index 0872636..068ea65 100644
> --- a/elf/dl-reloc.c
> +++ b/elf/dl-reloc.c
> @@ -258,21 +258,13 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
> ELF_DYNAMIC_RELOCATE (l, lazy, consider_profiling, skip_ifunc);
>
> #ifndef PROF
> - if (__glibc_unlikely (consider_profiling))
> + if (__glibc_unlikely (consider_profiling
> + && l->l_info[DT_PLTRELSZ] != NULL))
> {
> /* Allocate the array which will contain the already found
> relocations. If the shared object lacks a PLT (for example
> if it only contains lead function) the l_info[DT_PLTRELSZ]
> will be NULL. */
> - if (l->l_info[DT_PLTRELSZ] == NULL)
> - {
> - errstring = N_("%s: no PLTREL found in object %s\n");
> - fatal:
> - _dl_fatal_printf (errstring,
> - RTLD_PROGNAME,
> - l->l_name);
> - }
> -
> size_t sizeofrel = l->l_info[DT_PLTREL]->d_un.d_val == DT_RELA
> ? sizeof (ElfW(Rela))
> : sizeof (ElfW(Rel));
> @@ -283,7 +275,7 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
> {
> errstring = N_("\
> %s: out of memory to store relocation results for %s\n");
> - goto fatal;
> + _dl_fatal_printf (errstring, RTLD_PROGNAME, l->l_name);
> }
> }
> #endif
> --
> 1.9.3
>
PING.
--
H.J.