target/hla_target: set cortex_m->common_magic
authorTomas Vanek <vanekt@fbl.cz>
Mon, 22 Nov 2021 12:50:01 +0000 (13:50 +0100)
committerTomas Vanek <vanekt@fbl.cz>
Thu, 25 Nov 2021 09:47:28 +0000 (09:47 +0000)
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 <vanekt@fbl.cz>
Reviewed-on: https://review.openocd.org/c/openocd/+/6741
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
src/target/cortex_m.c
src/target/cortex_m.h
src/target/hla_target.c

index 721cf0a2469b9acdaccdda10471c3154fccdb2bc..649ee32f22572a23150a244f46c9f9c014b56686 100644 (file)
@@ -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;
        }
index 57ef1e7e84a5bfd97ae1a775527069defec2f4a6..c2f836a350958507b6365886c690ad958c5fef8f 100644 (file)
@@ -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);
index a0f2d760868a5c784805b1455ff30dc0fff47f1c..3e359b950eed923a3dcc2e80b93bda743ba68fe4 100644 (file)
@@ -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;