aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOleksij Rempel <linux@rempel-privat.de>2014-01-07 20:28:12 +0100
committerSpencer Oliver <spen@spen-soft.co.uk>2014-07-10 20:00:22 +0000
commit915e06b3f0e389a9350da0432e2da5ff0fe4e01e (patch)
treeeb1cd1b3d7538db1d5223fb28ef9cc9932abcdc2
parent518ce9e19e45d55b2e239ba99c457e018432d4ee (diff)
downloadriscv-openocd-915e06b3f0e389a9350da0432e2da5ff0fe4e01e.zip
riscv-openocd-915e06b3f0e389a9350da0432e2da5ff0fe4e01e.tar.gz
riscv-openocd-915e06b3f0e389a9350da0432e2da5ff0fe4e01e.tar.bz2
mips_m4k.c: make sure fast_data_area is safe
If load_image address overlap with fast_data_area, it will caouse different mysterius issues. This patch should prevent it. Change-Id: Ibc95e5aa3ac002a59755029496b6a72616e9287f Signed-off-by: Oleksij Rempel <linux@rempel-privat.de> Reviewed-on: http://openocd.zylin.com/1854 Tested-by: jenkins Reviewed-by: Salvador Arroyo <sarroyofdez@yahoo.es> Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
-rw-r--r--src/target/mips_m4k.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/target/mips_m4k.c b/src/target/mips_m4k.c
index c2922ce..d7e4265 100644
--- a/src/target/mips_m4k.c
+++ b/src/target/mips_m4k.c
@@ -1131,6 +1131,7 @@ static int mips_m4k_bulk_write_memory(struct target *target, uint32_t address,
{
struct mips32_common *mips32 = target_to_mips32(target);
struct mips_ejtag *ejtag_info = &mips32->ejtag_info;
+ struct working_area *fast_data_area;
int retval;
int write_t = 1;
@@ -1157,6 +1158,17 @@ static int mips_m4k_bulk_write_memory(struct target *target, uint32_t address,
ejtag_info->fast_access_save = -1;
}
+ fast_data_area = mips32->fast_data_area;
+
+ if (address <= fast_data_area->address + fast_data_area->size &&
+ fast_data_area->address <= address + count) {
+ LOG_ERROR("fast_data (0x%8.8" PRIx32 ") is within write area "
+ "(0x%8.8" PRIx32 "-0x%8.8" PRIx32 ").",
+ fast_data_area->address, address, address + count);
+ LOG_ERROR("Change work-area-phys or load_image address!");
+ return ERROR_FAIL;
+ }
+
/* mips32_pracc_fastdata_xfer requires uint32_t in host endianness, */
/* but byte array represents target endianness */
uint32_t *t = NULL;