summaryrefslogtreecommitdiff
path: root/bfd/xcofflink.c
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@nildram.co.uk>2009-03-14 09:15:34 +0000
committerRichard Sandiford <rsandifo@nildram.co.uk>2009-03-14 09:15:34 +0000
commit3ea66a83f25c40a8bd1d4afa36a9219a1757cd35 (patch)
treee44f45aaae86610b7b5652d1e68d4576ec055676 /bfd/xcofflink.c
parentcf8286e5176be0ed1e2df2b7c728bf5ecb9d668d (diff)
downloadbinutils-redhat-3ea66a83f25c40a8bd1d4afa36a9219a1757cd35.tar.gz
bfd/
* xcofflink.c (xcoff_mark, xcoff_link_input_bfd): Don't copy R_POS and R_NEG relocations against absolute symbols to the .loader section. ld/testsuite/ * ld-powerpc/aix-abs-reloc-1.ex, ld-powerpc/aix-abs-reloc-1.im, ld-powerpc/aix-abs-reloc-1.od, ld-powerpc/aix-abs-reloc-1.s: New test. * ld-powerpc/aix52.exp: Run it.
Diffstat (limited to 'bfd/xcofflink.c')
-rw-r--r--bfd/xcofflink.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
index 21d9a2d944..0a38ac343c 100644
--- a/bfd/xcofflink.c
+++ b/bfd/xcofflink.c
@@ -2335,6 +2335,11 @@ xcoff_mark (struct bfd_link_info *info, asection *sec)
case R_NEG:
case R_RL:
case R_RLA:
+ if (h != NULL
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && bfd_is_abs_section (h->root.u.def.section))
+ break;
++xcoff_hash_table (info)->ldrel_count;
if (h != NULL)
h->flags |= XCOFF_LDREL;
@@ -4460,6 +4465,11 @@ xcoff_link_input_bfd (struct xcoff_final_link_info *finfo,
case R_NEG:
case R_RL:
case R_RLA:
+ if (h != NULL
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak)
+ && bfd_is_abs_section (h->root.u.def.section))
+ break;
/* This reloc needs to be copied into the .loader
section. */
ldrel.l_vaddr = irel->r_vaddr;