mirror of
https://github.com/Lime3DS/Lime3DS
synced 2024-12-28 01:52:29 -06:00
Serialize some more kernel objects
This commit is contained in:
parent
8c81500dee
commit
4f95575d41
15 changed files with 66 additions and 12 deletions
21
TODO
21
TODO
|
@ -2,6 +2,10 @@
|
|||
✔ CPU @done(19-08-13 15:41)
|
||||
✔ Memory @done(19-08-13 15:41)
|
||||
✔ DSP @done(19-08-13 15:41)
|
||||
☐ Service manager
|
||||
☐ App loader
|
||||
☐ Archive manager
|
||||
☐ Custom texture cache
|
||||
☐ MMIO
|
||||
☐ Movie
|
||||
☐ Perf stats
|
||||
|
@ -24,27 +28,32 @@
|
|||
✔ Client port @done(19-08-13 16:40)
|
||||
✔ Client session @done(19-08-13 16:40)
|
||||
✔ Config mem @done(19-08-13 16:40)
|
||||
☐ Event
|
||||
✔ Event @done(19-12-22 18:44)
|
||||
✔ Handle table @done(19-08-13 16:42)
|
||||
☐ HLE IPC
|
||||
☐ IPC
|
||||
✔ Memory @started(19-08-13 16:43) @done(19-12-22 18:34)
|
||||
☐ Mutex @started(19-08-13 16:43)
|
||||
✔ Mutex @done(19-08-13 16:43)
|
||||
✔ Object @done(19-08-13 15:41)
|
||||
☐ Process @started(19-08-13 16:43)
|
||||
✔ Process @started(19-08-13 16:43) @done(19-12-22 18:41)
|
||||
☐ Code set @started(19-12-22 18:41)
|
||||
Needs a way to reference loaded images (so we don't serialize the entire ROM as well)
|
||||
✔ Resource limit @done(19-08-13 16:43)
|
||||
☐ Semaphore @started(19-08-13 16:44)
|
||||
✔ Semaphore @done(19-08-13 16:44)
|
||||
✔ Server port @done(19-08-13 16:44)
|
||||
✔ Server session @done(19-08-13 16:44)
|
||||
✔ Session @done(19-08-13 16:44)
|
||||
☐ Shared memory
|
||||
☐ Shared memory @started(19-12-22 21:20)
|
||||
Need to figure out backing memory (a u8*)
|
||||
✘ Shared page @started(19-08-13 16:44) @cancelled(19-12-22 11:19)
|
||||
Not needed right now as shared_page is read-only and derived from other data
|
||||
☐ SVC
|
||||
✔ SVC @done(19-12-22 21:32)
|
||||
Nothing to do - all data is constant
|
||||
☐ Thread @started(19-08-13 16:45)
|
||||
This requires refactoring wakeup_callback to be an object ref
|
||||
✔ Timer @done(19-08-13 16:45)
|
||||
☐ VM Manager @started(19-08-13 16:46)
|
||||
Just need to figure out backing_mem (a u8*)
|
||||
✔ Wait object @done(19-08-13 16:46)
|
||||
☐ Service
|
||||
☐ AC
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "boost/archive/binary_iarchive.hpp"
|
||||
#include "boost/archive/binary_oarchive.hpp"
|
||||
#include "boost/serialization/export.hpp"
|
||||
|
||||
using iarchive = boost::archive::binary_iarchive;
|
||||
using oarchive = boost::archive::binary_oarchive;
|
||||
|
|
|
@ -398,6 +398,8 @@ void System::Reset() {
|
|||
template<class Archive>
|
||||
void System::serialize(Archive & ar, const unsigned int file_version)
|
||||
{
|
||||
ar & *cpu_core.get();
|
||||
//ar & *service_manager.get();
|
||||
ar & GPU::g_regs;
|
||||
ar & LCD::g_regs;
|
||||
ar & dsp_core->GetDspMemory();
|
||||
|
|
|
@ -6,17 +6,20 @@
|
|||
#include <map>
|
||||
#include <vector>
|
||||
#include "common/assert.h"
|
||||
#include "common/archives.h"
|
||||
#include "core/hle/kernel/event.h"
|
||||
#include "core/hle/kernel/kernel.h"
|
||||
#include "core/hle/kernel/thread.h"
|
||||
|
||||
SERIALIZE_EXPORT_IMPL(Kernel::Event)
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
Event::Event(KernelSystem& kernel) : WaitObject(kernel) {}
|
||||
Event::Event() : WaitObject() {}
|
||||
Event::~Event() {}
|
||||
|
||||
std::shared_ptr<Event> KernelSystem::CreateEvent(ResetType reset_type, std::string name) {
|
||||
auto evt{std::make_shared<Event>(*this)};
|
||||
auto evt{std::make_shared<Event>()};
|
||||
|
||||
evt->signaled = false;
|
||||
evt->reset_type = reset_type;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <boost/serialization/export.hpp>
|
||||
#include "common/common_types.h"
|
||||
#include "core/hle/kernel/object.h"
|
||||
#include "core/hle/kernel/wait_object.h"
|
||||
|
@ -12,7 +13,7 @@ namespace Kernel {
|
|||
|
||||
class Event final : public WaitObject {
|
||||
public:
|
||||
explicit Event(KernelSystem& kernel);
|
||||
explicit Event();
|
||||
~Event() override;
|
||||
|
||||
std::string GetTypeName() const override {
|
||||
|
@ -62,3 +63,5 @@ private:
|
|||
};
|
||||
|
||||
} // namespace Kernel
|
||||
|
||||
BOOST_CLASS_EXPORT_KEY(Kernel::Event)
|
||||
|
|
|
@ -121,6 +121,7 @@ void KernelSystem::serialize(Archive& ar, const unsigned int file_version)
|
|||
ar & *thread_manager.get();
|
||||
ar & *config_mem_handler.get();
|
||||
// Shared page data is read-only at the moment, so doesn't need serializing
|
||||
// Deliberately don't include debugger info to allow debugging through loads
|
||||
}
|
||||
|
||||
SERIALIZE_IMPL(KernelSystem)
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
#include <map>
|
||||
#include <vector>
|
||||
#include "common/archives.h"
|
||||
#include "common/assert.h"
|
||||
#include "core/core.h"
|
||||
#include "core/hle/kernel/errors.h"
|
||||
|
@ -12,6 +13,8 @@
|
|||
#include "core/hle/kernel/object.h"
|
||||
#include "core/hle/kernel/thread.h"
|
||||
|
||||
SERIALIZE_EXPORT_IMPL(Kernel::Mutex)
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
void ReleaseThreadMutexes(Thread* thread) {
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <boost/serialization/export.hpp>
|
||||
#include "common/common_types.h"
|
||||
#include "core/hle/kernel/kernel.h"
|
||||
#include "core/hle/kernel/wait_object.h"
|
||||
|
@ -78,3 +79,5 @@ private:
|
|||
void ReleaseThreadMutexes(Thread* thread);
|
||||
|
||||
} // namespace Kernel
|
||||
|
||||
BOOST_CLASS_EXPORT_KEY(Kernel::Mutex)
|
||||
|
|
|
@ -34,6 +34,7 @@ void Process::serialize(Archive& ar, const unsigned int file_version)
|
|||
ar & flags.raw;
|
||||
ar & kernel_version;
|
||||
ar & ideal_processor;
|
||||
ar & status;
|
||||
ar & process_id;
|
||||
ar & vm_manager;
|
||||
ar & memory_used;
|
||||
|
|
|
@ -3,14 +3,17 @@
|
|||
// Refer to the license.txt file included.
|
||||
|
||||
#include "common/assert.h"
|
||||
#include "common/archives.h"
|
||||
#include "core/hle/kernel/errors.h"
|
||||
#include "core/hle/kernel/kernel.h"
|
||||
#include "core/hle/kernel/semaphore.h"
|
||||
#include "core/hle/kernel/thread.h"
|
||||
|
||||
SERIALIZE_EXPORT_IMPL(Kernel::Semaphore)
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
Semaphore::Semaphore(KernelSystem& kernel) : WaitObject(kernel) {}
|
||||
Semaphore::Semaphore() : WaitObject() {}
|
||||
Semaphore::~Semaphore() {}
|
||||
|
||||
ResultVal<std::shared_ptr<Semaphore>> KernelSystem::CreateSemaphore(s32 initial_count,
|
||||
|
@ -20,7 +23,7 @@ ResultVal<std::shared_ptr<Semaphore>> KernelSystem::CreateSemaphore(s32 initial_
|
|||
if (initial_count > max_count)
|
||||
return ERR_INVALID_COMBINATION_KERNEL;
|
||||
|
||||
auto semaphore{std::make_shared<Semaphore>(*this)};
|
||||
auto semaphore{std::make_shared<Semaphore>()};
|
||||
|
||||
// When the semaphore is created, some slots are reserved for other threads,
|
||||
// and the rest is reserved for the caller thread
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include <string>
|
||||
#include <queue>
|
||||
#include <boost/serialization/export.hpp>
|
||||
#include "common/common_types.h"
|
||||
#include "core/hle/kernel/object.h"
|
||||
#include "core/hle/kernel/wait_object.h"
|
||||
|
@ -15,7 +16,7 @@ namespace Kernel {
|
|||
|
||||
class Semaphore final : public WaitObject {
|
||||
public:
|
||||
explicit Semaphore(KernelSystem& kernel);
|
||||
explicit Semaphore();
|
||||
~Semaphore() override;
|
||||
|
||||
std::string GetTypeName() const override {
|
||||
|
@ -57,3 +58,5 @@ private:
|
|||
};
|
||||
|
||||
} // namespace Kernel
|
||||
|
||||
BOOST_CLASS_EXPORT_KEY(Kernel::Semaphore)
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <boost/serialization/export.hpp>
|
||||
#include "common/common_types.h"
|
||||
#include "core/hle/kernel/object.h"
|
||||
#include "core/hle/kernel/process.h"
|
||||
|
@ -104,6 +105,21 @@ private:
|
|||
|
||||
friend class KernelSystem;
|
||||
KernelSystem& kernel;
|
||||
|
||||
template <class Archive>
|
||||
void serialize(Archive& ar, const unsigned int file_version)
|
||||
{
|
||||
ar & linear_heap_phys_offset;
|
||||
// TODO: backing blocks u8* (this is always FCRAM I think)
|
||||
ar & size;
|
||||
ar & permissions;
|
||||
ar & other_permissions;
|
||||
ar & owner_process;
|
||||
ar & base_address;
|
||||
ar & name;
|
||||
ar & *(reinterpret_cast<MemoryRegionInfo::IntervalSet::ImplSetT*>(&holding_memory));;
|
||||
}
|
||||
friend class boost::serialization::access;
|
||||
};
|
||||
|
||||
} // namespace Kernel
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
#include "core/hle/result.h"
|
||||
#include "core/memory.h"
|
||||
|
||||
SERIALIZE_EXPORT_IMPL(Kernel::Thread)
|
||||
|
||||
namespace Kernel {
|
||||
|
||||
template <class Archive>
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include <boost/serialization/shared_ptr.hpp>
|
||||
#include <boost/serialization/unordered_map.hpp>
|
||||
#include <boost/serialization/vector.hpp>
|
||||
#include <boost/serialization/export.hpp>
|
||||
#include "common/common_types.h"
|
||||
#include "common/thread_queue_list.h"
|
||||
#include "core/arm/arm_interface.h"
|
||||
|
@ -337,3 +338,5 @@ std::shared_ptr<Thread> SetupMainThread(KernelSystem& kernel, u32 entry_point, u
|
|||
std::shared_ptr<Process> owner_process);
|
||||
|
||||
} // namespace Kernel
|
||||
|
||||
BOOST_CLASS_EXPORT_KEY(Kernel::Thread)
|
||||
|
|
|
@ -94,6 +94,7 @@ private:
|
|||
ar & permissions;
|
||||
ar & meminfo_state;
|
||||
// TODO: backing memory ref
|
||||
// backing memory can be: Physical/FCRAM pointer, config mem, shared page
|
||||
ar & paddr;
|
||||
ar & mmio_handler;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue