Commit 1a1435dd authored by Rudolf Marek's avatar Rudolf Marek Committed by Paolo Bonzini
Browse files

target/i386: Clear RF on SYSCALL instruction



Fix the SYSCALL instruction in 64-bit (long mode). The RF flag
should be cleared in R11 as well as in the RFLAGS. Intel
and AMD CPUs behave same. AMD has this documented in the
APM vol 3.

Signed-off-by: default avatarRoman Kapl <rka@sysgo.com>
Signed-off-by: default avatarRudolf Marek <rudolf.marek@sysgo.com>
Message-Id: <20181019122449.26387-1-rka@sysgo.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 2185fd67
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -991,11 +991,11 @@ void helper_syscall(CPUX86State *env, int next_eip_addend)
        int code64;

        env->regs[R_ECX] = env->eip + next_eip_addend;
        env->regs[11] = cpu_compute_eflags(env);
        env->regs[11] = cpu_compute_eflags(env) & ~RF_MASK;

        code64 = env->hflags & HF_CS64_MASK;

        env->eflags &= ~env->fmask;
        env->eflags &= ~(env->fmask | RF_MASK);
        cpu_load_eflags(env, env->eflags, 0);
        cpu_x86_load_seg_cache(env, R_CS, selector & 0xfffc,
                           0, 0xffffffff,