-void MC_restore_snapshot(mc_snapshot_t snapshot)
-{
- unsigned int i;
- for(i=0; i < snapshot->num_reg; i++){
- MC_region_restore(snapshot->regions[i]);
- switch(snapshot->regions[i]->type){
- case 0 :
- XBT_DEBUG("heap restored");
+int snapshot_compare(mc_snapshot_t s1, mc_snapshot_t s2){
+
+ int errors = 0, i;
+
+ if(s1->num_reg != s2->num_reg){
+ XBT_DEBUG("Different num_reg (s1 = %u, s2 = %u)", s1->num_reg, s2->num_reg);
+ return 1;
+ }
+
+ 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 :
+ /* Compare heapregion */
+ if(s1->regions[i]->size != s2->regions[i]->size){
+ XBT_DEBUG("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_DEBUG("Different start addr of heap (s1 = %p, s2 = %p)", s1->regions[i]->start_addr, s2->regions[i]->start_addr);
+ errors++;
+ }
+ if(mmalloc_compare_heap((xbt_mheap_t)s1->regions[i]->data, (xbt_mheap_t)s2->regions[i]->data)){
+ XBT_DEBUG("Different heap (mmalloc_compare)");
+ errors++;
+ }