diff --git a/src/freedreno/decode/replay.c b/src/freedreno/decode/replay.c index f4974016187..5390d698b55 100644 --- a/src/freedreno/decode/replay.c +++ b/src/freedreno/decode/replay.c @@ -384,8 +384,16 @@ device_dump_wrbuf(struct device *dev) fprintf(stderr, "Error getting buffer for %s\n", buffer_path); goto end_it; } - const void *buffer = buf->map + (wrbuf->iova - buf->iova); - fwrite(buffer, wrbuf->size, 1, f); + + uint64_t offset = wrbuf->iova - buf->iova; + uint64_t size = MIN2(wrbuf->size, buf->size - offset); + if (size != wrbuf->size) { + fprintf(stderr, "Warning: Clamping buffer %s as it's smaller than expected (0x%lx < 0x%lx)\n", wrbuf->name, size, wrbuf->size); + } + + printf("Dumping %s (0x%lx - 0x%lx)\n", wrbuf->name, wrbuf->iova, wrbuf->iova + size); + + fwrite(buf->map + offset, size, 1, f); end_it: fclose(f);