fix crash with DSP563XX
When a DSP563xx-aware GDB asks OpenOCD for target registers, the result should be a GDB with register data ... not an OpenOCD crash. (Note that mainline GDB doesn't currently support this core, so for now, this requires a GDB with FreeScale patches.) Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
This commit is contained in:
parent
a2ce3a51df
commit
52d4ba3467
|
@ -246,6 +246,29 @@ static const struct
|
||||||
/* *INDENT-ON* */
|
/* *INDENT-ON* */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int dsp563xx_get_gdb_reg_list(struct target *target, struct reg **reg_list[],
|
||||||
|
int *reg_list_size)
|
||||||
|
{
|
||||||
|
struct dsp563xx_common *dsp563xx = target_to_dsp563xx(target);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (target->state != TARGET_HALTED)
|
||||||
|
{
|
||||||
|
return ERROR_TARGET_NOT_HALTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
*reg_list_size = DSP563XX_NUMCOREREGS;
|
||||||
|
*reg_list = malloc(sizeof(struct reg *) * (*reg_list_size));
|
||||||
|
|
||||||
|
for (i = 0; i < DSP563XX_NUMCOREREGS; i++)
|
||||||
|
{
|
||||||
|
(*reg_list)[i] = &dsp563xx->core_cache->reg_list[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERROR_OK;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
int dsp563xx_read_core_reg(struct target *target, int num)
|
int dsp563xx_read_core_reg(struct target *target, int num)
|
||||||
{
|
{
|
||||||
uint32_t reg_value;
|
uint32_t reg_value;
|
||||||
|
@ -974,6 +997,8 @@ struct target_type dsp563xx_target = {
|
||||||
|
|
||||||
.target_request_data = NULL,
|
.target_request_data = NULL,
|
||||||
|
|
||||||
|
.get_gdb_reg_list = dsp563xx_get_gdb_reg_list,
|
||||||
|
|
||||||
.halt = dsp563xx_halt,
|
.halt = dsp563xx_halt,
|
||||||
.resume = dsp563xx_resume,
|
.resume = dsp563xx_resume,
|
||||||
.step = dsp563xx_step,
|
.step = dsp563xx_step,
|
||||||
|
|
Loading…
Reference in New Issue