return 1;
}*/
-
size_t i, j;
void *addr_block1, *addr_block2, *addr_frag1, *addr_frag2;
size_t frag_size;
int distance = 0;
int pointer_align;
+ char *pointed_address1 = NULL, *pointed_address2 = NULL;
+
/* Check busy blocks*/
- while(i < mdp1->heapindex){
+ while(i < mdp1->heaplimit){
if(mdp1->heapinfo[i].type != mdp2->heapinfo[i].type){
fprintf(stderr,"Different type of block : %d - %d\n", mdp1->heapinfo[i].type, mdp2->heapinfo[i].type);
errors++;
}
- addr_block1 = (char *)mdp1 + sizeof(struct mdesc) + (i * BLOCKSIZE);
- addr_block2 = (char *)mdp2 + sizeof(struct mdesc) + (i * BLOCKSIZE);
+ addr_block1 = (char *)mdp1 + mdp1->headersize + ((i-1) * BLOCKSIZE);
+ addr_block2 = (char *)mdp2 + mdp2->headersize + ((i-1) * BLOCKSIZE);
if(mdp1->heapinfo[i].type == 0){ /* busy large block */
errors++;
}
+ //if(memcmp(addr_block1, addr_block2, (mdp1->heapinfo[i].busy_block.size)) != 0){
if(memcmp(addr_block1, addr_block2, (mdp1->heapinfo[i].busy_block.busy_size)) != 0){
fprintf(stderr,"\nDifferent data in large block %zu (size = %zu (in blocks), busy_size = %zu (in bytes))\n", i, mdp1->heapinfo[i].busy_block.size, mdp1->heapinfo[i].busy_block.busy_size);
/* Hamming distance on different blocks */
distance = 0;
+ //for(k=0;k<mdp1->heapinfo[i].busy_block.size;k++){
for(k=0;k<mdp1->heapinfo[i].busy_block.busy_size;k++){
if(memcmp(((char *)addr_block1) + k, ((char *)addr_block2) + k, 1) != 0){
fprintf(stderr, "Different byte (offset=%d) (%p - %p) in block %zu\n", k, (char *)addr_block1 + k, (char *)addr_block2 + k, i);
distance++;
pointer_align = (k / sizeof(void*)) * sizeof(void*);
- fprintf(stderr, "Pointed address : %p (in %s) - %p (in %s)\n", *((void **)((char *)addr_block1 + pointer_align)), get_addr_memory_map(*((void **)((char *)addr_block1 + pointer_align)), s_heap, r_heap), *((void **)((char *)addr_block2 + pointer_align)),get_addr_memory_map(*((void **)((char *)addr_block2 + pointer_align)), s_heap, r_heap) );
+ pointed_address1 = xbt_strdup(get_addr_memory_map(*((void **)((char *)addr_block1 + pointer_align)), s_heap, r_heap));
+ pointed_address2 = xbt_strdup(get_addr_memory_map(*((void **)((char *)addr_block2 + pointer_align)), s_heap, r_heap));
+ fprintf(stderr, "Pointed address : %p (in %s) - %p (in %s)\n", *((void **)((char *)addr_block1 + pointer_align)), pointed_address1, *((void **)((char *)addr_block2 + pointer_align)), pointed_address2);
+ if((strcmp(pointed_address1, pointed_address2) == 0) && (strcmp(pointed_address1, "std_heap") == 0)){
+ /* FIXME : compare value pointed thanks to DWARF */
+ }
}
}
errors++;
}
-
- i = i + mdp1->heapinfo[i].busy_block.size;
+ if( mdp1->heapinfo[i].busy_block.size == 0)
+ i = i + 1;
+ else
+ i = i + mdp1->heapinfo[i].busy_block.size;
}else{
addr_frag1 = (char *)addr_block1 + (j * frag_size);
addr_frag2 = (char *)addr_block2 + (j * frag_size);
-
+ //if(memcmp(addr_frag1, addr_frag2, frag_size) != 0){
if(memcmp(addr_frag1, addr_frag2, mdp1->heapinfo[i].busy_frag.frag_size[j]) != 0){
fprintf(stderr,"\nDifferent data in fragment %zu (size = %zu, size used = %hu) in block %zu \n", j, frag_size, mdp1->heapinfo[i].busy_frag.frag_size[j], i);
/* Hamming distance on different blocks */
distance = 0;
+ //for(k=0;k<frag_size;k++){
for(k=0;k<mdp1->heapinfo[i].busy_frag.frag_size[j];k++){
if(memcmp(((char *)addr_frag1) + k, ((char *)addr_frag2) + k, 1) != 0){
fprintf(stderr, "Different byte (offset=%d) (%p - %p) in fragment %zu in block %zu\n", k, (char *)addr_frag1 + k, (char *)addr_frag2 + k, j, i);
distance++;
pointer_align = (k / sizeof(void*)) * sizeof(void*);
- fprintf(stderr, "Pointed address : %p (in %s) - %p (in %s)\n", *((void **)((char *)addr_frag1 + pointer_align)), get_addr_memory_map(*((void **)((char *)addr_frag1 + pointer_align)), s_heap, r_heap), *((void **)((char *)addr_frag2 + pointer_align)), get_addr_memory_map(*((void **)((char *)addr_frag2 + pointer_align)), s_heap, r_heap));
+ pointed_address1 = xbt_strdup(get_addr_memory_map(*((void **)((char *)addr_frag1 + pointer_align)), s_heap, r_heap));
+ pointed_address2 = xbt_strdup(get_addr_memory_map(*((void **)((char *)addr_frag2 + pointer_align)), s_heap, r_heap));
+ fprintf(stderr, "Pointed address : %p (in %s) - %p (in %s)\n", *((void **)((char *)addr_frag1 + pointer_align)), pointed_address1, *((void **)((char *)addr_frag2 + pointer_align)), pointed_address2);
+ if((strcmp(pointed_address1, pointed_address2) == 0) && (strcmp(pointed_address1, "std_heap") == 0)){
+ /* FIXME : compare value pointed thanks to DWARF */
+ }
}
}
}
+ free(pointed_address1);
+ free(pointed_address2);
return (errors);
}
if(fp == NULL)
perror("fopen failed");
- if(addr == NULL)
+ if(addr == NULL){
+ free(line);
+ fclose(fp);
return "nil";
+ }
xbt_dynar_t lfields = NULL;
xbt_dynar_t start_end = NULL;