From: Oleksij Rempel Date: Tue, 7 Jan 2014 19:28:12 +0000 (+0100) Subject: mips_m4k.c: make sure fast_data_area is safe X-Git-Tag: v0.9.0-rc1~331 X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=commitdiff_plain;h=915e06b3f0e389a9350da0432e2da5ff0fe4e01e;ds=sidebyside 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 Reviewed-on: http://openocd.zylin.com/1854 Tested-by: jenkins Reviewed-by: Salvador Arroyo Reviewed-by: Spencer Oliver --- diff --git a/src/target/mips_m4k.c b/src/target/mips_m4k.c index c2922ce946..d7e426521c 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;