mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-29 22:20:48 +00:00
SPU Debugger: Print reservation data
This commit is contained in:
parent
87b6284275
commit
d17d22139e
@ -1317,12 +1317,6 @@ std::string spu_thread::dump_regs() const
|
|||||||
fmt::append(ret, "Stall Mask: 0x%x\n", ch_stall_mask);
|
fmt::append(ret, "Stall Mask: 0x%x\n", ch_stall_mask);
|
||||||
fmt::append(ret, "Tag Stat: %s\n", ch_tag_stat);
|
fmt::append(ret, "Tag Stat: %s\n", ch_tag_stat);
|
||||||
fmt::append(ret, "Tag Update: %s\n", mfc_tag_update{ch_tag_upd});
|
fmt::append(ret, "Tag Update: %s\n", mfc_tag_update{ch_tag_upd});
|
||||||
|
|
||||||
if (const u32 addr = raddr)
|
|
||||||
fmt::append(ret, "Reservation Addr: 0x%x\n", addr);
|
|
||||||
else
|
|
||||||
fmt::append(ret, "Reservation Addr: none\n");
|
|
||||||
|
|
||||||
fmt::append(ret, "Atomic Stat: %s\n", ch_atomic_stat); // TODO: use mfc_atomic_status formatting
|
fmt::append(ret, "Atomic Stat: %s\n", ch_atomic_stat); // TODO: use mfc_atomic_status formatting
|
||||||
fmt::append(ret, "Interrupts: %s\n", interrupts_enabled ? "Enabled" : "Disabled");
|
fmt::append(ret, "Interrupts: %s\n", interrupts_enabled ? "Enabled" : "Disabled");
|
||||||
fmt::append(ret, "Inbound Mailbox: %s\n", ch_in_mbox);
|
fmt::append(ret, "Inbound Mailbox: %s\n", ch_in_mbox);
|
||||||
@ -1330,7 +1324,21 @@ std::string spu_thread::dump_regs() const
|
|||||||
fmt::append(ret, "Out Interrupts Mailbox: %s\n", ch_out_intr_mbox);
|
fmt::append(ret, "Out Interrupts Mailbox: %s\n", ch_out_intr_mbox);
|
||||||
fmt::append(ret, "SNR config: 0x%llx\n", snr_config);
|
fmt::append(ret, "SNR config: 0x%llx\n", snr_config);
|
||||||
fmt::append(ret, "SNR1: %s\n", ch_snr1);
|
fmt::append(ret, "SNR1: %s\n", ch_snr1);
|
||||||
fmt::append(ret, "SNR2: %s", ch_snr2);
|
fmt::append(ret, "SNR2: %s\n", ch_snr2);
|
||||||
|
|
||||||
|
const u32 addr = raddr;
|
||||||
|
|
||||||
|
fmt::append(ret, "Reservation Addr: %s\n", addr ? fmt::format("0x%x", addr) : "N/A");
|
||||||
|
fmt::append(ret, "Reservation Data:\n");
|
||||||
|
|
||||||
|
be_t<u32> data[32]{};
|
||||||
|
std::memcpy(data, rdata, sizeof(rdata)); // Show the data even if the reservation was lost inside the atomic loop
|
||||||
|
|
||||||
|
for (usz i = 0; i < std::size(data); i += 4)
|
||||||
|
{
|
||||||
|
fmt::append(ret, "[0x%02x] %08x %08x %08x %08x\n", i * sizeof(data[0])
|
||||||
|
, data[i + 0], data[i + 1], data[i + 2], data[i + 3]);
|
||||||
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -3750,6 +3758,12 @@ s64 spu_thread::get_ch_value(u32 ch)
|
|||||||
|
|
||||||
for (; !events.count; events = get_events(mask1, false, true))
|
for (; !events.count; events = get_events(mask1, false, true))
|
||||||
{
|
{
|
||||||
|
if (is_paused())
|
||||||
|
{
|
||||||
|
// Ensure reservation data won't change while paused for debugging purposes
|
||||||
|
check_state();
|
||||||
|
}
|
||||||
|
|
||||||
state += cpu_flag::wait;
|
state += cpu_flag::wait;
|
||||||
|
|
||||||
if (is_stopped())
|
if (is_stopped())
|
||||||
@ -3766,6 +3780,11 @@ s64 spu_thread::get_ch_value(u32 ch)
|
|||||||
|
|
||||||
for (; !events.count; events = get_events(mask1, true, true))
|
for (; !events.count; events = get_events(mask1, true, true))
|
||||||
{
|
{
|
||||||
|
if (is_paused())
|
||||||
|
{
|
||||||
|
check_state();
|
||||||
|
}
|
||||||
|
|
||||||
state += cpu_flag::wait;
|
state += cpu_flag::wait;
|
||||||
|
|
||||||
if (is_stopped())
|
if (is_stopped())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user