Accept --just-symbols symbols as absolute for xcoff

Alan Modra amodra@gmail.com
Mon Jul 27 12:59:47 GMT 2020
This patch is aimed at curing
    just-symbols-1.o: loader reloc in unrecognized section `*ABS*'
for xcoff by treating symbols defined by --just-symbols objects as
absolute.

	* xcofflink.c (xcoff_need_ldrel_p): Accept --just-symbols symbols and
	similar as absolute.
	(bfd_xcoff_import_symbol): Don't fuss over absolute symbol
	redefinitions here.

diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
index 985e221742..8870525472 100644
--- a/bfd/xcofflink.c
+++ b/bfd/xcofflink.c
@@ -2685,9 +2685,17 @@ xcoff_need_ldrel_p (struct bfd_link_info *info, struct internal_reloc *rel,
     case R_RLA:
       /* Absolute relocations against absolute symbols can be
 	 resolved statically.  */
-      if (h != NULL && bfd_is_abs_symbol (&h->root))
-	return FALSE;
-
+      if (h != NULL
+	  && (h->root.type == bfd_link_hash_defined
+	      || h->root.type == bfd_link_hash_defweak)
+	  && !h->root.rel_from_abs)
+	{
+	  asection *sec = h->root.u.def.section;
+	  if (bfd_is_abs_section (sec)
+	      || (sec != NULL
+		  && bfd_is_abs_section (sec->output_section)))
+	    return FALSE;
+	}
       return TRUE;
     }
 }
@@ -3118,9 +3126,7 @@ bfd_xcoff_import_symbol (bfd *output_bfd,
 
   if (val != (bfd_vma) -1)
     {
-      if (h->root.type == bfd_link_hash_defined
-	  && (!bfd_is_abs_symbol (&h->root)
-	      || h->root.u.def.value != val))
+      if (h->root.type == bfd_link_hash_defined)
 	(*info->callbacks->multiple_definition) (info, &h->root, output_bfd,
 						 bfd_abs_section_ptr, val);
 

-- 
Alan Modra
Australia Development Lab, IBM


More information about the Binutils mailing list