Commit 2d5f696c authored by Roman Bolshakov's avatar Roman Bolshakov Committed by Paolo Bonzini
Browse files

i386: hvf: Drop fetch_rip from HVFX86EmulatorState



The field is used to print address of instructions that have no parser
in decode_invalid(). RIP from VMCS is saved into fetch_rip before
decoding starts but it's also saved into env->eip in load_regs().
Therefore env->eip can be used instead of fetch_rip.

While at it, correct address printed in decode_invalid(). It prints an
address before the unknown instruction.

Signed-off-by: default avatarRoman Bolshakov <r.bolshakov@yadro.com>
Message-Id: <20200528193758.51454-8-r.bolshakov@yadro.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 5d32173f
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -767,8 +767,6 @@ int hvf_vcpu_exec(CPUState *cpu)
                struct x86_decode decode;

                load_regs(cpu);
                env->hvf_emul->fetch_rip = rip;

                decode_instruction(env, &decode);
                exec_instruction(env, &decode);
                store_regs(cpu);
@@ -809,8 +807,6 @@ int hvf_vcpu_exec(CPUState *cpu)
            struct x86_decode decode;

            load_regs(cpu);
            env->hvf_emul->fetch_rip = rip;

            decode_instruction(env, &decode);
            assert(ins_len == decode.len);
            exec_instruction(env, &decode);
@@ -915,8 +911,6 @@ int hvf_vcpu_exec(CPUState *cpu)
            struct x86_decode decode;

            load_regs(cpu);
            env->hvf_emul->fetch_rip = rip;

            decode_instruction(env, &decode);
            exec_instruction(env, &decode);
            store_regs(cpu);
+0 −1
Original line number Diff line number Diff line
@@ -293,7 +293,6 @@ typedef struct lazy_flags {

/* Definition of hvf_x86_state is here */
struct HVFX86EmulatorState {
    uint64_t fetch_rip;
    struct x86_register regs[16];
    struct x86_reg_flags   rflags;
    struct lazy_flags   lflags;
+1 −2
Original line number Diff line number Diff line
@@ -29,8 +29,7 @@

static void decode_invalid(CPUX86State *env, struct x86_decode *decode)
{
    printf("%llx: failed to decode instruction ", env->hvf_emul->fetch_rip -
           decode->len);
    printf("%llx: failed to decode instruction ", env->eip);
    for (int i = 0; i < decode->opcode_len; i++) {
        printf("%x ", decode->opcode[i]);
    }