]> git.sur5r.net Git - openocd/commitdiff
mips: fix potential alignment error
authorStefan Mahr <stefan.mahr@sphairon.com>
Wed, 10 Aug 2011 21:42:28 +0000 (23:42 +0200)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Fri, 12 Aug 2011 10:00:51 +0000 (12:00 +0200)
src/target/mips_m4k.c

index facf9a5676f843d4f1e42ecf4ffe34c20c798818..7be96a4979aa4c8f193c5b828b9c9393da60426a 100644 (file)
@@ -870,7 +870,22 @@ static int mips_m4k_read_memory(struct target *target, uint32_t address,
        if (((size == 4) && (address & 0x3u)) || ((size == 2) && (address & 0x1u)))
                return ERROR_TARGET_UNALIGNED_ACCESS;
 
-       void * t = buffer;
+       /* since we don't know if buffer is aligned, we allocate new mem that is always aligned */
+       void *t = NULL;
+
+       if (size > 1)
+       {
+               t = malloc(count * size * sizeof(uint8_t));
+               if (t == NULL)
+               {
+                       LOG_ERROR("Out of memory");
+                       return ERROR_FAIL;
+               }
+       }
+       else
+       {
+               t = buffer;
+       }
 
        /* if noDMA off, use DMAACC mode for memory read */
        int retval;
@@ -894,6 +909,9 @@ static int mips_m4k_read_memory(struct target *target, uint32_t address,
                }
        }
 
+       if ((size > 1) && (t != NULL))
+               free(t);
+
        return retval;
 }