From f66a16c4a06fde23ae25f39c92990aa049c3c970 Mon Sep 17 00:00:00 2001 From: Tomas Vanek Date: Mon, 22 Nov 2021 13:50:01 +0100 Subject: [PATCH] target/hla_target: set cortex_m->common_magic hla_target uses the same struct cortex_m_common as the standard cortex_m target. Unlike the cortex_m target hla missed setting of common_magic. Set commont_magic to help pointer verification. Add convenience tests is_cortex_m_or_hla() and is_cortex_m_with_dap_access() Use proper test in cortex_m_verify_pointer() - this code relied on unset common_magic on hla target before the change. Change-Id: I4dae79f056c3d73adf524e26aa8ef2d3a57b471e Signed-off-by: Tomas Vanek Reviewed-on: https://review.openocd.org/c/openocd/+/6741 Tested-by: jenkins Reviewed-by: Antonio Borneo --- src/target/cortex_m.c | 2 +- src/target/cortex_m.h | 13 +++++++++++++ src/target/hla_target.c | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c index 721cf0a246..649ee32f22 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 57ef1e7e84..c2f836a350 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 a0f2d76086..3e359b950e 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; -- 2.30.2