aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog6
-rw-r--r--bfd/elf64-mips.c4
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/mips/elf-rel22.d9
-rw-r--r--gas/testsuite/gas/mips/elf-rel22.s4
-rw-r--r--gas/testsuite/gas/mips/mips.exp1
6 files changed, 29 insertions, 0 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 3dba4a3..eefb123 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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
diff --git a/bfd/elf64-mips.c b/bfd/elf64-mips.c
index ac9f96f..dd68f70 100644
--- a/bfd/elf64-mips.c
+++ b/bfd/elf64-mips.c
@@ -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;
+ else if (bfd_is_abs_section (sym->section) && sym->value == 0)
+ n = STN_UNDEF;
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;
+ else if (bfd_is_abs_section (sym->section) && sym->value == 0)
+ n = STN_UNDEF;
else
{
last_sym = sym;
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 647a124..b15a824 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,5 +1,10 @@
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.
diff --git a/gas/testsuite/gas/mips/elf-rel22.d b/gas/testsuite/gas/mips/elf-rel22.d
new file mode 100644
index 0000000..14ab1a8
--- /dev/null
+++ b/gas/testsuite/gas/mips/elf-rel22.d
@@ -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
index 0000000..82a1cac
--- /dev/null
+++ b/gas/testsuite/gas/mips/elf-rel22.s
@@ -0,0 +1,4 @@
+ lui $4,%lo(%neg(%lo(bar-foo)))
+foo:
+ nop
+bar:
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index ad3c83c..6818417 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -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-rel22"
}
if { !$no_mips16 } {