From aa9bbfe6a79fce593ab3d298bb0e880d77eb7f71 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Thu, 27 Sep 2012 21:33:54 -0700 Subject: 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. --- sysdeps/sparc/sparc64/dl-machine.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'sysdeps/sparc/sparc64') diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h index 35c24d1558..2f8bbe1786 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+] -- cgit 1.4.1