Don't issue an error if DT_PLTRELSZ is missing

A shared object doesn't need PLT if there are no PLT relocations.  It
shouldn't be an error if DT_PLTRELSZ is missing.

	[BZ #18410]
	* elf/dl-reloc.c (_dl_relocate_object): Don't issue an error
	for missing DT_PLTRELSZ.
This commit is contained in:
H.J. Lu 2015-05-22 17:46:42 -07:00
parent 333e1ba4e5
commit 3e058c9d7e
3 changed files with 11 additions and 13 deletions

View File

@ -1,3 +1,9 @@
2015-05-22 H.J. Lu <hongjiu.lu@intel.com>
[BZ #18410]
* elf/dl-reloc.c (_dl_relocate_object): Don't issue an error
for missing DT_PLTRELSZ.
2015-05-22 Paul Eggert <eggert@cs.ucla.edu>
Remove obsolete aliases that broke 'locale -a'

4
NEWS
View File

@ -18,8 +18,8 @@ Version 2.22
18029, 18030, 18032, 18036, 18038, 18039, 18042, 18043, 18046, 18047,
18049, 18068, 18080, 18093, 18100, 18104, 18110, 18111, 18125, 18128,
18138, 18185, 18196, 18197, 18206, 18210, 18211, 18217, 18220, 18221,
18244, 18247, 18287, 18319, 18333, 18346, 18397, 18409, 18412, 18418,
18434, 18444.
18244, 18247, 18287, 18319, 18333, 18346, 18397, 18409, 18410, 18412,
18418, 18434, 18444.
* Cache information can be queried via sysconf() function on s390 e.g. with
_SC_LEVEL1_ICACHE_SIZE as argument.

View File

@ -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