mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-13 02:08:49 +12:00
PPU debugger: report functions on registers display
This commit is contained in:
parent
368bd7cf02
commit
0bf73ba0bc
1 changed files with 29 additions and 1 deletions
|
@ -383,17 +383,45 @@ std::string ppu_thread::dump_regs() const
|
||||||
|
|
||||||
if (reg <= UINT32_MAX && vm::check_addr(static_cast<u32>(reg), max_str_len))
|
if (reg <= UINT32_MAX && vm::check_addr(static_cast<u32>(reg), max_str_len))
|
||||||
{
|
{
|
||||||
|
bool is_function = false;
|
||||||
|
u32 toc = 0;
|
||||||
|
|
||||||
if (const u32 reg_ptr = *vm::get_super_ptr<u32>(static_cast<u32>(reg));
|
if (const u32 reg_ptr = *vm::get_super_ptr<u32>(static_cast<u32>(reg));
|
||||||
vm::check_addr(reg_ptr, max_str_len))
|
vm::check_addr(reg_ptr, max_str_len))
|
||||||
{
|
{
|
||||||
|
if ((reg | reg_ptr) % 4 == 0 && vm::check_addr(reg_ptr, 4, vm::page_executable))
|
||||||
|
{
|
||||||
|
toc = *vm::get_super_ptr<u32>(static_cast<u32>(reg + 4));
|
||||||
|
|
||||||
|
if (toc % 4 == 0 && vm::check_addr(toc))
|
||||||
|
{
|
||||||
|
is_function = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
reg = reg_ptr;
|
reg = reg_ptr;
|
||||||
}
|
}
|
||||||
|
else if (reg % 4 == 0 && vm::check_addr(reg, 4, vm::page_executable))
|
||||||
|
{
|
||||||
|
is_function = true;
|
||||||
|
}
|
||||||
|
|
||||||
const auto gpr_buf = vm::get_super_ptr<u8>(reg);
|
const auto gpr_buf = vm::get_super_ptr<u8>(reg);
|
||||||
|
|
||||||
std::string buf_tmp(gpr_buf, gpr_buf + max_str_len);
|
std::string buf_tmp(gpr_buf, gpr_buf + max_str_len);
|
||||||
|
|
||||||
if (std::isprint(static_cast<u8>(buf_tmp[0])) && std::isprint(static_cast<u8>(buf_tmp[1])) && std::isprint(static_cast<u8>(buf_tmp[2])))
|
if (is_function)
|
||||||
|
{
|
||||||
|
if (toc)
|
||||||
|
{
|
||||||
|
fmt::append(ret, " -> func(at=0x%x, toc=0x%x)", reg, toc);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fmt::append(ret, " -> function-code");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (std::isprint(static_cast<u8>(buf_tmp[0])) && std::isprint(static_cast<u8>(buf_tmp[1])) && std::isprint(static_cast<u8>(buf_tmp[2])))
|
||||||
{
|
{
|
||||||
fmt::append(ret, " -> \"%s\"", buf_tmp.c_str());
|
fmt::append(ret, " -> \"%s\"", buf_tmp.c_str());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue