mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Improve x86 disassembly (a few symbols)
This commit is contained in:
parent
30555f31ca
commit
1ddb508542
2 changed files with 49 additions and 28 deletions
|
@ -168,11 +168,15 @@ const char *ppsspp_resolver(struct ud*,
|
|||
}
|
||||
|
||||
// But these do.
|
||||
if (MIPSComp::jit->IsInSpace((u8 *)(intptr_t)addr)) {
|
||||
*offset = addr - (uint64_t)MIPSComp::jit->GetBasePtr();
|
||||
return "jitcode";
|
||||
}
|
||||
|
||||
// UGLY HACK because the API is terrible
|
||||
static char buf[128];
|
||||
std::string str;
|
||||
if (MIPSComp::jit->DescribeCodePtr((u8 *)(uintptr_t)addr, str)) {
|
||||
*offset = 0;
|
||||
truncate_cpy(buf, sizeof(buf), str.c_str());
|
||||
return buf;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -441,34 +441,51 @@ void Jit::AddContinuedBlock(u32 dest)
|
|||
}
|
||||
|
||||
bool Jit::DescribeCodePtr(const u8 *ptr, std::string &name) {
|
||||
u32 jitAddr = blocks.GetAddressFromBlockPtr(ptr);
|
||||
if (ptr == applyRoundingMode)
|
||||
name = "applyRoundingMode";
|
||||
else if (ptr == updateRoundingMode)
|
||||
name = "updateRoundingMode";
|
||||
else if (ptr == dispatcher)
|
||||
name = "dispatcher";
|
||||
else if (ptr == dispatcherInEAXNoCheck)
|
||||
name = "dispatcher (PC in EAX)";
|
||||
else if (ptr == dispatcherNoCheck)
|
||||
name = "dispatcherNoCheck";
|
||||
else if (ptr == dispatcherCheckCoreState)
|
||||
name = "dispatcherCheckCoreState";
|
||||
else if (ptr == enterDispatcher)
|
||||
name = "enterDispatcher";
|
||||
else if (ptr == restoreRoundingMode)
|
||||
name = "restoreRoundingMode";
|
||||
else {
|
||||
u32 jitAddr = blocks.GetAddressFromBlockPtr(ptr);
|
||||
|
||||
// Returns 0 when it's valid, but unknown.
|
||||
if (jitAddr == 0) {
|
||||
name = "UnknownOrDeletedBlock";
|
||||
} else if (jitAddr != (u32)-1) {
|
||||
char temp[1024];
|
||||
const std::string label = symbolMap.GetDescription(jitAddr);
|
||||
if (!label.empty())
|
||||
snprintf(temp, sizeof(temp), "%08x_%s", jitAddr, label.c_str());
|
||||
else
|
||||
snprintf(temp, sizeof(temp), "%08x", jitAddr);
|
||||
name = temp;
|
||||
} else if (IsInSpace(ptr)) {
|
||||
if (ptr < endOfPregeneratedCode) {
|
||||
name = "PreGenCode";
|
||||
// Returns 0 when it's valid, but unknown.
|
||||
if (jitAddr == 0) {
|
||||
name = "UnknownOrDeletedBlock";
|
||||
} else if (jitAddr != (u32)-1) {
|
||||
char temp[1024];
|
||||
const std::string label = symbolMap.GetDescription(jitAddr);
|
||||
if (!label.empty())
|
||||
snprintf(temp, sizeof(temp), "%08x_%s", jitAddr, label.c_str());
|
||||
else
|
||||
snprintf(temp, sizeof(temp), "%08x", jitAddr);
|
||||
name = temp;
|
||||
} else if (IsInSpace(ptr)) {
|
||||
if (ptr < endOfPregeneratedCode) {
|
||||
name = "PreGenCode";
|
||||
} else {
|
||||
name = "Unknown";
|
||||
}
|
||||
} else if (thunks.IsInSpace(ptr)) {
|
||||
name = "Thunk";
|
||||
} else if (safeMemFuncs.IsInSpace(ptr)) {
|
||||
name = "JitSafeMem";
|
||||
} else {
|
||||
name = "Unknown";
|
||||
// Not anywhere in jit, then.
|
||||
return false;
|
||||
}
|
||||
} else if (thunks.IsInSpace(ptr)) {
|
||||
name = "Thunk";
|
||||
} else if (safeMemFuncs.IsInSpace(ptr)) {
|
||||
name = "JitSafeMem";
|
||||
} else {
|
||||
// Not anywhere in jit, then.
|
||||
return false;
|
||||
}
|
||||
|
||||
// If we got here, one of the above cases matched.
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue