We long ago fixed the emulator to not inject exceptions behind our back.
Therefore, assert that that a PV event (including interrupts, because that
would be buggy too) isn't pending, rather than skipping the #DB injection if
one is.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
switch ( rc )
{
case X86EMUL_OKAY:
+ ASSERT(!curr->arch.pv.trap_bounce.flags);
+
if ( ctxt.ctxt.retire.singlestep )
ctxt.bpmatch |= DR_STEP;
+
if ( ctxt.bpmatch )
{
curr->arch.dr6 |= ctxt.bpmatch | DR_STATUS_RESERVED_ONE;
- if ( !(curr->arch.pv.trap_bounce.flags & TBF_EXCEPTION) )
- pv_inject_hw_exception(X86_EXC_DB, X86_EVENT_NO_EC);
+ pv_inject_hw_exception(X86_EXC_DB, X86_EVENT_NO_EC);
}
+
/* fall through */
case X86EMUL_RETRY:
return EXCRET_fault_fixed;