aboutsummaryrefslogtreecommitdiff
path: root/gas/testsuite
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@imgtec.com>2016-05-24 13:54:31 +0100
committerMaciej W. Rozycki <macro@imgtec.com>2016-05-24 14:11:50 +0100
commit44d3da2338157ad7acfd6facbcfb38ed6ec94fa1 (patch)
tree58d2bfee6de323bf7aa36f75d3906119d18ade52 /gas/testsuite
parent4512dafa508c4b148996f2d67222a82dd018cdd3 (diff)
downloadgdb-44d3da2338157ad7acfd6facbcfb38ed6ec94fa1.zip
gdb-44d3da2338157ad7acfd6facbcfb38ed6ec94fa1.tar.gz
gdb-44d3da2338157ad7acfd6facbcfb38ed6ec94fa1.tar.bz2
MIPS/GAS: Treat local jump relocs the same no matter if REL or RELA
Do not convert jump relocs against local MIPS16 or microMIPS symbols to refer to a section symbol instead even on RELA targets, as it makes it impossible for the linker to make a JAL to JALX conversion based on ISA symbol annotation, breaking regular and compressed MIPS interlinking. gas/ * config/tc-mips.c (mips_fix_adjustable): Also return 0 for jump relocations against MIPS16 or microMIPS symbols on RELA targets. * testsuite/gas/mips/jalx-local.d: New test. * testsuite/gas/mips/jalx-local-n32.d: New test. * testsuite/gas/mips/jalx-local-n64.d: New test. * testsuite/gas/mips/jalx-local.s: New test source. * testsuite/gas/mips/mips.exp: Run the new tests. ld/ * testsuite/ld-mips-elf/jalx-local.d: New test. * testsuite/ld-mips-elf/jalx-local-n32.d: New test. * testsuite/ld-mips-elf/jalx-local-n64.d: New test. * testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
Diffstat (limited to 'gas/testsuite')
-rw-r--r--gas/testsuite/gas/mips/jalx-local-n32.d29
-rw-r--r--gas/testsuite/gas/mips/jalx-local-n64.d37
-rw-r--r--gas/testsuite/gas/mips/jalx-local.d28
-rw-r--r--gas/testsuite/gas/mips/jalx-local.s33
-rw-r--r--gas/testsuite/gas/mips/mips.exp3
5 files changed, 130 insertions, 0 deletions
diff --git a/gas/testsuite/gas/mips/jalx-local-n32.d b/gas/testsuite/gas/mips/jalx-local-n32.d
new file mode 100644
index 0000000..5db4ddb
--- /dev/null
+++ b/gas/testsuite/gas/mips/jalx-local-n32.d
@@ -0,0 +1,29 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS JALX local symbol relocation (n32)
+#as: -n32 -march=from-abi
+#source: jalx-local.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> f400 0000 jal 00000000 <foo-0x1000>
+[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text\+0x1020
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> f000 0000 jalx 00000000 <foo-0x1000>
+[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text\+0x1020
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> 001f 0f3c jr ra
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> 0000 0000 nop
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+[0-9a-f]+ <[^>]*> 0c000000 jal 00000000 <foo-0x1000>
+[ ]*[0-9a-f]+: R_MIPS_26 foo
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+[0-9a-f]+ <[^>]*> 74000000 jalx 00000000 <foo-0x1000>
+[ ]*[0-9a-f]+: R_MIPS_26 foo
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+[0-9a-f]+ <[^>]*> 03e00009 jalr zero,ra
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/jalx-local-n64.d b/gas/testsuite/gas/mips/jalx-local-n64.d
new file mode 100644
index 0000000..6e592f8
--- /dev/null
+++ b/gas/testsuite/gas/mips/jalx-local-n64.d
@@ -0,0 +1,37 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS JALX local symbol relocation (n64)
+#as: -64 -march=from-abi
+#source: jalx-local.s
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> f400 0000 jal 0000000000000000 <foo-0x1000>
+[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text\+0x1020
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1020
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1020
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> f000 0000 jalx 0000000000000000 <foo-0x1000>
+[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text\+0x1020
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1020
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1020
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> 001f 0f3c jr ra
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> 0000 0000 nop
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+[0-9a-f]+ <[^>]*> 0c000000 jal 0000000000000000 <foo-0x1000>
+[ ]*[0-9a-f]+: R_MIPS_26 foo
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+[0-9a-f]+ <[^>]*> 74000000 jalx 0000000000000000 <foo-0x1000>
+[ ]*[0-9a-f]+: R_MIPS_26 foo
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+[0-9a-f]+ <[^>]*> 03e00009 jalr zero,ra
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/jalx-local.d b/gas/testsuite/gas/mips/jalx-local.d
new file mode 100644
index 0000000..e380160
--- /dev/null
+++ b/gas/testsuite/gas/mips/jalx-local.d
@@ -0,0 +1,28 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS JALX local symbol relocation
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> f400 0810 jal 00001020 <bar>
+[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> f000 0408 jalx 00001020 <bar>
+[ ]*[0-9a-f]+: R_MICROMIPS_26_S1 \.text
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> 001f 0f3c jr ra
+[0-9a-f]+ <[^>]*> 0000 02d0 not zero,zero
+[0-9a-f]+ <[^>]*> 0000 0000 nop
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+[0-9a-f]+ <[^>]*> 0c000000 jal 00000000 <foo-0x1000>
+[ ]*[0-9a-f]+: R_MIPS_26 foo
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+[0-9a-f]+ <[^>]*> 74000000 jalx 00000000 <foo-0x1000>
+[ ]*[0-9a-f]+: R_MIPS_26 foo
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+[0-9a-f]+ <[^>]*> 03e00009 jalr zero,ra
+[0-9a-f]+ <[^>]*> 00000027 nor zero,zero,zero
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/jalx-local.s b/gas/testsuite/gas/mips/jalx-local.s
new file mode 100644
index 0000000..fc345f6
--- /dev/null
+++ b/gas/testsuite/gas/mips/jalx-local.s
@@ -0,0 +1,33 @@
+ .text
+ .set noreorder
+ .space 0x1000
+
+ .align 4
+ .set micromips
+ .ent foo
+foo:
+ nor $0, $0
+ jal bar
+ nor $0, $0
+ jalx bar
+ nor $0, $0
+ jalr $0, $ra
+ nor $0, $0
+ .end foo
+
+ .align 4
+ .set nomicromips
+ .ent bar
+bar:
+ nor $0, $0
+ jal foo
+ nor $0, $0
+ jalx foo
+ nor $0, $0
+ jalr $0, $ra
+ nor $0, $0
+ .end bar
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index 1b1ac02..f5ed674 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -796,11 +796,14 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "mips-jalx-2"
run_dump_test "jalx-imm"
run_dump_test "jalx-addend"
+ run_dump_test "jalx-local"
if $has_newabi {
run_dump_test "jalx-imm-n32"
run_dump_test "jalx-addend-n32"
+ run_dump_test "jalx-local-n32"
run_dump_test "jalx-imm-n64"
run_dump_test "jalx-addend-n64"
+ run_dump_test "jalx-local-n64"
}
# Check MIPS16 HI16/LO16 relocations
run_dump_test "mips16-hilo"