From 836c888a9f8c7be6a2ec571a2f838c76a7df1a40 Mon Sep 17 00:00:00 2001 From: Marion Guthmuller Date: Thu, 3 May 2012 10:54:14 +0200 Subject: [PATCH] model-checker : new comparison of region (program data and libsimgrid data) --- src/mc/mc_liveness.c | 88 +++++++++++++++++++++++++++++++++++++++----- src/mc/mc_private.h | 2 + 2 files changed, 80 insertions(+), 10 deletions(-) diff --git a/src/mc/mc_liveness.c b/src/mc/mc_liveness.c index c7b280f70e..221b87992c 100644 --- a/src/mc/mc_liveness.c +++ b/src/mc/mc_liveness.c @@ -33,6 +33,46 @@ unsigned int hash_region(char *str, int str_len){ } +int data_program_region_compare(void *d1, void *d2, size_t size){ + int distance = 0; + int pointer_align; + int i; + + for(i=0; iregions[i]->size != s2->regions[i]->size){ if(XBT_LOG_ISENABLED(mc_liveness, xbt_log_priority_debug)){ XBT_DEBUG("Different size of libsimgrid (s1 = %zu, s2 = %zu)", s1->regions[i]->size, s2->regions[i]->size); @@ -99,16 +139,41 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ return 1; } } - if(memcmp(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){ + if(data_program_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){ + if(XBT_LOG_ISENABLED(mc_liveness, xbt_log_priority_debug)){ + XBT_DEBUG("Different memcmp for data in libsimgrid"); + errors++; + }else{ + return 1; + } + } + break; + case 2 : + if(s1->regions[i]->size != s2->regions[i]->size){ + if(XBT_LOG_ISENABLED(mc_liveness, xbt_log_priority_debug)){ + XBT_DEBUG("Different size of data program (s1 = %zu, s2 = %zu)", s1->regions[i]->size, s2->regions[i]->size); + errors++; + }else{ + return 1; + } + } + if(s1->regions[i]->start_addr != s2->regions[i]->start_addr){ + if(XBT_LOG_ISENABLED(mc_liveness, xbt_log_priority_debug)){ + XBT_DEBUG("Different start addr of data program (s1 = %p, s2 = %p)", s1->regions[i]->start_addr, s2->regions[i]->start_addr); + errors++; + }else{ + return 1; + } + } + if(data_libsimgrid_region_compare(s1->regions[i]->data, s2->regions[i]->data, s1->regions[i]->size) != 0){ if(XBT_LOG_ISENABLED(mc_liveness, xbt_log_priority_debug)){ XBT_DEBUG("Different memcmp for data in libsimgrid"); - XBT_DEBUG("Size : %zu", s1->regions[i]->size); errors++; }else{ return 1; } } - break;*/ + break; default: break; } @@ -116,7 +181,6 @@ int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){ return (errors > 0); - } int reached(xbt_state_t st){ @@ -645,16 +709,16 @@ int visited_hash(xbt_state_t st, int sc){ MC_UNSET_RAW_MEM; return 1; }else{ - XBT_DEBUG("Different snapshot"); + //XBT_DEBUG("Different snapshot"); } }else{ - XBT_DEBUG("Different values of propositional symbols"); + //XBT_DEBUG("Different values of propositional symbols"); } }else{ - XBT_DEBUG("Different automaton state"); + //XBT_DEBUG("Different automaton state"); } }else{ - XBT_DEBUG("Different value of search_cycle"); + //XBT_DEBUG("Different value of search_cycle"); } region_diff = 0; @@ -812,9 +876,13 @@ void MC_ddfs_init(void){ XBT_DEBUG("Double-DFS init"); XBT_DEBUG("**************************************************"); + XBT_DEBUG("Std heap : %p", std_heap); + XBT_DEBUG("Raw heap : %p", raw_heap); + mc_pair_stateless_t mc_initial_pair = NULL; mc_state_t initial_graph_state = NULL; smx_process_t process; + MC_wait_for_requests(); @@ -903,7 +971,7 @@ void MC_ddfs(int search_cycle){ mc_stats_pair->visited_pairs++; - sleep(1); + //sleep(1); int value; mc_state_t next_graph_state = NULL; diff --git a/src/mc/mc_private.h b/src/mc/mc_private.h index 179f7bb45e..9481343e5f 100644 --- a/src/mc/mc_private.h +++ b/src/mc/mc_private.h @@ -254,6 +254,8 @@ void set_pair_reached(xbt_state_t st); int reached_hash(xbt_state_t st); void set_pair_reached_hash(xbt_state_t st); int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2); +int data_program_region_compare(void *d1, void *d2, size_t size); +int data_libsimgrid_region_compare(void *d1, void *d2, size_t size); void MC_pair_delete(mc_pair_t pair); void MC_exit_liveness(void); mc_state_t MC_state_pair_new(void); -- 2.20.1