ppc64_elf_copy_indirect_symbol versioned_hidden fix
authorAlan Modra <amodra@gmail.com>
Sat, 3 Dec 2016 10:25:25 +0000 (20:55 +1030)
committerAlan Modra <amodra@gmail.com>
Sat, 3 Dec 2016 10:25:25 +0000 (20:55 +1030)
As per _bfd_elf_link_hash_copy_indirect.

* elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Don't copy dynamic
flags when direct symbol is versioned_hidden.

bfd/ChangeLog
bfd/elf64-ppc.c

index 70b41054406ff3f4b7cdef6af4de87c5bb70165f..84ac6c0e3a2897fd0e681a2d724564568f0e7173 100644 (file)
@@ -1,3 +1,8 @@
+2016-12-03  Alan Modra  <amodra@gmail.com>
+
+       * elf64-ppc.c (ppc64_elf_copy_indirect_symbol): Don't copy dynamic
+       flags when direct symbol is versioned_hidden.
+
 2016-12-02  Nick Clifton  <nickc@redhat.com>
 
        PR lf/20908
index 5a4bc724cf95aec9189e26254debd299a6e719e2..bfdfc09cc80364d0501eca0173cc8f7be6b8ff0f 100644 (file)
@@ -4740,19 +4740,22 @@ ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
   if (eind->oh != NULL)
     edir->oh = ppc_follow_link (eind->oh);
 
-  /* If called to transfer flags for a weakdef during processing
-     of elf_adjust_dynamic_symbol, don't copy NON_GOT_REF.
-     We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
-  if (!(ELIMINATE_COPY_RELOCS
-       && eind->elf.root.type != bfd_link_hash_indirect
-       && edir->elf.dynamic_adjusted))
-    edir->elf.non_got_ref |= eind->elf.non_got_ref;
-
-  edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
-  edir->elf.ref_regular |= eind->elf.ref_regular;
-  edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
-  edir->elf.needs_plt |= eind->elf.needs_plt;
-  edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
+  if (edir->elf.versioned != versioned_hidden)
+    {
+      /* If called to transfer flags for a weakdef during processing
+        of elf_adjust_dynamic_symbol, don't copy NON_GOT_REF.
+        We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
+      if (!(ELIMINATE_COPY_RELOCS
+           && eind->elf.root.type != bfd_link_hash_indirect
+           && edir->elf.dynamic_adjusted))
+       edir->elf.non_got_ref |= eind->elf.non_got_ref;
+
+      edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
+      edir->elf.ref_regular |= eind->elf.ref_regular;
+      edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
+      edir->elf.needs_plt |= eind->elf.needs_plt;
+      edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
+    }
 
   /* If we were called to copy over info for a weak sym, don't copy
      dyn_relocs, plt/got info, or dynindx.  We used to copy dyn_relocs