diff options
-rw-r--r-- | gas/ChangeLog | 19 | ||||
-rw-r--r-- | gas/config/tc-mips.c | 16 | ||||
-rw-r--r-- | gas/config/tc-mips.h | 3 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/branch-absolute-addend.d | 24 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/branch-absolute.d | 20 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/micromips-branch-absolute-addend-n32.d | 10 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/micromips-branch-absolute-addend-n64.d | 30 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/micromips-branch-absolute-addend.d | 25 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/micromips-branch-absolute-n32.d | 10 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/micromips-branch-absolute-n64.d | 30 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips.exp | 3 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips16-branch-absolute-addend.d | 20 | ||||
-rw-r--r-- | gas/testsuite/gas/mips/mips16-branch-absolute.d | 20 | ||||
-rw-r--r-- | ld/ChangeLog | 7 | ||||
-rw-r--r-- | ld/testsuite/ld-mips-elf/mips-elf.exp | 6 |
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)]] |