diff options
author | Oleksij Rempel <linux@rempel-privat.de> | 2014-01-07 20:28:12 +0100 |
---|---|---|
committer | Spencer Oliver <spen@spen-soft.co.uk> | 2014-07-10 20:00:22 +0000 |
commit | 915e06b3f0e389a9350da0432e2da5ff0fe4e01e (patch) | |
tree | eb1cd1b3d7538db1d5223fb28ef9cc9932abcdc2 /src | |
parent | 518ce9e19e45d55b2e239ba99c457e018432d4ee (diff) | |
download | riscv-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>
Diffstat (limited to 'src')
-rw-r--r-- | src/target/mips_m4k.c | 12 |
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; |