]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix sparc64 crashes with LD_BIND_NOW and --enable-bind-now.
authorDavid S. Miller <davem@davemloft.net>
Fri, 28 Sep 2012 04:33:54 +0000 (21:33 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 28 Sep 2012 04:33:54 +0000 (21:33 -0700)
[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.

ChangeLog
NEWS
sysdeps/sparc/sparc64/dl-machine.h

index c55a72e271fc74334ecd4a36f59d20254918ec36..5729b4c1ffeaa1183900709428f1918e06c09fd2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>.
diff --git a/NEWS b/NEWS
index cd0c579ea23abf5ad7a5ddeec55d734cdcc8de70..c0a671de21ca084ef525c1dd5ac895c6c13c13c7 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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
index 35c24d1558a8d19972b6ec6f8c9014f9e7b282ee..2f8bbe17862ed62a2e371ad7dc99274c061a77b6 100644 (file)
@@ -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+]