X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/a5768f8725f95079064178fcbb020eea94ae19b7..47fd440ad6382d295645c81ca4c5c09bd5d51cc6:/src/mc/mc_snapshot.h diff --git a/src/mc/mc_snapshot.h b/src/mc/mc_snapshot.h index b860dd954a..e725c1d246 100644 --- a/src/mc/mc_snapshot.h +++ b/src/mc/mc_snapshot.h @@ -12,6 +12,7 @@ #include #include +#include #include #include "../xbt/mmalloc/mmprivate.h" @@ -84,8 +85,7 @@ XBT_INTERNAL mc_mem_region_t mc_get_snapshot_region( * */ typedef struct s_mc_snapshot_ignored_data { void* start; - size_t size; - void* data; + std::vector data; } s_mc_snapshot_ignored_data_t, *mc_snapshot_ignored_data_t; typedef struct s_fd_infos{ @@ -105,15 +105,46 @@ typedef struct s_mc_stack_frame { unw_word_t sp; unw_word_t frame_base; dw_frame_t frame; - char* frame_name; + std::string frame_name; unw_cursor_t unw_cursor; } s_mc_stack_frame_t, *mc_stack_frame_t; +typedef struct s_local_variable{ + dw_frame_t subprogram; + unsigned long ip; + std::string name; + dw_type_t type; + void *address; + int region; +} s_local_variable_t, *local_variable_t; + typedef struct s_mc_snapshot_stack{ - xbt_dynar_t local_variables; + std::vector local_variables; mc_unw_context_t context; - xbt_dynar_t stack_frames; // mc_stack_frame_t + std::vector stack_frames; int process_index; + + s_mc_snapshot_stack() + : context(nullptr), process_index(0) + {} + ~s_mc_snapshot_stack(); + s_mc_snapshot_stack(s_mc_snapshot_stack& p) = delete; + s_mc_snapshot_stack& operator=(s_mc_snapshot_stack&) = delete; + + s_mc_snapshot_stack(s_mc_snapshot_stack&& that) + { + *this = std::move(that); + } + s_mc_snapshot_stack& operator=(s_mc_snapshot_stack&& that) + { + this->local_variables = std::move(that.local_variables); + this->context = std::move(that.context); + that.context = nullptr; + this->process_index = that.process_index; + that.process_index = 0; + return *this; + } + }s_mc_snapshot_stack_t, *mc_snapshot_stack_t; typedef struct s_mc_global_t { @@ -141,15 +172,14 @@ public: // To be private mc_process_t process; int num_state; size_t heap_bytes_used; - mc_mem_region_t* snapshot_regions; - size_t snapshot_regions_count; + std::vector> snapshot_regions; std::set enabled_processes; int privatization_index; std::vector stack_sizes; - xbt_dynar_t stacks; - xbt_dynar_t to_ignore; + std::vector stacks; + std::vector to_ignore; uint64_t hash; - xbt_dynar_t ignored_data; + std::vector ignored_data; std::vector current_fds; }; @@ -249,4 +279,8 @@ void* MC_region_read_pointer(mc_mem_region_t region, const void* addr) SG_END_DECL() +XBT_INTERNAL int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, + std::vector* i1, + std::vector* i2); + #endif