aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/ChangeLog19
-rw-r--r--gas/config/tc-mips.c16
-rw-r--r--gas/config/tc-mips.h3
-rw-r--r--gas/testsuite/gas/mips/branch-absolute-addend.d24
-rw-r--r--gas/testsuite/gas/mips/branch-absolute.d20
-rw-r--r--gas/testsuite/gas/mips/micromips-branch-absolute-addend-n32.d10
-rw-r--r--gas/testsuite/gas/mips/micromips-branch-absolute-addend-n64.d30
-rw-r--r--gas/testsuite/gas/mips/micromips-branch-absolute-addend.d25
-rw-r--r--gas/testsuite/gas/mips/micromips-branch-absolute-n32.d10
-rw-r--r--gas/testsuite/gas/mips/micromips-branch-absolute-n64.d30
-rw-r--r--gas/testsuite/gas/mips/mips.exp3
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute-addend.d20
-rw-r--r--gas/testsuite/gas/mips/mips16-branch-absolute.d20
-rw-r--r--ld/ChangeLog7
-rw-r--r--ld/testsuite/ld-mips-elf/mips-elf.exp6
15 files changed, 183 insertions, 60 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 13243ce..50f7cd9 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,24 @@
2016-07-14 Maciej W. Rozycki <macro@imgtec.com>
+ * config/tc-mips.h (TC_FORCE_RELOCATION_ABS): New macro.
+ (mips_force_relocation_abs): New prototype.
+ * config/tc-mips.c (mips_force_relocation_abs): New function.
+ * testsuite/gas/mips/branch-absolute.d: Adjust dump patterns.
+ * testsuite/gas/mips/mips16-branch-absolute.d: Likewise.
+ * testsuite/gas/mips/micromips-branch-absolute-n32.d: Likewise.
+ * testsuite/gas/mips/micromips-branch-absolute-n64.d: Likewise.
+ * testsuite/gas/mips/micromips-branch-absolute-addend-n32.d:
+ Likewise.
+ * testsuite/gas/mips/micromips-branch-absolute-addend-n64.d:
+ Likewise.
+ * testsuite/gas/mips/branch-absolute-addend.d: New test.
+ * testsuite/gas/mips/mips16-branch-absolute-addend.d: New test.
+ * testsuite/gas/mips/micromips-branch-absolute-addend.d: New
+ test.
+ * testsuite/gas/mips/mips.exp: Run the new tests.
+
+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
diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c
index 6c0be63..cca5450 100644
--- a/gas/config/tc-mips.c
+++ b/gas/config/tc-mips.c
@@ -14814,6 +14814,22 @@ mips_force_relocation (fixS *fixp)
return 0;
}
+/* Implement TC_FORCE_RELOCATION_ABS. */
+
+bfd_boolean
+mips_force_relocation_abs (fixS *fixp)
+{
+ if (generic_force_reloc (fixp))
+ return TRUE;
+
+ /* These relocations do not have enough bits in the in-place addend
+ to hold an arbitrary absolute section's offset. */
+ if (HAVE_IN_PLACE_ADDENDS && limited_pcrel_reloc_p (fixp->fx_r_type))
+ return TRUE;
+
+ return FALSE;
+}
+
/* Read the instruction associated with RELOC from BUF. */
static unsigned int
diff --git a/gas/config/tc-mips.h b/gas/config/tc-mips.h
index 45e779d..b472673 100644
--- a/gas/config/tc-mips.h
+++ b/gas/config/tc-mips.h
@@ -142,6 +142,9 @@ extern int mips_force_relocation (struct fix *);
#define TC_FORCE_RELOCATION_SUB_SAME(FIX, SEG) \
(! SEG_NORMAL (SEG) || mips_force_relocation (FIX))
+#define TC_FORCE_RELOCATION_ABS(FIX) mips_force_relocation_abs (FIX)
+extern bfd_boolean mips_force_relocation_abs (struct fix *);
+
/* Register mask variables. These are set by the MIPS assembly code
and used by ECOFF and possibly other object file formats. */
extern unsigned long mips_gprmask;
diff --git a/gas/testsuite/gas/mips/branch-absolute-addend.d b/gas/testsuite/gas/mips/branch-absolute-addend.d
new file mode 100644
index 0000000..df86846
--- /dev/null
+++ b/gas/testsuite/gas/mips/branch-absolute-addend.d
@@ -0,0 +1,24 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS branch to absolute expression with addend
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> 1000048c b 00002234 <foo\+0x1234>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 0411048c bal 0000223c <foo\+0x123c>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 0410048c bltzal zero,00002244 <foo\+0x1244>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 1040048c beqz v0,0000224c <foo\+0x124c>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
+[0-9a-f]+ <[^>]*> 00000000 nop
+[0-9a-f]+ <[^>]*> 1440048c bnez v0,00002254 <foo\+0x1254>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
+[0-9a-f]+ <[^>]*> 00000000 nop
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/branch-absolute.d b/gas/testsuite/gas/mips/branch-absolute.d
index 37e7fc5..816c139 100644
--- a/gas/testsuite/gas/mips/branch-absolute.d
+++ b/gas/testsuite/gas/mips/branch-absolute.d
@@ -6,19 +6,19 @@
Disassembly of section \.text:
\.\.\.
-[0-9a-f]+ <[^>]*> 1000048c b 00002234 <bar\+0x1000>
-[ ]*[0-9a-f]+: R_MIPS_PC16 \*ABS\*
+[0-9a-f]+ <[^>]*> 1000ffff b 00001000 <foo>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
[0-9a-f]+ <[^>]*> 00000000 nop
-[0-9a-f]+ <[^>]*> 0411048c bal 0000223c <bar\+0x1008>
-[ ]*[0-9a-f]+: R_MIPS_PC16 \*ABS\*
+[0-9a-f]+ <[^>]*> 0411ffff bal 00001008 <foo\+0x8>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
[0-9a-f]+ <[^>]*> 00000000 nop
-[0-9a-f]+ <[^>]*> 0410048c bltzal zero,00002244 <bar\+0x1010>
-[ ]*[0-9a-f]+: R_MIPS_PC16 \*ABS\*
+[0-9a-f]+ <[^>]*> 0410ffff bltzal zero,00001010 <foo\+0x10>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
[0-9a-f]+ <[^>]*> 00000000 nop
-[0-9a-f]+ <[^>]*> 1040048c beqz v0,0000224c <bar\+0x1018>
-[ ]*[0-9a-f]+: R_MIPS_PC16 \*ABS\*
+[0-9a-f]+ <[^>]*> 1040ffff beqz v0,00001018 <foo\+0x18>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
[0-9a-f]+ <[^>]*> 00000000 nop
-[0-9a-f]+ <[^>]*> 1440048c bnez v0,00002254 <bar\+0x1020>
-[ ]*[0-9a-f]+: R_MIPS_PC16 \*ABS\*
+[0-9a-f]+ <[^>]*> 1440ffff bnez v0,00001020 <foo\+0x20>
+[ ]*[0-9a-f]+: R_MIPS_PC16 bar
[0-9a-f]+ <[^>]*> 00000000 nop
\.\.\.
diff --git a/gas/testsuite/gas/mips/micromips-branch-absolute-addend-n32.d b/gas/testsuite/gas/mips/micromips-branch-absolute-addend-n32.d
index b5254be..4f630f0 100644
--- a/gas/testsuite/gas/mips/micromips-branch-absolute-addend-n32.d
+++ b/gas/testsuite/gas/mips/micromips-branch-absolute-addend-n32.d
@@ -8,19 +8,19 @@
Disassembly of section \.text:
\.\.\.
[0-9a-f]+ <[^>]*> 9400 0000 b 00001004 <foo\+0x4>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar\+0x1230
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> 4060 0000 bal 0000100a <foo\+0xa>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar\+0x1230
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 0000 0000 nop
[0-9a-f]+ <[^>]*> 4020 0000 bltzal zero,00001012 <foo\+0x12>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar\+0x1230
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 0000 0000 nop
[0-9a-f]+ <[^>]*> 9402 0000 beqz v0,0000101a <foo\+0x1a>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar\+0x1230
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> b402 0000 bnez v0,00001020 <foo\+0x20>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar\+0x1230
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> 0c00 nop
\.\.\.
diff --git a/gas/testsuite/gas/mips/micromips-branch-absolute-addend-n64.d b/gas/testsuite/gas/mips/micromips-branch-absolute-addend-n64.d
index a66a4ff..0e14396 100644
--- a/gas/testsuite/gas/mips/micromips-branch-absolute-addend-n64.d
+++ b/gas/testsuite/gas/mips/micromips-branch-absolute-addend-n64.d
@@ -8,29 +8,29 @@
Disassembly of section \.text:
\.\.\.
[0-9a-f]+ <[^>]*> 9400 0000 b 0000000000001004 <foo\+0x4>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> 4060 0000 bal 000000000000100a <foo\+0xa>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 0000 0000 nop
[0-9a-f]+ <[^>]*> 4020 0000 bltzal zero,0000000000001012 <foo\+0x12>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 0000 0000 nop
[0-9a-f]+ <[^>]*> 9402 0000 beqz v0,000000000000101a <foo\+0x1a>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> b402 0000 bnez v0,0000000000001020 <foo\+0x20>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1230
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x123468a9
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> 0c00 nop
\.\.\.
diff --git a/gas/testsuite/gas/mips/micromips-branch-absolute-addend.d b/gas/testsuite/gas/mips/micromips-branch-absolute-addend.d
new file mode 100644
index 0000000..316adad
--- /dev/null
+++ b/gas/testsuite/gas/mips/micromips-branch-absolute-addend.d
@@ -0,0 +1,25 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: microMIPS branch to absolute expression with addend
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> 9400 0918 b 00002234 <foo\+0x1234>
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar
+[0-9a-f]+ <[^>]*> 0c00 nop
+[0-9a-f]+ <[^>]*> 4060 0918 bal 0000223a <foo\+0x123a>
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar
+[0-9a-f]+ <[^>]*> 0000 0000 nop
+[0-9a-f]+ <[^>]*> 4020 0918 bltzal zero,00002242 <foo\+0x1242>
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar
+[0-9a-f]+ <[^>]*> 0000 0000 nop
+[0-9a-f]+ <[^>]*> 9402 0918 beqz v0,0000224a <foo\+0x124a>
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar
+[0-9a-f]+ <[^>]*> 0c00 nop
+[0-9a-f]+ <[^>]*> b402 0918 bnez v0,00002250 <foo\+0x1250>
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar
+[0-9a-f]+ <[^>]*> 0c00 nop
+[0-9a-f]+ <[^>]*> 0c00 nop
+ \.\.\.
diff --git a/gas/testsuite/gas/mips/micromips-branch-absolute-n32.d b/gas/testsuite/gas/mips/micromips-branch-absolute-n32.d
index 85205ac..212caaa 100644
--- a/gas/testsuite/gas/mips/micromips-branch-absolute-n32.d
+++ b/gas/testsuite/gas/mips/micromips-branch-absolute-n32.d
@@ -8,19 +8,19 @@
Disassembly of section \.text:
\.\.\.
[0-9a-f]+ <[^>]*> 9400 0000 b 00001004 <foo\+0x4>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar-0x4
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> 4060 0000 bal 0000100a <foo\+0xa>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar-0x4
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 0000 0000 nop
[0-9a-f]+ <[^>]*> 4020 0000 bltzal zero,00001012 <foo\+0x12>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar-0x4
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 0000 0000 nop
[0-9a-f]+ <[^>]*> 9402 0000 beqz v0,0000101a <foo\+0x1a>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar-0x4
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> b402 0000 bnez v0,00001020 <foo\+0x20>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar-0x4
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> 0c00 nop
\.\.\.
diff --git a/gas/testsuite/gas/mips/micromips-branch-absolute-n64.d b/gas/testsuite/gas/mips/micromips-branch-absolute-n64.d
index 453d650..443ef50 100644
--- a/gas/testsuite/gas/mips/micromips-branch-absolute-n64.d
+++ b/gas/testsuite/gas/mips/micromips-branch-absolute-n64.d
@@ -8,29 +8,29 @@
Disassembly of section \.text:
\.\.\.
[0-9a-f]+ <[^>]*> 9400 0000 b 0000000000001004 <foo\+0x4>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar-0x4
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> 4060 0000 bal 000000000000100a <foo\+0xa>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar-0x4
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 0000 0000 nop
[0-9a-f]+ <[^>]*> 4020 0000 bltzal zero,0000000000001012 <foo\+0x12>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar-0x4
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 0000 0000 nop
[0-9a-f]+ <[^>]*> 9402 0000 beqz v0,000000000000101a <foo\+0x1a>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar-0x4
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> b402 0000 bnez v0,0000000000001020 <foo\+0x20>
-[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 bar-0x4
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4
-[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*-0x4
+[ ]*[0-9a-f]+: R_MICROMIPS_PC16_S1 \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
+[ ]*[0-9a-f]+: R_MIPS_NONE \*ABS\*\+0x1231
[0-9a-f]+ <[^>]*> 0c00 nop
[0-9a-f]+ <[^>]*> 0c00 nop
\.\.\.
diff --git a/gas/testsuite/gas/mips/mips.exp b/gas/testsuite/gas/mips/mips.exp
index b22da67..8bdddbf 100644
--- a/gas/testsuite/gas/mips/mips.exp
+++ b/gas/testsuite/gas/mips/mips.exp
@@ -612,6 +612,7 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "branch-local-n64-1"
}
run_dump_test "branch-absolute"
+ run_dump_test "branch-absolute-addend"
if $has_newabi {
run_dump_test "branch-absolute-n32"
run_dump_test "branch-absolute-addend-n32"
@@ -1281,6 +1282,7 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "micromips-warn-branch-delay"
run_dump_test "micromips-warn-branch-delay-1"
run_dump_test "micromips-branch-absolute"
+ run_dump_test "micromips-branch-absolute-addend"
if $has_newabi {
run_dump_test "micromips-branch-absolute-n32"
run_dump_test "micromips-branch-absolute-addend-n32"
@@ -1393,6 +1395,7 @@ if { [istarget mips*-*-vxworks*] } {
run_dump_test "mips16-branch-addend-2"
run_dump_test "mips16-branch-addend-3"
run_dump_test "mips16-branch-absolute"
+ run_dump_test "mips16-branch-absolute-addend"
if $has_newabi {
run_dump_test "mips16-branch-absolute-n32"
run_dump_test "mips16-branch-absolute-addend-n32"
diff --git a/gas/testsuite/gas/mips/mips16-branch-absolute-addend.d b/gas/testsuite/gas/mips/mips16-branch-absolute-addend.d
new file mode 100644
index 0000000..de64afb
--- /dev/null
+++ b/gas/testsuite/gas/mips/mips16-branch-absolute-addend.d
@@ -0,0 +1,20 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#name: MIPS16 branch to absolute expression with addend
+#as: -32
+
+.*: +file format .*mips.*
+
+Disassembly of section \.text:
+ \.\.\.
+[0-9a-f]+ <[^>]*> f101 1018 b 00002234 <foo\+0x1234>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar
+[0-9a-f]+ <[^>]*> f101 6018 bteqz 00002238 <foo\+0x1238>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar
+[0-9a-f]+ <[^>]*> f101 6118 btnez 0000223c <foo\+0x123c>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar
+[0-9a-f]+ <[^>]*> f101 2218 beqz v0,00002240 <foo\+0x1240>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar
+[0-9a-f]+ <[^>]*> f101 2a18 bnez v0,00002244 <foo\+0x1244>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar
+[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 4d2c9d3..68b3fb4 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\+0xfff>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*
-[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\+0x1007>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*
-[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\+0x100f>
-[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 \*ABS\*
+[0-9a-f]+ <[^>]*> f7ff 101e b 00001000 <foo>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar
+[0-9a-f]+ <[^>]*> f7ff 601e bteqz 00001004 <foo\+0x4>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar
+[0-9a-f]+ <[^>]*> f7ff 611e btnez 00001008 <foo\+0x8>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar
+[0-9a-f]+ <[^>]*> f7ff 221e beqz v0,0000100c <foo\+0xc>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar
+[0-9a-f]+ <[^>]*> f7ff 2a1e bnez v0,00001010 <foo\+0x10>
+[ ]*[0-9a-f]+: R_MIPS16_PC16_S1 bar
[0-9a-f]+ <[^>]*> 6500 nop
\.\.\.
diff --git a/ld/ChangeLog b/ld/ChangeLog
index 1f8a499..250d076 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,5 +1,12 @@
2016-07-14 Maciej W. Rozycki <macro@imgtec.com>
+ * testsuite/ld-mips-elf/mips-elf.exp: Run
+ `branch-absolute-addend', `mips16-branch-absolute',
+ `mips16-branch-absolute-addend' and
+ `micromips-branch-absolute-addend'.
+
+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.
diff --git a/ld/testsuite/ld-mips-elf/mips-elf.exp b/ld/testsuite/ld-mips-elf/mips-elf.exp
index cca6695..5c417c7 100644
--- a/ld/testsuite/ld-mips-elf/mips-elf.exp
+++ b/ld/testsuite/ld-mips-elf/mips-elf.exp
@@ -144,6 +144,7 @@ run_dump_test "mips16-1"
run_dump_test "branch-misc-1"
run_dump_test "branch-misc-2"
run_dump_test "branch-absolute" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "branch-absolute-addend" [list [list ld $abi_ldflags(o32)]]
if $has_newabi {
run_dump_test "branch-absolute-n32" [list [list ld $abi_ldflags(n32)]]
run_dump_test "branch-absolute-addend-n32" \
@@ -157,6 +158,9 @@ 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)]]
+run_dump_test "mips16-branch-absolute" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "mips16-branch-absolute-addend" \
+ [list [list ld $abi_ldflags(o32)]]
if $has_newabi {
run_dump_test "mips16-branch-absolute-n32" \
[list [list ld $abi_ldflags(n32)]]
@@ -169,6 +173,8 @@ if $has_newabi {
}
run_dump_test "micromips-branch-absolute" [list [list ld $abi_ldflags(o32)]]
+run_dump_test "micromips-branch-absolute-addend" \
+ [list [list ld $abi_ldflags(o32)]]
if $has_newabi {
run_dump_test "micromips-branch-absolute-n32" \
[list [list ld $abi_ldflags(n32)]]