* elf64-mips.c (mips_elf64_write_rel): Use STN_UNDEF for relocs
authorRichard Sandiford <rdsandiford@googlemail.com>
Thu, 7 Oct 2004 19:15:29 +0000 (19:15 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Thu, 7 Oct 2004 19:15:29 +0000 (19:15 +0000)
against the absolute section.
(mips_elf64_write_rela): Likewise.

bfd/ChangeLog
bfd/elf64-mips.c
gas/testsuite/ChangeLog
gas/testsuite/gas/mips/elf-rel22.d [new file with mode: 0644]
gas/testsuite/gas/mips/elf-rel22.s [new file with mode: 0644]
gas/testsuite/gas/mips/mips.exp

index 3dba4a3..eefb123 100644 (file)
@@ -1,3 +1,9 @@
+2004-10-07  Richard Sandiford  <rsandifo@redhat.com>
+
+       * elf64-mips.c (mips_elf64_write_rel): Use STN_UNDEF for relocs
+       against the absolute section.
+       (mips_elf64_write_rela): Likewise.
+
 2004-10-07  Jan Beulich <jbeulich@novell.com>
 
        * elf.c (elf_find_function): Don't generally check for matching
 2004-10-07  Jan Beulich <jbeulich@novell.com>
 
        * elf.c (elf_find_function): Don't generally check for matching
index ac9f96f..dd68f70 100644 (file)
@@ -2352,6 +2352,8 @@ mips_elf64_write_rel (bfd *abfd, asection *sec,
       sym = *ptr->sym_ptr_ptr;
       if (sym == last_sym)
        n = last_sym_idx;
       sym = *ptr->sym_ptr_ptr;
       if (sym == last_sym)
        n = last_sym_idx;
+      else if (bfd_is_abs_section (sym->section) && sym->value == 0)
+       n = STN_UNDEF;
       else
        {
          last_sym = sym;
       else
        {
          last_sym = sym;
@@ -2448,6 +2450,8 @@ mips_elf64_write_rela (bfd *abfd, asection *sec,
       sym = *ptr->sym_ptr_ptr;
       if (sym == last_sym)
        n = last_sym_idx;
       sym = *ptr->sym_ptr_ptr;
       if (sym == last_sym)
        n = last_sym_idx;
+      else if (bfd_is_abs_section (sym->section) && sym->value == 0)
+       n = STN_UNDEF;
       else
        {
          last_sym = sym;
       else
        {
          last_sym = sym;
index 647a124..b15a824 100644 (file)
@@ -1,5 +1,10 @@
 2004-10-07  Richard Sandiford  <rsandifo@redhat.com>
 
 2004-10-07  Richard Sandiford  <rsandifo@redhat.com>
 
+       * gas/mips/elf-rel22.[sd]: New test.
+       * gas/mips/mips.exp: Run it.
+
+2004-10-07  Richard Sandiford  <rsandifo@redhat.com>
+
        * gas/mips/elf-rel21.[sd]: New test.
        * gas/mips/mips.exp: Run it.
 
        * gas/mips/elf-rel21.[sd]: New test.
        * gas/mips/mips.exp: Run it.
 
diff --git a/gas/testsuite/gas/mips/elf-rel22.d b/gas/testsuite/gas/mips/elf-rel22.d
new file mode 100644 (file)
index 0000000..14ab1a8
--- /dev/null
@@ -0,0 +1,9 @@
+#as: -march=mips3 -mabi=64
+#readelf: --relocs
+#name: MIPS ELF reloc 22
+
+Relocation section '\.rela\.text' .*:
+.*
+.* R_MIPS_LO16 * 0+04
+ * Type2: R_MIPS_SUB *
+ * Type3: R_MIPS_LO16 *
diff --git a/gas/testsuite/gas/mips/elf-rel22.s b/gas/testsuite/gas/mips/elf-rel22.s
new file mode 100644 (file)
index 0000000..82a1cac
--- /dev/null
@@ -0,0 +1,4 @@
+       lui     $4,%lo(%neg(%lo(bar-foo)))
+foo:
+       nop
+bar:
index ad3c83c..6818417 100644 (file)
@@ -664,6 +664,7 @@ if { [istarget mips*-*-*] } then {
        run_dump_test "elf-rel20"
        if $has_newabi {
            run_dump_test "elf-rel21"
        run_dump_test "elf-rel20"
        if $has_newabi {
            run_dump_test "elf-rel21"
+           run_dump_test "elf-rel22"
        }
 
        if { !$no_mips16 } {
        }
 
        if { !$no_mips16 } {