while (i1 < state.heaplimit) {
- const malloc_info* heapinfo1 = (const malloc_info*) MC_region_read(heap_region1, &heapinfo_temp1, &heapinfos1[i1], sizeof(malloc_info));
- const malloc_info* heapinfo2 = (const malloc_info*) MC_region_read(heap_region2, &heapinfo_temp2, &heapinfos2[i1], sizeof(malloc_info));
+ const malloc_info* heapinfo1 =
+ (const malloc_info*)heap_region1->read(&heapinfo_temp1, &heapinfos1[i1], sizeof(malloc_info));
+ const malloc_info* heapinfo2 =
+ (const malloc_info*)heap_region2->read(&heapinfo_temp2, &heapinfos2[i1], sizeof(malloc_info));
if (heapinfo1->type == MMALLOC_TYPE_FREE || heapinfo1->type == MMALLOC_TYPE_HEAPINFO) { /* Free block */
i1 ++;
continue;
}
- const malloc_info* heapinfo2b = (const malloc_info*) MC_region_read(heap_region2, &heapinfo_temp2b, &heapinfos2[i2], sizeof(malloc_info));
+ const malloc_info* heapinfo2b =
+ (const malloc_info*)heap_region2->read(&heapinfo_temp2b, &heapinfos2[i2], sizeof(malloc_info));
if (heapinfo2b->type != MMALLOC_TYPE_UNFRAGMENTED) {
i2++;
while (i2 < state.heaplimit && not equal) {
- const malloc_info* heapinfo2b = (const malloc_info*) MC_region_read(
- heap_region2, &heapinfo_temp2b, &heapinfos2[i2],
- sizeof(malloc_info));
+ const malloc_info* heapinfo2b =
+ (const malloc_info*)heap_region2->read(&heapinfo_temp2b, &heapinfos2[i2], sizeof(malloc_info));
if (heapinfo2b->type == MMALLOC_TYPE_FREE || heapinfo2b->type == MMALLOC_TYPE_HEAPINFO) {
i2 ++;
/* All blocks/fragments are equal to another block/fragment_ ? */
for (size_t i = 1; i < state.heaplimit; i++) {
- const malloc_info* heapinfo1 = (const malloc_info*) MC_region_read(
- heap_region1, &heapinfo_temp1, &heapinfos1[i], sizeof(malloc_info));
+ const malloc_info* heapinfo1 =
+ (const malloc_info*)heap_region1->read(&heapinfo_temp1, &heapinfos1[i], sizeof(malloc_info));
if (heapinfo1->type == MMALLOC_TYPE_UNFRAGMENTED && i1 == state.heaplimit && heapinfo1->busy_block.busy_size > 0 &&
not state.equals_to1_(i, 0).valid_) {
XBT_DEBUG("Number of blocks/fragments not found in heap1: %d", nb_diff1);
for (size_t i = 1; i < state.heaplimit; i++) {
- const malloc_info* heapinfo2 = (const malloc_info*) MC_region_read(
- heap_region2, &heapinfo_temp2, &heapinfos2[i], sizeof(malloc_info));
+ const malloc_info* heapinfo2 =
+ (const malloc_info*)heap_region2->read(&heapinfo_temp2, &heapinfos2[i], sizeof(malloc_info));
if (heapinfo2->type == MMALLOC_TYPE_UNFRAGMENTED && i1 == state.heaplimit && heapinfo2->busy_block.busy_size > 0 &&
not state.equals_to2_(i, 0).valid_) {
XBT_DEBUG("Block %zu not found (size used = %zu)", i,
simgrid::mc::Region* heap_region1 = MC_get_heap_region(snapshot1);
simgrid::mc::Region* heap_region2 = MC_get_heap_region(snapshot2);
- const malloc_info* heapinfo1 = (const malloc_info*) MC_region_read(
- heap_region1, &heapinfo_temp1, &heapinfos1[block1], sizeof(malloc_info));
- const malloc_info* heapinfo2 = (const malloc_info*) MC_region_read(
- heap_region2, &heapinfo_temp2, &heapinfos2[block2], sizeof(malloc_info));
+ const malloc_info* heapinfo1 =
+ (const malloc_info*)heap_region1->read(&heapinfo_temp1, &heapinfos1[block1], sizeof(malloc_info));
+ const malloc_info* heapinfo2 =
+ (const malloc_info*)heap_region2->read(&heapinfo_temp2, &heapinfos2[block2], sizeof(malloc_info));
if ((heapinfo1->type == MMALLOC_TYPE_FREE || heapinfo1->type==MMALLOC_TYPE_HEAPINFO)
&& (heapinfo2->type == MMALLOC_TYPE_FREE || heapinfo2->type ==MMALLOC_TYPE_HEAPINFO)) {
RemoteClient* process = &mc_model_checker->process();
- int errors = 0;
-
- int hash_result = 0;
- if (_sg_mc_hash) {
- hash_result = (s1->hash_ != s2->hash_);
- if (hash_result) {
- XBT_VERB("(%d - %d) Different hash: 0x%" PRIx64 "--0x%" PRIx64, s1->num_state_, s2->num_state_, s1->hash_,
- s2->hash_);
-#ifndef MC_DEBUG
- return 1;
-#endif
+ if (s1->hash_ != s2->hash_) {
+ XBT_VERB("(%d - %d) Different hash: 0x%" PRIx64 "--0x%" PRIx64, s1->num_state_, s2->num_state_, s1->hash_,
+ s2->hash_);
+ return 1;
} else
XBT_VERB("(%d - %d) Same hash: 0x%" PRIx64, s1->num_state_, s2->num_state_, s1->hash_);
- }
/* Compare enabled processes */
if (s1->enabled_processes_ != s2->enabled_processes_) {
size_t size_used1 = s1->stack_sizes_[i];
size_t size_used2 = s2->stack_sizes_[i];
if (size_used1 != size_used2) {
-#ifdef MC_DEBUG
- XBT_DEBUG("(%d - %d) Different size used in stacks: %zu - %zu", s1->num_state, s2->num_state, size_used1,
- size_used2);
- errors++;
- is_diff = 1;
-#else
-#ifdef MC_VERBOSE
XBT_VERB("(%d - %d) Different size used in stacks: %zu - %zu", s1->num_state_, s2->num_state_, size_used1,
size_used2);
-#endif
return 1;
-#endif
}
}
if (is_diff) // do not proceed if there is any stacks that don't match
int res_init = state_comparator->initHeapInformation(heap1, heap2, &s1->to_ignore_, &s2->to_ignore_);
if (res_init == -1) {
-#ifdef MC_DEBUG
- XBT_DEBUG("(%d - %d) Different heap information", num1, nus1->num_state, s2->num_statem2);
- errors++;
-#else
-#ifdef MC_VERBOSE
XBT_VERB("(%d - %d) Different heap information", s1->num_state_, s2->num_state_);
-#endif
-
return 1;
-#endif
}
/* Stacks comparison */
mc_snapshot_stack_t stack2 = &s2->stacks_[cursor];
if (compare_local_variables(*state_comparator, s1, s2, stack1, stack2) > 0) {
-#ifdef MC_DEBUG
- XBT_DEBUG("(%d - %d) Different local variables between stacks %d", num1,
- num2, cursor + 1);
- errors++;
-#else
-
-#ifdef MC_VERBOSE
XBT_VERB("(%d - %d) Different local variables between stacks %u", s1->num_state_, s2->num_state_, cursor + 1);
-#endif
-
return 1;
-#endif
}
}
/* Compare global variables */
if (compare_global_variables(*state_comparator, region1->object_info(), region1, region2, s1, s2)) {
-
-#ifdef MC_DEBUG
- std::string const& name = region1->object_info()->file_name;
- XBT_DEBUG("(%d - %d) Different global variables in %s", s1->num_state, s2->num_state, name.c_str());
- errors++;
-#else
-#ifdef MC_VERBOSE
std::string const& name = region1->object_info()->file_name;
XBT_VERB("(%d - %d) Different global variables in %s", s1->num_state_, s2->num_state_, name.c_str());
-#endif
-
return 1;
-#endif
}
}
/* Compare heap */
if (mmalloc_compare_heap(*state_comparator, s1, s2) > 0) {
-
-#ifdef MC_DEBUG
- XBT_DEBUG("(%d - %d) Different heap (mmalloc_compare)", s1->num_state, s2->num_state);
- errors++;
-#else
-
-#ifdef MC_VERBOSE
XBT_VERB("(%d - %d) Different heap (mmalloc_compare)", s1->num_state_, s2->num_state_);
-#endif
return 1;
-#endif
}
-#ifdef MC_VERBOSE
- if (errors || hash_result)
- XBT_VERB("(%d - %d) Difference found", s1->num_state_, s2->num_state_);
- else
XBT_VERB("(%d - %d) No difference found", s1->num_state_, s2->num_state_);
-#endif
-#if defined(MC_DEBUG) && defined(MC_VERBOSE)
- if (_sg_mc_hash) {
- // * false positive SHOULD be avoided.
- // * There MUST not be any false negative.
-
- XBT_VERB("(%d - %d) State equality hash test is %s %s", s1->num_state, s2->num_state,
- (hash_result != 0) == (errors != 0) ? "true" : "false", not hash_result ? "positive" : "negative");
- }
-#endif
-
- return errors > 0 || hash_result;
+ return 0;
}
}