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))
|
||||
{
|
||||
bool is_function = false;
|
||||
u32 toc = 0;
|
||||
|
||||
if (const u32 reg_ptr = *vm::get_super_ptr<u32>(static_cast<u32>(reg));
|
||||
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;
|
||||
}
|
||||
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);
|
||||
|
||||
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());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue