MIPS16/GAS: Fix assertion failures with relocations on 16-bit instructions
Complement commit c9775dde32
("MIPS16: Add R_MIPS16_PC16_S1 branch
relocation support)" and report an assembly error when a relocation is
required for an instruction, currently a branch only, that has been
forced to use its unextended encoding, either with the use of an
explicit `.t' mnemonic suffix, or by means of `.set noautoextend' being
active, fixing an assertion failure currently caused instead.
gas/
* config/tc-mips.c (md_convert_frag): Report an error instead of
asserting on `ext'.
* testsuite/gas/mips/mips16-branch-unextended-1.d: New test.
* testsuite/gas/mips/mips16-branch-unextended-2.d: New test.
* testsuite/gas/mips/mips16-branch-unextended-1.s: New test
source.
* testsuite/gas/mips/mips16-branch-unextended-2.s: New test.
* testsuite/gas/mips/mips16-branch-unextended.l: New stderr
output.
* testsuite/gas/mips/mips.exp: Run the new tests.
This commit is contained in:
parent
353abf7c10
commit
eefc336583
8 changed files with 50 additions and 3 deletions
|
@ -1,3 +1,16 @@
|
|||
2016-12-14 Maciej W. Rozycki <macro@imgtec.com>
|
||||
|
||||
* config/tc-mips.c (md_convert_frag): Report an error instead of
|
||||
asserting on `ext'.
|
||||
* testsuite/gas/mips/mips16-branch-unextended-1.d: New test.
|
||||
* testsuite/gas/mips/mips16-branch-unextended-2.d: New test.
|
||||
* testsuite/gas/mips/mips16-branch-unextended-1.s: New test
|
||||
source.
|
||||
* testsuite/gas/mips/mips16-branch-unextended-2.s: New test.
|
||||
* testsuite/gas/mips/mips16-branch-unextended.l: New stderr
|
||||
output.
|
||||
* testsuite/gas/mips/mips.exp: Run the new tests.
|
||||
|
||||
2016-12-14 Maciej W. Rozycki <macro@imgtec.com>
|
||||
|
||||
* testsuite/gas/mips/mips16-sprel-swap.d: New test.
|
||||
|
|
|
@ -18369,10 +18369,10 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
|
|||
_("unsupported relocation"));
|
||||
break;
|
||||
}
|
||||
if (reloc != BFD_RELOC_NONE)
|
||||
if (reloc == BFD_RELOC_NONE)
|
||||
;
|
||||
else if (ext)
|
||||
{
|
||||
gas_assert (ext);
|
||||
|
||||
exp.X_op = O_symbol;
|
||||
exp.X_add_symbol = fragp->fr_symbol;
|
||||
exp.X_add_number = fragp->fr_offset;
|
||||
|
@ -18387,6 +18387,9 @@ md_convert_frag (bfd *abfd ATTRIBUTE_UNUSED, segT asec, fragS *fragp)
|
|||
in 2 octets. */
|
||||
fixp->fx_no_overflow = 1;
|
||||
}
|
||||
else
|
||||
as_bad_where (fragp->fr_file, fragp->fr_line,
|
||||
_("invalid unextended operand value"));
|
||||
}
|
||||
else
|
||||
mips16_immed (fragp->fr_file, fragp->fr_line, type,
|
||||
|
|
|
@ -1298,6 +1298,9 @@ if { [istarget mips*-*-vxworks*] } {
|
|||
run_dump_test "mips16-extend"
|
||||
run_dump_test "mips16-sprel-swap"
|
||||
|
||||
run_dump_test "mips16-branch-unextended-1"
|
||||
run_dump_test "mips16-branch-unextended-2"
|
||||
|
||||
run_dump_test "vxworks1"
|
||||
run_dump_test "vxworks1-xgot"
|
||||
run_dump_test "vxworks1-el"
|
||||
|
|
3
gas/testsuite/gas/mips/mips16-branch-unextended-1.d
Normal file
3
gas/testsuite/gas/mips/mips16-branch-unextended-1.d
Normal file
|
@ -0,0 +1,3 @@
|
|||
#name: MIPS16 unextended branch instructions with relocation 1
|
||||
#as: -32
|
||||
#error-output: mips16-branch-unextended.l
|
8
gas/testsuite/gas/mips/mips16-branch-unextended-1.s
Normal file
8
gas/testsuite/gas/mips/mips16-branch-unextended-1.s
Normal file
|
@ -0,0 +1,8 @@
|
|||
.set mips16
|
||||
.set noautoextend
|
||||
foo:
|
||||
beqz $2, baz
|
||||
bnez $3, baz
|
||||
bteqz baz
|
||||
btnez baz
|
||||
b baz
|
3
gas/testsuite/gas/mips/mips16-branch-unextended-2.d
Normal file
3
gas/testsuite/gas/mips/mips16-branch-unextended-2.d
Normal file
|
@ -0,0 +1,3 @@
|
|||
#name: MIPS16 unextended branch instructions with relocation 2
|
||||
#as: -32
|
||||
#error-output: mips16-branch-unextended.l
|
8
gas/testsuite/gas/mips/mips16-branch-unextended-2.s
Normal file
8
gas/testsuite/gas/mips/mips16-branch-unextended-2.s
Normal file
|
@ -0,0 +1,8 @@
|
|||
.set mips16
|
||||
.set autoextend
|
||||
foo:
|
||||
beqz.t $2, baz
|
||||
bnez.t $3, baz
|
||||
bteqz.t baz
|
||||
btnez.t baz
|
||||
b.t baz
|
6
gas/testsuite/gas/mips/mips16-branch-unextended.l
Normal file
6
gas/testsuite/gas/mips/mips16-branch-unextended.l
Normal file
|
@ -0,0 +1,6 @@
|
|||
.*: Assembler messages:
|
||||
.*:4: Error: invalid unextended operand value
|
||||
.*:5: Error: invalid unextended operand value
|
||||
.*:6: Error: invalid unextended operand value
|
||||
.*:7: Error: invalid unextended operand value
|
||||
.*:8: Error: invalid unextended operand value
|
Loading…
Add table
Reference in a new issue