Merge pull request #1303 from lioncash/unique

core: Use unique_ptr for holding the interpreter instances
master
bunnei 2015-12-29 22:34:32 +07:00
commit 8a24214b46
4 changed files with 20 additions and 20 deletions

@ -29,18 +29,16 @@ CallstackWidget::CallstackWidget(QWidget* parent): QDockWidget(parent)
void CallstackWidget::OnDebugModeEntered() void CallstackWidget::OnDebugModeEntered()
{ {
ARM_Interface* app_core = Core::g_app_core; // Stack pointer
const u32 sp = Core::g_app_core->GetReg(13);
u32 sp = app_core->GetReg(13); //stack pointer
u32 ret_addr, call_addr, func_addr;
Clear(); Clear();
int counter = 0; int counter = 0;
for (u32 addr = 0x10000000; addr >= sp; addr -= 4) for (u32 addr = 0x10000000; addr >= sp; addr -= 4)
{ {
ret_addr = Memory::Read32(addr); const u32 ret_addr = Memory::Read32(addr);
call_addr = ret_addr - 4; //get call address??? const u32 call_addr = ret_addr - 4; //get call address???
if (Memory::GetPointer(call_addr) == nullptr) if (Memory::GetPointer(call_addr) == nullptr)
break; break;
@ -60,7 +58,7 @@ void CallstackWidget::OnDebugModeEntered()
// Pre-compute the left-shift and the prefetch offset // Pre-compute the left-shift and the prefetch offset
i_offset <<= 2; i_offset <<= 2;
i_offset += 8; i_offset += 8;
func_addr = call_addr + i_offset; const u32 func_addr = call_addr + i_offset;
callstack_model->setItem(counter, 0, new QStandardItem(QString("0x%1").arg(addr, 8, 16, QLatin1Char('0')))); callstack_model->setItem(counter, 0, new QStandardItem(QString("0x%1").arg(addr, 8, 16, QLatin1Char('0'))));
callstack_model->setItem(counter, 1, new QStandardItem(QString("0x%1").arg(ret_addr, 8, 16, QLatin1Char('0')))); callstack_model->setItem(counter, 1, new QStandardItem(QString("0x%1").arg(ret_addr, 8, 16, QLatin1Char('0'))));

@ -59,16 +59,14 @@ RegistersWidget::RegistersWidget(QWidget* parent) : QDockWidget(parent) {
} }
void RegistersWidget::OnDebugModeEntered() { void RegistersWidget::OnDebugModeEntered() {
ARM_Interface* app_core = Core::g_app_core; if (!Core::g_app_core)
if (app_core == nullptr)
return; return;
for (int i = 0; i < core_registers->childCount(); ++i) for (int i = 0; i < core_registers->childCount(); ++i)
core_registers->child(i)->setText(1, QString("0x%1").arg(app_core->GetReg(i), 8, 16, QLatin1Char('0'))); core_registers->child(i)->setText(1, QString("0x%1").arg(Core::g_app_core->GetReg(i), 8, 16, QLatin1Char('0')));
for (int i = 0; i < vfp_registers->childCount(); ++i) for (int i = 0; i < vfp_registers->childCount(); ++i)
vfp_registers->child(i)->setText(1, QString("0x%1").arg(app_core->GetVFPReg(i), 8, 16, QLatin1Char('0'))); vfp_registers->child(i)->setText(1, QString("0x%1").arg(Core::g_app_core->GetVFPReg(i), 8, 16, QLatin1Char('0')));
UpdateCPSRValues(); UpdateCPSRValues();
UpdateVFPSystemRegisterValues(); UpdateVFPSystemRegisterValues();

@ -2,6 +2,9 @@
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include <memory>
#include "common/make_unique.h"
#include "common/logging/log.h" #include "common/logging/log.h"
#include "core/core.h" #include "core/core.h"
@ -17,8 +20,8 @@
namespace Core { namespace Core {
ARM_Interface* g_app_core = nullptr; ///< ARM11 application core std::unique_ptr<ARM_Interface> g_app_core; ///< ARM11 application core
ARM_Interface* g_sys_core = nullptr; ///< ARM11 system (OS) core std::unique_ptr<ARM_Interface> g_sys_core; ///< ARM11 system (OS) core
/// Run the core CPU loop /// Run the core CPU loop
void RunLoop(int tight_loop) { void RunLoop(int tight_loop) {
@ -71,16 +74,16 @@ void Stop() {
/// Initialize the core /// Initialize the core
int Init() { int Init() {
g_sys_core = new ARM_DynCom(USER32MODE); g_sys_core = Common::make_unique<ARM_DynCom>(USER32MODE);
g_app_core = new ARM_DynCom(USER32MODE); g_app_core = Common::make_unique<ARM_DynCom>(USER32MODE);
LOG_DEBUG(Core, "Initialized OK"); LOG_DEBUG(Core, "Initialized OK");
return 0; return 0;
} }
void Shutdown() { void Shutdown() {
delete g_app_core; g_app_core.reset();
delete g_sys_core; g_sys_core.reset();
LOG_DEBUG(Core, "Shutdown OK"); LOG_DEBUG(Core, "Shutdown OK");
} }

@ -4,6 +4,7 @@
#pragma once #pragma once
#include <memory>
#include "common/common_types.h" #include "common/common_types.h"
class ARM_Interface; class ARM_Interface;
@ -23,8 +24,8 @@ struct ThreadContext {
u32 fpexc; u32 fpexc;
}; };
extern ARM_Interface* g_app_core; ///< ARM11 application core extern std::unique_ptr<ARM_Interface> g_app_core; ///< ARM11 application core
extern ARM_Interface* g_sys_core; ///< ARM11 system (OS) core extern std::unique_ptr<ARM_Interface> g_sys_core; ///< ARM11 system (OS) core
//////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////