diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-05-22 17:46:42 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-05-22 17:46:58 -0700 |
commit | 3e058c9d7eab6d6361e7cda5ba1394bc1757c9f6 (patch) | |
tree | ffd69b17e48ef749addd0e418b26c65ff84012f2 | |
parent | 333e1ba4e53456a603621274177ae9393b9d5385 (diff) | |
download | glibc-3e058c9d7eab6d6361e7cda5ba1394bc1757c9f6.zip glibc-3e058c9d7eab6d6361e7cda5ba1394bc1757c9f6.tar.gz glibc-3e058c9d7eab6d6361e7cda5ba1394bc1757c9f6.tar.bz2 |
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.
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | elf/dl-reloc.c | 14 |
3 files changed, 11 insertions, 13 deletions
@@ -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' @@ -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. diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c index 0872636..61252d7 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 |