qemu/target/i386
Peter Maydell cfcca361d7 target/i386: Fix handling of VEX prefixes
In commit e3af7c788b we
replaced direct calls to to cpu_ld*_code() with calls
to the x86_ld*_code() wrappers which incorporate an
advance of s->pc. Unfortunately we didn't notice that
in one place the old code was deliberately not incrementing
s->pc:

@@ -4501,7 +4528,7 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu)
             static const int pp_prefix[4] = {
                 0, PREFIX_DATA, PREFIX_REPZ, PREFIX_REPNZ
             };
-            int vex3, vex2 = cpu_ldub_code(env, s->pc);
+            int vex3, vex2 = x86_ldub_code(env, s);

             if (!CODE64(s) && (vex2 & 0xc0) != 0xc0) {
                 /* 4.1.4.6: In 32-bit mode, bits [7:6] must be 11b,

This meant we were mishandling this set of instructions.
Remove the manual advance of s->pc for the "is VEX" case
(which is now done by x86_ldub_code()) and instead rewind
PC in the case where we decide that this isn't really VEX.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-stable@nongnu.org
Reported-by: Alexandro Sanchez Bach <alexandro@phi.nz>
Message-Id: <1513163959-17545-1-git-send-email-peter.maydell@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2017-12-21 09:22:45 +01:00
..
arch_dump.c exec,dump,i386,ppc,s390x: don't include exec/cpu-all.h explicitly 2017-09-19 18:21:33 +02:00
arch_memory_mapping.c exec,dump,i386,ppc,s390x: don't include exec/cpu-all.h explicitly 2017-09-19 18:21:33 +02:00
bpt_helper.c target-i386: Fix eflags.TF/#DB handling of syscall/sysret insns 2016-12-22 16:01:04 +01:00
cc_helper_template.h
cc_helper.c target-i386: Use ctpop helper 2017-01-10 08:49:59 -08:00
cpu-qom.h i386: Define static "base" CPU model 2017-02-27 13:23:27 -03:00
cpu.c x86/cpu: Enable new SSE/AVX/AVX512 cpu features 2017-12-21 09:22:44 +01:00
cpu.h hyperv: make SynIC version msr constant 2017-12-21 09:22:44 +01:00
excp_helper.c target/i386: move TLB refill function out of helper.c 2017-07-05 09:12:44 +02:00
fpu_helper.c target/i386: split cpu_set_mxcsr() and make cpu_set_fpuc() inline 2017-07-05 09:12:44 +02:00
gdbstub.c x86: Fix x86_64 'g' packet response to gdb from 32-bit mode. 2016-12-22 16:00:25 +01:00
hax-all.c vcpu_dirty: share the same field in CPUState for all accelerators 2017-07-04 14:30:03 +02:00
hax-darwin.c i386/hax: remove duplicated includes 2017-12-18 17:07:02 +03:00
hax-darwin.h i386/hax: remove duplicated includes 2017-12-18 17:07:02 +03:00
hax-i386.h hax: add Darwin support 2017-01-19 22:07:46 +01:00
hax-interface.h target/i386: Add Intel HAX files 2017-01-19 22:07:46 +01:00
hax-mem.c General warn report fixups 2017-09-19 14:09:34 +02:00
hax-windows.c target/i386: Add Intel HAX files 2017-01-19 22:07:46 +01:00
hax-windows.h i386/hax: remove duplicated include 2017-12-18 17:07:02 +03:00
helper.c target/i386: add the tcg_enabled() in target/i386/ 2017-07-05 09:12:44 +02:00
helper.h target-i386: correctly propagate retaddr into SVM helpers 2017-02-16 18:37:01 +01:00
hyperv-proto.h hyperv: add header with protocol definitions 2017-09-19 16:20:49 +02:00
hyperv.c hyperv: add header with protocol definitions 2017-09-19 16:20:49 +02:00
hyperv.h
int_helper.c target-i386: Use clz and ctz opcodes 2017-01-10 08:06:11 -08:00
kvm_i386.h Move CONFIG_KVM related definitions to kvm_i386.h 2017-07-04 14:30:03 +02:00
kvm-stub.c
kvm.c hyperv: make SynIC version msr constant 2017-12-21 09:22:44 +01:00
machine.c migration: pre_save return int 2017-09-27 11:35:59 +01:00
Makefile.objs target/i386: add the CONFIG_TCG into Makefiles 2017-07-05 09:12:44 +02:00
mem_helper.c
misc_helper.c target/i386/misc_helper: wrap BQL around another IRQ generator 2017-04-10 10:14:50 +01:00
monitor.c target/i386: fix "info mem" for LA57 mode 2017-09-19 16:20:49 +02:00
mpx_helper.c target/i386: move cpu_sync_bndcs_hflags() function 2017-07-05 09:12:44 +02:00
ops_sse_header.h target-i386: Use ctpop helper 2017-01-10 08:49:59 -08:00
ops_sse.h target/i386: fix phminposuw in-place operation 2017-09-19 14:09:11 +02:00
seg_helper.c target/i386: simplify handling of conforming code segments on interrupt 2017-07-04 14:30:03 +02:00
shift_helper_template.h
smm_helper.c target/i386: use multiple CPU AddressSpaces 2017-06-07 18:22:02 +02:00
svm_helper.c exec,dump,i386,ppc,s390x: don't include exec/cpu-all.h explicitly 2017-09-19 18:21:33 +02:00
svm.h
TODO
trace-events docs: fix broken paths to docs/devel/tracing.txt 2017-07-31 13:12:53 +03:00
translate.c target/i386: Fix handling of VEX prefixes 2017-12-21 09:22:45 +01:00
xsave_helper.c xsave_helper: pull xsave and xrstor out of kvm.c into helper function 2017-07-04 14:39:27 +02:00