On 9/16/23 05:36, Andrew Cooper wrote:
> @@ -658,7 +660,7 @@ static int cf_check rep_ins(
>
> ++*reps;
>
> - if ( poc->bpmatch || hypercall_preempt_check() )
> + if ( poc->ctxt.retire.pending_dbg || hypercall_preempt_check() )
> break;
>
> /* x86_emulate() clips the repetition count to ensure we don't wrap.
> */
(snip)
> @@ -726,7 +729,7 @@ static int cf_check rep_outs(
>
> ++*reps;
>
> - if ( poc->bpmatch || hypercall_preempt_check() )
> + if ( poc->ctxt.retire.pending_dbg || hypercall_preempt_check() )
> break;
>
> /* x86_emulate() clips the repetition count to ensure we don't wrap.
> */
These two hunks look like a behavioral change in singlestep mode.
This is actually a fix, assuming the emulator previously did not handle
'rep {in,out}s' in singlestep mode correctly, since it now checks for
PENDING_DBG.BS in addition to PENDING_DBG.B[0-4].
If this is the case, (at least) this part of the patch looks like a stable
candidate. You might want to edit the commit message to reflect that.
(Ideally all the HWBP handling should be part of the emulator logic, but
I don't see an easy way to generalize the PV-specific logic. It could
be its own patch anyway.)
--
Sincerely,
Jinoh Kang