@@ -80,83 +80,84 @@ static const struct {
8080 enum reg_type type ;
8181 const char * group ;
8282 const char * feature ;
83+ struct reg_data_type * data_type ;
8384} armv7m_regs [] = {
84- { ARMV7M_R0 , "r0" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
85- { ARMV7M_R1 , "r1" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
86- { ARMV7M_R2 , "r2" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
87- { ARMV7M_R3 , "r3" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
88- { ARMV7M_R4 , "r4" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
89- { ARMV7M_R5 , "r5" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
90- { ARMV7M_R6 , "r6" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
91- { ARMV7M_R7 , "r7" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
92- { ARMV7M_R8 , "r8" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
93- { ARMV7M_R9 , "r9" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
94- { ARMV7M_R10 , "r10" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
95- { ARMV7M_R11 , "r11" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
96- { ARMV7M_R12 , "r12" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
97- { ARMV7M_R13 , "sp" , 32 , REG_TYPE_DATA_PTR , "general" , "org.gnu.gdb.arm.m-profile" },
98- { ARMV7M_R14 , "lr" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
99- { ARMV7M_PC , "pc" , 32 , REG_TYPE_CODE_PTR , "general" , "org.gnu.gdb.arm.m-profile" },
100- { ARMV7M_XPSR , "xpsr" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" },
101-
102- { ARMV7M_MSP , "msp" , 32 , REG_TYPE_DATA_PTR , "system" , "org.gnu.gdb.arm.m-system" },
103- { ARMV7M_PSP , "psp" , 32 , REG_TYPE_DATA_PTR , "system" , "org.gnu.gdb.arm.m-system" },
85+ { ARMV7M_R0 , "r0" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
86+ { ARMV7M_R1 , "r1" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
87+ { ARMV7M_R2 , "r2" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
88+ { ARMV7M_R3 , "r3" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
89+ { ARMV7M_R4 , "r4" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
90+ { ARMV7M_R5 , "r5" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
91+ { ARMV7M_R6 , "r6" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
92+ { ARMV7M_R7 , "r7" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
93+ { ARMV7M_R8 , "r8" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
94+ { ARMV7M_R9 , "r9" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
95+ { ARMV7M_R10 , "r10" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
96+ { ARMV7M_R11 , "r11" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
97+ { ARMV7M_R12 , "r12" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
98+ { ARMV7M_R13 , "sp" , 32 , REG_TYPE_DATA_PTR , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
99+ { ARMV7M_R14 , "lr" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
100+ { ARMV7M_PC , "pc" , 32 , REG_TYPE_CODE_PTR , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
101+ { ARMV7M_XPSR , "xpsr" , 32 , REG_TYPE_INT , "general" , "org.gnu.gdb.arm.m-profile" , NULL , },
102+
103+ { ARMV7M_MSP , "msp" , 32 , REG_TYPE_DATA_PTR , "system" , "org.gnu.gdb.arm.m-system" , NULL , },
104+ { ARMV7M_PSP , "psp" , 32 , REG_TYPE_DATA_PTR , "system" , "org.gnu.gdb.arm.m-system" , NULL , },
104105
105106 /* A working register for packing/unpacking special regs, hidden from gdb */
106- { ARMV7M_PMSK_BPRI_FLTMSK_CTRL , "pmsk_bpri_fltmsk_ctrl" , 32 , REG_TYPE_INT , NULL , NULL },
107+ { ARMV7M_PMSK_BPRI_FLTMSK_CTRL , "pmsk_bpri_fltmsk_ctrl" , 32 , REG_TYPE_INT , NULL , NULL , NULL },
107108
108109 /* WARNING: If you use armv7m_write_core_reg() on one of 4 following
109110 * special registers, the new data go to ARMV7M_PMSK_BPRI_FLTMSK_CTRL
110111 * cache only and are not flushed to CPU HW register.
111112 * To trigger write to CPU HW register, add
112113 * armv7m_write_core_reg(,,ARMV7M_PMSK_BPRI_FLTMSK_CTRL,);
113114 */
114- { ARMV7M_PRIMASK , "primask" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.m-system" },
115- { ARMV7M_BASEPRI , "basepri" , 8 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.m-system" },
116- { ARMV7M_FAULTMASK , "faultmask" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.m-system" },
117- { ARMV7M_CONTROL , "control" , 3 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.m-system" },
115+ { ARMV7M_PRIMASK , "primask" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.m-system" , NULL , },
116+ { ARMV7M_BASEPRI , "basepri" , 8 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.m-system" , NULL , },
117+ { ARMV7M_FAULTMASK , "faultmask" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.m-system" , NULL , },
118+ { ARMV7M_CONTROL , "control" , 3 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.m-system" , NULL , },
118119
119120 /* ARMv8-M security extension (TrustZone) specific registers */
120- { ARMV8M_MSP_NS , "msp_ns" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" },
121- { ARMV8M_PSP_NS , "psp_ns" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" },
122- { ARMV8M_MSP_S , "msp_s" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" },
123- { ARMV8M_PSP_S , "psp_s" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" },
124- { ARMV8M_MSPLIM_S , "msplim_s" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" },
125- { ARMV8M_PSPLIM_S , "psplim_s" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" },
126- { ARMV8M_MSPLIM_NS , "msplim_ns" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" },
127- { ARMV8M_PSPLIM_NS , "psplim_ns" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" },
128-
129- { ARMV8M_PMSK_BPRI_FLTMSK_CTRL_S , "pmsk_bpri_fltmsk_ctrl_s" , 32 , REG_TYPE_INT , NULL , NULL },
130- { ARMV8M_PRIMASK_S , "primask_s" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" },
131- { ARMV8M_BASEPRI_S , "basepri_s" , 8 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" },
132- { ARMV8M_FAULTMASK_S , "faultmask_s" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" },
133- { ARMV8M_CONTROL_S , "control_s" , 3 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" },
134-
135- { ARMV8M_PMSK_BPRI_FLTMSK_CTRL_NS , "pmsk_bpri_fltmsk_ctrl_ns" , 32 , REG_TYPE_INT , NULL , NULL },
136- { ARMV8M_PRIMASK_NS , "primask_ns" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" },
137- { ARMV8M_BASEPRI_NS , "basepri_ns" , 8 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" },
138- { ARMV8M_FAULTMASK_NS , "faultmask_ns" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" },
139- { ARMV8M_CONTROL_NS , "control_ns" , 3 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" },
121+ { ARMV8M_MSP_NS , "msp_ns" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" , NULL , },
122+ { ARMV8M_PSP_NS , "psp_ns" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" , NULL , },
123+ { ARMV8M_MSP_S , "msp_s" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" , NULL , },
124+ { ARMV8M_PSP_S , "psp_s" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" , NULL , },
125+ { ARMV8M_MSPLIM_S , "msplim_s" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" , NULL , },
126+ { ARMV8M_PSPLIM_S , "psplim_s" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" , NULL , },
127+ { ARMV8M_MSPLIM_NS , "msplim_ns" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" , NULL , },
128+ { ARMV8M_PSPLIM_NS , "psplim_ns" , 32 , REG_TYPE_DATA_PTR , "stack" , "org.gnu.gdb.arm.secext" , NULL , },
129+
130+ { ARMV8M_PMSK_BPRI_FLTMSK_CTRL_S , "pmsk_bpri_fltmsk_ctrl_s" , 32 , REG_TYPE_INT , NULL , NULL , NULL , },
131+ { ARMV8M_PRIMASK_S , "primask_s" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" , NULL , },
132+ { ARMV8M_BASEPRI_S , "basepri_s" , 8 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" , NULL , },
133+ { ARMV8M_FAULTMASK_S , "faultmask_s" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" , NULL , },
134+ { ARMV8M_CONTROL_S , "control_s" , 3 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" , NULL , },
135+
136+ { ARMV8M_PMSK_BPRI_FLTMSK_CTRL_NS , "pmsk_bpri_fltmsk_ctrl_ns" , 32 , REG_TYPE_INT , NULL , NULL , NULL , },
137+ { ARMV8M_PRIMASK_NS , "primask_ns" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" , NULL , },
138+ { ARMV8M_BASEPRI_NS , "basepri_ns" , 8 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" , NULL , },
139+ { ARMV8M_FAULTMASK_NS , "faultmask_ns" , 1 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" , NULL , },
140+ { ARMV8M_CONTROL_NS , "control_ns" , 3 , REG_TYPE_INT8 , "system" , "org.gnu.gdb.arm.secext" , NULL , },
140141
141142 /* FPU registers */
142- { ARMV7M_D0 , "d0" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
143- { ARMV7M_D1 , "d1" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
144- { ARMV7M_D2 , "d2" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
145- { ARMV7M_D3 , "d3" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
146- { ARMV7M_D4 , "d4" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
147- { ARMV7M_D5 , "d5" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
148- { ARMV7M_D6 , "d6" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
149- { ARMV7M_D7 , "d7" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
150- { ARMV7M_D8 , "d8" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
151- { ARMV7M_D9 , "d9" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
152- { ARMV7M_D10 , "d10" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
153- { ARMV7M_D11 , "d11" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
154- { ARMV7M_D12 , "d12" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
155- { ARMV7M_D13 , "d13" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
156- { ARMV7M_D14 , "d14" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
157- { ARMV7M_D15 , "d15" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" },
158-
159- { ARMV7M_FPSCR , "fpscr" , 32 , REG_TYPE_INT , "float" , "org.gnu.gdb.arm.vfp" },
143+ { ARMV7M_D0 , "d0" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
144+ { ARMV7M_D1 , "d1" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
145+ { ARMV7M_D2 , "d2" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
146+ { ARMV7M_D3 , "d3" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
147+ { ARMV7M_D4 , "d4" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
148+ { ARMV7M_D5 , "d5" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
149+ { ARMV7M_D6 , "d6" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
150+ { ARMV7M_D7 , "d7" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
151+ { ARMV7M_D8 , "d8" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
152+ { ARMV7M_D9 , "d9" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
153+ { ARMV7M_D10 , "d10" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
154+ { ARMV7M_D11 , "d11" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
155+ { ARMV7M_D12 , "d12" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
156+ { ARMV7M_D13 , "d13" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
157+ { ARMV7M_D14 , "d14" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
158+ { ARMV7M_D15 , "d15" , 64 , REG_TYPE_IEEE_DOUBLE , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
159+
160+ { ARMV7M_FPSCR , "fpscr" , 32 , REG_TYPE_INT , "float" , "org.gnu.gdb.arm.vfp" , NULL , },
160161};
161162
162163#define ARMV7M_NUM_REGS ARRAY_SIZE(armv7m_regs)
@@ -811,10 +812,14 @@ struct reg_cache *armv7m_build_reg_cache(struct target *target)
811812 LOG_TARGET_ERROR (target , "unable to allocate feature list" );
812813
813814 reg_list [i ].reg_data_type = calloc (1 , sizeof (struct reg_data_type ));
814- if (reg_list [i ].reg_data_type )
815- reg_list [i ].reg_data_type -> type = armv7m_regs [i ].type ;
816- else
815+ if (reg_list [i ].reg_data_type ) {
816+ if (armv7m_regs [i ].data_type )
817+ * reg_list [i ].reg_data_type = * armv7m_regs [i ].data_type ;
818+ else
819+ reg_list [i ].reg_data_type -> type = armv7m_regs [i ].type ;
820+ } else {
817821 LOG_TARGET_ERROR (target , "unable to allocate reg type list" );
822+ }
818823 }
819824
820825 arm -> cpsr = reg_list + ARMV7M_XPSR ;
0 commit comments