mips: remove dynamic arrays - reduces stack usage
authorØyvind Harboe <oyvind.harboe@zylin.com>
Sun, 22 Nov 2009 19:23:34 +0000 (20:23 +0100)
committerØyvind Harboe <oyvind.harboe@zylin.com>
Sun, 22 Nov 2009 19:23:34 +0000 (20:23 +0100)
Allocate working memory dynamically.

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

index 3177e0f291959482e42d2a33e06f61c71cff5062..40627e163f247e6fdaa0ef0b7b326e18a8c343ec 100644 (file)
@@ -440,7 +440,7 @@ int mips32_pracc_read_mem16(struct mips_ejtag *ejtag_info, uint32_t addr, int co
        };
 
 //     /* TODO remove array */
-       uint32_t param_out[count];
+       uint32_t *param_out = malloc(count * sizeof(uint32_t));
        int i;
 
 //     int retval;
@@ -472,6 +472,8 @@ int mips32_pracc_read_mem16(struct mips_ejtag *ejtag_info, uint32_t addr, int co
                buf[i] = param_out[i];
        }
 
+       free(param_out);
+
        return ERROR_OK;
 }
 
@@ -519,7 +521,7 @@ int mips32_pracc_read_mem8(struct mips_ejtag *ejtag_info, uint32_t addr, int cou
        };
 
 //     /* TODO remove array */
-       uint32_t param_out[count];
+       uint32_t *param_out = malloc(count * sizeof(uint32_t));
        int i;
 
 //     int retval;
@@ -551,6 +553,8 @@ int mips32_pracc_read_mem8(struct mips_ejtag *ejtag_info, uint32_t addr, int cou
                buf[i] = param_out[i];
        }
 
+       free(param_out);
+
        return ERROR_OK;
 }
 
@@ -609,7 +613,7 @@ int mips32_pracc_write_mem32(struct mips_ejtag *ejtag_info, uint32_t addr, int c
        };
 
        /* TODO remove array */
-       uint32_t param_in[count + 2];
+       uint32_t *param_in = malloc((count + 2) * sizeof(uint32_t));
        param_in[0] = addr;
        param_in[1] = addr + count * sizeof(uint32_t);  //last address
 
@@ -618,6 +622,8 @@ int mips32_pracc_write_mem32(struct mips_ejtag *ejtag_info, uint32_t addr, int c
        mips32_pracc_exec(ejtag_info, sizeof(code)/sizeof(code[0]), code, \
                sizeof(param_in)/sizeof(param_in[0]),param_in, 0, NULL, 1);
 
+       free(param_in);
+
        return ERROR_OK;
 }
 
@@ -698,7 +704,7 @@ int mips32_pracc_write_mem16(struct mips_ejtag *ejtag_info, uint32_t addr, int c
        };
 
        /* TODO remove array */
-       uint32_t param_in[count + 2];
+       uint32_t *param_in = malloc((count + 2) * sizeof(uint32_t));
        int i;
        param_in[0] = addr;
        param_in[1] = count;
@@ -711,6 +717,8 @@ int mips32_pracc_write_mem16(struct mips_ejtag *ejtag_info, uint32_t addr, int c
        mips32_pracc_exec(ejtag_info, sizeof(code)/sizeof(code[0]), code, \
                sizeof(param_in)/sizeof(param_in[0]), param_in, 0, NULL, 1);
 
+       free(param_in);
+
        return ERROR_OK;
 }
 
@@ -758,7 +766,7 @@ int mips32_pracc_write_mem8(struct mips_ejtag *ejtag_info, uint32_t addr, int co
        };
 
        /* TODO remove array */
-       uint32_t param_in[count + 2];
+       uint32_t *param_in = malloc((count + 2) * sizeof(uint32_t));
        int retval;
        int i;
        param_in[0] = addr;
@@ -772,6 +780,8 @@ int mips32_pracc_write_mem8(struct mips_ejtag *ejtag_info, uint32_t addr, int co
        retval = mips32_pracc_exec(ejtag_info, sizeof(code)/sizeof(code[0]), code, \
                sizeof(param_in)/sizeof(param_in[0]), param_in, 0, NULL, 1);
 
+       free(param_in);
+
        return retval;
 }