-extern "C" {
-
-// ***** Region management:
-
-size_t* mc_take_page_snapshot_region(void* data, size_t page_count, uint64_t* pagemap, size_t* reference_pages)
-{
- size_t* pagenos = (size_t*) malloc(page_count * sizeof(size_t));
-
- for (size_t i=0; i!=page_count; ++i) {
- if (pagemap && (pagemap[i] & SOFT_DIRTY)) {
- // The page is softclean, it is the same page as the reference page:
- pagenos[i] = reference_pages[i];
- mc_model_checker->pages->ref_page(reference_pages[i]);
- } else {
- // Otherwise, we need to store the page the hard hard
- // (by reading its content):
- void* page = (char*) data + (i << xbt_pagebits);
- pagenos[i] = mc_model_checker->pages->store_page(page);
- }
- }
-
- return pagenos;
-}
-
-void mc_free_page_snapshot_region(size_t* pagenos, size_t page_count)
-{
- for (size_t i=0; i!=page_count; ++i) {
- mc_model_checker->pages->unref_page(pagenos[i]);
- }
-}
-
-void mc_restore_page_snapshot_region(mc_mem_region_t region, size_t page_count, uint64_t* pagemap, mc_mem_region_t reference_region)
-{
- for (size_t i=0; i!=page_count; ++i) {