summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-11-13 16:26:39 -0800
committerDavid Brownell <dbrownell@users.sourceforge.net>2009-11-13 16:26:39 -0800
commit78c6b922e21849ed8a2d3af4ca55c84c3d1ac185 (patch)
tree054b5f97f2b849e3aef93b51681d200cb94f75aa
parenta7f5cdf999cd3fb8d3a681bcb6d8f8880faf8a11 (diff)
downloadopenocd_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>
-rw-r--r--src/target/arm7tdmi.c8
-rw-r--r--src/target/arm9tdmi.c8
-rw-r--r--src/target/etm.c16
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)