|
@@ -17,18 +17,21 @@
|
|
|
|
|
|
|
|
namespace Kernel {
|
|
namespace Kernel {
|
|
|
|
|
|
|
|
-PhysicalCore::PhysicalCore(Core::System& system, KernelCore& kernel, std::size_t id, Core::ExclusiveMonitor& exclusive_monitor)
|
|
|
|
|
|
|
+PhysicalCore::PhysicalCore(Core::System& system, KernelCore& kernel, std::size_t id,
|
|
|
|
|
+ Core::ExclusiveMonitor& exclusive_monitor)
|
|
|
: core_index{id}, kernel{kernel} {
|
|
: core_index{id}, kernel{kernel} {
|
|
|
#ifdef ARCHITECTURE_x86_64
|
|
#ifdef ARCHITECTURE_x86_64
|
|
|
- arm_interface = std::make_unique<Core::ARM_Dynarmic>(system, exclusive_monitor, core_index);
|
|
|
|
|
|
|
+ arm_interface = std::make_shared<Core::ARM_Dynarmic>(system, exclusive_monitor, core_index);
|
|
|
#else
|
|
#else
|
|
|
- arm_interface = std::make_unique<Core::ARM_Unicorn>(system);
|
|
|
|
|
|
|
+ arm_interface = std::make_shared<Core::ARM_Unicorn>(system);
|
|
|
LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");
|
|
LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
- scheduler = std::make_unique<Kernel::Scheduler>(system, *arm_interface, core_index);
|
|
|
|
|
|
|
+ scheduler = std::make_shared<Kernel::Scheduler>(system, *arm_interface, core_index);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+PhysicalCore::~PhysicalCore() = default;
|
|
|
|
|
+
|
|
|
void PhysicalCore::Run() {
|
|
void PhysicalCore::Run() {
|
|
|
arm_interface->Run();
|
|
arm_interface->Run();
|
|
|
arm_interface->ClearExclusiveState();
|
|
arm_interface->ClearExclusiveState();
|