From fd9edc908915788839e7605e2fe4c00f4b3eb3db Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 2 Dec 2014 16:57:45 -0800 Subject: [PATCH] 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. --- bfd/ChangeLog | 5 +++++ bfd/elf64-x86-64.c | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 91245b9e41..f7caed5a49 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 58db76a798..8b0b8bf6a0 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