diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index 721cf0a24..649ee32f2 100644 --- a/src/target/cortex_m.c +++ b/src/target/cortex_m.c @@ -2589,7 +2589,7 @@ static int cortex_m_target_create(struct target *target, Jim_Interp *interp) static int cortex_m_verify_pointer(struct command_invocation *cmd, struct cortex_m_common *cm) { - if (cm->common_magic != CORTEX_M_COMMON_MAGIC) { + if (!is_cortex_m_with_dap_access(cm)) { command_print(cmd, "target is not a Cortex-M"); return ERROR_TARGET_INVALID; } diff --git a/src/target/cortex_m.h b/src/target/cortex_m.h index 57ef1e7e8..c2f836a35 100644 --- a/src/target/cortex_m.h +++ b/src/target/cortex_m.h @@ -254,6 +254,19 @@ target_to_cm(struct target *target) struct cortex_m_common, armv7m); } +static inline bool is_cortex_m_or_hla(const struct cortex_m_common *cortex_m) +{ + return cortex_m->common_magic == CORTEX_M_COMMON_MAGIC; +} + +static inline bool is_cortex_m_with_dap_access(const struct cortex_m_common *cortex_m) +{ + if (!is_cortex_m_or_hla(cortex_m)) + return false; + + return !cortex_m->armv7m.is_hla_target; +} + int cortex_m_examine(struct target *target); int cortex_m_set_breakpoint(struct target *target, struct breakpoint *breakpoint); int cortex_m_unset_breakpoint(struct target *target, struct breakpoint *breakpoint); diff --git a/src/target/hla_target.c b/src/target/hla_target.c index a0f2d7608..3e359b950 100644 --- a/src/target/hla_target.c +++ b/src/target/hla_target.c @@ -214,6 +214,8 @@ static int adapter_target_create(struct target *target, return ERROR_FAIL; } + cortex_m->common_magic = CORTEX_M_COMMON_MAGIC; + adapter_init_arch_info(target, cortex_m, target->tap); return ERROR_OK;