bfd/
authorRichard Sandiford <rdsandiford@googlemail.com>
Sat, 14 Mar 2009 09:15:34 +0000 (09:15 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Sat, 14 Mar 2009 09:15:34 +0000 (09:15 +0000)
* 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.

bfd/ChangeLog
bfd/xcofflink.c
ld/testsuite/ChangeLog
ld/testsuite/ld-powerpc/aix-abs-reloc-1.ex [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-abs-reloc-1.im [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-abs-reloc-1.od [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix-abs-reloc-1.s [new file with mode: 0644]
ld/testsuite/ld-powerpc/aix52.exp

index 51544cc..9182ef2 100644 (file)
@@ -1,5 +1,11 @@
 2009-03-14  Richard Sandiford  <r.sandiford@uk.ibm.com>
 
+       * xcofflink.c (xcoff_mark, xcoff_link_input_bfd): Don't copy
+       R_POS and R_NEG relocations against absolute symbols to the
+       .loader section.
+
+2009-03-14  Richard Sandiford  <r.sandiford@uk.ibm.com>
+
        * coff64-rs6000.c (xcoff64_write_object_contents): Set the cputype
        to 2 for bfd_mach_ppc_620.
 
index 21d9a2d..0a38ac3 100644 (file)
@@ -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;
index a8baba1..b02892b 100644 (file)
@@ -1,5 +1,11 @@
 2009-03-14  Richard Sandiford  <r.sandiford@uk.ibm.com>
 
+       * 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.
+
+2009-03-14  Richard Sandiford  <r.sandiford@uk.ibm.com>
+
        * ld-powerpc/aix-core-sec-1.s, ld-powerpc/aix-core-sec-1.ex,
        ld-powerpc/aix-core-sec-1.hd, ld-powerpc/aix-core-sec-2.s,
        ld-powerpc/aix-core-sec-2.ex, ld-powerpc/aix-core-sec-2.hd,
diff --git a/ld/testsuite/ld-powerpc/aix-abs-reloc-1.ex b/ld/testsuite/ld-powerpc/aix-abs-reloc-1.ex
new file mode 100644 (file)
index 0000000..257cc56
--- /dev/null
@@ -0,0 +1 @@
+foo
diff --git a/ld/testsuite/ld-powerpc/aix-abs-reloc-1.im b/ld/testsuite/ld-powerpc/aix-abs-reloc-1.im
new file mode 100644 (file)
index 0000000..66f78a4
--- /dev/null
@@ -0,0 +1 @@
+bar    0xdeadbeef
diff --git a/ld/testsuite/ld-powerpc/aix-abs-reloc-1.od b/ld/testsuite/ld-powerpc/aix-abs-reloc-1.od
new file mode 100644 (file)
index 0000000..db65b4b
--- /dev/null
@@ -0,0 +1,7 @@
+
+.*
+
+DYNAMIC RELOCATION RECORDS \(none\)
+
+Contents of section \.data:
+ 10000000 deadbeef .*
diff --git a/ld/testsuite/ld-powerpc/aix-abs-reloc-1.s b/ld/testsuite/ld-powerpc/aix-abs-reloc-1.s
new file mode 100644 (file)
index 0000000..5eb3980
--- /dev/null
@@ -0,0 +1,4 @@
+       .globl  foo
+       .csect  foo[RW]
+foo:
+       .long   bar
index 0972557..1263796 100644 (file)
@@ -65,6 +65,12 @@ proc run_aix_test { size name ldopts asopts sources tools output } {
 }
 
 set aix52tests {
+    {"Relocations against absolute symbols 1"
+     "-shared -bI:aix-abs-reloc-1.im -bE:aix-abs-reloc-1.ex"
+     {} {aix-abs-reloc-1.s}
+     {{objdump -sRj.data aix-abs-reloc-1.od}}
+     "aix-abs-reloc-1.so"}
+
     {"Core sections test 1" "-shared -bE:aix-core-sec-1.ex"
      "" {aix-core-sec-1.s}
      {{objdump -h aix-core-sec-1.hd}}