}
-int data_program_region_compare(void *d1, void *d2, size_t size){
- int distance = 0;
- int i;
-
- for(i=0; i<size; i++){
- if(memcmp(((char *)d1) + i, ((char *)d2) + i, 1) != 0){
- fprintf(stderr,"Different byte (offset=%d) (%p - %p) in data program region\n", i, (char *)d1 + i, (char *)d2 + i);
- distance++;
- }
- }
-
- fprintf(stderr, "Hamming distance between data program regions : %d\n", distance);
-
- return distance;
-}
-
-int data_libsimgrid_region_compare(void *d1, void *d2, size_t size){
- int distance = 0;
- int i;
-
- for(i=0; i<size; i++){
- if(memcmp(((char *)d1) + i, ((char *)d2) + i, 1) != 0){
- fprintf(stderr, "Different byte (offset=%d) (%p - %p) in data libsimgrid region\n", i, (char *)d1 + i, (char *)d2 + i);
- distance++;
- }
- }
-
- fprintf(stderr, "Hamming distance between data libsimgrid regions : %d\n", distance);
-
- return distance;
-}
-
-int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
-
-
- if(s1->num_reg != s2->num_reg){
- XBT_INFO("Different num_reg (s1 = %u, s2 = %u)", s1->num_reg, s2->num_reg);
- return 1;
- }
-
- int i;
- int errors = 0;
-
- for(i=0 ; i< s1->num_reg ; i++){
-
- if(s1->regions[i]->type != s2->regions[i]->type){
- XBT_INFO("Different type of region");
- errors++;
- }
-
- switch(s1->regions[i]->type){
- case 0:
- if(s1->regions[i]->size != s2->regions[i]->size){
- XBT_INFO("Different size of heap (s1 = %zu, s2 = %zu)", s1->regions[i]->size, s2->regions[i]->size);
- errors++;
- }
- if(s1->regions[i]->start_addr != s2->regions[i]->start_addr){
- XBT_INFO("Different start addr of heap (s1 = %p, s2 = %p)", s1->regions[i]->start_addr, s2->regions[i]->start_addr);
- errors++;
- }
- if(mmalloc_compare_heap(s1->regions[i]->data, s2->regions[i]->data)){
- XBT_INFO("Different heap (mmalloc_compare)");
- errors++;
- }
- break;
- case 1 :
- if(s1->regions[i]->size != s2->regions[i]->size){
- XBT_INFO("Different size of libsimgrid (s1 = %zu, s2 = %zu)", s1->regions[i]->size, s2->regions[i]->size);
- errors++;
- }
- if(s1->regions[i]->start_addr != s2->regions[i]->start_addr){
- XBT_INFO("Different start addr of libsimgrid (s1 = %p, s2 = %p)", s1->regions[i]->start_addr, s2->regions[i]->start_addr);
- errors++;
- }
- if(data_libsimgrid_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){
- XBT_INFO("Different memcmp for data in libsimgrid");
- errors++;
- }
- break;
- case 2 :
- if(s1->regions[i]->size != s2->regions[i]->size){
- XBT_INFO("Different size of data program (s1 = %zu, s2 = %zu)", s1->regions[i]->size, s2->regions[i]->size);
- errors++;
- }
- if(s1->regions[i]->start_addr != s2->regions[i]->start_addr){
- XBT_INFO("Different start addr of data program (s1 = %p, s2 = %p)", s1->regions[i]->start_addr, s2->regions[i]->start_addr);
- errors++;
- }
- if(data_program_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){
- XBT_INFO("Different memcmp for data in program");
- errors++;
- }
- break;
- default:
- break;
- }
- }
-
- return (errors > 0);
-
-}
-
int reached(xbt_state_t st){
+ raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
if(xbt_dynar_is_empty(reached_pairs)){
xbt_dynar_reset(prop_ato);
xbt_free(prop_ato);
MC_UNSET_RAW_MEM;
+
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
return 1;
}
/* }
xbt_dynar_reset(prop_ato);
xbt_free(prop_ato);
MC_UNSET_RAW_MEM;
+
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
return 0;
}
void set_pair_reached(xbt_state_t st){
+ raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
MC_SET_RAW_MEM;
xbt_dynar_push(reached_pairs, &pair);
MC_UNSET_RAW_MEM;
-
+
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
}
int reached_hash(xbt_state_t st){
+ raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
if(xbt_dynar_is_empty(reached_pairs_hash)){
xbt_dynar_reset(prop_ato);
xbt_free(prop_ato);
MC_UNSET_RAW_MEM;
+
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
return 1;
}else{
XBT_INFO("Different snapshot");
xbt_dynar_reset(prop_ato);
xbt_free(prop_ato);
MC_UNSET_RAW_MEM;
+
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
return 0;
}
}
void set_pair_reached_hash(xbt_state_t st){
+
+ raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
MC_SET_RAW_MEM;
MC_free_snapshot(sn);
MC_UNSET_RAW_MEM;
-
+
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
}
int visited(xbt_state_t st, int sc){
+ raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
if(xbt_dynar_is_empty(visited_pairs)){
xbt_free(prop_ato);
MC_UNSET_RAW_MEM;
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
return 1;
}else{
xbt_dynar_reset(prop_ato);
xbt_free(prop_ato);
MC_UNSET_RAW_MEM;
+
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
return 0;
}
int visited_hash(xbt_state_t st, int sc){
+ raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
if(xbt_dynar_is_empty(visited_pairs_hash)){
xbt_dynar_reset(prop_ato);
xbt_free(prop_ato);
MC_UNSET_RAW_MEM;
+
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
return 1;
}else{
//XBT_INFO("Different snapshot");
xbt_dynar_reset(prop_ato);
xbt_free(prop_ato);
MC_UNSET_RAW_MEM;
+
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
return 0;
}
}
void set_pair_visited_hash(xbt_state_t st, int sc){
+
+ raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
MC_SET_RAW_MEM;
MC_UNSET_RAW_MEM;
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
}
void set_pair_visited(xbt_state_t st, int sc){
+ raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
MC_SET_RAW_MEM;
MC_UNSET_RAW_MEM;
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
}
void MC_ddfs_init(void){
+ raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
XBT_INFO("**************************************************");
XBT_INFO("Double-DFS init");
XBT_INFO("**************************************************");
reached_pairs = xbt_dynar_new(sizeof(mc_pair_reached_t), NULL);
//reached_pairs_hash = xbt_dynar_new(sizeof(mc_pair_reached_hash_t), NULL);
//visited_pairs = xbt_dynar_new(sizeof(mc_pair_visited_t), NULL);
- visited_pairs_hash = xbt_dynar_new(sizeof(mc_pair_visited_hash_t), NULL);
+ //visited_pairs_hash = xbt_dynar_new(sizeof(mc_pair_visited_hash_t), NULL);
successors = xbt_dynar_new(sizeof(mc_pair_stateless_t), NULL);
/* Save the initial state */
}
}
- }
+ }
+
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
+
}
void MC_ddfs(int search_cycle){
+ raw_mem_set = (mmalloc_get_current_heap() == raw_heap);
+
smx_process_t process;
mc_pair_stateless_t current_pair = NULL;
if(xbt_fifo_size(mc_stack_liveness) < MAX_DEPTH_LIVENESS){
//set_pair_visited(current_pair->automaton_state, search_cycle);
- set_pair_visited_hash(current_pair->automaton_state, search_cycle);
+ //set_pair_visited_hash(current_pair->automaton_state, search_cycle);
//XBT_INFO("Visited pairs : %lu", xbt_dynar_length(visited_pairs));
- XBT_INFO("Visited pairs : %lu", xbt_dynar_length(visited_pairs_hash));
+ //XBT_INFO("Visited pairs : %lu", xbt_dynar_length(visited_pairs_hash));
if(current_pair->requests > 0){
}else{
- if(!visited_hash(pair_succ->automaton_state, search_cycle)){
+ //if(!visited_hash(pair_succ->automaton_state, search_cycle)){
//if(!visited(pair_succ->automaton_state, search_cycle)){
MC_SET_RAW_MEM;
MC_ddfs(search_cycle);
- }else{
+ /*}else{
XBT_INFO("Next pair already visited ! ");
- }
+ }*/
}
}
- if(!visited_hash(pair_succ->automaton_state, search_cycle)){
+ //if(!visited_hash(pair_succ->automaton_state, search_cycle)){
//if(!visited(pair_succ->automaton_state, search_cycle)){
MC_SET_RAW_MEM;
MC_ddfs(search_cycle);
- }else{
+ /*}else{
XBT_INFO("Next pair already visited ! ");
- }
+ }*/
}
}else{
- if(!visited_hash(pair_succ->automaton_state, search_cycle)){
+ //if(!visited_hash(pair_succ->automaton_state, search_cycle)){
//if(!visited(pair_succ->automaton_state, search_cycle)){
MC_SET_RAW_MEM;
MC_ddfs(search_cycle);
- }else{
+ /*}else{
XBT_INFO("Next pair already visited ! ");
- }
+ }*/
}
}
- if(!visited_hash(pair_succ->automaton_state, search_cycle)){
+ //if(!visited_hash(pair_succ->automaton_state, search_cycle)){
//if(!visited(pair_succ->automaton_state, search_cycle)){
MC_SET_RAW_MEM;
MC_ddfs(search_cycle);
- }else{
+ /*}else{
XBT_INFO("Next pair already visited ! ");
- }
+ }*/
}
//xbt_dynar_pop(reached_pairs_hash, NULL);
}
MC_UNSET_RAW_MEM;
-
-
+
+ if(raw_mem_set)
+ MC_SET_RAW_MEM;
+ else
+ MC_UNSET_RAW_MEM;
}