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 <hongjiu.lu@intel.com> + + * elf64-x86-64.c (elf_x86_64_relocate_section): Check + info->executable for symbols which need copy relocs. + 2014-12-02 H.J. Lu <hongjiu.lu@intel.com> * 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