diff options
author | Tomas Vanek <vanekt@fbl.cz> | 2021-11-22 13:50:01 +0100 |
---|---|---|
committer | Tomas Vanek <vanekt@fbl.cz> | 2021-11-25 09:47:28 +0000 |
commit | f66a16c4a06fde23ae25f39c92990aa049c3c970 (patch) | |
tree | 645f5cb840b1cdd2557c5019ed7b255a1945f520 | |
parent | 4626af440122272a6c18ad293edc81d3051d83ec (diff) | |
download | riscv-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.c | 2 | ||||
-rw-r--r-- | src/target/cortex_m.h | 13 | ||||
-rw-r--r-- | src/target/hla_target.c | 2 |
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; |