do not use dynamically sized stack arrays, not compatible with embedded OS's
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 11 Sep 2009 07:43:36 +0000 (07:43 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 11 Sep 2009 07:43:36 +0000 (07:43 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@2691 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/target/arm11_dbgtap.c

index 7e5bd847d18bf31d6329f2e06c3e1f44e5c331d0..54e7ae658168bc89e3da708fb7caf9e9c52208bb 100644 (file)
@@ -576,7 +576,15 @@ int arm11_run_instr_data_to_core_noack(arm11_common_t * arm11, uint32_t opcode,
        arm11_setup_field(arm11,  1,    NULL,                   NULL /*&Ready*/,        chain5_fields + 1);
        arm11_setup_field(arm11,  1,    NULL,                   NULL,                           chain5_fields + 2);
 
-       uint8_t                 Readies[count + 1];
+       uint8_t                 *Readies;
+       int bytes = sizeof(*Readies)*(count + 1);
+       Readies = (uint8_t *) malloc(bytes);
+       if (Readies == NULL)
+       {
+               LOG_ERROR("Out of memory allocating %d bytes", bytes);
+               return ERROR_FAIL;
+       }
+
        uint8_t *               ReadyPos                        = Readies;
 
        while (count--)
@@ -603,22 +611,28 @@ int arm11_run_instr_data_to_core_noack(arm11_common_t * arm11, uint32_t opcode,
 
        arm11_add_dr_scan_vc(asizeof(chain5_fields), chain5_fields, TAP_DRPAUSE);
 
-       CHECK_RETVAL(jtag_execute_queue());
+       int retval = jtag_execute_queue();
+       if (retval == ERROR_OK)
+       {
 
-       size_t error_count = 0;
+               size_t error_count = 0;
 
-       for (size_t i = 0; i < asizeof(Readies); i++)
-       {
-               if (Readies[i] != 1)
+               for (size_t i = 0; i < asizeof(Readies); i++)
                {
-                       error_count++;
+                       if (Readies[i] != 1)
+                       {
+                               error_count++;
+                       }
                }
+
+               if (error_count)
+                       LOG_ERROR("Transfer errors " ZU, error_count);
+
        }
 
-       if (error_count)
-               LOG_ERROR("Transfer errors " ZU, error_count);
+       free(Readies);
 
-       return ERROR_OK;
+       return retval;
 }