diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2020-10-05 05:23:29 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2020-10-05 05:23:39 -0700 |
commit | 0e9f3bf12616b108682bb6f6e2a5ef04df9586a8 (patch) | |
tree | fed8d852a0d65cf6b461151725aaa817369d2f8d /gas | |
parent | b58e7f729ebd85ff62a29357a01c15a29d458829 (diff) | |
download | gdb-0e9f3bf12616b108682bb6f6e2a5ef04df9586a8.zip gdb-0e9f3bf12616b108682bb6f6e2a5ef04df9586a8.tar.gz gdb-0e9f3bf12616b108682bb6f6e2a5ef04df9586a8.tar.bz2 |
x86: Clear modrm if not needed
The MODRM byte can be checked to display the instruction name only if the
MODRM byte needed. Clear modrm if the MODRM byte isn't needed so that
modrm field checks in putop like, modrm.mod == N with N != 0, can be done
without checking need_modrm.
gas/
PR binutils/26705
* testsuite/gas/i386/x86-64-suffix.s: Add "mov %rsp,%rbp" before
sysretq.
* testsuite/gas/i386/x86-64-suffix-intel.d: Updated.
* testsuite/gas/i386/x86-64-suffix.d: Likewise.
opcodes/
PR binutils/26705
* i386-dis.c (print_insn): Clear modrm if not needed.
(putop): Check need_modrm for modrm.mod != 3. Don't check
need_modrm for modrm.mod == 3.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 8 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-suffix-intel.d | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-suffix.d | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-suffix.s | 2 |
4 files changed, 14 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 56796ff..ae5a614 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2020-10-05 H.J. Lu <hongjiu.lu@intel.com> + + PR binutils/26705 + * testsuite/gas/i386/x86-64-suffix.s: Add "mov %rsp,%rbp" before + sysretq. + * testsuite/gas/i386/x86-64-suffix-intel.d: Updated. + * testsuite/gas/i386/x86-64-suffix.d: Likewise. + 2020-10-05 Nick Clifton <nickc@redhat.com> PR 26253 diff --git a/gas/testsuite/gas/i386/x86-64-suffix-intel.d b/gas/testsuite/gas/i386/x86-64-suffix-intel.d index 74c8eaa..55d4a8d 100644 --- a/gas/testsuite/gas/i386/x86-64-suffix-intel.d +++ b/gas/testsuite/gas/i386/x86-64-suffix-intel.d @@ -18,11 +18,13 @@ Disassembly of section .text: [ ]*[a-f0-9]+: cf iretd [ ]*[a-f0-9]+: 48 cf iretq [ ]*[a-f0-9]+: 0f 07 sysretd +[ ]*[a-f0-9]+: 48 89 e5 mov rbp,rsp [ ]*[a-f0-9]+: 48 0f 07 sysretq [ ]*[a-f0-9]+: 66 cf iretw [ ]*[a-f0-9]+: cf iretd [ ]*[a-f0-9]+: cf iretd [ ]*[a-f0-9]+: 48 cf iretq [ ]*[a-f0-9]+: 0f 07 sysretd +[ ]*[a-f0-9]+: 48 89 e5 mov rbp,rsp [ ]*[a-f0-9]+: 48 0f 07 sysretq #pass diff --git a/gas/testsuite/gas/i386/x86-64-suffix.d b/gas/testsuite/gas/i386/x86-64-suffix.d index d81ac45..5ae1173 100644 --- a/gas/testsuite/gas/i386/x86-64-suffix.d +++ b/gas/testsuite/gas/i386/x86-64-suffix.d @@ -17,11 +17,13 @@ Disassembly of section .text: [ ]*[a-f0-9]+: cf iretl [ ]*[a-f0-9]+: 48 cf iretq [ ]*[a-f0-9]+: 0f 07 sysretl +[ ]*[a-f0-9]+: 48 89 e5 movq %rsp,%rbp [ ]*[a-f0-9]+: 48 0f 07 sysretq [ ]*[a-f0-9]+: 66 cf iretw [ ]*[a-f0-9]+: cf iretl [ ]*[a-f0-9]+: cf iretl [ ]*[a-f0-9]+: 48 cf iretq [ ]*[a-f0-9]+: 0f 07 sysretl +[ ]*[a-f0-9]+: 48 89 e5 movq %rsp,%rbp [ ]*[a-f0-9]+: 48 0f 07 sysretq #pass diff --git a/gas/testsuite/gas/i386/x86-64-suffix.s b/gas/testsuite/gas/i386/x86-64-suffix.s index 2261c2c..a226836 100644 --- a/gas/testsuite/gas/i386/x86-64-suffix.s +++ b/gas/testsuite/gas/i386/x86-64-suffix.s @@ -14,6 +14,7 @@ foo: iretl iretq sysretl + mov %rsp,%rbp sysretq .intel_syntax noprefix @@ -22,4 +23,5 @@ foo: iret iretq sysretd + mov rbp,rsp sysretq |