From: H.J. Lu Date: Wed, 3 Dec 2014 00:57:45 +0000 (-0800) Subject: Check info->executable for symbols which need copy relocs X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fd9edc908915788839e7605e2fe4c00f4b3eb3db;p=binutils-gdb.git Check info->executable for symbols which need copy relocs * elf64-x86-64.c (elf_x86_64_relocate_section): Check info->executable for symbols which need copy relocs. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 91245b9e419..f7caed5a490 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2014-12-02 H.J. Lu + + * elf64-x86-64.c (elf_x86_64_relocate_section): Check + info->executable for symbols which need copy relocs. + 2014-12-02 H.J. Lu * elf64-x86-64.c (elf_x86_64_check_relocs): Revert the last diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 58db76a7980..8b0b8bf6a00 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -4059,7 +4059,7 @@ elf_x86_64_relocate_section (bfd *output_bfd, defined locally or for a branch. */ fail = !h->def_regular && !branch; } - else if (!h->needs_copy) + else if (!(info->executable && h->needs_copy)) { /* Symbol doesn't need copy reloc and isn't referenced locally. We only allow branch to symbol with @@ -4120,7 +4120,8 @@ direct: /* Don't copy a pc-relative relocation into the output file if the symbol needs copy reloc. */ if ((info->shared - && !(h != NULL + && !(info->executable + && h != NULL && h->needs_copy && IS_X86_64_PCREL_TYPE (r_type)) && (h == NULL