The previous change
"x86: Ignore CS/DS/ES/SS segment-override prefixes in 64-bit mode"
to ignore segment override prefixes in 64-bit mode lead to dumping
branch hints as excessive prefixes:
ffffffff8109d5a0 <vmx_get_rflags>:
...
ffffffff8109d601: 3e 77 0a ds ja,pt
ffffffff8109d60e <vmx_get_rflags+0x6e>
^^^^^
In this particular case, those prefixes are not excessive but are used
to provide branch hints - taken/not-taken - to the CPU.
Assign active_seg_prefix in that particular case to consume them.
gas/
2002-11-29 Borislav Petkov <bp@suse.de>
* testsuite/gas/i386/branch.d: Add new branch insns test.
* testsuite/gas/i386/branch.s: Likewise.
* testsuite/gas/i386/i386.exp: Insert the new branch test.
* testsuite/gas/i386/x86-64-branch.d: Test for branch hints insns.
* testsuite/gas/i386/x86-64-branch.s: Likewise.
* testsuite/gas/i386/ilp32/x86-64-branch.d: Likewise.
opcodes/
2020-11-28 Borislav Petkov <bp@suse.de>
* i386-dis.c (print_insn): Set active_seg_prefix for branch hint insns
to not dump branch hint prefixes 0x2E and 0x3E as unused prefixes.
+2002-11-29 Borislav Petkov <bp@suse.de>
+
+ * testsuite/gas/i386/branch.d: Add new branch insns test.
+ * testsuite/gas/i386/branch.s: Likewise.
+ * testsuite/gas/i386/i386.exp: Insert the new branch test.
+ * testsuite/gas/i386/x86-64-branch.d: Test for branch hints insns.
+ * testsuite/gas/i386/x86-64-branch.s: Likewise.
+ * testsuite/gas/i386/ilp32/x86-64-branch.d: Likewise.
+
2020-11-27 Jozef Lawrynowicz <jozef.l@mittosystems.com>
* testsuite/gas/elf/elf.exp: Run new tests.
--- /dev/null
+#as: -J
+#objdump: -dw
+#name: i386 branch
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <.text>:
+[ ]*[a-f0-9]+: 3e 74 03[ ]+je,pt +0x[0-9a-f]+
+[ ]*[a-f0-9]+: 2e 74 00[ ]+je,pn +0x[0-9a-f]+
+#pass
--- /dev/null
+.text
+ jz,pt .Llabel
+ jz,pn .Llabel
+.Llabel:
run_dump_test "lfence-ret-c"
run_dump_test "lfence-ret-d"
run_dump_test "lfence-byte"
+ run_dump_test "branch"
# These tests require support for 8 and 16 bit relocs,
# so we only run them for ELF and COFF targets.
[ ]*[a-f0-9]+: 66 0f 82 00 00 00 00 data16 jb 0x37 33: R_X86_64_PLT32 foo-0x4
[ ]*[a-f0-9]+: 66 c3 data16 ret *
[ ]*[a-f0-9]+: 66 c2 08 00 data16 ret \$0x8
+[ ]*[a-f0-9]+: 3e 74 03[ ]+je,pt +0x[0-9a-f]+
+[ ]*[a-f0-9]+: 2e 74 00[ ]+je,pn +0x[0-9a-f]+
[ ]*[a-f0-9]+: ff d0 call \*%rax
[ ]*[a-f0-9]+: ff d0 call \*%rax
[ ]*[a-f0-9]+: 66 ff d0 data16 call \*%rax
[ ]*[a-f0-9]+: 66 0f 82 00 00 00 00 data16 jb (0x37|37 <.text\+0x37>)
[ ]*[a-f0-9]+: 66 c3 data16 ret *
[ ]*[a-f0-9]+: 66 c2 08 00 data16 ret \$0x8
+[ ]*[a-f0-9]+: 3e 74 03[ ]+je,pt +0x[0-9a-f]+
+[ ]*[a-f0-9]+: 2e 74 00[ ]+je,pn +0x[0-9a-f]+
[ ]*[a-f0-9]+: ff d0 call \*%rax
[ ]*[a-f0-9]+: ff d0 call \*%rax
[ ]*[a-f0-9]+: 66 ff d0 data16 call \*%rax
retw
retw $8
+ jz,pt .Llabel
+ jz,pn .Llabel
+.Llabel:
+
.intel_syntax noprefix
call rax
callq rax
+2020-11-28 Borislav Petkov <bp@suse.de>
+
+ * i386-dis.c (print_insn): Set active_seg_prefix for branch hint insns
+ to not dump branch hint prefixes 0x2E and 0x3E as unused prefixes.
+
2020-11-16 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
* aarch64-tbl.h (FLAGM): Handle for FLAGM feature.
used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS);
*obufp++ = ',';
*obufp++ = 'p';
+
+ /* Set active_seg_prefix even if not set in 64-bit mode
+ because here it is a valid branch hint. */
if (prefixes & PREFIX_DS)
- *obufp++ = 't';
+ {
+ active_seg_prefix = PREFIX_DS;
+ *obufp++ = 't';
+ }
else
- *obufp++ = 'n';
+ {
+ active_seg_prefix = PREFIX_CS;
+ *obufp++ = 'n';
+ }
}
break;
case 'K':