]> git.sur5r.net Git - openocd/commitdiff
arm11: do not use dynamic arrays
authorØyvind Harboe <oyvind.harboe@zylin.com>
Sun, 22 Nov 2009 18:57:57 +0000 (19:57 +0100)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Sun, 22 Nov 2009 18:57:57 +0000 (19:57 +0100)
Allocate working memory dynamically, caught by checkstack.pl

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
TODO
src/target/arm11_dbgtap.c

diff --git a/TODO b/TODO
index c7e341d9a51a201e5579211093e9c5572e7c8de3..bdbb0ecc747f48d271d8bb00866011823f727866 100644 (file)
--- a/TODO
+++ b/TODO
@@ -309,7 +309,8 @@ fairly easy to complete:
 
 - use dynamic allocations for working memory. Scan & fix code
 for excessive stack allocations. take linux/scripts/checkstack.pl and
-see what the worst offenders are.  Example, on amd64:
+see what the worst offenders are. Dynamic stack allocations are found
+at the bottom of the list below.  Example, on amd64:
 
  $ objdump -d | checkstack.pl | head -10
  0x004311e3 image_open [openocd]:                      13464
index 0f7e4953ab8af55217c00d52e0936d2d94c9c363..26de4ceb2f8bdd7da36d664f2cfb74667697a296 100644 (file)
@@ -880,10 +880,11 @@ int arm11_sc7_run(struct arm11_common * arm11, struct arm11_sc7_action * actions
  */
 void arm11_sc7_clear_vbw(struct arm11_common * arm11)
 {
-       struct arm11_sc7_action         clear_bw[arm11->brp + arm11->wrp + 1];
+       size_t clear_bw_size = arm11->brp + arm11->wrp + 1;
+       struct arm11_sc7_action         *clear_bw = malloc(sizeof(struct arm11_sc7_action) * clear_bw_size);
        struct arm11_sc7_action *       pos = clear_bw;
 
-       for (size_t i = 0; i < ARRAY_SIZE(clear_bw); i++)
+       for (size_t i = 0; i < clear_bw_size; i++)
        {
                clear_bw[i].write       = true;
                clear_bw[i].value       = 0;
@@ -899,7 +900,9 @@ void arm11_sc7_clear_vbw(struct arm11_common * arm11)
 
        (pos++)->address = ARM11_SC7_VCR;
 
-       arm11_sc7_run(arm11, clear_bw, ARRAY_SIZE(clear_bw));
+       arm11_sc7_run(arm11, clear_bw, clear_bw_size);
+
+       free (clear_bw);
 }
 
 /** Write VCR register