*/
static inline size_t mc_page_number(void* base, void* address)
{
+ xbt_assert(address>=base, "The address is not in the range");
return ((uintptr_t) address - (uintptr_t) base) >> xbt_pagebits;
}
void* mc_translate_address_region(uintptr_t addr, mc_mem_region_t region)
{
+ xbt_assert(mc_region_contain(region, (void*) addr), "Trying to read out of the region boundary.");
+
if (!region) {
return (void *) addr;
}
{
void* end = (char*) addr + size - 1;
size_t page_end = mc_page_number(NULL, end);
+ void* dest = target;
// Read each page:
while (mc_page_number(NULL, addr) != page_end) {
void* snapshot_addr = mc_translate_address_region((uintptr_t) addr, region);
void* next_page = mc_page_from_number(NULL, mc_page_number(NULL, addr) + 1);
size_t readable = (char*) next_page - (char*) addr;
- memcpy(target, snapshot_addr, readable);
+ memcpy(dest, snapshot_addr, readable);
addr = (char*) addr + readable;
- target = (char*) target + readable;
+ dest = (char*) dest + readable;
size -= readable;
}
// Read the end:
void* snapshot_addr = mc_translate_address_region((uintptr_t)addr, region);
- memcpy(target, snapshot_addr, size);
+ memcpy(dest, snapshot_addr, size);
return target;
}