diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2009-11-13 16:26:39 -0800 |
---|---|---|
committer | David Brownell <dbrownell@users.sourceforge.net> | 2009-11-13 16:26:39 -0800 |
commit | 78c6b922e21849ed8a2d3af4ca55c84c3d1ac185 (patch) | |
tree | 054b5f97f2b849e3aef93b51681d200cb94f75aa /src/target | |
parent | a7f5cdf999cd3fb8d3a681bcb6d8f8880faf8a11 (diff) | |
download | openocd_libswd-78c6b922e21849ed8a2d3af4ca55c84c3d1ac185.tar.gz openocd_libswd-78c6b922e21849ed8a2d3af4ca55c84c3d1ac185.tar.bz2 openocd_libswd-78c6b922e21849ed8a2d3af4ca55c84c3d1ac185.tar.xz openocd_libswd-78c6b922e21849ed8a2d3af4ca55c84c3d1ac185.zip |
ETM: simplify ETM initialization code paths
Return NULL from etm_build_reg_cache() not ERROR_OK; and share
code on that fault path.
Let ETM code handle any tracking of its cache -- not callers.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Diffstat (limited to 'src/target')
-rw-r--r-- | src/target/arm7tdmi.c | 8 | ||||
-rw-r--r-- | src/target/arm9tdmi.c | 8 | ||||
-rw-r--r-- | src/target/etm.c | 16 |
3 files changed, 14 insertions, 18 deletions
diff --git a/src/target/arm7tdmi.c b/src/target/arm7tdmi.c index 029dce1c..c7bbd776 100644 --- a/src/target/arm7tdmi.c +++ b/src/target/arm7tdmi.c @@ -664,12 +664,10 @@ int arm7tdmi_examine(struct target *target) arm7_9->eice_cache = (*cache_p); if (arm7_9->armv4_5_common.etm) - { - struct arm_jtag *jtag_info = &arm7_9->jtag_info; (*cache_p)->next = etm_build_reg_cache(target, - jtag_info, arm7_9->armv4_5_common.etm); - arm7_9->armv4_5_common.etm->reg_cache = (*cache_p)->next; - } + &arm7_9->jtag_info, + arm7_9->armv4_5_common.etm); + target_set_examined(target); } if ((retval = embeddedice_setup(target)) != ERROR_OK) diff --git a/src/target/arm9tdmi.c b/src/target/arm9tdmi.c index 147c0903..fc110733 100644 --- a/src/target/arm9tdmi.c +++ b/src/target/arm9tdmi.c @@ -759,12 +759,10 @@ int arm9tdmi_examine(struct target *target) arm7_9->eice_cache = (*cache_p); if (arm7_9->armv4_5_common.etm) - { - struct arm_jtag *jtag_info = &arm7_9->jtag_info; (*cache_p)->next = etm_build_reg_cache(target, - jtag_info, arm7_9->armv4_5_common.etm); - arm7_9->armv4_5_common.etm->reg_cache = (*cache_p)->next; - } + &arm7_9->jtag_info, + arm7_9->armv4_5_common.etm); + target_set_examined(target); } if ((retval = embeddedice_setup(target)) != ERROR_OK) diff --git a/src/target/etm.c b/src/target/etm.c index 43158b56..4c94e6bf 100644 --- a/src/target/etm.c +++ b/src/target/etm.c @@ -349,10 +349,7 @@ struct reg_cache *etm_build_reg_cache(struct target *target, break; default: LOG_WARNING("Bad ETMv1 protocol %d", config >> 28); - free(reg_cache); - free(reg_list); - free(arch_info); - return ERROR_OK; + goto fail; } } etm_ctx->bcd_vers = bcd_vers; @@ -396,10 +393,7 @@ struct reg_cache *etm_build_reg_cache(struct target *target, if (!etb) { LOG_ERROR("etb selected as etm capture driver, but no ETB configured"); - free(reg_cache); - free(reg_list); - free(arch_info); - return ERROR_OK; + goto fail; } reg_cache->next = etb_build_reg_cache(etb); @@ -409,6 +403,12 @@ struct reg_cache *etm_build_reg_cache(struct target *target, etm_ctx->reg_cache = reg_cache; return reg_cache; + +fail: + free(reg_cache); + free(reg_list); + free(arch_info); + return NULL; } static int etm_read_reg(struct reg *reg) |