Correctly set DR6 when instr BP detected

This commit is contained in:
Stanislav Shwartsman 2008-09-26 20:41:41 +00:00
parent 07d3a79bfa
commit dee5b0a7a6

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: cpu.cc,v 1.241 2008-09-24 10:39:35 sshwarts Exp $
// $Id: cpu.cc,v 1.242 2008-09-26 20:41:41 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -573,7 +573,15 @@ unsigned BX_CPU_C::handleAsyncEvent(void)
// boundary. (becomes a trap)
if (! (BX_CPU_THIS_PTR inhibit_mask & BX_INHIBIT_DEBUG)) {
// Commit debug events to DR6
BX_CPU_THIS_PTR dr6 = BX_CPU_THIS_PTR debug_trap;
#if BX_CPU_LEVEL <= 4
// On 386/486 bit12 is settable
BX_CPU_THIS_PTR dr6 = (BX_CPU_THIS_PTR dr6 & 0xffff0ff0) |
(BX_CPU_THIS_PTR debug_trap & 0x0000f00f);
#else
// On Pentium+, bit12 is always zero
BX_CPU_THIS_PTR dr6 = (BX_CPU_THIS_PTR dr6 & 0xffff0ff0) |
(BX_CPU_THIS_PTR debug_trap & 0x0000e00f);
#endif
exception(BX_DB_EXCEPTION, 0, 0); // no error, not interrupt
}
}