target/cortex_a: fix number of watchpoints
authorAntonio Borneo <borneo.antonio@gmail.com>
Thu, 29 Apr 2021 07:22:00 +0000 (09:22 +0200)
committerAntonio Borneo <borneo.antonio@gmail.com>
Thu, 3 Jun 2021 22:26:56 +0000 (23:26 +0100)
Decrement the available watchpoints only when succeed setting it.
Initialize the available watchpoint with the correct value.

Change-Id: I0f93b347300b8ebedbcd9e718d4ba32b26cf6846
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/6196
Tested-by: jenkins
Reviewed-by: Matthias Welwarsky <matthias@welwarsky.de>
src/target/cortex_a.c

index 9e8248a74c1151254e63f9b1db77462576969a3e..78daed398817b6ec02df88dcc2801fbd497eb247 100644 (file)
@@ -1802,8 +1802,12 @@ static int cortex_a_add_watchpoint(struct target *target, struct watchpoint *wat
                return ERROR_TARGET_RESOURCE_NOT_AVAILABLE;
        }
 
+       int retval = cortex_a_set_watchpoint(target, watchpoint);
+       if (retval != ERROR_OK)
+               return retval;
+
        cortex_a->wrp_num_available--;
-       return cortex_a_set_watchpoint(target, watchpoint);
+       return ERROR_OK;
 }
 
 /**
@@ -3007,7 +3011,7 @@ static int cortex_a_examine_first(struct target *target)
 
        /* Setup Watchpoint Register Pairs */
        cortex_a->wrp_num = ((didr >> 28) & 0x0F) + 1;
-       cortex_a->wrp_num_available = cortex_a->brp_num;
+       cortex_a->wrp_num_available = cortex_a->wrp_num;
        free(cortex_a->wrp_list);
        cortex_a->wrp_list = calloc(cortex_a->wrp_num, sizeof(struct cortex_a_wrp));
        for (i = 0; i < cortex_a->wrp_num; i++) {