aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog17
-rw-r--r--gas/config/tc-mips.c10
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-addend-n32.d10
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-addend-n64.d30
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-n32.d10
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-n64.d30
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute.d10
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute.s3
-rw-r--r--ld/ChangeLog15
-rw-r--r--ld/testsuite/ld-mips-elf/mips-elf.exp10
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend.d17
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64.d6
-rw-r--r--ld/testsuite/ld-mips-elf/mips16-branch-absolute.d17
16 files changed, 148 insertions, 55 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 2e5015a..13243ce 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,22 @@
2016-07-14 Maciej W. Rozycki <macro@imgtec.com>
+ * config/tc-mips.c (md_apply_fix) <BFD_RELOC_MIPS16_16_PCREL_S1>
+ <BFD_RELOC_MICROMIPS_7_PCREL_S1, BFD_RELOC_MICROMIPS_10_PCREL_S1>
+ <BFD_RELOC_MICROMIPS_16_PCREL_S1>: Keep the ISA bit in the
+ addend calculated.
+ * testsuite/gas/mips/mips16-branch-absolute.s: Set the ISA bit
+ in `bar', export `foo'.
+ * testsuite/gas/mips/mips16-branch-absolute.d: Adjust
+ accordingly.
+ * testsuite/gas/mips/mips16-branch-absolute-n32.d: Likewise.
+ * testsuite/gas/mips/mips16-branch-absolute-n64.d: Likewise.
+ * testsuite/gas/mips/mips16-branch-absolute-addend-n32.d:
+ Likewise.
+ * testsuite/gas/mips/mips16-branch-absolute-addend-n64.d:
+ Likewise.
+
+2016-07-14 Maciej W. Rozycki <macro@imgtec.com>
+
* testsuite/gas/mips/mips16-branch-absolute.d: Update patterns.
* testsuite/gas/mips/branch-absolute.d: New test.
* testsuite/gas/mips/branch-absolute-n32.d: New test.
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index b7997c7..6c0be63 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -15188,15 +15188,7 @@ md_apply_fix (fixS *fixP, valueT *valP, segT seg ATTRIBUTE_UNUSED)
case BFD_RELOC_MICROMIPS_7_PCREL_S1:
case BFD_RELOC_MICROMIPS_10_PCREL_S1:
case BFD_RELOC_MICROMIPS_16_PCREL_S1:
- /* We adjust the offset back to even. */
- if ((*valP & 0x1) != 0)
- --(*valP);
-
- if (! fixP->fx_done)
- break;
-
- /* Should never visit here, because we keep the relocation. */
- abort ();
+ gas_assert (!fixP->fx_done);
break;
case BFD_RELOC_VTABLE_INHERIT:
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n32.d b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n32.d
index 48aca38..d506d49 100644
--- a/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n32.d
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n32.d
@@ -8,14 +8,14 @@
Disassembly of section \.text:
\.\.\.
[0-9a-f]+ <[^>]*> f000 1000 b 00001004 <foo\+0x4>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a8
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> f000 6000 bteqz 00001008 <foo\+0x8>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a8
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> f000 6100 btnez 0000100c <foo\+0xc>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a8
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> f000 2200 beqz v0,00001010 <foo\+0x10>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a8
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> f000 2a00 bnez v0,00001014 <foo\+0x14>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a8
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 6500 nop
\.\.\.
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n64.d b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n64.d
index f5770a9..baa0700 100644
--- a/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n64.d
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n64.d
@@ -8,24 +8,24 @@
Disassembly of section \.text:
\.\.\.
[0-9a-f]+ <[^>]*> f000 1000 b 0000000000001004 <foo\+0x4>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a8
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a8
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a8
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> f000 6000 bteqz 0000000000001008 <foo\+0x8>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a8
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a8
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a8
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> f000 6100 btnez 000000000000100c <foo\+0xc>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a8
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a8
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a8
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> f000 2200 beqz v0,0000000000001010 <foo\+0x10>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a8
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a8
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a8
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> f000 2a00 bnez v0,0000000000001014 <foo\+0x14>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a8
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a8
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a8
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 6500 nop
\.\.\.
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-n32.d b/gas/testsuite/gas/mips/mips16-branch-absolute-n32.d
index 444edeb..fb7860c 100644
--- a/gas/testsuite/gas/mips/mips16-branch-absolute-n32.d
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-n32.d
@@ -8,14 +8,14 @@
Disassembly of section \.text:
\.\.\.
[0-9a-f]+ <[^>]*> f000 1000 b 00001004 <foo\+0x4>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> f000 6000 bteqz 00001008 <foo\+0x8>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> f000 6100 btnez 0000100c <foo\+0xc>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> f000 2200 beqz v0,00001010 <foo\+0x10>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> f000 2a00 bnez v0,00001014 <foo\+0x14>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 6500 nop
\.\.\.
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-n64.d b/gas/testsuite/gas/mips/mips16-branch-absolute-n64.d
index eebd5dd..3aa7d9e 100644
--- a/gas/testsuite/gas/mips/mips16-branch-absolute-n64.d
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-n64.d
@@ -8,24 +8,24 @@
Disassembly of section \.text:
\.\.\.
[0-9a-f]+ <[^>]*> f000 1000 b 0000000000001004 <foo\+0x4>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> f000 6000 bteqz 0000000000001008 <foo\+0x8>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> f000 6100 btnez 000000000000100c <foo\+0xc>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> f000 2200 beqz v0,0000000000001010 <foo\+0x10>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> f000 2a00 bnez v0,0000000000001014 <foo\+0x14>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 6500 nop
\.\.\.
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute.d b/gas/testsuite/gas/mips/mips16-branch-absolute.d
index 35788bf..4d2c9d3 100644
--- a/gas/testsuite/gas/mips/mips16-branch-absolute.d
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute.d
@@ -6,15 +6,15 @@
Disassembly of section \.text:
\.\.\.
-[0-9a-f]+ <[^>]*> f101 1018 b 00002234 <bar\+0x1000>
+[0-9a-f]+ <[^>]*> f101 1018 b 00002234 <bar\+0xfff>
[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*
-[0-9a-f]+ <[^>]*> f101 6018 bteqz 00002238 <bar\+0x1004>
+[0-9a-f]+ <[^>]*> f101 6018 bteqz 00002238 <bar\+0x1003>
[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*
-[0-9a-f]+ <[^>]*> f101 6118 btnez 0000223c <bar\+0x1008>
+[0-9a-f]+ <[^>]*> f101 6118 btnez 0000223c <bar\+0x1007>
[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*
-[0-9a-f]+ <[^>]*> f101 2218 beqz v0,00002240 <bar\+0x100c>
+[0-9a-f]+ <[^>]*> f101 2218 beqz v0,00002240 <bar\+0x100b>
[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*
-[0-9a-f]+ <[^>]*> f101 2a18 bnez v0,00002244 <bar\+0x1010>
+[0-9a-f]+ <[^>]*> f101 2a18 bnez v0,00002244 <bar\+0x100f>
[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*
[0-9a-f]+ <[^>]*> 6500 nop
\.\.\.
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute.s b/gas/testsuite/gas/mips/mips16-branch-absolute.s
index 948b0b6..23203a4 100644
--- a/gas/testsuite/gas/mips/mips16-branch-absolute.s
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute.s
@@ -2,6 +2,7 @@
.space 0x1000
+ .globl foo
.ent foo
.set mips16
foo:
@@ -18,4 +19,4 @@ foo:
.align 4, 0
.space 16
- .set bar, 0x1234
+ .set bar, 0x1235
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 640b36f..1f8a499 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,20 @@
2016-07-14 Maciej W. Rozycki <macro@imgtec.com>
+ * testsuite/ld-mips-elf/mips16-branch-absolute.d: New test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-n32.d: New test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-n64.d: New test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-addend.d: New
+ test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32.d: New
+ test.
+ * testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64.d: New
+ test.
+ * testsuite/ld-mips-elf/mips-elf.exp: Run the new tests, except
+ from `mips16-branch-absolute' and
+ `mips16-branch-absolute-addend', referred indirectly only.
+
+2016-07-14 Maciej W. Rozycki <macro@imgtec.com>
+
* testsuite/ld-mips-elf/branch-absolute.d: New test.
* testsuite/ld-mips-elf/branch-absolute-n32.d: New test.
* testsuite/ld-mips-elf/branch-absolute-n64.d: New test.
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp
index 21867f1..cca6695 100644
--- a/ld/testsuite/ld-mips-elf/mips-elf.exp
+++ b/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -157,6 +157,16 @@ run_dump_test "mips16-branch-2" [list [list ld $abi_ldflags(o32)]]
run_dump_test "mips16-branch-3" [list [list ld $abi_ldflags(o32)]]
run_dump_test "mips16-branch-addend-2" [list [list ld $abi_ldflags(o32)]]
run_dump_test "mips16-branch-addend-3" [list [list ld $abi_ldflags(o32)]]
+if $has_newabi {
+ run_dump_test "mips16-branch-absolute-n32" \
+ [list [list ld $abi_ldflags(n32)]]
+ run_dump_test "mips16-branch-absolute-addend-n32" \
+ [list [list ld $abi_ldflags(n32)]]
+ run_dump_test "mips16-branch-absolute-n64" \
+ [list [list ld $abi_ldflags(n64)]]
+ run_dump_test "mips16-branch-absolute-addend-n64" \
+ [list [list ld $abi_ldflags(n64)]]
+}
run_dump_test "micromips-branch-absolute" [list [list ld $abi_ldflags(o32)]]
if $has_newabi {
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32.d
new file mode 100644
index 0000000..69c37c1
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression with addend (n32)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-addend.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0x12340000 -e foo
+#dump: mips16-branch-absolute-addend.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64.d
new file mode 100644
index 0000000..d6047b9
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression with addend (n64)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-addend.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0x12340000 -e foo
+#dump: mips16-branch-absolute-addend.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend.d
new file mode 100644
index 0000000..2427b9a
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend.d
@@ -0,0 +1,17 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression with addend
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-addend.s
+#as: -EB -32
+#ld: -EB -Ttext 0x12340000 -e foo
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f445 1014 b 0*123468ac <bar\+0x1233>
+[0-9a-f]+ <[^>]*> f445 6012 bteqz 0*123468ac <bar\+0x1233>
+[0-9a-f]+ <[^>]*> f445 6110 btnez 0*123468ac <bar\+0x1233>
+[0-9a-f]+ <[^>]*> f445 220e beqz v0,0*123468ac <bar\+0x1233>
+[0-9a-f]+ <[^>]*> f445 2a0c bnez v0,0*123468ac <bar\+0x1233>
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32.d
new file mode 100644
index 0000000..7bff198
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression (n32)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64.d
new file mode 100644
index 0000000..6edb58d
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64.d
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression (n64)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
diff --git a/ld/testsuite/ld-mips-elf/mips16-branch-absolute.d b/ld/testsuite/ld-mips-elf/mips16-branch-absolute.d
new file mode 100644
index 0000000..eac08fa
--- /dev/null
+++ b/ld/testsuite/ld-mips-elf/mips16-branch-absolute.d
@@ -0,0 +1,17 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute.s
+#as: -EB -32
+#ld: -EB -Ttext 0 -e foo
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f100 1018 b 0+001234 <foo\+0x234>
+[0-9a-f]+ <[^>]*> f100 6016 bteqz 0+001234 <foo\+0x234>
+[0-9a-f]+ <[^>]*> f100 6114 btnez 0+001234 <foo\+0x234>
+[0-9a-f]+ <[^>]*> f100 2212 beqz v0,0+001234 <foo\+0x234>
+[0-9a-f]+ <[^>]*> f100 2a10 bnez v0,0+001234 <foo\+0x234>
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.