diff options
-rw-r--r-- | src/target/arm7_9_common.c | 12 | ||||
-rw-r--r-- | src/target/breakpoints.c | 10 | ||||
-rw-r--r-- | src/target/cortex_m3.c | 7 | ||||
-rw-r--r-- | src/target/target.c | 8 | ||||
-rw-r--r-- | src/target/target_type.h | 12 | ||||
-rw-r--r-- | src/target/xscale.c | 12 |
6 files changed, 23 insertions, 38 deletions
diff --git a/src/target/arm7_9_common.c b/src/target/arm7_9_common.c index f7b86693..b5553cd8 100644 --- a/src/target/arm7_9_common.c +++ b/src/target/arm7_9_common.c @@ -426,12 +426,6 @@ int arm7_9_add_breakpoint(struct target *target, struct breakpoint *breakpoint) { struct arm7_9_common *arm7_9 = target_to_arm7_9(target); - if (target->state != TARGET_HALTED) - { - LOG_WARNING("target not halted"); - return ERROR_TARGET_NOT_HALTED; - } - if (arm7_9->breakpoint_count == 0) { /* make sure we don't have any dangling breakpoints. This is vital upon @@ -631,12 +625,6 @@ int arm7_9_add_watchpoint(struct target *target, struct watchpoint *watchpoint) { struct arm7_9_common *arm7_9 = target_to_arm7_9(target); - if (target->state != TARGET_HALTED) - { - LOG_WARNING("target not halted"); - return ERROR_TARGET_NOT_HALTED; - } - if (arm7_9->wp_available < 1) { return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; diff --git a/src/target/breakpoints.c b/src/target/breakpoints.c index 16ab7e0c..2542c41a 100644 --- a/src/target/breakpoints.c +++ b/src/target/breakpoints.c @@ -109,6 +109,7 @@ static void breakpoint_free(struct target *target, struct breakpoint *breakpoint { struct breakpoint *breakpoint = target->breakpoints; struct breakpoint **breakpoint_p = &target->breakpoints; + int retval; while (breakpoint) { @@ -121,9 +122,9 @@ static void breakpoint_free(struct target *target, struct breakpoint *breakpoint if (breakpoint == NULL) return; - target_remove_breakpoint(target, breakpoint); + retval = target_remove_breakpoint(target, breakpoint); - LOG_DEBUG("BPID: %d", breakpoint->unique_id ); + LOG_DEBUG("free BPID: %d --> %d", breakpoint->unique_id, retval); (*breakpoint_p) = breakpoint->next; free(breakpoint->orig_instr); free(breakpoint); @@ -249,6 +250,7 @@ static void watchpoint_free(struct target *target, struct watchpoint *watchpoint { struct watchpoint *watchpoint = target->watchpoints; struct watchpoint **watchpoint_p = &target->watchpoints; + int retval; while (watchpoint) { @@ -260,8 +262,8 @@ static void watchpoint_free(struct target *target, struct watchpoint *watchpoint if (watchpoint == NULL) return; - target_remove_watchpoint(target, watchpoint); - LOG_DEBUG("WPID: %d", watchpoint->unique_id ); + retval = target_remove_watchpoint(target, watchpoint); + LOG_DEBUG("free WPID: %d --> %d", watchpoint->unique_id, retval); (*watchpoint_p) = watchpoint->next; free(watchpoint); } diff --git a/src/target/cortex_m3.c b/src/target/cortex_m3.c index 7cfe540a..ad59c785 100644 --- a/src/target/cortex_m3.c +++ b/src/target/cortex_m3.c @@ -1141,13 +1141,6 @@ cortex_m3_add_watchpoint(struct target *target, struct watchpoint *watchpoint) { struct cortex_m3_common *cortex_m3 = target_to_cm3(target); - /* REVISIT why check? DWT can be updated with core running ... */ - if (target->state != TARGET_HALTED) - { - LOG_WARNING("target not halted"); - return ERROR_TARGET_NOT_HALTED; - } - if (cortex_m3->dwt_comp_available < 1) { LOG_DEBUG("no comparators?"); diff --git a/src/target/target.c b/src/target/target.c index a2bd8868..28387f44 100644 --- a/src/target/target.c +++ b/src/target/target.c @@ -606,6 +606,10 @@ int target_bulk_write_memory(struct target *target, int target_add_breakpoint(struct target *target, struct breakpoint *breakpoint) { + if (target->state != TARGET_HALTED) { + LOG_WARNING("target %s is not halted", target->cmd_name); + return ERROR_TARGET_NOT_HALTED; + } return target->type->add_breakpoint(target, breakpoint); } int target_remove_breakpoint(struct target *target, @@ -617,6 +621,10 @@ int target_remove_breakpoint(struct target *target, int target_add_watchpoint(struct target *target, struct watchpoint *watchpoint) { + if (target->state != TARGET_HALTED) { + LOG_WARNING("target %s is not halted", target->cmd_name); + return ERROR_TARGET_NOT_HALTED; + } return target->type->add_watchpoint(target, watchpoint); } int target_remove_watchpoint(struct target *target, diff --git a/src/target/target_type.h b/src/target/target_type.h index 333b58b4..d141608b 100644 --- a/src/target/target_type.h +++ b/src/target/target_type.h @@ -124,18 +124,24 @@ struct target_type * Target must be halted while this is invoked as this * will actually set up breakpoints on target. * - * The breakpoint hardware will be set up upon adding the first breakpoint. + * The breakpoint hardware will be set up upon adding the + * first breakpoint. * * Upon GDB connection all breakpoints/watchpoints are cleared. */ int (*add_breakpoint)(struct target *target, struct breakpoint *breakpoint); - /* remove breakpoint. hw will only be updated if the target is currently halted. + /* remove breakpoint. hw will only be updated if the target + * is currently halted. * However, this method can be invoked on unresponsive targets. */ int (*remove_breakpoint)(struct target *target, struct breakpoint *breakpoint); + + /* add watchpoint ... see add_breakpoint() comment above. */ int (*add_watchpoint)(struct target *target, struct watchpoint *watchpoint); - /* remove watchpoint. hw will only be updated if the target is currently halted. + + /* remove watchpoint. hw will only be updated if the target + * is currently halted. * However, this method can be invoked on unresponsive targets. */ int (*remove_watchpoint)(struct target *target, struct watchpoint *watchpoint); diff --git a/src/target/xscale.c b/src/target/xscale.c index 1a18ab85..49653a96 100644 --- a/src/target/xscale.c +++ b/src/target/xscale.c @@ -2137,12 +2137,6 @@ static int xscale_add_breakpoint(struct target *target, { struct xscale_common *xscale = target_to_xscale(target); - if (target->state != TARGET_HALTED) - { - LOG_WARNING("target not halted"); - return ERROR_TARGET_NOT_HALTED; - } - if ((breakpoint->type == BKPT_HARD) && (xscale->ibcr_available < 1)) { LOG_INFO("no breakpoint unit available for hardware breakpoint"); @@ -2300,12 +2294,6 @@ static int xscale_add_watchpoint(struct target *target, { struct xscale_common *xscale = target_to_xscale(target); - if (target->state != TARGET_HALTED) - { - LOG_WARNING("target not halted"); - return ERROR_TARGET_NOT_HALTED; - } - if (xscale->dbr_available < 1) { return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; |