diff options
author | David S. Miller <davem@davemloft.net> | 2012-09-27 21:33:54 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-09-27 21:33:54 -0700 |
commit | aa9bbfe6a79fce593ab3d298bb0e880d77eb7f71 (patch) | |
tree | ee985cd26a370995dd7eb89cece24126aea2d939 | |
parent | c39bc8b8254364fda301a89180130c3586859d75 (diff) | |
download | glibc-aa9bbfe6a79fce593ab3d298bb0e880d77eb7f71.zip glibc-aa9bbfe6a79fce593ab3d298bb0e880d77eb7f71.tar.gz glibc-aa9bbfe6a79fce593ab3d298bb0e880d77eb7f71.tar.bz2 |
Fix sparc64 crashes with LD_BIND_NOW and --enable-bind-now.
[BZ #14376]
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Do not
pass reloc->r_addend in as the 'high' argument to
sparc64_fixup_plt when handling R_SPARC_JMP_IREL relocations.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | sysdeps/sparc/sparc64/dl-machine.h | 9 |
3 files changed, 17 insertions, 3 deletions
@@ -1,3 +1,10 @@ +2012-09-27 David S. Miller <davem@davemloft.net> + + [BZ #14376] + * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Do not + pass reloc->r_addend in as the 'high' argument to + sparc64_fixup_plt when handling R_SPARC_JMP_IREL relocations. + 2012-09-28 Pino Toscano <toscano.pino@tiscali.it> * rt/tst-aio2.c: Include <pthread.h>. @@ -13,8 +13,8 @@ Version 2.17 13412, 13542, 13629, 13679, 13696, 13717, 13741, 13939, 13966, 14042, 14090, 14150, 14151, 14154, 14157, 14166, 14173, 14195, 14237, 14252, 14283, 14298, 14303, 14307, 14328, 14331, 14336, 14337, 14347, 14349, - 14459, 14476, 14505, 14510, 14516, 14518, 14519, 14530, 14532, 14538, - 14544, 14545, 14562, 14576, 14579, 14583, 14587, 14621. + 14376, 14459, 14476, 14505, 14510, 14516, 14518, 14519, 14530, 14532, + 14538, 14544, 14545, 14562, 14576, 14579, 14583, 14587, 14621. * Support for STT_GNU_IFUNC symbols added for s390 and s390x. Optimized versions of memcpy, memset, and memcmp added for System z10 and diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h index 35c24d1..2f8bbe1 100644 --- a/sysdeps/sparc/sparc64/dl-machine.h +++ b/sysdeps/sparc/sparc64/dl-machine.h @@ -458,7 +458,14 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, break; case R_SPARC_JMP_IREL: value = ((Elf64_Addr (*) (int)) value) (GLRO(dl_hwcap)); - /* Fall thru */ + /* 'high' is always zero, for large PLT entries the linker + emits an R_SPARC_IRELATIVE. */ +#ifdef RESOLVE_CONFLICT_FIND_MAP + sparc64_fixup_plt (NULL, reloc, reloc_addr, value, 0, 0); +#else + sparc64_fixup_plt (map, reloc, reloc_addr, value, 0, 0); +#endif + break; case R_SPARC_JMP_SLOT: #ifdef RESOLVE_CONFLICT_FIND_MAP /* R_SPARC_JMP_SLOT conflicts against .plt[32768+] |