mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-05 14:31:24 +12:00
Debugger: Fix step over (#13649)
This commit is contained in:
parent
47b65868f4
commit
7bce99d77b
1 changed files with 19 additions and 0 deletions
|
@ -15,6 +15,7 @@
|
||||||
#include "Emu/IdManager.h"
|
#include "Emu/IdManager.h"
|
||||||
#include "Emu/RSX/RSXThread.h"
|
#include "Emu/RSX/RSXThread.h"
|
||||||
#include "Emu/RSX/RSXDisAsm.h"
|
#include "Emu/RSX/RSXDisAsm.h"
|
||||||
|
#include "Emu/Cell/PPUAnalyser.h"
|
||||||
#include "Emu/Cell/PPUDisAsm.h"
|
#include "Emu/Cell/PPUDisAsm.h"
|
||||||
#include "Emu/Cell/PPUThread.h"
|
#include "Emu/Cell/PPUThread.h"
|
||||||
#include "Emu/Cell/SPUDisAsm.h"
|
#include "Emu/Cell/SPUDisAsm.h"
|
||||||
|
@ -41,6 +42,8 @@ constexpr auto s_pause_flags = cpu_flag::dbg_pause + cpu_flag::dbg_global_pause;
|
||||||
|
|
||||||
extern atomic_t<bool> g_debugger_pause_all_threads_on_bp;
|
extern atomic_t<bool> g_debugger_pause_all_threads_on_bp;
|
||||||
|
|
||||||
|
extern const ppu_decoder<ppu_itype> g_ppu_itype;
|
||||||
|
|
||||||
extern bool is_using_interpreter(u32 id_type)
|
extern bool is_using_interpreter(u32 id_type)
|
||||||
{
|
{
|
||||||
switch (id_type)
|
switch (id_type)
|
||||||
|
@ -1137,6 +1140,22 @@ void debugger_frame::DoStep(bool step_over)
|
||||||
|
|
||||||
if (const auto _state = +cpu->state; _state & s_pause_flags && _state & cpu_flag::wait && !(_state & cpu_flag::dbg_step))
|
if (const auto _state = +cpu->state; _state & s_pause_flags && _state & cpu_flag::wait && !(_state & cpu_flag::dbg_step))
|
||||||
{
|
{
|
||||||
|
if (should_step_over && cpu->id_type() == 1)
|
||||||
|
{
|
||||||
|
const u32 current_instruction_pc = cpu->get_pc();
|
||||||
|
|
||||||
|
vm::ptr<u32> inst_ptr = vm::cast(current_instruction_pc);
|
||||||
|
be_t<u32> result{};
|
||||||
|
|
||||||
|
if (inst_ptr.try_read(result))
|
||||||
|
{
|
||||||
|
ppu_opcode_t ppu_op{result};
|
||||||
|
const ppu_itype::type itype = g_ppu_itype.decode(ppu_op.opcode);
|
||||||
|
|
||||||
|
should_step_over = (itype == ppu_itype::BC || itype == ppu_itype::B || itype == ppu_itype::BCCTR || itype == ppu_itype::BCLR) && ppu_op.lk;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (should_step_over)
|
if (should_step_over)
|
||||||
{
|
{
|
||||||
const u32 current_instruction_pc = cpu->get_pc();
|
const u32 current_instruction_pc = cpu->get_pc();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue