aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@imgtec.com>2017-02-28 00:14:08 +0000
committerMaciej W. Rozycki <macro@imgtec.com>2017-02-28 00:22:36 +0000
commit0e39210161e7c547ab53afb86997303e24a42c0c (patch)
treed9e7851d07bece63eb64bb4e283d70f7b59932ca /ld
parent279a558a4d0fad268738ec916628c9c12cfcaf5b (diff)
downloadgdb-0e39210161e7c547ab53afb86997303e24a42c0c.zip
gdb-0e39210161e7c547ab53afb86997303e24a42c0c.tar.gz
gdb-0e39210161e7c547ab53afb86997303e24a42c0c.tar.bz2
MIPS/BFD: Also handle `jalr $0, $25' with R_MIPS_JALR
Interpret the `jalr $0, $25' instruction encoding with an R_MIPS_JALR relocation attached as an alias to `jr $25' and convert the jump to an equivalent branch where possible, consequently covering the MIPSr6 architecture for the purpose of this optimization too. bfd/ * elfxx-mips.c (mips_elf_perform_relocation): Also handle the `jalr $0, $25' instruction encoding. gas/ * testsuite/gas/mips/jalr4.s: Add `jalr $0, $25' instructions. * testsuite/gas/mips/jalr4.d: Adjust accordingly. Remove MIPSr6 encoding patterns. * testsuite/gas/mips/jalr4-n64.d: Likewise. * testsuite/gas/mips/mipsr6@jalr4.d: New test. * testsuite/gas/mips/mipsr6@jalr4-n32.d: New test. * testsuite/gas/mips/mipsr6@jalr4-n64.d: New test. ld/ * testsuite/ld-mips-elf/jalr4.dd: Adjust for `jalr $0, $25' instructions. * testsuite/ld-mips-elf/jalr4-r6.dd: New test. * testsuite/ld-mips-elf/mips-elf.exp: Run the new test.
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog7
-rw-r--r--ld/testsuite/ld-mips-elf/jalr4-r6.dd25
-rw-r--r--ld/testsuite/ld-mips-elf/jalr4.dd10
-rw-r--r--ld/testsuite/ld-mips-elf/mips-elf.exp11
4 files changed, 51 insertions, 2 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index a4f2406..ceee695 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,10 @@
+2017-02-28 Maciej W. Rozycki <macro@imgtec.com>
+
+ * testsuite/ld-mips-elf/jalr4.dd: Adjust for `jalr $0, $25'
+ instructions.
+ * testsuite/ld-mips-elf/jalr4-r6.dd: New test.
+ * testsuite/ld-mips-elf/mips-elf.exp: Run the new test.
+
2017-02-27 Georg-Johann Lay <gjl@gcc.gnu.org>
PR target/20849
diff --git a/ld/testsuite/ld-mips-elf/jalr4-r6.dd b/ld/testsuite/ld-mips-elf/jalr4-r6.dd
new file mode 100644
index 0000000..f587513
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/jalr4-r6.dd
@@ -0,0 +1,25 @@
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+[0-9a-f]+ <[^>]*> 04110017 bal 0+000060 <bar0>
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 10000015 b 0+000060 <bar0>
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 10000013 b 0+000060 <bar0>
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 0320f809 jalr t9
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 03200009 jr t9
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 03200009 jr t9
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 0320f809 jalr t9
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 03200009 jr t9
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 03200009 jr t9
+[0-9a-f]+ <[^>]*> 00000000 nop
+ \.\.\.
+ \.\.\.
+ \.\.\.
+ \.\.\.
diff --git a/ld/testsuite/ld-mips-elf/jalr4.dd b/ld/testsuite/ld-mips-elf/jalr4.dd
index 8e41756..56ee094 100644
--- a/ld/testsuite/ld-mips-elf/jalr4.dd
+++ b/ld/testsuite/ld-mips-elf/jalr4.dd
@@ -1,16 +1,22 @@
.*: +file format .*mips.*
Disassembly of section \.text:
-[0-9a-f]+ <[^>]*> 0411000f bal 0+000040 <bar0>
+[0-9a-f]+ <[^>]*> 04110017 bal 0+000060 <bar0>
[0-9a-f]+ <[^>]*> 00000000 nop
-[0-9a-f]+ <[^>]*> 1000000d b 0+000040 <bar0>
+[0-9a-f]+ <[^>]*> 10000015 b 0+000060 <bar0>
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 10000013 b 0+000060 <bar0>
[0-9a-f]+ <[^>]*> 00000000 nop
[0-9a-f]+ <[^>]*> 0320f809 jalr t9
[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 03200009 jalr zero,t9
+[0-9a-f]+ <[^>]*> 00000000 nop
[0-9a-f]+ <[^>]*> 03200008 jr t9
[0-9a-f]+ <[^>]*> 00000000 nop
[0-9a-f]+ <[^>]*> 0320f809 jalr t9
[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 03200009 jalr zero,t9
+[0-9a-f]+ <[^>]*> 00000000 nop
[0-9a-f]+ <[^>]*> 03200008 jr t9
[0-9a-f]+ <[^>]*> 00000000 nop
\.\.\.
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp
index dab0e0f..73d5969 100644
--- a/ld/testsuite/ld-mips-elf/mips-elf.exp
+++ b/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -1006,6 +1006,17 @@ foreach { abi } $abis {
"$abi_asflags($abi)" \
[list ../../../gas/testsuite/gas/mips/jalr4.s] \
[list "objdump {-d --prefix-addresses --show-raw-insn} jalr4.dd"] \
+ "jalr4-${abi}"] \
+ [list \
+ "MIPSr6 JALR reloc unaligned/cross-mode link test ($abi)" \
+ "$abi_ldflags($abi) -T jalr3.ld" "" \
+ [string map \
+ [list -32 "-mips32r6 -32" \
+ -n32 "-mips64r6 -n32" \
+ -64 "-mips64r6 -64"] \
+ [regsub -- -march=from-abi $abi_asflags($abi) ""]] \
+ {../../../gas/testsuite/gas/mips/jalr4.s} \
+ {{objdump {-d --prefix-addresses --show-raw-insn} jalr4-r6.dd}} \
"jalr4-${abi}"]]
}