mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-28 15:18:37 +08:00
x86: fix "REP RET" with -madd-bnd-prefix
Just like any other branches, RET should gain a BND prefix also when already prefixed in source by REP.
This commit is contained in:
@ -1,3 +1,16 @@
|
|||||||
|
2018-07-11 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
|
* config/tc-i386.c (md_assemble): Also replace an already
|
||||||
|
present REP prefix.
|
||||||
|
* testsuite/gas/i386/mpx-add-bnd-prefix.s,
|
||||||
|
testsuite/gas/i386/x86-64-mpx-add-bnd-prefix.s: Test RET with
|
||||||
|
all REP flavors.
|
||||||
|
* testsuite/gas/i386/mpx-add-bnd-prefix.d,
|
||||||
|
testsuite/gas/i386/x86-64-mpx-add-bnd-prefix.d: Adjust
|
||||||
|
expectations.
|
||||||
|
* testsuite/gas/i386/mpx-add-bnd-prefix.e,
|
||||||
|
testsuite/gas/i386/x86-64-mpx-add-bnd-prefix.e: New.
|
||||||
|
|
||||||
2018-07-09 Jeff Law <law@redhat.com>
|
2018-07-09 Jeff Law <law@redhat.com>
|
||||||
|
|
||||||
* testsuite/nds32/ji-jr.d: Fix name tag.
|
* testsuite/nds32/ji-jr.d: Fix name tag.
|
||||||
|
@ -4112,10 +4112,16 @@ md_assemble (char *line)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Insert BND prefix. */
|
/* Insert BND prefix. */
|
||||||
if (add_bnd_prefix
|
if (add_bnd_prefix && i.tm.opcode_modifier.bndprefixok)
|
||||||
&& i.tm.opcode_modifier.bndprefixok
|
{
|
||||||
&& !i.prefix[BND_PREFIX])
|
if (!i.prefix[BND_PREFIX])
|
||||||
add_prefix (BND_PREFIX_OPCODE);
|
add_prefix (BND_PREFIX_OPCODE);
|
||||||
|
else if (i.prefix[BND_PREFIX] != BND_PREFIX_OPCODE)
|
||||||
|
{
|
||||||
|
as_warn (_("replacing `rep'/`repe' prefix by `bnd'"));
|
||||||
|
i.prefix[BND_PREFIX] = BND_PREFIX_OPCODE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Check string instruction segment overrides. */
|
/* Check string instruction segment overrides. */
|
||||||
if (i.tm.opcode_modifier.isstring && i.mem_operands != 0)
|
if (i.tm.opcode_modifier.isstring && i.mem_operands != 0)
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#as: -madd-bnd-prefix
|
#as: -madd-bnd-prefix
|
||||||
|
#stderr: mpx-add-bnd-prefix.e
|
||||||
#objdump: -drw
|
#objdump: -drw
|
||||||
#name: Check -madd-bnd-prefix
|
#name: Check -madd-bnd-prefix
|
||||||
|
|
||||||
@ -18,7 +19,9 @@ Disassembly of section .text:
|
|||||||
0+14 <foo>:
|
0+14 <foo>:
|
||||||
[ ]*[a-f0-9]+: f2 c3 bnd ret
|
[ ]*[a-f0-9]+: f2 c3 bnd ret
|
||||||
[ ]*[a-f0-9]+: f2 c3 bnd ret
|
[ ]*[a-f0-9]+: f2 c3 bnd ret
|
||||||
[ ]*[a-f0-9]+: f2 e8 f6 ff ff ff bnd call 14 <foo>
|
[ ]*[a-f0-9]+: f2 c3 bnd ret
|
||||||
|
[ ]*[a-f0-9]+: f2 c3 bnd ret
|
||||||
|
[ ]*[a-f0-9]+: f2 e8 f2 ff ff ff bnd call 14 <foo>
|
||||||
[ ]*[a-f0-9]+: 01 c3 add %eax,%ebx
|
[ ]*[a-f0-9]+: 01 c3 add %eax,%ebx
|
||||||
[ ]*[a-f0-9]+: e2 f2 loop 14 <foo>
|
[ ]*[a-f0-9]+: e2 ee loop 14 <foo>
|
||||||
#pass
|
#pass
|
||||||
|
3
gas/testsuite/gas/i386/mpx-add-bnd-prefix.e
Normal file
3
gas/testsuite/gas/i386/mpx-add-bnd-prefix.e
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*:12: Warning: .*rep.*bnd.*
|
||||||
|
.*:13: Warning: .*rep.*bnd.*
|
@ -8,6 +8,9 @@
|
|||||||
jmp *(%ebx)
|
jmp *(%ebx)
|
||||||
ret
|
ret
|
||||||
foo:
|
foo:
|
||||||
|
# Use of REP/REPE prefix - converted to BND with warning
|
||||||
|
rep ret
|
||||||
|
repe ret
|
||||||
# Use of REPNE prefix - we shouldn't get any error
|
# Use of REPNE prefix - we shouldn't get any error
|
||||||
repne ret
|
repne ret
|
||||||
# BND prefix already exists - we shouldn't get any error here
|
# BND prefix already exists - we shouldn't get any error here
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#as: -madd-bnd-prefix
|
#as: -madd-bnd-prefix
|
||||||
|
#stderr: x86-64-mpx-add-bnd-prefix.e
|
||||||
#objdump: -drw
|
#objdump: -drw
|
||||||
#name: Check -madd-bnd-prefix (x86-64)
|
#name: Check -madd-bnd-prefix (x86-64)
|
||||||
|
|
||||||
@ -18,7 +19,9 @@ Disassembly of section .text:
|
|||||||
0+14 <foo>:
|
0+14 <foo>:
|
||||||
[ ]*[a-f0-9]+: f2 c3 bnd retq
|
[ ]*[a-f0-9]+: f2 c3 bnd retq
|
||||||
[ ]*[a-f0-9]+: f2 c3 bnd retq
|
[ ]*[a-f0-9]+: f2 c3 bnd retq
|
||||||
[ ]*[a-f0-9]+: f2 e8 f6 ff ff ff bnd callq 14 <foo>
|
[ ]*[a-f0-9]+: f2 c3 bnd retq
|
||||||
|
[ ]*[a-f0-9]+: f2 c3 bnd retq
|
||||||
|
[ ]*[a-f0-9]+: f2 e8 f2 ff ff ff bnd callq 14 <foo>
|
||||||
[ ]*[a-f0-9]+: 48 01 c3 add %rax,%rbx
|
[ ]*[a-f0-9]+: 48 01 c3 add %rax,%rbx
|
||||||
[ ]*[a-f0-9]+: e2 f1 loop 14 <foo>
|
[ ]*[a-f0-9]+: e2 ed loop 14 <foo>
|
||||||
#pass
|
#pass
|
||||||
|
3
gas/testsuite/gas/i386/x86-64-mpx-add-bnd-prefix.e
Normal file
3
gas/testsuite/gas/i386/x86-64-mpx-add-bnd-prefix.e
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*:12: Warning: .*rep.*bnd.*
|
||||||
|
.*:13: Warning: .*rep.*bnd.*
|
@ -8,6 +8,9 @@
|
|||||||
jmp *(%rbx)
|
jmp *(%rbx)
|
||||||
ret
|
ret
|
||||||
foo:
|
foo:
|
||||||
|
# Use of REP/REPE prefix - converted to BND with warning
|
||||||
|
rep ret
|
||||||
|
repe ret
|
||||||
# Use of REPNE prefix - we shouldn't get any error
|
# Use of REPNE prefix - we shouldn't get any error
|
||||||
repne ret
|
repne ret
|
||||||
# BND prefix already exists - we shouldn't get any error here
|
# BND prefix already exists - we shouldn't get any error here
|
||||||
|
Reference in New Issue
Block a user