fixed stack corruption. Introduced when _check_value was phased out.
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 29 Feb 2008 21:43:19 +0000 (21:43 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 29 Feb 2008 21:43:19 +0000 (21:43 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@403 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/target/xscale.c

index fdb123041af491f28f2ccca71497a684f25e5e87..8f7d835152b6d8a73b7dca0c558e96b178446c6e 100644 (file)
@@ -291,8 +291,6 @@ int xscale_read_dcsr(target_t *target)
        fields[1].in_check_value = NULL;
        fields[1].in_check_mask = NULL;
 
-
-
        fields[2].device = xscale->jtag_info.chain_pos;
        fields[2].num_bits = 1;
        fields[2].out_value = &field2;
@@ -322,11 +320,16 @@ int xscale_read_dcsr(target_t *target)
 
        jtag_add_dr_scan(3, fields, -1);
 
-       return ERROR_OK;
+       /* DANGER!!! this must be here. It will make sure that the arguments
+        * to jtag_set_check_value() does not go out of scope! */
+       return jtag_execute_queue();
 }
 
 int xscale_receive(target_t *target, u32 *buffer, int num_words)
 {
+       if (num_words==0)
+               return ERROR_INVALID_ARGUMENTS;
+       
        int retval=ERROR_OK;
        armv4_5_common_t *armv4_5 = target->arch_info;
        xscale_common_t *xscale = armv4_5->arch_info;