aboutsummaryrefslogtreecommitdiff
path: root/bfd/xcofflink.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-07-27 17:33:59 +0930
committerAlan Modra <amodra@gmail.com>2020-07-27 22:31:37 +0930
commit93fd13c70468a7baac5ac7d56b71feb172509f7a (patch)
tree9d6ec61aef3f9cc7ae2ecc60df26064f887ff3ee /bfd/xcofflink.c
parent8fab9282e5d231faa9105eb48eca9c3d4d990c93 (diff)
downloadbinutils-93fd13c70468a7baac5ac7d56b71feb172509f7a.zip
binutils-93fd13c70468a7baac5ac7d56b71feb172509f7a.tar.gz
binutils-93fd13c70468a7baac5ac7d56b71feb172509f7a.tar.bz2
Accept --just-symbols symbols as absolute for xcoff
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.
Diffstat (limited to 'bfd/xcofflink.c')
-rw-r--r--bfd/xcofflink.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
index 985e221..8870525 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);