Almost made to get rid of icount
This commit is contained in:
parent
15aadb8a19
commit
fb76e852f0
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: cpu.cc,v 1.285 2009-04-07 16:12:19 sshwarts Exp $
|
||||
// $Id: cpu.cc,v 1.286 2009-04-11 13:58:34 sshwarts Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||
@ -884,15 +884,15 @@ bx_bool BX_CPU_C::dbg_instruction_epilog(void)
|
||||
if (BX_CPU_THIS_PTR break_point) {
|
||||
switch (BX_CPU_THIS_PTR break_point) {
|
||||
case BREAK_POINT_TIME:
|
||||
BX_INFO(("[" FMT_LL "d] Caught time breakpoint", bx_pc_system.time_ticks()));
|
||||
BX_INFO(("[" FMT_LL "d] Caught time breakpoint", tt));
|
||||
BX_CPU_THIS_PTR stop_reason = STOP_TIME_BREAK_POINT;
|
||||
return(1); // on a breakpoint
|
||||
case BREAK_POINT_READ:
|
||||
BX_INFO(("[" FMT_LL "d] Caught read watch point", bx_pc_system.time_ticks()));
|
||||
BX_INFO(("[" FMT_LL "d] Caught read watch point", tt));
|
||||
BX_CPU_THIS_PTR stop_reason = STOP_READ_WATCH_POINT;
|
||||
return(1); // on a breakpoint
|
||||
case BREAK_POINT_WRITE:
|
||||
BX_INFO(("[" FMT_LL "d] Caught write watch point", bx_pc_system.time_ticks()));
|
||||
BX_INFO(("[" FMT_LL "d] Caught write watch point", tt));
|
||||
BX_CPU_THIS_PTR stop_reason = STOP_WRITE_WATCH_POINT;
|
||||
return(1); // on a breakpoint
|
||||
default:
|
||||
@ -923,37 +923,29 @@ bx_bool BX_CPU_C::dbg_instruction_epilog(void)
|
||||
if (bx_guard.guard_for & BX_DBG_GUARD_IADDR_ALL) {
|
||||
#if (BX_DBG_MAX_VIR_BPOINTS > 0)
|
||||
if (bx_guard.guard_for & BX_DBG_GUARD_IADDR_VIR) {
|
||||
if ((BX_CPU_THIS_PTR guard_found.icount!=0) ||
|
||||
(tt != BX_CPU_THIS_PTR guard_found.time_tick))
|
||||
{
|
||||
for (unsigned n=0; n<bx_guard.iaddr.num_virtual; n++) {
|
||||
if (bx_guard.iaddr.vir[n].enabled &&
|
||||
(bx_guard.iaddr.vir[n].cs == cs) &&
|
||||
(bx_guard.iaddr.vir[n].eip == debug_eip))
|
||||
{
|
||||
BX_CPU_THIS_PTR guard_found.guard_found = BX_DBG_GUARD_IADDR_VIR;
|
||||
BX_CPU_THIS_PTR guard_found.iaddr_index = n;
|
||||
BX_CPU_THIS_PTR guard_found.time_tick = tt;
|
||||
return(1); // on a breakpoint
|
||||
}
|
||||
for (unsigned n=0; n<bx_guard.iaddr.num_virtual; n++) {
|
||||
if (bx_guard.iaddr.vir[n].enabled &&
|
||||
(bx_guard.iaddr.vir[n].cs == cs) &&
|
||||
(bx_guard.iaddr.vir[n].eip == debug_eip))
|
||||
{
|
||||
BX_CPU_THIS_PTR guard_found.guard_found = BX_DBG_GUARD_IADDR_VIR;
|
||||
BX_CPU_THIS_PTR guard_found.iaddr_index = n;
|
||||
BX_CPU_THIS_PTR guard_found.time_tick = tt;
|
||||
return(1); // on a breakpoint
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if (BX_DBG_MAX_LIN_BPOINTS > 0)
|
||||
if (bx_guard.guard_for & BX_DBG_GUARD_IADDR_LIN) {
|
||||
if ((BX_CPU_THIS_PTR guard_found.icount!=0) ||
|
||||
(tt != BX_CPU_THIS_PTR guard_found.time_tick))
|
||||
{
|
||||
for (unsigned n=0; n<bx_guard.iaddr.num_linear; n++) {
|
||||
if (bx_guard.iaddr.lin[n].enabled &&
|
||||
(bx_guard.iaddr.lin[n].addr == BX_CPU_THIS_PTR guard_found.laddr))
|
||||
{
|
||||
BX_CPU_THIS_PTR guard_found.guard_found = BX_DBG_GUARD_IADDR_LIN;
|
||||
BX_CPU_THIS_PTR guard_found.iaddr_index = n;
|
||||
BX_CPU_THIS_PTR guard_found.time_tick = tt;
|
||||
return(1); // on a breakpoint
|
||||
}
|
||||
for (unsigned n=0; n<bx_guard.iaddr.num_linear; n++) {
|
||||
if (bx_guard.iaddr.lin[n].enabled &&
|
||||
(bx_guard.iaddr.lin[n].addr == BX_CPU_THIS_PTR guard_found.laddr))
|
||||
{
|
||||
BX_CPU_THIS_PTR guard_found.guard_found = BX_DBG_GUARD_IADDR_LIN;
|
||||
BX_CPU_THIS_PTR guard_found.iaddr_index = n;
|
||||
BX_CPU_THIS_PTR guard_found.time_tick = tt;
|
||||
return(1); // on a breakpoint
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -962,21 +954,13 @@ bx_bool BX_CPU_C::dbg_instruction_epilog(void)
|
||||
if (bx_guard.guard_for & BX_DBG_GUARD_IADDR_PHY) {
|
||||
bx_phy_address phy;
|
||||
bx_bool valid = dbg_xlate_linear2phy(BX_CPU_THIS_PTR guard_found.laddr, &phy);
|
||||
// The "guard_found.icount!=0" condition allows you to step or
|
||||
// continue beyond a breakpoint. Bryce tried removing it once,
|
||||
// and once you get to a breakpoint you are stuck there forever.
|
||||
// Not pretty.
|
||||
if (valid && ((BX_CPU_THIS_PTR guard_found.icount!=0) ||
|
||||
(tt != BX_CPU_THIS_PTR guard_found.time_tick)))
|
||||
{
|
||||
for (unsigned n=0; n<bx_guard.iaddr.num_physical; n++) {
|
||||
if (bx_guard.iaddr.phy[n].enabled && (bx_guard.iaddr.phy[n].addr == phy))
|
||||
{
|
||||
BX_CPU_THIS_PTR guard_found.guard_found = BX_DBG_GUARD_IADDR_PHY;
|
||||
BX_CPU_THIS_PTR guard_found.iaddr_index = n;
|
||||
BX_CPU_THIS_PTR guard_found.time_tick = tt;
|
||||
return(1); // on a breakpoint
|
||||
}
|
||||
for (unsigned n=0; n<bx_guard.iaddr.num_physical; n++) {
|
||||
if (bx_guard.iaddr.phy[n].enabled && (bx_guard.iaddr.phy[n].addr == phy))
|
||||
{
|
||||
BX_CPU_THIS_PTR guard_found.guard_found = BX_DBG_GUARD_IADDR_PHY;
|
||||
BX_CPU_THIS_PTR guard_found.iaddr_index = n;
|
||||
BX_CPU_THIS_PTR guard_found.time_tick = tt;
|
||||
return(1); // on a breakpoint
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user