forked from pool/glibc
ebbfea4ed0
Fix sparc build OBS-URL: https://build.opensuse.org/request/show/136312 OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=217
32 lines
1.2 KiB
Diff
32 lines
1.2 KiB
Diff
commit aa9bbfe6a79fce593ab3d298bb0e880d77eb7f71
|
|
Author: David S. Miller <davem@davemloft.net>
|
|
Date: Thu Sep 27 21:33:54 2012 -0700
|
|
|
|
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.
|
|
|
|
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+]
|