On 08/19/2010 07:55 AM, Wei Yongjun wrote:
> Hi Avi Kivity:
>
>> EFLAGS.ZF needs to be checked after each iteration, not before.
>>
>> Signed-off-by: Avi Kivity <[email protected]>
>> ---
>>  arch/x86/kvm/emulate.c |   38 ++++++++++++++++++--------------------
>>  1 files changed, 18 insertions(+), 20 deletions(-)
>>
>> diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
>> index 729853a..d15a746 100644
>> --- a/arch/x86/kvm/emulate.c
>> +++ b/arch/x86/kvm/emulate.c
>> @@ -2782,28 +2782,10 @@ x86_emulate_insn(struct x86_emulate_ctxt *ctxt)
>>              ctxt->restart = true;
>>              /* All REP prefixes have the same first termination condition */
>>              if (address_mask(c, c->regs[VCPU_REGS_RCX]) == 0) {
>> -            string_done:
>>                      ctxt->restart = false;
>>                      ctxt->eip = c->eip;
>>                      goto done;
>>              }
>> -            /* The second termination condition only applies for REPE
>> -             * and REPNE. Test if the repeat string operation prefix is
>> -             * REPE/REPZ or REPNE/REPNZ and if it's the case it tests the
>> -             * corresponding termination condition according to:
>> -             *      - if REPE/REPZ and ZF = 0 then done
>> -             *      - if REPNE/REPNZ and ZF = 1 then done
>> -             */
>> -            if ((c->b == 0xa6) || (c->b == 0xa7) ||
>> -                (c->b == 0xae) || (c->b == 0xaf)) {
>> -                    if ((c->rep_prefix == REPE_PREFIX) &&
>> -                        ((ctxt->eflags & EFLG_ZF) == 0))
>> -                            goto string_done;
>> -                    if ((c->rep_prefix == REPNE_PREFIX) &&
>> -                        ((ctxt->eflags & EFLG_ZF) == EFLG_ZF))
>> -                            goto string_done;
>> -            }
>> -            c->eip = ctxt->eip;
>>   
> It seems that you cannot remove the above line, the assign for eip is need.
> remove it will break FreeDOS livecd. Not sure why need this.

I'll try it out. Are you running FreeDOS with
emulate_invalid_guest_state=0 or 1?

-- 
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to