SPU Analyzer: A fixup for crash, TODO: proper fix
Some checks are pending
Build RPCS3 / RPCS3 Linux ubuntu-24.04 clang (push) Waiting to run
Build RPCS3 / RPCS3 Linux ubuntu-24.04 gcc (push) Waiting to run
Build RPCS3 / RPCS3 Linux ubuntu-24.04-arm clang (push) Waiting to run
Build RPCS3 / RPCS3 Windows (push) Waiting to run

This commit is contained in:
trigger 2025-03-02 00:24:42 -08:00 committed by GitHub
parent 6bd1ab576c
commit 1dc3ebf891
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -4603,7 +4603,7 @@ spu_program spu_recompiler_base::analyse(const be_t<u32>* ls, u32 entry_point, s
{ {
bb.terminator = term_type::interrupt_call; bb.terminator = term_type::interrupt_call;
} }
else if (last_inst != spu_itype::BISL && bb.targets[0] == tia + 4 && op.ra == s_reg_lr) else if (last_inst != spu_itype::BISL && !bb.targets.empty() && bb.targets[0] == tia + 4 && op.ra == s_reg_lr)
{ {
// Conditional return (TODO) // Conditional return (TODO)
bb.terminator = term_type::ret; bb.terminator = term_type::ret;
@ -4728,9 +4728,11 @@ spu_program spu_recompiler_base::analyse(const be_t<u32>* ls, u32 entry_point, s
if (is_ok && bb.terminator == term_type::fallthrough) if (is_ok && bb.terminator == term_type::fallthrough)
{ {
// Can't just fall out of the function // Can't just fall out of the function
if (bb.targets.size() != 1 || bb.targets[0] >= flim) const auto bb_target_value = bb.targets.empty() ? 0 : bb.targets[0];
if (bb.targets.size() != 1 || bb_target_value >= flim)
{ {
spu_log.error("Function 0x%05x: [0x%05x] bad fallthrough to 0x%x", f.first, addr, bb.targets[0]); spu_log.error("Function 0x%05x: [0x%05x] bad fallthrough to 0x%x", f.first, addr, bb_target_value);
is_ok = false; is_ok = false;
} }
} }