From: David B. <dbr...@us...> - 2010-02-05 02:28:12
|
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Main OpenOCD repository". The branch, master has been updated via ff5deeeeaa4f394931e3c5ccfb4cfd33beda0743 (commit) from 3ea9e62189205cfa84a04ec6955aaf1f5184a937 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit ff5deeeeaa4f394931e3c5ccfb4cfd33beda0743 Author: David Brownell <dbr...@us...> Date: Thu Feb 4 14:39:51 2010 -0800 ARMv7-M: make DAP commands verify target is an ARMv7-M Init the ARMv7-M magic number. Define predicate verifying it. Use it to resolve a lurking bug/FIXME: make sure the ARMv7-M specific DAP ops reject non-ARMv7-M targets. Signed-off-by: David Brownell <dbr...@us...> diff --git a/src/target/armv7m.c b/src/target/armv7m.c index edfcdf9..9fe705a 100644 --- a/src/target/armv7m.c +++ b/src/target/armv7m.c @@ -538,7 +538,7 @@ struct reg_cache *armv7m_build_reg_cache(struct target *target) /** Sets up target as a generic ARMv7-M core */ int armv7m_init_arch_info(struct target *target, struct armv7m_common *armv7m) { - /* register arch-specific functions */ + armv7m->common_magic = ARMV7M_COMMON_MAGIC; target->arch_info = armv7m; armv7m->read_core_reg = armv7m_read_core_reg; @@ -737,8 +737,6 @@ int armv7m_maybe_skip_bkpt_inst(struct target *target, bool *inst_found) /* * Only stuff below this line should need to verify that its target * is an ARMv7-M node. - * - * FIXME yet none of it _does_ verify target types yet! */ @@ -752,6 +750,11 @@ COMMAND_HANDLER(handle_dap_baseaddr_command) struct armv7m_common *armv7m = target_to_armv7m(target); struct swjdp_common *swjdp = &armv7m->swjdp_info; + if (!is_armv7m(armv7m)) { + command_print(CMD_CTX, "current target isn't an ARM7-M"); + return ERROR_TARGET_INVALID; + } + return CALL_COMMAND_HANDLER(dap_baseaddr_command, swjdp); } @@ -765,6 +768,11 @@ COMMAND_HANDLER(handle_dap_apid_command) struct armv7m_common *armv7m = target_to_armv7m(target); struct swjdp_common *swjdp = &armv7m->swjdp_info; + if (!is_armv7m(armv7m)) { + command_print(CMD_CTX, "current target isn't an ARM7-M"); + return ERROR_TARGET_INVALID; + } + return CALL_COMMAND_HANDLER(dap_apid_command, swjdp); } @@ -774,6 +782,11 @@ COMMAND_HANDLER(handle_dap_apsel_command) struct armv7m_common *armv7m = target_to_armv7m(target); struct swjdp_common *swjdp = &armv7m->swjdp_info; + if (!is_armv7m(armv7m)) { + command_print(CMD_CTX, "current target isn't an ARM7-M"); + return ERROR_TARGET_INVALID; + } + return CALL_COMMAND_HANDLER(dap_apsel_command, swjdp); } @@ -783,6 +796,11 @@ COMMAND_HANDLER(handle_dap_memaccess_command) struct armv7m_common *armv7m = target_to_armv7m(target); struct swjdp_common *swjdp = &armv7m->swjdp_info; + if (!is_armv7m(armv7m)) { + command_print(CMD_CTX, "current target isn't an ARM7-M"); + return ERROR_TARGET_INVALID; + } + return CALL_COMMAND_HANDLER(dap_memaccess_command, swjdp); } @@ -794,6 +812,11 @@ COMMAND_HANDLER(handle_dap_info_command) struct swjdp_common *swjdp = &armv7m->swjdp_info; uint32_t apsel; + if (!is_armv7m(armv7m)) { + command_print(CMD_CTX, "current target isn't an ARM7-M"); + return ERROR_TARGET_INVALID; + } + switch (CMD_ARGC) { case 0: apsel = swjdp->apsel; diff --git a/src/target/armv7m.h b/src/target/armv7m.h index 9787e30..b6be1d2 100644 --- a/src/target/armv7m.h +++ b/src/target/armv7m.h @@ -131,6 +131,11 @@ target_to_armv7m(struct target *target) return target->arch_info; } +static inline bool is_armv7m(struct armv7m_common *armv7m) +{ + return armv7m->common_magic == ARMV7M_COMMON_MAGIC; +} + struct armv7m_algorithm { int common_magic; ----------------------------------------------------------------------- Summary of changes: src/target/armv7m.c | 29 ++++++++++++++++++++++++++--- src/target/armv7m.h | 5 +++++ 2 files changed, 31 insertions(+), 3 deletions(-) hooks/post-receive -- Main OpenOCD repository |