]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
PowerPC64 abort due to dynamic relocs on hidden undefweak
authorAlan Modra <amodra@gmail.com>
Tue, 7 Mar 2017 00:34:19 +0000 (11:04 +1030)
committerAlan Modra <amodra@gmail.com>
Tue, 7 Mar 2017 02:35:31 +0000 (13:05 +1030)
ppc64_elf_relocate_section lacked a check which meant that it emitted
dynamic relocs against a hidden undefweak symbol for which no dynamic
relocs had been allocated.

PR 21224
PR 20519
* elf64-ppc.c (ppc64_elf_relocate_section): Add missing
dyn_relocs check.

bfd/ChangeLog
bfd/elf64-ppc.c

index 459c4050c297722d2781e83641001985165e8c2a..17e7e3b9bf858ec562fed0fbd2b7929596dca00c 100644 (file)
@@ -1,3 +1,10 @@
+2017-03-07  Alan Modra  <amodra@gmail.com>
+
+       PR 21224
+       PR 20519
+       * elf64-ppc.c (ppc64_elf_relocate_section): Add missing
+       dyn_relocs check.
+
 2017-03-07  Alan Modra  <amodra@gmail.com>
 
        Apply from master
index e7d479224548c1f5d4d9ef325be1c8b8ad8cd5ee..3381647c467c21da6fae83759f116480b31586e1 100644 (file)
@@ -14798,8 +14798,10 @@ ppc64_elf_relocate_section (bfd *output_bfd,
            break;
 
          if (bfd_link_pic (info)
-             ? ((h != NULL && pc_dynrelocs (h))
-                || must_be_dyn_reloc (info, r_type))
+             ? ((h == NULL
+                 || h->dyn_relocs != NULL)
+                && ((h != NULL && pc_dynrelocs (h))
+                    || must_be_dyn_reloc (info, r_type)))
              : (h != NULL
                 ? h->dyn_relocs != NULL
                 : ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC))