small fix for LOAD_SS interrupts inhibit

This commit is contained in:
Stanislav Shwartsman 2013-05-04 19:10:50 +00:00
parent 05c711b2b5
commit b2b42dd714
2 changed files with 8 additions and 4 deletions

View File

@ -73,7 +73,7 @@ BX_INSF_TYPE BX_CPP_AttrRegparmN(1) BX_CPU_C::RETnear64(bxInstruction_c *i)
Bit64u return_RIP = stack_read_qword(RSP);
if (! IsCanonical(return_RIP)) {
BX_ERROR(("RETnear64: canonical RIP violation %08x%08x", GET32H(return_RIP), GET32L(return_RIP)));
BX_ERROR(("RETnear64: canonical RIP violation 0x%08x%08x", GET32H(return_RIP), GET32L(return_RIP)));
exception(BX_GP_EXCEPTION, 0);
}

View File

@ -373,9 +373,13 @@ bx_bool BX_CPU_C::handleAsyncEvent(void)
// Certain instructions inhibit interrupts, some debug exceptions and single-step traps.
void BX_CPU_C::inhibit_interrupts(unsigned mask)
{
BX_DEBUG(("inhibit interrupts mask = %d", mask));
BX_CPU_THIS_PTR inhibit_mask = mask;
BX_CPU_THIS_PTR inhibit_icount = get_icount() + 1; // inhibit for next instruction
// Loading of SS disables interrupts until the next instruction completes
// but only under assumption that previous instruction didn't load SS also.
if (! interrupts_inhibited(BX_INHIBIT_INTERRUPTS_BY_MOVSS)) {
BX_DEBUG(("inhibit interrupts mask = %d", mask));
BX_CPU_THIS_PTR inhibit_mask = mask;
BX_CPU_THIS_PTR inhibit_icount = get_icount() + 1; // inhibit for next instruction
}
}
bx_bool BX_CPU_C::interrupts_inhibited(unsigned mask)