Serialize kernel/hle/memory
This commit is contained in:
parent
050c3bdee5
commit
8c81500dee
4
TODO
4
TODO
|
@ -11,7 +11,7 @@
|
|||
✔ HW @done(19-08-13 15:41)
|
||||
✔ GPU regs @done(19-08-13 15:41)
|
||||
✔ LCD regs @done(19-08-13 15:41)
|
||||
☐ Video core @started(19-08-13 16:43)
|
||||
✔ Video core @started(19-08-13 16:43) @done(19-12-22 16:06)
|
||||
✔ Geometry pipeline @done(19-12-22 15:52)
|
||||
Required more use of g_state
|
||||
✔ PICA state @done(19-08-13 15:41)
|
||||
|
@ -28,7 +28,7 @@
|
|||
✔ Handle table @done(19-08-13 16:42)
|
||||
☐ HLE IPC
|
||||
☐ IPC
|
||||
☐ Memory @started(19-08-13 16:43)
|
||||
✔ Memory @started(19-08-13 16:43) @done(19-12-22 18:34)
|
||||
☐ Mutex @started(19-08-13 16:43)
|
||||
✔ Object @done(19-08-13 15:41)
|
||||
☐ Process @started(19-08-13 16:43)
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
#pragma once
|
||||
|
||||
#include "common/common_types.h"
|
||||
#include <boost/icl/discrete_interval.hpp>
|
||||
|
||||
namespace boost::serialization {
|
||||
|
||||
template <class Archive, class DomainT, ICL_COMPARE Compare>
|
||||
void save(Archive& ar, const boost::icl::discrete_interval<DomainT, Compare>& obj, const unsigned int file_version)
|
||||
{
|
||||
ar << obj.lower();
|
||||
ar << obj.upper();
|
||||
ar << obj.bounds()._bits;
|
||||
}
|
||||
|
||||
template <class Archive, class DomainT, ICL_COMPARE Compare>
|
||||
void load(Archive& ar, boost::icl::discrete_interval<DomainT, Compare>& obj, const unsigned int file_version)
|
||||
{
|
||||
DomainT upper, lower;
|
||||
boost::icl::bound_type bounds;
|
||||
ar >> upper;
|
||||
ar >> lower;
|
||||
ar >> bounds;
|
||||
obj = boost::icl::discrete_interval(upper, lower, boost::icl::interval_bounds(bounds));
|
||||
}
|
||||
|
||||
template <class Archive, class DomainT, ICL_COMPARE Compare>
|
||||
void serialize(Archive& ar, boost::icl::discrete_interval<DomainT, Compare>& obj, const unsigned int file_version)
|
||||
{
|
||||
boost::serialization::split_free(ar, obj, file_version);
|
||||
}
|
||||
|
||||
}
|
|
@ -108,6 +108,7 @@ void KernelSystem::AddNamedPort(std::string name, std::shared_ptr<ClientPort> po
|
|||
template <class Archive>
|
||||
void KernelSystem::serialize(Archive& ar, const unsigned int file_version)
|
||||
{
|
||||
ar & memory_regions;
|
||||
ar & named_ports;
|
||||
ar & *current_cpu.get();
|
||||
// NB: subsystem references and prepare_reschedule_callback are constant
|
||||
|
@ -120,7 +121,6 @@ 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
|
||||
//ar & *shared_page_handler.get();
|
||||
}
|
||||
|
||||
SERIALIZE_IMPL(KernelSystem)
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
|
||||
#include <optional>
|
||||
#include <boost/icl/interval_set.hpp>
|
||||
#include <boost/serialization/set.hpp>
|
||||
#include "common/serialization/boost_discrete_interval.hpp"
|
||||
#include "common/common_types.h"
|
||||
|
||||
namespace Kernel {
|
||||
|
@ -69,7 +71,8 @@ private:
|
|||
ar & base;
|
||||
ar & size;
|
||||
ar & used;
|
||||
// TODO: boost icl / free_blocks
|
||||
// This works because interval_set has exactly one member of type ImplSetT
|
||||
ar & *(reinterpret_cast<IntervalSet::ImplSetT*>(&free_blocks));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Reference in New Issue