MIPS/LD/testsuite: Fix unaligned JALX failures with OpenBSD targets
authorMaciej W. Rozycki <macro@orcam.me.uk>
Fri, 28 Jul 2023 05:00:36 +0000 (06:00 +0100)
committerMaciej W. Rozycki <macro@orcam.me.uk>
Fri, 28 Jul 2023 05:00:36 +0000 (06:00 +0100)
There are only n64 linker emulations included with `mips64*-*-openbsd*'
targets, however the unaligned JALX tests insist on running across all
targets and force the n32 ABI, causing link errors with the targets
concerned, e.g.:

./ld-new: tmpdir/unaligned-jalx-0.o: ABI is incompatible with that of the selected emulation
./ld-new: failed to merge target specific data of file tmpdir/unaligned-jalx-0.o
./ld-new: tmpdir/unaligned-insn.o: ABI is incompatible with that of the selected emulation
./ld-new: failed to merge target specific data of file tmpdir/unaligned-insn.o

Convert the tests then to use the per-ABI framework and run them for the
o32 and n32 ABIs, removing these regressions:

mips64-openbsd  -FAIL: MIPS JALX to unaligned symbol 0
mips64-openbsd  -FAIL: MIPS JALX to unaligned symbol 1
mips64-openbsd  -FAIL: MIPS JALX to unaligned symbol 2
mips64-openbsd  -FAIL: MIPS JALX to unaligned symbol 3
mips64-openbsd  -FAIL: MIPS16 JALX to unaligned symbol 0
mips64-openbsd  -FAIL: MIPS16 JALX to unaligned symbol 1
mips64-openbsd  -FAIL: microMIPS JALX to unaligned symbol 0
mips64-openbsd  -FAIL: microMIPS JALX to unaligned symbol 1
mips64el-openbsd  -FAIL: MIPS JALX to unaligned symbol 0
mips64el-openbsd  -FAIL: MIPS JALX to unaligned symbol 1
mips64el-openbsd  -FAIL: MIPS JALX to unaligned symbol 2
mips64el-openbsd  -FAIL: MIPS JALX to unaligned symbol 3
mips64el-openbsd  -FAIL: MIPS16 JALX to unaligned symbol 0
mips64el-openbsd  -FAIL: MIPS16 JALX to unaligned symbol 1
mips64el-openbsd  -FAIL: microMIPS JALX to unaligned symbol 0
mips64el-openbsd  -FAIL: microMIPS JALX to unaligned symbol 1

Similar tests for the n64 ABI can be added separately, using suitable
dump patterns.

ld/
* testsuite/ld-mips-elf/unaligned-jalx-0.d: Remove `-32' from
the `as' tag.
* testsuite/ld-mips-elf/unaligned-jalx-1.d: Likewise.
* testsuite/ld-mips-elf/unaligned-jalx-2.d: Likewise.
* testsuite/ld-mips-elf/unaligned-jalx-3.d: Likewise.
* testsuite/ld-mips-elf/unaligned-jalx-mips16-0.d: Likewise.
* testsuite/ld-mips-elf/unaligned-jalx-mips16-1.d: Likewise.
* testsuite/ld-mips-elf/unaligned-jalx-micromips-0.d: Likewise.
* testsuite/ld-mips-elf/unaligned-jalx-micromips-1.d: Likewise.
* testsuite/ld-mips-elf/mips-elf.exp: Run unaligned JALX tests
with `run_dump_test_o32' and `run_dump_test_n32' rather than
`run_dump_test'.

ld/testsuite/ld-mips-elf/mips-elf.exp
ld/testsuite/ld-mips-elf/unaligned-jalx-0.d
ld/testsuite/ld-mips-elf/unaligned-jalx-1.d
ld/testsuite/ld-mips-elf/unaligned-jalx-2.d
ld/testsuite/ld-mips-elf/unaligned-jalx-3.d
ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-0.d
ld/testsuite/ld-mips-elf/unaligned-jalx-micromips-1.d
ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-0.d
ld/testsuite/ld-mips-elf/unaligned-jalx-mips16-1.d

index 44f9dc95c4473722551e5e39a9f65ac3c42b843d..903f7a0a3832ef850e57b3ab5d0b5c7f20a541b3 100644 (file)
@@ -412,14 +412,22 @@ run_dump_test_n64 "bal-jalx-pic-micromips-n64"
 run_dump_test_n64 "bal-jalx-pic-ignore-n64"
 run_dump_test_n64 "bal-jalx-pic-ignore-micromips-n64"
 
-run_dump_test "unaligned-jalx-0" [list [list ld $abi_ldflags(o32)]]
-run_dump_test "unaligned-jalx-1" [list [list ld $abi_ldflags(o32)]]
-run_dump_test "unaligned-jalx-2" [list [list ld $abi_ldflags(o32)]]
-run_dump_test "unaligned-jalx-3" [list [list ld $abi_ldflags(o32)]]
-run_dump_test "unaligned-jalx-mips16-0" [list [list ld $abi_ldflags(o32)]]
-run_dump_test "unaligned-jalx-mips16-1" [list [list ld $abi_ldflags(o32)]]
-run_dump_test "unaligned-jalx-micromips-0" [list [list ld $abi_ldflags(o32)]]
-run_dump_test "unaligned-jalx-micromips-1" [list [list ld $abi_ldflags(o32)]]
+run_dump_test_o32 "unaligned-jalx-0"
+run_dump_test_n32 "unaligned-jalx-0" [list [list name (n32)]]
+run_dump_test_o32 "unaligned-jalx-1"
+run_dump_test_n32 "unaligned-jalx-1" [list [list name (n32)]]
+run_dump_test_o32 "unaligned-jalx-2"
+run_dump_test_n32 "unaligned-jalx-2" [list [list name (n32)]]
+run_dump_test_o32 "unaligned-jalx-3"
+run_dump_test_n32 "unaligned-jalx-3" [list [list name (n32)]]
+run_dump_test_o32 "unaligned-jalx-mips16-0"
+run_dump_test_n32 "unaligned-jalx-mips16-0" [list [list name (n32)]]
+run_dump_test_o32 "unaligned-jalx-mips16-1"
+run_dump_test_n32 "unaligned-jalx-mips16-1" [list [list name (n32)]]
+run_dump_test_o32 "unaligned-jalx-micromips-0"
+run_dump_test_n32 "unaligned-jalx-micromips-0" [list [list name (n32)]]
+run_dump_test_o32 "unaligned-jalx-micromips-1"
+run_dump_test_n32 "unaligned-jalx-micromips-1" [list [list name (n32)]]
 
 run_dump_test_n32 "unaligned-jalx-addend-0"
 run_dump_test_n32 "unaligned-jalx-addend-1"
index a37e5a914f72fbdc501541e207c48540312385d9..ad08694c95d1f6dca0013052e568e6e602b57a06 100644 (file)
@@ -1,7 +1,7 @@
 #name: MIPS JALX to unaligned symbol 0
 #source: unaligned-jalx-0.s
 #source: unaligned-insn.s -mips16
-#as: -EB -32
+#as: -EB
 #ld: -EB -Ttext 0x1c000000 -e 0x1c000000
 #objdump: -dr --prefix-addresses --show-raw-insn
 
index a6cc2ed01f275fa7c6a8ea5da8d7dedcb0c4e058..260124a0c0665a85a558587b9a1cf5bac1064f07 100644 (file)
@@ -1,7 +1,7 @@
 #name: MIPS JALX to unaligned symbol 1
 #source: unaligned-jalx-1.s
 #source: unaligned-insn.s -mips16
-#as: -EB -32
+#as: -EB
 #ld: -EB -Ttext 0x1c000000 -e 0x1c000000
 #error: \A[^\n]*: in function `foo':\n
 #error:   \(\.text\+0x[0-9a-f]+\): cannot convert a jump to JALX for a non-word-aligned address\Z
index 718c53d6c9fefaa216ad66df4697dda0e3f36143..f4552c34307d5326e1a3fe83da36125548d9945f 100644 (file)
@@ -1,7 +1,7 @@
 #name: MIPS JALX to unaligned symbol 2
 #source: unaligned-jalx-2.s
 #source: unaligned-insn.s -mips16
-#as: -EB -32
+#as: -EB
 #ld: -EB -Ttext 0x1c000000 -e 0x1c000000
 #objdump: -dr --prefix-addresses --show-raw-insn
 #dump: unaligned-jalx-0.d
index 36327f8c4526dfff68c765bb20d0cdafb72a0ea1..7cdcc8e6228789ad18174b7b8c9ad96b9d0763c5 100644 (file)
@@ -1,7 +1,7 @@
 #name: MIPS JALX to unaligned symbol 3
 #source: unaligned-jalx-3.s
 #source: unaligned-insn.s -mips16
-#as: -EB -32
+#as: -EB
 #ld: -EB -Ttext 0x1c000000 -e 0x1c000000
 #error: \A[^\n]*: in function `foo':\n
 #error:   \(\.text\+0x0\): cannot convert a branch to JALX for a non-word-aligned address\Z
index 2622103bd7ea78bca0c02af69868fa4f0714fd01..d76b53a5a21ac29d0deef957a7d90d25c032bb9c 100644 (file)
@@ -1,7 +1,7 @@
 #name: microMIPS JALX to unaligned symbol 0
 #source: unaligned-jalx-0.s -mmicromips
 #source: unaligned-insn.s
-#as: -EB -32
+#as: -EB
 #ld: -EB -Ttext 0x1c000000 -e 0x1c000000
 #objdump: -dr --prefix-addresses --show-raw-insn
 
index c38b2d5266b44e394b117693416e280b9a0c4bda..f40a6713dd1735ae24a2681b7daa84a02eb2791f 100644 (file)
@@ -1,7 +1,7 @@
 #name: microMIPS JALX to unaligned symbol 1
 #source: unaligned-jalx-1.s -mmicromips
 #source: unaligned-insn.s
-#as: -EB -32
+#as: -EB
 #ld: -EB -Ttext 0x1c000000 -e 0x1c000000
 #error: \A[^\n]*: in function `foo':\n
 #error:   \(\.text\+0x[0-9a-f]+\): cannot convert a jump to JALX for a non-word-aligned address\Z
index 176680d64c736d61714358bae5f592428aedfa86..c560fe4c18b5ef6b45a94db0152435060117e09b 100644 (file)
@@ -1,7 +1,7 @@
 #name: MIPS16 JALX to unaligned symbol 0
 #source: unaligned-jalx-0.s -mips16
 #source: unaligned-insn.s
-#as: -EB -32
+#as: -EB
 #ld: -EB -Ttext 0x1c000000 -e 0x1c000000
 #objdump: -dr --prefix-addresses --show-raw-insn
 
index aacf08925c3b3d5e801aa6f368cb10449f139774..b810f01de29ba3a39ba87ab81584e7bc929042b2 100644 (file)
@@ -1,7 +1,7 @@
 #name: MIPS16 JALX to unaligned symbol 1
 #source: unaligned-jalx-1.s -mips16
 #source: unaligned-insn.s
-#as: -EB -32
+#as: -EB
 #ld: -EB -Ttext 0x1c000000 -e 0x1c000000
 #error: \A[^\n]*: in function `foo':\n
 #error:   \(\.text\+0x[0-9a-f]+\): cannot convert a jump to JALX for a non-word-aligned address\Z