summaryrefslogtreecommitdiff
path: root/src/target
diff options
context:
space:
mode:
Diffstat (limited to 'src/target')
-rw-r--r--src/target/armv7m.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/target/armv7m.c b/src/target/armv7m.c
index e3e9d1ce..e2134420 100644
--- a/src/target/armv7m.c
+++ b/src/target/armv7m.c
@@ -85,6 +85,13 @@ reg_t armv7m_gdb_dummy_fp_reg =
"GDB dummy floating-point register", armv7m_gdb_dummy_fp_value, 0, 1, 96, NULL, 0, NULL, 0
};
+u8 armv7m_gdb_dummy_fps_value[] = {0, 0, 0, 0};
+
+reg_t armv7m_gdb_dummy_fps_reg =
+{
+ "GDB dummy floating-point status register", armv7m_gdb_dummy_fps_value, 0, 1, 32, NULL, 0, NULL, 0
+};
+
armv7m_core_reg_t armv7m_core_reg_list_arch_info[] =
{
/* CORE_GP are accesible using the core debug registers */
@@ -324,15 +331,20 @@ int armv7m_get_gdb_reg_list(target_t *target, reg_t **reg_list[], int *reg_list_
*reg_list_size = 26;
*reg_list = malloc(sizeof(reg_t*) * (*reg_list_size));
- /* TODOLATER correct list of registers, names ? */
- for (i = 0; i < *reg_list_size; i++)
+ for (i = 0; i < 16; i++)
{
- if (i < ARMV7NUMCOREREGS)
- (*reg_list)[i] = &armv7m->process_context->reg_list[i];
- else
- (*reg_list)[i] = &armv7m_gdb_dummy_fp_reg;
+ (*reg_list)[i] = &armv7m->process_context->reg_list[i];
}
- /* ARMV7M is always in thumb mode, try to make GDB understand this if it does not support this arch */
+
+ for (i = 16; i < 24; i++)
+ {
+ (*reg_list)[i] = &armv7m_gdb_dummy_fp_reg;
+ }
+
+ (*reg_list)[24] = &armv7m_gdb_dummy_fps_reg;
+
+ /* ARMV7M is always in thumb mode, try to make GDB understand this
+ * if it does not support this arch */
armv7m->process_context->reg_list[15].value[0] |= 1;
(*reg_list)[25] = &armv7m->process_context->reg_list[ARMV7M_xPSR];
return ERROR_OK;