static void MC_region_destroy(mc_mem_region_t reg)
{
- xbt_free(reg->data);
+ munmap(reg->data, reg->size);
xbt_free(reg);
}
mc_mem_region_t new_reg = xbt_new(s_mc_mem_region_t, 1);
new_reg->start_addr = start_addr;
new_reg->size = size;
- new_reg->data = xbt_malloc(size);
+ new_reg->data = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
memcpy(new_reg->data, start_addr, size);
+ madvise(new_reg->data, size, MADV_MERGEABLE);
XBT_DEBUG("New region : type : %d, data : %p (real addr %p), size : %zu", type, new_reg->data, start_addr, size);
mc_libsimgrid_info = MC_find_object_info(maps, libsimgrid_path, 0);
mc_object_infos[1] = mc_libsimgrid_info;
-#ifdef MADV_MERGEABLE
- for(int i=0; i!=mc_object_infos_size; ++i) {
- void* start = mc_object_infos[i]->start_rw;
- void* end = mc_object_infos[i]->end_rw;
- madvise(start, (char*)end - (char*)start, MADV_MERGEABLE);
- }
-#endif
-
// Use information of the other objects:
MC_post_process_object_info(mc_binary_info);
MC_post_process_object_info(mc_libsimgrid_info);