ppc64_elf_copy_indirect_symbol versioned_hidden fix

Alan Modra amodra@gmail.com
Sat Dec 3 10:47:00 GMT 2016


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.

diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 5a4bc72..bfdfc09 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -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

-- 
Alan Modra
Australia Development Lab, IBM



More information about the Binutils mailing list