const int ProcessIndexAny = 0;
class AddressSpace {
+private:
+ Process* process_;
public:
enum ReadMode {
Normal,
*/
Lazy
};
+ AddressSpace(Process* process) : process_(process) {}
virtual ~AddressSpace();
+
+ simgrid::mc::Process* process() { return process_; }
virtual const void* read_bytes(void* buffer, std::size_t size,
remote_ptr<void> address, int process_index = ProcessIndexAny,
ReadMode mode = Normal) const = 0;
Process(pid_t pid, int sockfd);
~Process();
+ Process(Process const&) = delete;
+ Process(Process &&) = delete;
+ Process& operator=(Process const&) = delete;
+ Process& operator=(Process &&) = delete;
+
// Read memory:
const void* read_bytes(void* buffer, std::size_t size,
remote_ptr<void> address, int process_index = ProcessIndexAny,
static void MC_snapshot_handle_ignore(mc_snapshot_t snapshot)
{
- xbt_assert(snapshot->process);
+ xbt_assert(snapshot->process());
// Copy the memory:
for (auto const& region : mc_model_checker->process().ignored_regions()) {
ignored_data.start = (void*)region.addr;
ignored_data.data.resize(region.size);
// TODO, we should do this once per privatization segment:
- snapshot->process->read_bytes(
+ snapshot->process()->read_bytes(
ignored_data.data.data(), region.size, remote(region.addr),
simgrid::mc::ProcessIndexDisabled);
snapshot->ignored_data.push_back(std::move(ignored_data));
// Zero the memory:
for(auto const& region : mc_model_checker->process().ignored_regions()) {
- snapshot->process->clear_bytes(remote(region.addr), region.size);
+ snapshot->process()->clear_bytes(remote(region.addr), region.size);
}
}
static void MC_snapshot_ignore_restore(mc_snapshot_t snapshot)
{
for (auto const& ignored_data : snapshot->ignored_data)
- snapshot->process->write_bytes(
+ snapshot->process()->write_bytes(
ignored_data.data.data(), ignored_data.data.size(),
remote(ignored_data.start));
}
simgrid::mc::Process* mc_process = &mc_model_checker->process();
- mc_snapshot_t snapshot = new simgrid::mc::Snapshot();
+ mc_snapshot_t snapshot = new simgrid::mc::Snapshot(mc_process);
- snapshot->process = mc_process;
snapshot->num_state = num_state;
smx_process_t process;
class XBT_PRIVATE Snapshot final : public AddressSpace {
public:
- Snapshot();
+ Snapshot(Process* process);
~Snapshot();
const void* read_bytes(void* buffer, std::size_t size,
remote_ptr<void> address, int process_index = ProcessIndexAny,
ReadMode mode = Normal) const override;
public: // To be private
- simgrid::mc::Process* process;
int num_state;
size_t heap_bytes_used;
std::vector<std::unique_ptr<s_mc_mem_region_t>> snapshot_regions;