| From 866c788a77096b2fdb258e832732bb44581ffd66 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 22 Jan 2020 13:11:54 +0900 |
| Subject: x86/decoder: Add TEST opcode to Group3-2 |
| |
| From: Masami Hiramatsu <mhiramat@kernel.org> |
| |
| [ Upstream commit 8b7e20a7ba54836076ff35a28349dabea4cec48f ] |
| |
| Add TEST opcode to Group3-2 reg=001b as same as Group3-1 does. |
| |
| Commit |
| |
| 12a78d43de76 ("x86/decoder: Add new TEST instruction pattern") |
| |
| added a TEST opcode assignment to f6 XX/001/XXX (Group 3-1), but did |
| not add f7 XX/001/XXX (Group 3-2). |
| |
| Actually, this TEST opcode variant (ModRM.reg /1) is not described in |
| the Intel SDM Vol2 but in AMD64 Architecture Programmer's Manual Vol.3, |
| Appendix A.2 Table A-6. ModRM.reg Extensions for the Primary Opcode Map. |
| |
| Without this fix, Randy found a warning by insn_decoder_test related |
| to this issue as below. |
| |
| HOSTCC arch/x86/tools/insn_decoder_test |
| HOSTCC arch/x86/tools/insn_sanity |
| TEST posttest |
| arch/x86/tools/insn_decoder_test: warning: Found an x86 instruction decoder bug, please report this. |
| arch/x86/tools/insn_decoder_test: warning: ffffffff81000bf1: f7 0b 00 01 08 00 testl $0x80100,(%rbx) |
| arch/x86/tools/insn_decoder_test: warning: objdump says 6 bytes, but insn_get_length() says 2 |
| arch/x86/tools/insn_decoder_test: warning: Decoded and checked 11913894 instructions with 1 failures |
| TEST posttest |
| arch/x86/tools/insn_sanity: Success: decoded and checked 1000000 random instructions with 0 errors (seed:0x871ce29c) |
| |
| To fix this error, add the TEST opcode according to AMD64 APM Vol.3. |
| |
| [ bp: Massage commit message. ] |
| |
| Reported-by: Randy Dunlap <rdunlap@infradead.org> |
| Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org> |
| Signed-off-by: Borislav Petkov <bp@suse.de> |
| Acked-by: Randy Dunlap <rdunlap@infradead.org> |
| Tested-by: Randy Dunlap <rdunlap@infradead.org> |
| Link: https://lkml.kernel.org/r/157966631413.9580.10311036595431878351.stgit@devnote2 |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/x86/lib/x86-opcode-map.txt | 2 +- |
| tools/arch/x86/lib/x86-opcode-map.txt | 2 +- |
| 2 files changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/x86/lib/x86-opcode-map.txt b/arch/x86/lib/x86-opcode-map.txt |
| index 0a0e9112f2842..5cb9f009f2be3 100644 |
| --- a/arch/x86/lib/x86-opcode-map.txt |
| +++ b/arch/x86/lib/x86-opcode-map.txt |
| @@ -909,7 +909,7 @@ EndTable |
| |
| GrpTable: Grp3_2 |
| 0: TEST Ev,Iz |
| -1: |
| +1: TEST Ev,Iz |
| 2: NOT Ev |
| 3: NEG Ev |
| 4: MUL rAX,Ev |
| diff --git a/tools/arch/x86/lib/x86-opcode-map.txt b/tools/arch/x86/lib/x86-opcode-map.txt |
| index 0a0e9112f2842..5cb9f009f2be3 100644 |
| --- a/tools/arch/x86/lib/x86-opcode-map.txt |
| +++ b/tools/arch/x86/lib/x86-opcode-map.txt |
| @@ -909,7 +909,7 @@ EndTable |
| |
| GrpTable: Grp3_2 |
| 0: TEST Ev,Iz |
| -1: |
| +1: TEST Ev,Iz |
| 2: NOT Ev |
| 3: NEG Ev |
| 4: MUL rAX,Ev |
| -- |
| 2.20.1 |
| |