X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/def98a99afed0b150d32a6615ad6b8ab0ffb2bbd..eb417d0c8064e83fc1211abc819ae93687505003:/src/mc/mc_checkpoint.cpp diff --git a/src/mc/mc_checkpoint.cpp b/src/mc/mc_checkpoint.cpp index 11d66fc7be..e05a59eba8 100644 --- a/src/mc/mc_checkpoint.cpp +++ b/src/mc/mc_checkpoint.cpp @@ -35,6 +35,8 @@ #include "mc_protocol.h" #include "mc_smx.h" +using simgrid::mc::remote; + extern "C" { XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkpoint, mc, @@ -98,19 +100,6 @@ void MC_region_destroy(mc_mem_region_t region) xbt_free(region); } -void MC_free_snapshot(mc_snapshot_t snapshot) -{ - for (size_t i = 0; i < snapshot->snapshot_regions_count; i++) { - MC_region_destroy(snapshot->snapshot_regions[i]); - } - xbt_free(snapshot->snapshot_regions); - xbt_free(snapshot->stack_sizes); - xbt_dynar_free(&(snapshot->stacks)); - xbt_dynar_free(&(snapshot->to_ignore)); - xbt_dynar_free(&snapshot->ignored_data); - xbt_free(snapshot); -} - /******************************* Snapshot regions ********************************/ /*********************************************************************************/ @@ -125,9 +114,9 @@ static mc_mem_region_t mc_region_new_dense( region->permanent_addr = permanent_addr; region->size = size; region->flat.data = xbt_malloc(size); - MC_process_read(&mc_model_checker->process(), MC_ADDRESS_SPACE_READ_FLAGS_NONE, - region->flat.data, permanent_addr, size, - MC_PROCESS_INDEX_DISABLED); + mc_model_checker->process().read_bytes(region->flat.data, size, + remote(permanent_addr), + simgrid::mc::ProcessIndexDisabled); XBT_DEBUG("New region : type : %d, data : %p (real addr %p), size : %zu", region_type, region->flat.data, permanent_addr, size); return region; @@ -163,8 +152,8 @@ static void MC_region_restore(mc_mem_region_t region) break; case MC_REGION_STORAGE_TYPE_FLAT: - MC_process_write(&mc_model_checker->process(), region->flat.data, - region->permanent_addr, region->size); + mc_model_checker->process().write_bytes(region->flat.data, region->size, + remote(region->permanent_addr)); break; case MC_REGION_STORAGE_TYPE_CHUNKED: @@ -198,12 +187,13 @@ static mc_mem_region_t MC_region_new_privatized( // Read smpi_privatisation_regions from MCed: smpi_privatisation_region_t remote_smpi_privatisation_regions; - MC_process_read_variable(&mc_model_checker->process(), + mc_model_checker->process().read_variable( "smpi_privatisation_regions", &remote_smpi_privatisation_regions, sizeof(remote_smpi_privatisation_regions)); s_smpi_privatisation_region_t privatisation_regions[process_count]; - MC_process_read_simple(&mc_model_checker->process(), &privatisation_regions, - remote_smpi_privatisation_regions, sizeof(privatisation_regions)); + mc_model_checker->process().read_bytes( + &privatisation_regions, sizeof(privatisation_regions), + remote(remote_smpi_privatisation_regions)); for (size_t i = 0; i < process_count; i++) { region->privatized.regions[i] = @@ -248,7 +238,7 @@ static void MC_get_memory_regions(mc_process_t process, mc_snapshot_t snapshot) object_info->end_rw - object_info->start_rw); } - xbt_mheap_t heap = MC_process_get_heap(process); + xbt_mheap_t heap = process->get_heap(); void *start_heap = heap->base; void *end_heap = heap->breakval; @@ -257,18 +247,18 @@ static void MC_get_memory_regions(mc_process_t process, mc_snapshot_t snapshot) (char *) end_heap - (char *) start_heap); snapshot->heap_bytes_used = mmalloc_get_bytes_used_remote( heap->heaplimit, - MC_process_get_malloc_info(process)); + process->get_malloc_info()); #ifdef HAVE_SMPI if (smpi_privatize_global_variables && MC_smpi_process_count()) { // snapshot->privatization_index = smpi_loaded_page - MC_process_read_variable(&mc_model_checker->process(), + mc_model_checker->process().read_variable( "smpi_loaded_page", &snapshot->privatization_index, sizeof(snapshot->privatization_index)); } else #endif { - snapshot->privatization_index = MC_PROCESS_INDEX_MISSING; + snapshot->privatization_index = simgrid::mc::ProcessIndexMissing; } } @@ -392,7 +382,7 @@ static void mc_fill_local_variables_values(mc_stack_frame_t stack_frame, current_variable->object_info, &(stack_frame->unw_cursor), (void *) stack_frame->frame_base, - (mc_address_space_t) &mc_model_checker->process(), process_index); + &mc_model_checker->process(), process_index); switch(mc_get_location_type(&location)) { case MC_LOCATION_TYPE_ADDRESS: @@ -472,7 +462,7 @@ static xbt_dynar_t MC_unwind_stack_frames(mc_unw_context_t stack_context) // TODO, use real addresses in frame_t instead of fixing it here - dw_frame_t frame = MC_process_find_function(process, (void *) ip); + dw_frame_t frame = process->find_function(remote(ip)); stack_frame->frame = frame; if (frame) { @@ -521,8 +511,8 @@ static xbt_dynar_t MC_take_snapshot_stacks(mc_snapshot_t * snapshot) // Read the context from remote process: unw_context_t context; - MC_process_read_simple(&mc_model_checker->process(), - &context, (unw_context_t*) current_stack->context, sizeof(context)); + mc_model_checker->process().read_bytes( + &context, sizeof(context), remote(current_stack->context)); st->context = xbt_new0(s_mc_unw_context_t, 1); if (mc_unw_init_context(st->context, &mc_model_checker->process(), @@ -593,15 +583,15 @@ static void MC_snapshot_handle_ignore(mc_snapshot_t snapshot) 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); + snapshot->process->read_bytes( + ignored_data.data, region->size, remote(region->addr), + simgrid::mc::ProcessIndexDisabled); 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); + snapshot->process->clear_bytes(remote(region->addr), region->size); } } @@ -611,8 +601,8 @@ 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); + snapshot->process->write_bytes(ignored_data.data, ignored_data.size, + remote(ignored_data.start)); } } @@ -697,20 +687,16 @@ static void MC_get_current_fd(mc_snapshot_t snapshot) closedir (fd_dir); } -static s_mc_address_space_class_t mc_snapshot_class = { - (mc_address_space_class_read_callback_t) &MC_snapshot_read, - NULL -}; - mc_snapshot_t MC_take_snapshot(int num_state) { XBT_DEBUG("Taking snapshot %i", num_state); mc_process_t mc_process = &mc_model_checker->process(); - mc_snapshot_t snapshot = xbt_new0(s_mc_snapshot_t, 1); + + mc_snapshot_t snapshot = new simgrid::mc::Snapshot(); + snapshot->process = mc_process; snapshot->num_state = num_state; - snapshot->address_space.address_space_class = &mc_snapshot_class; snapshot->enabled_processes = xbt_dynar_new(sizeof(int), NULL);