diff options
author | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-06-18 15:35:52 +0200 |
---|---|---|
committer | Øyvind Harboe <oyvind.harboe@zylin.com> | 2010-06-19 09:26:53 +0200 |
commit | 2a25c968bf4ffec39ee76da0a164e46bd4215134 (patch) | |
tree | a15f537be670ad06515de284faa60b13e8d37e94 | |
parent | b8f8d756a255936ccfb60ac3dda076e4e06108a6 (diff) | |
download | openocd_libswd-2a25c968bf4ffec39ee76da0a164e46bd4215134.tar.gz openocd_libswd-2a25c968bf4ffec39ee76da0a164e46bd4215134.tar.bz2 openocd_libswd-2a25c968bf4ffec39ee76da0a164e46bd4215134.tar.xz openocd_libswd-2a25c968bf4ffec39ee76da0a164e46bd4215134.zip |
cortex a8: fix segfault for unexamined targets
print error message instead of segfaulting for
unexamined targets.
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
-rw-r--r-- | src/target/arm_adi_v5.h | 7 | ||||
-rw-r--r-- | src/target/cortex_a8.c | 9 |
2 files changed, 13 insertions, 3 deletions
diff --git a/src/target/arm_adi_v5.h b/src/target/arm_adi_v5.h index 4ee36ff1..92469eb4 100644 --- a/src/target/arm_adi_v5.h +++ b/src/target/arm_adi_v5.h @@ -232,6 +232,7 @@ struct dap_ops { static inline int dap_queue_idcode_read(struct adiv5_dap *dap, uint8_t *ack, uint32_t *data) { + assert(dap->ops != NULL); return dap->ops->queue_idcode_read(dap, ack, data); } @@ -250,6 +251,7 @@ static inline int dap_queue_idcode_read(struct adiv5_dap *dap, static inline int dap_queue_dp_read(struct adiv5_dap *dap, unsigned reg, uint32_t *data) { + assert(dap->ops != NULL); return dap->ops->queue_dp_read(dap, reg, data); } @@ -267,6 +269,7 @@ static inline int dap_queue_dp_read(struct adiv5_dap *dap, static inline int dap_queue_dp_write(struct adiv5_dap *dap, unsigned reg, uint32_t data) { + assert(dap->ops != NULL); return dap->ops->queue_dp_write(dap, reg, data); } @@ -283,6 +286,7 @@ static inline int dap_queue_dp_write(struct adiv5_dap *dap, static inline int dap_queue_ap_read(struct adiv5_dap *dap, unsigned reg, uint32_t *data) { + assert(dap->ops != NULL); return dap->ops->queue_ap_read(dap, reg, data); } @@ -298,6 +302,7 @@ static inline int dap_queue_ap_read(struct adiv5_dap *dap, static inline int dap_queue_ap_write(struct adiv5_dap *dap, unsigned reg, uint32_t data) { + assert(dap->ops != NULL); return dap->ops->queue_ap_write(dap, reg, data); } @@ -314,6 +319,7 @@ static inline int dap_queue_ap_write(struct adiv5_dap *dap, */ static inline int dap_queue_ap_abort(struct adiv5_dap *dap, uint8_t *ack) { + assert(dap->ops != NULL); return dap->ops->queue_ap_abort(dap, ack); } @@ -329,6 +335,7 @@ static inline int dap_queue_ap_abort(struct adiv5_dap *dap, uint8_t *ack) */ static inline int dap_run(struct adiv5_dap *dap) { + assert(dap->ops != NULL); return dap->ops->run(dap); } diff --git a/src/target/cortex_a8.c b/src/target/cortex_a8.c index 0b12abe5..cfec48b6 100644 --- a/src/target/cortex_a8.c +++ b/src/target/cortex_a8.c @@ -1839,10 +1839,13 @@ COMMAND_HANDLER(cortex_a8_handle_cache_info_command) COMMAND_HANDLER(cortex_a8_handle_dbginit_command) { struct target *target = get_current_target(CMD_CTX); + if (!target_was_examined(target)) + { + LOG_ERROR("target not examined yet"); + return ERROR_FAIL; + } - cortex_a8_init_debug_access(target); - - return ERROR_OK; + return cortex_a8_init_debug_access(target); } static const struct command_registration cortex_a8_exec_command_handlers[] = { |