ARMv7A: Report fault status registers when in Abort state

git-svn-id: svn://svn.berlios.de/openocd/trunk@2789 b42882b7-edfa-0310-969c-e2dbd0fdcd60
This commit is contained in:
mlu 2009-10-01 17:39:13 +00:00
parent e3d82fe24d
commit d340906476
1 changed files with 23 additions and 0 deletions

View File

@ -173,6 +173,26 @@ reg_t armv7a_gdb_dummy_fp_reg =
0, 1, 96, NULL, 0, NULL, 0 0, 1, 96, NULL, 0, NULL, 0
}; };
void armv7a_show_fault_registers(target_t *target)
{
uint32_t dfsr, ifsr, dfar, ifar;
/* get pointers to arch-specific information */
armv4_5_common_t *armv4_5 = target->arch_info;
armv7a_common_t *armv7a = armv4_5->arch_info;
armv7a->read_cp15(target, 0, 0, 5, 0, &dfsr);
armv7a->read_cp15(target, 0, 1, 5, 0, &ifsr);
armv7a->read_cp15(target, 0, 0, 6, 0, &dfar);
armv7a->read_cp15(target, 0, 2, 6, 0, &ifar);
LOG_USER("Data fault registers DFSR: %8.8" PRIx32
", DFAR: %8.8" PRIx32, dfsr, dfar);
LOG_USER("Instruction fault registers IFSR: %8.8" PRIx32
", IFAR: %8.8" PRIx32, ifsr, ifar);
}
int armv7a_arch_state(struct target_s *target) int armv7a_arch_state(struct target_s *target)
{ {
static const char *state[] = static const char *state[] =
@ -206,6 +226,9 @@ int armv7a_arch_state(struct target_s *target)
state[armv7a->armv4_5_mmu.armv4_5_cache.d_u_cache_enabled], state[armv7a->armv4_5_mmu.armv4_5_cache.d_u_cache_enabled],
state[armv7a->armv4_5_mmu.armv4_5_cache.i_cache_enabled]); state[armv7a->armv4_5_mmu.armv4_5_cache.i_cache_enabled]);
if (armv4_5->core_mode == ARMV7A_MODE_ABT)
armv7a_show_fault_registers(target);
return ERROR_OK; return ERROR_OK;
} }