diff options
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf64-ppc.c | 31 |
2 files changed, 17 insertions, 20 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 303d97b..94c1fcb 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2016-08-11 Alan Modra <amodra@gmail.com> + + * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Don't exit with + non_got_ref true in any case where we could have generated dynbss + copies but decide not to do so. + 2016-08-10 Maciej W. Rozycki <macro@imgtec.com> * elfxx-mips.c (mips_elf_add_la25_stub): Clear the ISA bit of diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index f40b35a..4f854c7 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -7223,29 +7223,20 @@ ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info, return TRUE; /* Don't generate a copy reloc for symbols defined in the executable. */ - if (!h->def_dynamic || !h->ref_regular || h->def_regular) - return TRUE; + if (!h->def_dynamic || !h->ref_regular || h->def_regular - /* If -z nocopyreloc was given, don't generate them either. */ - if (info->nocopyreloc) - { - h->non_got_ref = 0; - return TRUE; - } + /* If -z nocopyreloc was given, don't generate them either. */ + || info->nocopyreloc - /* If we didn't find any dynamic relocs in read-only sections, then - we'll be keeping the dynamic relocs and avoiding the copy reloc. */ - if (ELIMINATE_COPY_RELOCS && !readonly_dynrelocs (h)) - { - h->non_got_ref = 0; - return TRUE; - } + /* If we didn't find any dynamic relocs in read-only sections, then + we'll be keeping the dynamic relocs and avoiding the copy reloc. */ + || (ELIMINATE_COPY_RELOCS && !readonly_dynrelocs (h)) - /* Protected variables do not work with .dynbss. The copy in - .dynbss won't be used by the shared library with the protected - definition for the variable. Text relocations are preferable - to an incorrect program. */ - if (h->protected_def) + /* Protected variables do not work with .dynbss. The copy in + .dynbss won't be used by the shared library with the protected + definition for the variable. Text relocations are preferable + to an incorrect program. */ + || h->protected_def) { h->non_got_ref = 0; return TRUE; |