This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
[committed] MIPS16/GAS: Fix absolute references with PC-relative synthetic instructions
- From: "Maciej W. Rozycki" <macro at imgtec dot com>
- To: <binutils at sourceware dot org>
- Date: Wed, 3 May 2017 00:17:22 +0100
- Subject: [committed] MIPS16/GAS: Fix absolute references with PC-relative synthetic instructions
- Authentication-results: sourceware.org; auth=none
Complement commit 88a7ef168927 ("MIPS16/GAS: Restore unsupported
relocation diagnostics") and also propagate constant expressions, either
already reduced from absolute symbol references or created from literals
in the first place, used as a PC-relative operand with the MIPS16 LA,
LW, DLA and LD synthetic instructions to relaxation, matching the way
forward absolute symbol references have been handled as from the commit
referred and letting relaxation produce any necessary relocations, if
possible, for the absolute value requested to be reproduced at the run
time.
Call `symbol_append' for any expression symbol created for the purpose
of MIPS16 relaxation as with constant expressions now propagated from
earlier on such symbols may make it through and have R_MIPS16_PC16_S1
relocations emitted against, and therefore need to appear in the symbol
table produced.
gas/
* config/tc-mips.c (append_insn): Call `symbol_append' for any
expression symbol created for MIPS16 relaxation.
(match_mips16_insn): Don't encode a constant value as an
immediate with a PC-relative operand.
* testsuite/gas/mips/mips16-pcrel-absolute-1.d: New test.
* testsuite/gas/mips/mips16-branch-absolute-1.d: New test.
* testsuite/gas/mips/mips16-branch-absolute-2.d: New test.
* testsuite/gas/mips/mips16-branch-absolute-addend-1.d: New
test.
* testsuite/gas/mips/mips16-branch-absolute-n32-1.d: New test.
* testsuite/gas/mips/mips16-branch-absolute-n32-2.d: New test.
* testsuite/gas/mips/mips16-branch-absolute-addend-n32-1.d: New
test.
* testsuite/gas/mips/mips16-branch-absolute-n64-1.d: New test.
* testsuite/gas/mips/mips16-branch-absolute-n64-2.d: New test.
* testsuite/gas/mips/mips16-branch-absolute-addend-n64-1.d: New
test.
* testsuite/gas/mips/mips16-pcrel-absolute-1.l: New stderr
output.
* testsuite/gas/mips/mips16-pcrel-absolute-1.s: New test source.
* testsuite/gas/mips/mips16-branch-absolute-1.s: New test
source.
* testsuite/gas/mips/mips16-branch-absolute-2.s: New test
source.
* testsuite/gas/mips/mips16-branch-absolute-addend-1.s: New test
source.
* testsuite/gas/mips/mips.exp: Run the new tests.
ld/
* testsuite/ld-mips-elf/mips16-branch-absolute-1.d: New test.
* testsuite/ld-mips-elf/mips16-branch-absolute-2.d: New test.
* testsuite/ld-mips-elf/mips16-branch-absolute-addend-1.d: New
test.
* testsuite/ld-mips-elf/mips16-branch-absolute-n32-1.d: New
test.
* testsuite/ld-mips-elf/mips16-branch-absolute-n32-2.d: New
test.
* testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32-1.d:
New test.
* testsuite/ld-mips-elf/mips16-branch-absolute-n64-1.d: New
test.
* testsuite/ld-mips-elf/mips16-branch-absolute-n64-2.d: New
test.
* testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64-1.d:
New test.
* testsuite/ld-mips-elf/mips-elf.exp: Run the new tests.
---
We still have an inconsistency here between literal or regular absolute
symbol references and forward absolute symbol references. Both literals
and regular absolute symbol references are converted to constant
expressions earlier on and therefore a new auxiliary absolute symbol has
to be produced if linker relocation is required. OTOH forward symbol
references retain the original symbol, which is then used for relocation.
Consequently the symbol table and relocations produced are different
depending on where in the source assembly code the relevant absolute
symbol definitions and references are located with respect to each other.
This does not affect run-time evaluation, covered with the linker tests
added here, and threfore I consider it a minor issue.
Retaining original symbols with regular references would require a
modification to `my_getExpression' such that no conversion to a constant
is made at this stage, perhaps via a new mode for `expr', and yet literals
would still require a new auxiliary absolute symbol each. It may not be
worth the effort for such a border case.
I may yet look into the issue of all symbols made with `make_expr_symbol'
getting the same name of FAKE_LABEL_NAME assigned, which causes a minor
inconvenience in examining relocations with tools like `objdump' that show
symbol names rather than indices in dumps (use `readelf' to get at indices
too). This is however no different to symbols created with `.' location
pointer references, which can also make it through to relocations, so this
is not a new problem and therefore I don't think it requires an immediate
action.
Change committed now, with the usual regression testing completed.
Maciej
binutils-mips16-gas-pcrel-absolute.diff
Index: binutils/gas/config/tc-mips.c
===================================================================
--- binutils.orig/gas/config/tc-mips.c 2017-05-01 22:58:45.440584513 +0100
+++ binutils/gas/config/tc-mips.c 2017-05-01 23:37:40.448983994 +0100
@@ -7419,6 +7419,7 @@ append_insn (struct mips_cl_insn *ip, ex
else
{
symbol = make_expr_symbol (address_expr);
+ symbol_append (symbol, symbol_lastP, &symbol_rootP, &symbol_lastP);
offset = 0;
}
add_relaxed_insn (ip, 4, 0,
@@ -8087,6 +8088,7 @@ match_mips16_insn (struct mips_cl_insn *
const char *args;
const struct mips_operand *operand;
const struct mips_operand *ext_operand;
+ bfd_boolean pcrel = FALSE;
int required_insn_length;
struct mips_arg_info arg;
int relax_char;
@@ -8148,6 +8150,7 @@ match_mips16_insn (struct mips_cl_insn *
}
else if (relax_char
&& offset_expr.X_op == O_constant
+ && !pcrel
&& calculate_reloc (*offset_reloc,
offset_expr.X_add_number,
&value))
@@ -8216,7 +8219,9 @@ match_mips16_insn (struct mips_cl_insn *
if (!operand)
abort ();
- if (operand->type != OP_PCREL)
+ if (operand->type == OP_PCREL)
+ pcrel = TRUE;
+ else
{
ext_operand = decode_mips16_operand (c, TRUE);
if (operand != ext_operand)
Index: binutils/gas/testsuite/gas/mips/mips.exp
===================================================================
--- binutils.orig/gas/testsuite/gas/mips/mips.exp 2017-05-01 22:58:44.981273484 +0100
+++ binutils/gas/testsuite/gas/mips/mips.exp 2017-05-01 23:37:50.445631657 +0100
@@ -1544,6 +1544,7 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "mips16-pcrel-addend-2"
run_dump_test "mips16-pcrel-addend-3"
run_dump_test "mips16-pcrel-absolute"
+ run_dump_test "mips16-pcrel-absolute-1"
run_dump_test "mips16-branch-reloc-0"
run_dump_test "mips16-branch-reloc-1"
run_dump_test "mips16-branch-reloc-2"
@@ -1555,12 +1556,21 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "mips16-branch-addend-4"
run_dump_test "mips16-branch-addend-5"
run_dump_test "mips16-branch-absolute"
+ run_dump_test "mips16-branch-absolute-1"
+ run_dump_test "mips16-branch-absolute-2"
run_dump_test "mips16-branch-absolute-addend"
+ run_dump_test "mips16-branch-absolute-addend-1"
if $has_newabi {
run_dump_test "mips16-branch-absolute-n32"
+ run_dump_test "mips16-branch-absolute-n32-1"
+ run_dump_test "mips16-branch-absolute-n32-2"
run_dump_test "mips16-branch-absolute-addend-n32"
+ run_dump_test "mips16-branch-absolute-addend-n32-1"
run_dump_test "mips16-branch-absolute-n64"
+ run_dump_test "mips16-branch-absolute-n64-1"
+ run_dump_test "mips16-branch-absolute-n64-2"
run_dump_test "mips16-branch-absolute-addend-n64"
+ run_dump_test "mips16-branch-absolute-addend-n64-1"
}
run_dump_test "mips16-absolute-reloc-0"
run_dump_test "mips16-absolute-reloc-1"
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-1.d 2017-05-01 23:37:50.457739514 +0100
@@ -0,0 +1,20 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 1
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f7ff 101e b 00001000 <foo>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 L0\001
+[0-9a-f]+ <[^>]*> f7ff 601e bteqz 00001004 <foo\+0x4>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 L0\001
+[0-9a-f]+ <[^>]*> f7ff 611e btnez 00001008 <foo\+0x8>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 L0\001
+[0-9a-f]+ <[^>]*> f7ff 221e beqz v0,0000100c <foo\+0xc>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 L0\001
+[0-9a-f]+ <[^>]*> f7ff 2a1e bnez v0,00001010 <foo\+0x10>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 L0\001
+[0-9a-f]+ <[^>]*> 6500 nop
+ \.\.\.
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-1.s
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-1.s 2017-05-01 23:37:50.483040875 +0100
@@ -0,0 +1,22 @@
+ .text
+
+ .space 0x1000
+
+ .set bar, 0x1235
+
+ .globl foo
+ .ent foo
+ .set mips16
+foo:
+ b bar
+ bteqz bar
+ btnez bar
+ beqz $2, bar
+ bnez $2, bar
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-2.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-2.d 2017-05-01 23:37:50.500205059 +0100
@@ -0,0 +1,4 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 2
+#as: -32
+#dump: mips16-branch-absolute-1.d
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-2.s
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-2.s 2017-05-01 23:37:50.511280627 +0100
@@ -0,0 +1,20 @@
+ .text
+
+ .space 0x1000
+
+ .globl foo
+ .ent foo
+ .set mips16
+foo:
+ b 0x1235
+ bteqz 0x1235
+ btnez 0x1235
+ beqz $2, 0x1235
+ bnez $2, 0x1235
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.d 2017-05-01 23:37:50.535444868 +0100
@@ -0,0 +1,4 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression with addend 1
+#as: -32
+#dump: mips16-branch-absolute-1.d
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s 2017-05-01 23:37:50.555584595 +0100
@@ -0,0 +1,22 @@
+ .text
+
+ .space 0x1000
+
+ .set bar, 0x12345679
+
+ .globl foo
+ .ent foo
+ .set mips16
+foo:
+ b bar + 0x1234
+ bteqz bar + 0x1234
+ btnez bar + 0x1234
+ beqz $2, bar + 0x1234
+ bnez $2, bar + 0x1234
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n32-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n32-1.d 2017-05-01 23:37:50.582830051 +0100
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression with addend 1 (n32)
+#as: -n32 -march=from-abi
+#source: mips16-branch-absolute-addend-1.s
+#dump: mips16-branch-absolute-addend-n32.d
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n64-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-addend-n64-1.d 2017-05-01 23:37:50.606973541 +0100
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression with addend 1 (n64)
+#as: -64 -march=from-abi
+#source: mips16-branch-absolute-addend-1.s
+#dump: mips16-branch-absolute-addend-n64.d
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-n32-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-n32-1.d 2017-05-01 23:37:50.638326851 +0100
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 1 (n32)
+#as: -n32 -march=from-abi
+#source: mips16-branch-absolute-1.s
+#dump: mips16-branch-absolute-n32.d
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-n32-2.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-n32-2.d 2017-05-01 23:37:50.662506098 +0100
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 2 (n32)
+#as: -n32 -march=from-abi
+#source: mips16-branch-absolute-2.s
+#dump: mips16-branch-absolute-n32.d
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-n64-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-n64-1.d 2017-05-01 23:37:50.681715748 +0100
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 1 (n64)
+#as: -64 -march=from-abi
+#source: mips16-branch-absolute-1.s
+#dump: mips16-branch-absolute-n64.d
Index: binutils/gas/testsuite/gas/mips/mips16-branch-absolute-n64-2.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-branch-absolute-n64-2.d 2017-05-01 23:37:50.702929027 +0100
@@ -0,0 +1,5 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression 2 (n64)
+#as: -64 -march=from-abi
+#source: mips16-branch-absolute-2.s
+#dump: mips16-branch-absolute-n64.d
Index: binutils/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.d 2017-05-01 23:37:50.741100471 +0100
@@ -0,0 +1,3 @@
+#name: MIPS16 PC-relative reference to absolute expression 1
+#as: -32
+#error-output: mips16-pcrel-absolute-1.l
Index: binutils/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.l
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.l 2017-05-01 23:37:50.759282221 +0100
@@ -0,0 +1,3 @@
+.*: Assembler messages:
+.*:10: Error: unsupported relocation
+.*:11: Error: unsupported relocation
Index: binutils/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.s
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/gas/testsuite/gas/mips/mips16-pcrel-absolute-1.s 2017-05-01 23:37:50.984178297 +0100
@@ -0,0 +1,18 @@
+ .text
+
+ .space 0x1000
+
+ .set bar, 0x1234
+
+ .ent foo
+ .set mips16
+foo:
+ la $2, bar
+ lw $2, bar
+ nop
+ .set nomips16
+ .end foo
+
+# Force some (non-delay-slot) zero bytes, to make 'objdump' print ...
+ .align 4, 0
+ .space 16
Index: binutils/ld/testsuite/ld-mips-elf/mips-elf.exp
===================================================================
--- binutils.orig/ld/testsuite/ld-mips-elf/mips-elf.exp 2017-05-01 22:58:45.128647391 +0100
+++ binutils/ld/testsuite/ld-mips-elf/mips-elf.exp 2017-05-01 23:37:51.405673041 +0100
@@ -159,17 +159,33 @@ run_dump_test "mips16-branch-3" [list [l
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)]]
run_dump_test "mips16-branch-absolute" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-absolute-1" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-absolute-2" [list [list ld $abi_ldflags(o32)]]
run_dump_test "mips16-branch-absolute-addend" \
[list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-absolute-addend-1" \
+ [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-n32-1" \
+ [list [list ld $abi_ldflags(n32)]]
+ run_dump_test "mips16-branch-absolute-n32-2" \
+ [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-addend-n32-1" \
+ [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-n64-1" \
+ [list [list ld $abi_ldflags(n64)]]
+ run_dump_test "mips16-branch-absolute-n64-2" \
+ [list [list ld $abi_ldflags(n64)]]
run_dump_test "mips16-branch-absolute-addend-n64" \
[list [list ld $abi_ldflags(n64)]]
+ run_dump_test "mips16-branch-absolute-addend-n64-1" \
+ [list [list ld $abi_ldflags(n64)]]
}
run_dump_test "micromips-branch-absolute" [list [list ld $abi_ldflags(o32)]]
Index: binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-1.d 2017-05-01 23:37:51.428103195 +0100
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 1
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-1.s
+#as: -EB -32
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
Index: binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-2.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-2.d 2017-05-01 23:37:51.603374968 +0100
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 2
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-2.s
+#as: -EB -32
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
Index: binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-1.d 2017-05-01 23:37:51.616485296 +0100
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression with addend 1
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s
+#as: -EB -32
+#ld: -EB -Ttext 0x12340000 -e foo
+#dump: mips16-branch-absolute-addend.d
Index: binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n32-1.d 2017-05-01 23:37:51.623542873 +0100
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression with addend 1 (n32)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0x12340000 -e foo
+#dump: mips16-branch-absolute-addend.d
Index: binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-addend-n64-1.d 2017-05-01 23:37:51.655853254 +0100
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression with addend 1 (n64)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-addend-1.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0x12340000 -e foo
+#dump: mips16-branch-absolute-addend.d
Index: binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-1.d 2017-05-01 23:37:51.677990142 +0100
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 1 (n32)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-1.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
Index: binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-2.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n32-2.d 2017-05-01 23:37:51.752908493 +0100
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 2 (n32)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-2.s
+#as: -EB -n32 -march=from-abi
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
Index: binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-1.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-1.d 2017-05-01 23:37:51.771115033 +0100
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 1 (n64)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-1.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d
Index: binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-2.d
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ binutils/ld/testsuite/ld-mips-elf/mips16-branch-absolute-n64-2.d 2017-05-01 23:37:51.786325964 +0100
@@ -0,0 +1,6 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 link branch to absolute expression 2 (n64)
+#source: ../../../gas/testsuite/gas/mips/mips16-branch-absolute-2.s
+#as: -EB -64 -march=from-abi
+#ld: -EB -Ttext 0 -e foo
+#dump: mips16-branch-absolute.d