bfd/
authorRichard Sandiford <rdsandiford@googlemail.com>
Thu, 7 Aug 2008 19:50:05 +0000 (19:50 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Thu, 7 Aug 2008 19:50:05 +0000 (19:50 +0000)
* elfxx-mips.c (allocate_dynrelocs): Ignore indirect and warning
symbols.

ld/testsuite/
* ld-mips-elf/reloc-estimate-1.d, ld-mips-elf/reloc-estimate-1.ld,
ld-mips-elf/reloc-estimate-1a.s, ld-mips-elf/reloc-estimate-1b.s:
New test.
* ld-mips-elf/mips-elf.exp: Run it.

bfd/ChangeLog
bfd/elfxx-mips.c
ld/testsuite/ChangeLog
ld/testsuite/ld-mips-elf/mips-elf.exp
ld/testsuite/ld-mips-elf/reloc-estimate-1.d [new file with mode: 0644]
ld/testsuite/ld-mips-elf/reloc-estimate-1.ld [new file with mode: 0644]
ld/testsuite/ld-mips-elf/reloc-estimate-1a.s [new file with mode: 0644]
ld/testsuite/ld-mips-elf/reloc-estimate-1b.s [new file with mode: 0644]

index 93a132f..40a5085 100644 (file)
@@ -1,3 +1,8 @@
+2008-08-07  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * elfxx-mips.c (allocate_dynrelocs): Ignore indirect and warning
+       symbols.
+
 2008-08-06  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * elfxx-mips.c (mips_elf_link_hash_entry): Move bfd_boolean
index 24a3606..f3536fd 100644 (file)
@@ -7460,6 +7460,12 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
   if (htab->is_vxworks && !info->shared)
     return TRUE;
 
+  /* Ignore indirect and warning symbols.  All relocations against
+     such symbols will be redirected to the target symbol.  */
+  if (h->root.type == bfd_link_hash_indirect
+      || h->root.type == bfd_link_hash_warning)
+    return TRUE;
+
   /* If this symbol is defined in a dynamic object, or we are creating
      a shared library, we will need to copy any R_MIPS_32 or
      R_MIPS_REL32 relocs against it into the output file.  */
index 2b50e53..7a90aad 100644 (file)
@@ -1,3 +1,10 @@
+2008-08-07  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * ld-mips-elf/reloc-estimate-1.d, ld-mips-elf/reloc-estimate-1.ld,
+       ld-mips-elf/reloc-estimate-1a.s, ld-mips-elf/reloc-estimate-1b.s:
+       New test.
+       * ld-mips-elf/mips-elf.exp: Run it.
+
 2008-08-06  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * ld-mips-elf/tls-hidden3.ld: Remove the unused .MIPS.stubs section.
index 29cd3bb..b4da748 100644 (file)
@@ -194,6 +194,7 @@ if { $linux_gnu } {
     if $has_newabi {
        run_dump_test "got-dump-2"
     }
+    run_dump_test "reloc-estimate-1"
 }
 
 if $has_newabi {
diff --git a/ld/testsuite/ld-mips-elf/reloc-estimate-1.d b/ld/testsuite/ld-mips-elf/reloc-estimate-1.d
new file mode 100644 (file)
index 0000000..94dde81
--- /dev/null
@@ -0,0 +1,18 @@
+#name: MIPS reloc estimation 1
+#source: reloc-estimate-1a.s
+#source: reloc-estimate-1b.s
+#ld: -shared -T reloc-estimate-1.ld
+#objdump: -R -sj.foo
+
+.*
+
+DYNAMIC RELOCATION RECORDS
+OFFSET   TYPE              VALUE 
+00000000 R_MIPS_NONE       \*ABS\*
+00010000 R_MIPS_REL32      foo
+
+
+# The address must be 0x810.  We should only ever allocate one dynamic
+# reloc over and above the first R_MIPS_NONE entry.
+Contents of section \.foo:
+ 0810 deadbeef                             ....            
diff --git a/ld/testsuite/ld-mips-elf/reloc-estimate-1.ld b/ld/testsuite/ld-mips-elf/reloc-estimate-1.ld
new file mode 100644 (file)
index 0000000..776e503
--- /dev/null
@@ -0,0 +1,29 @@
+SECTIONS
+{
+  . = 0;
+  .reginfo : { *(.reginfo) }
+
+  . = ALIGN (0x400);
+  .dynamic : { *(.dynamic) }
+  .dynsym : { *(.dynsym) }
+  .dynstr : { *(.dynstr) }
+
+  . = ALIGN (0x400);
+  .rel.dyn : { *(.rel.dyn) }
+  .foo : { *(.foo) }
+  .text : { *(.text) }
+
+  . = ALIGN (0x400);
+  .MIPS.stubs : { *(.MIPS.stubs) }
+
+  . = ALIGN (0x10000);
+  .data : { *(.data) }
+
+  . = ALIGN (0x400);
+  _gp = . + 0x7ff0;
+  .got : { *(.got) }
+}
+
+VERSION {
+  V2 { global: foo; local: *; };
+}
diff --git a/ld/testsuite/ld-mips-elf/reloc-estimate-1a.s b/ld/testsuite/ld-mips-elf/reloc-estimate-1a.s
new file mode 100644 (file)
index 0000000..564c62a
--- /dev/null
@@ -0,0 +1,6 @@
+       .section .foo,"a",@progbits
+       .word   0xdeadbeef
+
+       .abicalls
+       .data
+       .word   foo
diff --git a/ld/testsuite/ld-mips-elf/reloc-estimate-1b.s b/ld/testsuite/ld-mips-elf/reloc-estimate-1b.s
new file mode 100644 (file)
index 0000000..dd308b4
--- /dev/null
@@ -0,0 +1,7 @@
+       .abicalls
+       .symver foo2,foo@@V2
+       .global foo2
+       .data
+       .type   foo2,%object
+       .size   foo2,4
+foo2:  .word   0