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>
This commit is contained in:
parent
a7f5cdf999
commit
78c6b922e2
|
@ -664,12 +664,10 @@ int arm7tdmi_examine(struct target *target)
|
||||||
arm7_9->eice_cache = (*cache_p);
|
arm7_9->eice_cache = (*cache_p);
|
||||||
|
|
||||||
if (arm7_9->armv4_5_common.etm)
|
if (arm7_9->armv4_5_common.etm)
|
||||||
{
|
|
||||||
struct arm_jtag *jtag_info = &arm7_9->jtag_info;
|
|
||||||
(*cache_p)->next = etm_build_reg_cache(target,
|
(*cache_p)->next = etm_build_reg_cache(target,
|
||||||
jtag_info, arm7_9->armv4_5_common.etm);
|
&arm7_9->jtag_info,
|
||||||
arm7_9->armv4_5_common.etm->reg_cache = (*cache_p)->next;
|
arm7_9->armv4_5_common.etm);
|
||||||
}
|
|
||||||
target_set_examined(target);
|
target_set_examined(target);
|
||||||
}
|
}
|
||||||
if ((retval = embeddedice_setup(target)) != ERROR_OK)
|
if ((retval = embeddedice_setup(target)) != ERROR_OK)
|
||||||
|
|
|
@ -759,12 +759,10 @@ int arm9tdmi_examine(struct target *target)
|
||||||
arm7_9->eice_cache = (*cache_p);
|
arm7_9->eice_cache = (*cache_p);
|
||||||
|
|
||||||
if (arm7_9->armv4_5_common.etm)
|
if (arm7_9->armv4_5_common.etm)
|
||||||
{
|
|
||||||
struct arm_jtag *jtag_info = &arm7_9->jtag_info;
|
|
||||||
(*cache_p)->next = etm_build_reg_cache(target,
|
(*cache_p)->next = etm_build_reg_cache(target,
|
||||||
jtag_info, arm7_9->armv4_5_common.etm);
|
&arm7_9->jtag_info,
|
||||||
arm7_9->armv4_5_common.etm->reg_cache = (*cache_p)->next;
|
arm7_9->armv4_5_common.etm);
|
||||||
}
|
|
||||||
target_set_examined(target);
|
target_set_examined(target);
|
||||||
}
|
}
|
||||||
if ((retval = embeddedice_setup(target)) != ERROR_OK)
|
if ((retval = embeddedice_setup(target)) != ERROR_OK)
|
||||||
|
|
|
@ -349,10 +349,7 @@ struct reg_cache *etm_build_reg_cache(struct target *target,
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LOG_WARNING("Bad ETMv1 protocol %d", config >> 28);
|
LOG_WARNING("Bad ETMv1 protocol %d", config >> 28);
|
||||||
free(reg_cache);
|
goto fail;
|
||||||
free(reg_list);
|
|
||||||
free(arch_info);
|
|
||||||
return ERROR_OK;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
etm_ctx->bcd_vers = bcd_vers;
|
etm_ctx->bcd_vers = bcd_vers;
|
||||||
|
@ -396,10 +393,7 @@ struct reg_cache *etm_build_reg_cache(struct target *target,
|
||||||
if (!etb)
|
if (!etb)
|
||||||
{
|
{
|
||||||
LOG_ERROR("etb selected as etm capture driver, but no ETB configured");
|
LOG_ERROR("etb selected as etm capture driver, but no ETB configured");
|
||||||
free(reg_cache);
|
goto fail;
|
||||||
free(reg_list);
|
|
||||||
free(arch_info);
|
|
||||||
return ERROR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reg_cache->next = etb_build_reg_cache(etb);
|
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;
|
etm_ctx->reg_cache = reg_cache;
|
||||||
return 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)
|
static int etm_read_reg(struct reg *reg)
|
||||||
|
|
Loading…
Reference in New Issue