- size_t offset;
-
- xbt_dynar_foreach(mc_checkpoint_ignore, cursor, region){
- if(region->addr > snapshot->regions[0]->start_addr && (char *)(region->addr) < (char *)snapshot->regions[0]->start_addr + STD_HEAP_SIZE){
- offset = (char *)region->addr - (char *)snapshot->regions[0]->start_addr;
- memset((char *)snapshot->regions[0]->data + offset, 0, region->size);
- }else if(region->addr > snapshot->regions[2]->start_addr && (char *)(region->addr) < (char*)snapshot->regions[2]->start_addr + snapshot->regions[2]->size){
- offset = (char *)region->addr - (char *)snapshot->regions[2]->start_addr;
- memset((char *)snapshot->regions[2]->data + offset, 0, region->size);
- }else if(region->addr > snapshot->regions[1]->start_addr && (char *)(region->addr) < (char*)snapshot->regions[1]->start_addr + snapshot->regions[1]->size){
- offset = (char *)region->addr - (char *)snapshot->regions[1]->start_addr;
- memset((char *)snapshot->regions[1]->data + offset, 0, region->size);
- }
+ // FIXME, cross-process support (mc_checkpoint_ignore)
+ xbt_dynar_foreach (mc_model_checker->process.checkpoint_ignore, cursor, region) {
+ s_mc_snapshot_ignored_data_t ignored_data;
+ ignored_data.start = region->addr;
+ ignored_data.size = region->size;
+ ignored_data.data = malloc(region->size);
+ // TODO, we should do this once per privatization segment:
+ MC_process_read(snapshot->process,
+ MC_ADDRESS_SPACE_READ_FLAGS_NONE,
+ ignored_data.data, region->addr, region->size, MC_PROCESS_INDEX_DISABLED);
+ xbt_dynar_push(snapshot->ignored_data, &ignored_data);
+ }
+
+ // Zero the memory:
+ xbt_dynar_foreach (mc_model_checker->process.checkpoint_ignore, cursor, region) {
+ MC_process_clear_memory(snapshot->process, region->addr, region->size);
+ }
+
+}
+
+static void MC_snapshot_ignore_restore(mc_snapshot_t snapshot)
+{
+ unsigned int cursor = 0;
+ s_mc_snapshot_ignored_data_t ignored_data;
+ xbt_dynar_foreach (snapshot->ignored_data, cursor, ignored_data) {
+ MC_process_write(snapshot->process,
+ ignored_data.data, ignored_data.start, ignored_data.size);