+ void *pointed = *(void **) address;
+ if (pointed == NULL) {
+ XBT_DEBUG("Hashed pinter is NULL");
+ return;
+ }
+ // Avoid loops:
+ if (mc_address_test(state->handled_addresses, pointed)) {
+ XBT_DEBUG("Hashed pointed data %p already hashed", pointed);
+ return;
+ }
+ mc_address_add(state->handled_addresses, pointed);
+
+ // Anything outside the R/W segments and the heap is not hashed:
+ bool valid_pointer = (pointed >= (void *) mc_binary_info->start_rw
+ && pointed <= (void *) mc_binary_info->end_rw)
+ || (pointed >= (void *) mc_libsimgrid_info->start_rw
+ && pointed <= (void *) mc_libsimgrid_info->end_rw)
+ || (pointed >= std_heap
+ && pointed < (void *) ((const char *) std_heap + STD_HEAP_SIZE));
+ if (!valid_pointer) {
+ XBT_DEBUG("Hashed pointed data %p is in an ignored range", pointed);
+ return;
+ }