armv8_dpm: retrieve only necessary registers on halt
to speed up debugging, don't load the complete register context on a halt event, load only those registers that might be clobbered during debugging. Change-Id: I0b58e97aad6f28aefce4a52e870af61e1ef1a44f Signed-off-by: Matthias Welwarsky <matthias.welwarsky@sysgo.com> Reviewed-on: http://openocd.zylin.com/3995 Tested-by: jenkins Reviewed-by: Paul Fertser <fercerpav@gmail.com>
This commit is contained in:
parent
2861ed533b
commit
b73628141a
|
@ -718,14 +718,22 @@ int armv8_dpm_read_current_registers(struct arm_dpm *dpm)
|
||||||
cache = arm->core_cache;
|
cache = arm->core_cache;
|
||||||
|
|
||||||
/* read R0 first (it's used for scratch), then CPSR */
|
/* read R0 first (it's used for scratch), then CPSR */
|
||||||
r = cache->reg_list + 0;
|
r = cache->reg_list + ARMV8_R0;
|
||||||
if (!r->valid) {
|
if (!r->valid) {
|
||||||
retval = dpmv8_read_reg(dpm, r, 0);
|
retval = dpmv8_read_reg(dpm, r, ARMV8_R0);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
r->dirty = true;
|
r->dirty = true;
|
||||||
|
|
||||||
|
/* read R1, too, it will be clobbered during memory access */
|
||||||
|
r = cache->reg_list + ARMV8_R1;
|
||||||
|
if (!r->valid) {
|
||||||
|
retval = dpmv8_read_reg(dpm, r, ARMV8_R1);
|
||||||
|
if (retval != ERROR_OK)
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
/* read cpsr to r0 and get it back */
|
/* read cpsr to r0 and get it back */
|
||||||
retval = dpm->instr_read_data_r0(dpm,
|
retval = dpm->instr_read_data_r0(dpm,
|
||||||
armv8_opcode(armv8, READ_REG_DSPSR), &cpsr);
|
armv8_opcode(armv8, READ_REG_DSPSR), &cpsr);
|
||||||
|
@ -735,7 +743,7 @@ int armv8_dpm_read_current_registers(struct arm_dpm *dpm)
|
||||||
/* update core mode and state */
|
/* update core mode and state */
|
||||||
armv8_set_cpsr(arm, cpsr);
|
armv8_set_cpsr(arm, cpsr);
|
||||||
|
|
||||||
for (unsigned int i = 1; i < cache->num_regs ; i++) {
|
for (unsigned int i = ARMV8_PC; i < cache->num_regs ; i++) {
|
||||||
struct arm_reg *arm_reg;
|
struct arm_reg *arm_reg;
|
||||||
|
|
||||||
r = armv8_reg_current(arm, i);
|
r = armv8_reg_current(arm, i);
|
||||||
|
|
Loading…
Reference in New Issue