aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Vanek <vanekt@fbl.cz>2021-11-22 13:50:01 +0100
committerTomas Vanek <vanekt@fbl.cz>2021-11-25 09:47:28 +0000
commitf66a16c4a06fde23ae25f39c92990aa049c3c970 (patch)
tree645f5cb840b1cdd2557c5019ed7b255a1945f520
parent4626af440122272a6c18ad293edc81d3051d83ec (diff)
downloadriscv-openocd-f66a16c4a06fde23ae25f39c92990aa049c3c970.zip
riscv-openocd-f66a16c4a06fde23ae25f39c92990aa049c3c970.tar.gz
riscv-openocd-f66a16c4a06fde23ae25f39c92990aa049c3c970.tar.bz2
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 <vanekt@fbl.cz> Reviewed-on: https://review.openocd.org/c/openocd/+/6741 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
-rw-r--r--src/target/cortex_m.c2
-rw-r--r--src/target/cortex_m.h13
-rw-r--r--src/target/hla_target.c2
3 files changed, 16 insertions, 1 deletions
diff --git a/src/target/cortex_m.c b/src/target/cortex_m.c
index 721cf0a..649ee32 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 57ef1e7..c2f836a 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 a0f2d76..3e359b9 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;