target: Switch to target_read_buffer() in verify_image fallback
authorAndreas Fritiofson <andreas.fritiofson@gmail.com>
Wed, 13 Jan 2016 19:39:28 +0000 (20:39 +0100)
committerAndreas Fritiofson <andreas.fritiofson@gmail.com>
Fri, 18 Oct 2019 08:17:24 +0000 (09:17 +0100)
The current code checks the count to determine whether to read bytes or
words. However it fails to consider whether the base address is suitably
aligned.

Instead use the target_read_buffer() function which is for exactly this
purpose and generates optimal accesses with natural alignment.

Change-Id: I32ab5417890ee2219902df1529bc220fe353b4c7
Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/3217
Tested-by: jenkins
Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
src/target/target.c

index 51fdff3425e0e630084690fefa1f234b9d3ccbc7..03b6f4eb2cee495dac36c1cc561c31f6d9f96ee3 100644 (file)
@@ -3636,14 +3636,7 @@ static COMMAND_HELPER(handle_verify_image_command_internal, enum verify_mode ver
 
                                data = malloc(buf_cnt);
 
-                               /* Can we use 32bit word accesses? */
-                               int size = 1;
-                               int count = buf_cnt;
-                               if ((count % 4) == 0) {
-                                       size *= 4;
-                                       count /= 4;
-                               }
-                               retval = target_read_memory(target, image.sections[i].base_address, size, count, data);
+                               retval = target_read_buffer(target, image.sections[i].base_address, buf_cnt, data);
                                if (retval == ERROR_OK) {
                                        uint32_t t;
                                        for (t = 0; t < buf_cnt; t++) {