alloca()? That's very unfriendly towards non-MMU targets. Attached is a patch that removes alloca().
-- Øyvind Harboe Embedded software and hardware consulting services http://www.zylin.com
Index: C:/workspace/openocd/src/flash/at91sam3.c =================================================================== --- C:/workspace/openocd/src/flash/at91sam3.c (revision 2399) +++ C:/workspace/openocd/src/flash/at91sam3.c (working copy) @@ -2146,7 +2146,7 @@ return ERROR_FAIL; } - pagebuffer = alloca(pPrivate->page_size); + pagebuffer = malloc(pPrivate->page_size); // what page do we start & end in? page_cur = offset / pPrivate->page_size; @@ -2167,7 +2167,7 @@ LOG_DEBUG("Special case, all in one page"); r = sam3_page_read(pPrivate, page_cur, pagebuffer); if (r != ERROR_OK) { - return r; + goto exit_fn; } page_offset = (offset & (pPrivate->page_size-1)); @@ -2177,9 +2177,10 @@ r = sam3_page_write(pPrivate, page_cur, pagebuffer); if (r != ERROR_OK) { - return r; + goto exit_fn; } - return ERROR_OK; + r=ERROR_OK; + goto exit_fn; } // non-aligned start @@ -2189,7 +2190,7 @@ // read the partial r = sam3_page_read(pPrivate, page_cur, pagebuffer); if (r != ERROR_OK) { - return r; + goto exit_fn; } // over-write with new data @@ -2200,7 +2201,7 @@ r = sam3_page_write(pPrivate, page_cur, pagebuffer); if (r != ERROR_OK) { - return r; + goto exit_fn; } count -= n; @@ -2219,7 +2220,7 @@ (count >= pPrivate->page_size)) { r = sam3_page_write(pPrivate, page_cur, buffer); if (r != ERROR_OK) { - return r; + goto exit_fn; } count -= pPrivate->page_size; buffer += pPrivate->page_size; @@ -2232,7 +2233,7 @@ // we have a partial page r = sam3_page_read(pPrivate, page_cur, pagebuffer); if (r != ERROR_OK) { - return r; + goto exit_fn; } // data goes at start memcpy(pagebuffer, buffer, count); @@ -2238,7 +2239,7 @@ memcpy(pagebuffer, buffer, count); r = sam3_page_write(pPrivate, page_cur, pagebuffer); if (r != ERROR_OK) { - return r; + goto exit_fn; } buffer += count; count -= count; @@ -2244,7 +2245,11 @@ count -= count; } LOG_DEBUG("Done!"); - return ERROR_OK; + + r=ERROR_OK; +exit_fn: + free(pagebuffer); + return retval; } static int
_______________________________________________ Openocd-development mailing list Openocd-development@lists.berlios.de https://lists.berlios.de/mailman/listinfo/openocd-development