void * lookupAddress(unsigned long long address) { RegionMap::iterator it = lookupRegion(address); if (it != regionMap.end()) { unsigned long long offset = address - it->first; assert(offset < it->second.size); void *addr = (char *)it->second.buffer + offset; if (retrace::verbosity >= 2) { std::cout << "region " << std::hex << "0x" << address << " <- " << "0x" << (uintptr_t)addr << std::dec << "\n"; } return addr; } if (retrace::debug && address >= 64 * 1024 * 1024) { /* Likely not an offset, but an address that should had been swizzled */ std::cerr << "warning: passing high address 0x" << std::hex << address << std::dec << " as uintptr_t\n"; } return (void *)(uintptr_t)address; }
void delRegion(unsigned long long address) { RegionMap::iterator it = lookupRegion(address); if (it != regionMap.end()) { regionMap.erase(it); } else { assert(0); } }
void setRegionPitch(unsigned long long address, unsigned dimensions, int tracePitch, int realPitch) { RegionMap::iterator it = lookupRegion(address); if (it != regionMap.end()) { Region ®ion = it->second; region.dimensions = dimensions; region.tracePitch = tracePitch; region.realPitch = realPitch; } else { assert(0); } }
void * lookupAddress(unsigned long long address) { RegionMap::iterator it = lookupRegion(address); if (it != regionMap.end()) { unsigned long long offset = address - it->first; assert(offset < it->second.size); return (char *)it->second.buffer + offset; } if (address >= 0x00400000) { std::cerr << "warning: could not translate address 0x" << std::hex << address << std::dec << "\n"; } return (void *)(uintptr_t)address; }
static void lookupAddress(unsigned long long address, Range &range) { RegionMap::const_iterator it = lookupRegion(address); if (it != regionMap.end()) { const Region & region = it->second; unsigned long long offset = address - it->first; assert(offset < region.size); range.ptr = (char *)region.buffer + offset; range.len = region.size - offset; range.dims = region.dimensions; range.tracePitch = region.tracePitch; range.realPitch = region.realPitch; if (retrace::verbosity >= 2) { std::cout << "region " << std::hex << "0x" << address << " <- " << "0x" << (uintptr_t)range.ptr << std::dec << "\n"; } return; } if (retrace::debug > 0 && address >= 64 * 1024 * 1024) { /* Likely not an offset, but an address that should had been swizzled */ std::cerr << "warning: passing high address 0x" << std::hex << address << std::dec << " as uintptr_t\n"; } range.ptr = (void *)(uintptr_t)address; range.len = 0; }