mirror of https://github.com/PCSX2/pcsx2.git
Merge pull request #1205 from NZJenkins/Delay-bp-conditions
Check delay breakpoint conditions
This commit is contained in:
commit
5abacd3667
|
@ -602,17 +602,19 @@ inline bool isBranchOrJump(u32 addr)
|
||||||
|
|
||||||
// The next two functions return 0 if no breakpoint is needed,
|
// The next two functions return 0 if no breakpoint is needed,
|
||||||
// 1 if it's needed on the current pc, 2 if it's needed in the delay slot
|
// 1 if it's needed on the current pc, 2 if it's needed in the delay slot
|
||||||
|
// 3 if needed in both
|
||||||
|
|
||||||
int isBreakpointNeeded(u32 addr)
|
int isBreakpointNeeded(u32 addr)
|
||||||
{
|
{
|
||||||
|
int bpFlags = 0;
|
||||||
if (CBreakPoints::IsAddressBreakPoint(addr))
|
if (CBreakPoints::IsAddressBreakPoint(addr))
|
||||||
return 1;
|
bpFlags += 1;
|
||||||
|
|
||||||
// there may be a breakpoint in the delay slot
|
// there may be a breakpoint in the delay slot
|
||||||
if (isBranchOrJump(addr) && CBreakPoints::IsAddressBreakPoint(addr+4))
|
if (isBranchOrJump(addr) && CBreakPoints::IsAddressBreakPoint(addr+4))
|
||||||
return 2;
|
bpFlags += 2;
|
||||||
|
|
||||||
return 0;
|
return bpFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
int isMemcheckNeeded(u32 pc)
|
int isMemcheckNeeded(u32 pc)
|
||||||
|
|
|
@ -1088,8 +1088,23 @@ void dynarecCheckBreakpoint()
|
||||||
if (CBreakPoints::CheckSkipFirst(pc) != 0)
|
if (CBreakPoints::CheckSkipFirst(pc) != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
int bpFlags = isBreakpointNeeded(pc);
|
||||||
|
bool hit = false;
|
||||||
|
//check breakpoint at current pc
|
||||||
|
if (bpFlags & 1) {
|
||||||
auto cond = CBreakPoints::GetBreakPointCondition(pc);
|
auto cond = CBreakPoints::GetBreakPointCondition(pc);
|
||||||
if (cond && !cond->Evaluate())
|
if (cond == NULL || cond->Evaluate()) {
|
||||||
|
hit = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//check breakpoint in delay slot
|
||||||
|
if (bpFlags & 2) {
|
||||||
|
auto cond = CBreakPoints::GetBreakPointCondition(pc + 4);
|
||||||
|
if (cond == NULL || cond->Evaluate())
|
||||||
|
hit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!hit)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CBreakPoints::SetBreakpointTriggered(true);
|
CBreakPoints::SetBreakpointTriggered(true);
|
||||||
|
|
Loading…
Reference in New Issue