PPU debugger: Show stack address of each function

This commit is contained in:
Eladash 2020-07-03 07:56:55 +03:00 committed by Megamouse
parent c98ec4d014
commit dc25a3fa2a
9 changed files with 16 additions and 16 deletions

View File

@ -627,7 +627,7 @@ std::string cpu_thread::dump_callstack() const
return {};
}
std::vector<u32> cpu_thread::dump_callstack_list() const
std::vector<std::pair<u32, u32>> cpu_thread::dump_callstack_list() const
{
return {};
}

View File

@ -103,7 +103,7 @@ public:
virtual std::string dump_callstack() const;
// Get CPU call stack list
virtual std::vector<u32> dump_callstack_list() const;
virtual std::vector<std::pair<u32, u32>> dump_callstack_list() const;
// Get CPU dump of misc information
virtual std::string dump_misc() const;

View File

@ -472,16 +472,16 @@ std::string ppu_thread::dump_callstack() const
fmt::append(ret, "Call stack:\n=========\n0x%08x (0x0) called\n", cia);
for (u32 sp : dump_callstack_list())
for (const auto& sp : dump_callstack_list())
{
// TODO: function addresses too
fmt::append(ret, "> from 0x%08x (0x0)\n", sp);
fmt::append(ret, "> from 0x%08x (r1=0x%08x)\n", sp.first, sp.second);
}
return ret;
}
std::vector<u32> ppu_thread::dump_callstack_list() const
std::vector<std::pair<u32, u32>> ppu_thread::dump_callstack_list() const
{
//std::shared_lock rlock(vm::g_mutex); // Needs optimizations
@ -507,7 +507,7 @@ std::vector<u32> ppu_thread::dump_callstack_list() const
stack_max += 4096;
}
std::vector<u32> call_stack_list;
std::vector<std::pair<u32, u32>> call_stack_list;
for (
u64 sp = *vm::get_super_ptr<u64>(stack_ptr);
@ -523,7 +523,7 @@ std::vector<u32> ppu_thread::dump_callstack_list() const
}
// TODO: function addresses too
call_stack_list.push_back(static_cast<u32>(addr));
call_stack_list.emplace_back(static_cast<u32>(addr), static_cast<u32>(sp));
}
return call_stack_list;

View File

@ -70,7 +70,7 @@ public:
virtual std::string dump_all() const override;
virtual std::string dump_regs() const override;
virtual std::string dump_callstack() const override;
virtual std::vector<u32> dump_callstack_list() const override;
virtual std::vector<std::pair<u32, u32>> dump_callstack_list() const override;
virtual std::string dump_misc() const override;
virtual void cpu_task() override final;
virtual void cpu_sleep() override;

View File

@ -872,7 +872,7 @@ std::string spu_thread::dump_callstack() const
return {};
}
std::vector<u32> spu_thread::dump_callstack_list() const
std::vector<std::pair<u32, u32>> spu_thread::dump_callstack_list() const
{
return {};
}

View File

@ -534,7 +534,7 @@ public:
virtual std::string dump_all() const override;
virtual std::string dump_regs() const override;
virtual std::string dump_callstack() const override;
virtual std::vector<u32> dump_callstack_list() const override;
virtual std::vector<std::pair<u32, u32>> dump_callstack_list() const override;
virtual std::string dump_misc() const override;
virtual void cpu_task() override final;
virtual void cpu_mem() override;

View File

@ -17,15 +17,15 @@ void call_stack_list::UpdateCPUData(std::weak_ptr<cpu_thread> cpu, std::shared_p
this->cpu = cpu;
}
void call_stack_list::HandleUpdate(std::vector<u32> call_stack)
void call_stack_list::HandleUpdate(std::vector<std::pair<u32, u32>> call_stack)
{
clear();
for (auto addr : call_stack)
for (const auto& addr : call_stack)
{
const QString call_stack_item_text = qstr(fmt::format("0x%08llx", addr));
const QString call_stack_item_text = qstr(fmt::format("0x%08llx (r1=0x%08llx)", addr.first, addr.second));
QListWidgetItem* callStackItem = new QListWidgetItem(call_stack_item_text);
callStackItem->setData(Qt::UserRole, { addr });
callStackItem->setData(Qt::UserRole, { addr.first });
addItem(callStackItem);
}
}

View File

@ -18,7 +18,7 @@ public:
Q_SIGNALS:
void RequestShowAddress(u32 addr, bool force = false);
public Q_SLOTS:
void HandleUpdate(std::vector<u32> call_stack);
void HandleUpdate(std::vector<std::pair<u32, u32>> call_stack);
private Q_SLOTS:
void OnCallStackListDoubleClicked();
private:

View File

@ -86,7 +86,7 @@ protected:
Q_SIGNALS:
void DebugFrameClosed();
void CallStackUpdateRequested(std::vector<u32> call_stack);
void CallStackUpdateRequested(std::vector<std::pair<u32, u32>> call_stack);
public Q_SLOTS:
void DoStep(bool stepOver = false);