mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-26 05:47:26 +08:00
arc: Detect usage of illegal double register pairs
ARC can use odd-even double register pairs in some selected instructions. Although the GNU assembler doesn't allow even-odd registers to be used, there may be cases when the disassembler is presented with such situation. This patch add a test and detects such cases. opcodes/ 2020-07-14 Claudiu Zissulescu <claziss@gmail.com> * arc-dis.c (print_insn_arc): Detect and emit a warning when a faulty double register pair is detected. binutils/ 2020-07-14 Claudiu Zissulescu <claziss@gmail.com> * testsuite/binutils-all/arc/double_regs.s: New test. * testsuite/binutils-all/arc/objdump.exp: Add the above test. Signed-off-by: Claudiu Zissulescu <claziss@gmail.com>
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2020-07-14 Claudiu Zissulescu <claziss@gmail.com>
|
||||||
|
|
||||||
|
* testsuite/binutils-all/arc/double_regs.s: New test.
|
||||||
|
* testsuite/binutils-all/arc/objdump.exp: Add the above test.
|
||||||
|
|
||||||
2020-07-13 Nick Clifton <nickc@redhat.com>
|
2020-07-13 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* po/fr.po: Updated French translation.
|
* po/fr.po: Updated French translation.
|
||||||
|
3
binutils/testsuite/binutils-all/arc/double_regs.s
Normal file
3
binutils/testsuite/binutils-all/arc/double_regs.s
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.cpu HS
|
||||||
|
.text
|
||||||
|
.byte 0x9e,0x2f,0x20,0x75
|
@ -72,6 +72,9 @@ proc check_assembly { testname objfile expected { disas_flags "" } } {
|
|||||||
# disassembler has had to guess as the instruction class in use).
|
# disassembler has had to guess as the instruction class in use).
|
||||||
set want "Warning: disassembly.*vmac2hnfr\[ \t\]*r0,r2,r4.*dmulh12.f\[ \t\]*r0,r2,r4.*dmulh11.f"
|
set want "Warning: disassembly.*vmac2hnfr\[ \t\]*r0,r2,r4.*dmulh12.f\[ \t\]*r0,r2,r4.*dmulh11.f"
|
||||||
check_assembly "Warning test" [do_objfile dsp.s] $want
|
check_assembly "Warning test" [do_objfile dsp.s] $want
|
||||||
|
set warn_double_reg "Warning: illegal use of double register pair."
|
||||||
|
check_assembly "Warning faulty double regs" [do_objfile double_regs.s] \
|
||||||
|
$warn_double_reg
|
||||||
|
|
||||||
set double_store_hs_expected {std\s*r0r1,\[r3\]}
|
set double_store_hs_expected {std\s*r0r1,\[r3\]}
|
||||||
set objfile [do_objfile double_store.s]
|
set objfile [do_objfile double_store.s]
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2020-07-14 Claudiu Zissulescu <claziss@gmail.com>
|
||||||
|
|
||||||
|
* arc-dis.c (print_insn_arc): Detect and emit a warning when a
|
||||||
|
faulty double register pair is detected.
|
||||||
|
|
||||||
2020-07-14 Jan Beulich <jbeulich@suse.com>
|
2020-07-14 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
* i386-dis.c (OP_D): Print dr<N> instead of db<N> in Intel mode.
|
* i386-dis.c (OP_D): Print dr<N> instead of db<N> in Intel mode.
|
||||||
|
@ -1269,11 +1269,19 @@ print_insn_arc (bfd_vma memaddr,
|
|||||||
if (!rname)
|
if (!rname)
|
||||||
rname = regnames[value];
|
rname = regnames[value];
|
||||||
(*info->fprintf_func) (info->stream, "%s", rname);
|
(*info->fprintf_func) (info->stream, "%s", rname);
|
||||||
|
|
||||||
|
/* Check if we have a double register to print. */
|
||||||
if (operand->flags & ARC_OPERAND_TRUNCATE)
|
if (operand->flags & ARC_OPERAND_TRUNCATE)
|
||||||
{
|
{
|
||||||
rname = arcExtMap_coreRegName (value + 1);
|
if ((value & 0x01) == 0)
|
||||||
if (!rname)
|
{
|
||||||
rname = regnames[value + 1];
|
rname = arcExtMap_coreRegName (value + 1);
|
||||||
|
if (!rname)
|
||||||
|
rname = regnames[value + 1];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
rname = _("\nWarning: illegal use of double register "
|
||||||
|
"pair.\n");
|
||||||
(*info->fprintf_func) (info->stream, "%s", rname);
|
(*info->fprintf_func) (info->stream, "%s", rname);
|
||||||
}
|
}
|
||||||
if (value == 63)
|
if (value == 63)
|
||||||
|
Reference in New Issue
Block a user