summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@nildram.co.uk>2011-05-15 18:52:00 +0000
committerRichard Sandiford <rsandifo@nildram.co.uk>2011-05-15 18:52:00 +0000
commitbab272481bd93b2d1f07f068ac2dcf4d68f6613d (patch)
treee0c4e7004feac3180a64c202a5c4fc6feec93671
parentc60d6287d14a5c775399049492b24cdf32304641 (diff)
downloadbinutils-redhat-bab272481bd93b2d1f07f068ac2dcf4d68f6613d.tar.gz
bfd/
* elfxx-mips.c (_bfd_mips_elf_check_relocs): Record both local and global GOT entries for GOT_PAGE relocations against global symbols. ld/testsuite/ * lib/ld-lib.exp (run_ld_link_tests): Simplify pass/fail logic. Fail if the link command fails and if no test rules are defined. * ld-mips-elf/reloc-6a.s, ld-mips-elf/reloc-6b.s: New tests. * ld-mips-elf/mips-elf.exp: Run them.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elfxx-mips.c1
-rw-r--r--ld/testsuite/ChangeLog7
-rw-r--r--ld/testsuite/ld-mips-elf/mips-elf.exp12
-rw-r--r--ld/testsuite/ld-mips-elf/reloc-6a.s11
-rw-r--r--ld/testsuite/ld-mips-elf/reloc-6b.s11
-rw-r--r--ld/testsuite/lib/ld-lib.exp28
7 files changed, 54 insertions, 21 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 2ede7d324b..8a42e46563 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2011-05-15 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * elfxx-mips.c (_bfd_mips_elf_check_relocs): Record both local and
+ global GOT entries for GOT_PAGE relocations against global symbols.
+
2011-05-13 Bernd Schmidt <bernds@codesourcery.com>
* config.bfd (tic6x-*-elf, tic6x-*-uclinux): New.
diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c
index b804eeaf05..815b6af9aa 100644
--- a/bfd/elfxx-mips.c
+++ b/bfd/elfxx-mips.c
@@ -7743,7 +7743,6 @@ _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
if (!mips_elf_record_got_page_entry (info, abfd, r_symndx,
addend))
return FALSE;
- break;
}
/* Fall through. */
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index ba0aa4397e..11383beb07 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2011-05-15 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * lib/ld-lib.exp (run_ld_link_tests): Simplify pass/fail logic.
+ Fail if the link command fails and if no test rules are defined.
+ * ld-mips-elf/reloc-6a.s, ld-mips-elf/reloc-6b.s: New tests.
+ * ld-mips-elf/mips-elf.exp: Run them.
+
2011-05-13 Bernd Schmidt <bernds@codesourcery.com>
* ld-tic6x/dsbt.ld (OUTPUT_FORMAT): Add.
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp
index 2361965296..372f454a94 100644
--- a/ld/testsuite/ld-mips-elf/mips-elf.exp
+++ b/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -298,6 +298,18 @@ if {$has_newabi} {
}
run_dump_test "reloc-4"
run_dump_test "reloc-5"
+if { $has_newabi } {
+ run_ld_link_tests {
+ {"reloc test 6a" "-shared"
+ "-n32" "reloc-6a.s"
+ {}
+ "reloc-6a.so"}
+ {"reloc test 6b" "tmpdir/reloc-6a.so"
+ "-n32" "reloc-6b.s"
+ {}
+ "reloc-6b"}
+ }
+}
if {$has_newabi && $linux_gnu} {
run_dump_test "eh-frame1-n32"
diff --git a/ld/testsuite/ld-mips-elf/reloc-6a.s b/ld/testsuite/ld-mips-elf/reloc-6a.s
new file mode 100644
index 0000000000..4d84e837e5
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/reloc-6a.s
@@ -0,0 +1,11 @@
+ .globl us
+ .globl gs
+us:
+gs:
+ls:
+ lw $4,%got_page(us)($gp)
+ addiu $4,$4,%got_ofst(us)
+ lw $4,%got_page(gs)($gp)
+ addiu $4,$4,%got_ofst(gs)
+ lw $4,%got_page(ls)($gp)
+ addiu $4,$4,%got_ofst(ls)
diff --git a/ld/testsuite/ld-mips-elf/reloc-6b.s b/ld/testsuite/ld-mips-elf/reloc-6b.s
new file mode 100644
index 0000000000..aa2a726cf9
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/reloc-6b.s
@@ -0,0 +1,11 @@
+ .globl __start
+ .globl gs
+__start:
+gs:
+ls:
+ lw $4,%got_page(us)($gp)
+ addiu $4,$4,%got_ofst(us)
+ lw $4,%got_page(gs)($gp)
+ addiu $4,$4,%got_ofst(gs)
+ lw $4,%got_page(ls)($gp)
+ addiu $4,$4,%got_ofst(ls)
diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp
index 2fb8c4a706..34de7c8d39 100644
--- a/ld/testsuite/lib/ld-lib.exp
+++ b/ld/testsuite/lib/ld-lib.exp
@@ -978,26 +978,21 @@ proc run_ld_link_tests { ldtests } {
}
# Catch assembler errors.
- if { $is_unresolved != 0 } {
+ if { $is_unresolved } {
unresolved $testname
continue
}
if { [regexp ".*\\.a$" $binfile] } {
if { ![ar_simple_create $ar $ld_options $binfile "$objfiles"] } {
- fail $testname
set failed 1
- } else {
- set failed 0
}
} elseif { ![ld_simple_link $ld $binfile "-L$srcdir/$subdir $ld_options $objfiles"] } {
set maybe_failed 1
set ld_output "$exec_output"
- } else {
- set failed 0
}
- if { $failed == 0 } {
+ if { !$failed } {
foreach actionlist $actions {
set action [lindex $actionlist 0]
set progopts [lindex $actionlist 1]
@@ -1034,10 +1029,7 @@ proc run_ld_link_tests { ldtests } {
break
}
set maybe_failed 0
- } elseif { $maybe_failed != 0 } {
- set failed 1
- break
- } elseif { $dump_prog != "" } {
+ } elseif { !$maybe_failed && $dump_prog != "" } {
set dumpfile [lindex $actionlist 2]
set binary $dump_prog
@@ -1079,18 +1071,14 @@ proc run_ld_link_tests { ldtests } {
remote_file host delete "dump.out"
}
}
-
- if { $failed != 0 } {
- fail $testname
- } else { if { $is_unresolved == 0 } {
- pass $testname
- } }
}
- # Catch action errors.
- if { $is_unresolved != 0 } {
+ if { $is_unresolved } {
unresolved $testname
- continue
+ } elseif { $maybe_failed || $failed } {
+ fail $testname
+ } else {
+ pass $testname
}
}
}