Correctly identify the start of a line when changing the address

This commit is contained in:
Kingcom committed 2013-11-24 13:53:50 +01:00
1 parent a928c62ad1
commit 63e2f34beb
5 files changed
+29 -6

No files matched your search

+20 -1
View File
@@ -28,6 +28,10 @@
std::map<u32,DisassemblyEntry*> DisassemblyManager::entries;
DebugInterface* DisassemblyManager::cpu;
bool isInInterval(u32 start, u32 size, u32 value)
{
return start <= value && value < start+size;
}
void parseDisasm(const char* disasm, char* opcode, char* arguments, bool insertSymbols)
{
@@ -170,6 +174,21 @@ DisassemblyLineInfo DisassemblyManager::getLine(u32 address, bool insertSymbols)
return result;
}
u32 DisassemblyManager::getStartAddress(u32 address)
{
auto it = findDisassemblyEntry(entries,address,false);
if (it == entries.end())
{
analyze(address,1);
it = findDisassemblyEntry(entries,address,false);
if (it == entries.end())
return address;
}
DisassemblyEntry* entry = it->second;
int line = entry->getLineNum(address,true);
return entry->getLineAddress(line);
}
u32 DisassemblyManager::getNthPreviousAddress(u32 address, int n)
{
@@ -510,7 +529,7 @@ bool DisassemblyMacro::disassemble(u32 address, DisassemblyLineInfo& dest)
case MACRO_LI:
case MACRO_MEMORYIMM:
dest.name = name;
sprintf(buffer,"%s,%08X",DisassemblyManager::getCpu()->GetRegName(0,rt),immediate);
sprintf(buffer,"%s,0x%08X",DisassemblyManager::getCpu()->GetRegName(0,rt),immediate);
dest.params = buffer;
break;
default: