- size_t page_count = mc_page_count(reg->size);
-
- uint64_t* pagemap = NULL;
-
- // Read soft-dirty bits if necessary in order to know which pages have changed:
- if (_sg_mc_soft_dirty && mc_model_checker->parent_snapshot) {
- pagemap = (uint64_t*) mmalloc_no_memset((xbt_mheap_t) mc_heap, sizeof(uint64_t) * page_count);
- mc_read_pagemap(pagemap, mc_page_number(NULL, reg->start_addr), page_count);
- }
-
- // Incremental per-page snapshot restoration:
- mc_restore_page_snapshot_region(reg, page_count, pagemap, ref_reg);
-
- // This is funny, the restoration can restore the state of the current heap,
- // if this happen free(pagemap) would free from the wrong heap:
- if(pagemap) {
- mfree((xbt_mheap_t) mc_heap, pagemap);
- }
+ xbt_assert(mc_page_count(reg->size()) == reg->page_data().page_count());
+ mc_restore_page_snapshot_region(process,
+ (void*) reg->permanent_address().address(), reg->page_data());