X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fnor%2Flpc2000.c;h=69c8b0341e02ced7a1d8a7ffc138fb8930979cfe;hp=259b42f1c4b7ab784750c5be2ec75c56afafd875;hb=565f8481c7b71614a05d79ab79af8610d2535a81;hpb=cd091c36305d9d2de838c7ba145ee7547e4e1640 diff --git a/src/flash/nor/lpc2000.c b/src/flash/nor/lpc2000.c index 259b42f1c4..69c8b0341e 100644 --- a/src/flash/nor/lpc2000.c +++ b/src/flash/nor/lpc2000.c @@ -711,7 +711,7 @@ static int lpc2000_protect(struct flash_bank *bank, int set, int first, int last return ERROR_OK; } -static int lpc2000_write(struct flash_bank *bank, uint8_t *buffer, uint32_t offset, uint32_t count) +static int lpc2000_write(struct flash_bank *bank, const uint8_t *buffer, uint32_t offset, uint32_t count) { struct target *target = bank->target; @@ -746,6 +746,7 @@ static int lpc2000_write(struct flash_bank *bank, uint8_t *buffer, uint32_t offs /* check if exception vectors should be flashed */ if ((offset == 0) && (count >= 0x20) && lpc2000_info->calc_checksum) { + assert(lpc2000_info->checksum_vector < 8); uint32_t checksum = 0; for (int i = 0; i < 8; i++) { LOG_DEBUG("Vector 0x%2.2x: 0x%8.8" PRIx32, i * 4, buf_get_u32(buffer + (i * 4), 0, 32)); @@ -763,7 +764,8 @@ static int lpc2000_write(struct flash_bank *bank, uint8_t *buffer, uint32_t offs "checksum."); } - buf_set_u32(buffer + (lpc2000_info->checksum_vector * 4), 0, 32, checksum); + /* FIXME: WARNING! This code is broken because it modifies the callers buffer in place. */ + buf_set_u32((uint8_t *)buffer + (lpc2000_info->checksum_vector * 4), 0, 32, checksum); } struct working_area *iap_working_area;