X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Ftarget%2Fxtensa%2Fxtensa.c;h=4dfff6ab414a1679ef1224a799b9e46ede3906ab;hb=53d17e790128803a0fed453c4945c07b3377c4d3;hp=1691deeebbdda7bc33c8a5311bc8503ff5d3b6b7;hpb=44ed26a1db3b9e0ca9dc1000e967533b1c371ee3;p=fw%2Fopenocd diff --git a/src/target/xtensa/xtensa.c b/src/target/xtensa/xtensa.c index 1691deeeb..4dfff6ab4 100644 --- a/src/target/xtensa/xtensa.c +++ b/src/target/xtensa/xtensa.c @@ -1738,15 +1738,12 @@ int xtensa_read_memory(struct target *target, target_addr_t address, uint32_t si } } - if (addrstart_al == address && addrend_al == address + (size * count)) { - albuff = buffer; - } else { - albuff = malloc(addrend_al - addrstart_al); - if (!albuff) { - LOG_TARGET_ERROR(target, "Out of memory allocating %" TARGET_PRIdADDR " bytes!", - addrend_al - addrstart_al); - return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; - } + unsigned int alloc_bytes = ALIGN_UP(addrend_al - addrstart_al, sizeof(uint32_t)); + albuff = calloc(alloc_bytes, 1); + if (!albuff) { + LOG_TARGET_ERROR(target, "Out of memory allocating %" PRId64 " bytes!", + addrend_al - addrstart_al); + return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; } /* We're going to use A3 here */ @@ -1795,11 +1792,8 @@ int xtensa_read_memory(struct target *target, target_addr_t address, uint32_t si if (bswap) buf_bswap32(albuff, albuff, addrend_al - addrstart_al); - if (albuff != buffer) { - memcpy(buffer, albuff + (address & 3), (size * count)); - free(albuff); - } - + memcpy(buffer, albuff + (address & 3), (size * count)); + free(albuff); return res; } @@ -1855,7 +1849,7 @@ int xtensa_write_memory(struct target *target, albuff = malloc(addrend_al - addrstart_al); } if (!albuff) { - LOG_TARGET_ERROR(target, "Out of memory allocating %" TARGET_PRIdADDR " bytes!", + LOG_TARGET_ERROR(target, "Out of memory allocating %" PRId64 " bytes!", addrend_al - addrstart_al); return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; }