Debugger: Do not mark the instruction after a branch

This commit is contained in:
Sour 2019-02-02 13:23:37 -05:00
parent eef4e5472c
commit 52c4dbc3a0

View file

@ -784,19 +784,23 @@ bool Debugger::ProcessRamOperation(MemoryOperationType type, uint16_t &addr, uin
_curInstructionCycle = _cpu->GetCycleCount(); _curInstructionCycle = _cpu->GetCycleCount();
bool isSubEntryPoint = _lastInstruction == 0x20; //Previous instruction was a JSR bool isSubEntryPoint = _lastInstruction == 0x20; //Previous instruction was a JSR
_disassembler->BuildCache(addressInfo, addr, isSubEntryPoint, true);
if(absoluteAddr >= 0) { if(absoluteAddr >= 0) {
bool isJumpTarget = _disassembler->IsJump(_lastInstruction);
_codeDataLogger->SetFlag(absoluteAddr, CdlPrgFlags::Code); _codeDataLogger->SetFlag(absoluteAddr, CdlPrgFlags::Code);
if(isSubEntryPoint) { if(isSubEntryPoint) {
_codeDataLogger->SetFlag(absoluteAddr, CdlPrgFlags::SubEntryPoint); _codeDataLogger->SetFlag(absoluteAddr, CdlPrgFlags::SubEntryPoint);
_functionEntryPoints.emplace(absoluteAddr); _functionEntryPoints.emplace(absoluteAddr);
} else if(isJumpTarget) {
//Only mark as jump target if not marked as sub entry point
_codeDataLogger->SetFlag(absoluteAddr, CdlPrgFlags::JumpTarget);
}
} }
_disassembler->BuildCache(addressInfo, addr, isSubEntryPoint, true); if(_disassembler->IsJump(value) && value != 0x20) {
//Only mark as jump target if not marked as sub entry point
int32_t targetAddr = GetAbsoluteAddress(_disassembler->GetDisassemblyInfo(addressInfo).GetJumpDestination(_cpu->GetPC(), _memoryManager.get()));
if(targetAddr >= 0) {
_codeDataLogger->SetFlag(targetAddr, CdlPrgFlags::JumpTarget);
}
}
}
ProcessStepConditions(addr); ProcessStepConditions(addr);