target/arm: add support for multi-architecture gdb
GDB can be built for multi-architecture through the command
./configure --enable-targets=all && make
Such multi-architecture GDB requires the target's architecture to
be selected either manually by the user through the GDB command
"set architecture" or automatically by the target description sent
by the remote target (i.e. OpenOCD).
Commit e65acd889c
("gdb_server: add
support for architecture element") already provides the required
infrastructure to support multi-architecture gdb.
arm-none-eabi-gdb 8.2 uses "arm" as default architecture, but also
supports the following values: "arm_any", "armv2", "armv2a",
"armv3", "armv3m", "armv4", "armv4t", "armv5", "armv5t", "armv5te",
"armv5tej", "armv6", "armv6k", "armv6kz", "armv6-m", "armv6s-m",
"armv6t2", "armv7", "armv7e-m", "armv8-a", "armv8-m.base",
"armv8-m.main", "armv8-r", "ep9312", "iwmmxt", "iwmmxt2", "xscale".
These values can be displayed on arm gdb prompt by typing
"set architecture " followed by a TAB for autocompletion.
Set the gdb architecture value for all arm targets to "arm".
Change-Id: I176cb89878606e1febd546ce26543b3e7849500a
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/4754
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
log_output
parent
97afb8b372
commit
5c941edc7b
|
@ -263,6 +263,7 @@ struct reg_cache *armv8_build_reg_cache(struct target *target);
|
||||||
extern const struct command_registration arm_command_handlers[];
|
extern const struct command_registration arm_command_handlers[];
|
||||||
|
|
||||||
int arm_arch_state(struct target *target);
|
int arm_arch_state(struct target *target);
|
||||||
|
const char *arm_get_gdb_arch(struct target *target);
|
||||||
int arm_get_gdb_reg_list(struct target *target,
|
int arm_get_gdb_reg_list(struct target *target,
|
||||||
struct reg **reg_list[], int *reg_list_size,
|
struct reg **reg_list[], int *reg_list_size,
|
||||||
enum target_register_class reg_class);
|
enum target_register_class reg_class);
|
||||||
|
|
|
@ -1362,6 +1362,7 @@ struct target_type arm11_target = {
|
||||||
.assert_reset = arm11_assert_reset,
|
.assert_reset = arm11_assert_reset,
|
||||||
.deassert_reset = arm11_deassert_reset,
|
.deassert_reset = arm11_deassert_reset,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = arm11_read_memory,
|
.read_memory = arm11_read_memory,
|
||||||
|
|
|
@ -560,6 +560,7 @@ struct target_type arm720t_target = {
|
||||||
.deassert_reset = arm7_9_deassert_reset,
|
.deassert_reset = arm7_9_deassert_reset,
|
||||||
.soft_reset_halt = arm720t_soft_reset_halt,
|
.soft_reset_halt = arm720t_soft_reset_halt,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = arm720t_read_memory,
|
.read_memory = arm720t_read_memory,
|
||||||
|
|
|
@ -699,6 +699,7 @@ struct target_type arm7tdmi_target = {
|
||||||
.deassert_reset = arm7_9_deassert_reset,
|
.deassert_reset = arm7_9_deassert_reset,
|
||||||
.soft_reset_halt = arm7_9_soft_reset_halt,
|
.soft_reset_halt = arm7_9_soft_reset_halt,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = arm7_9_read_memory,
|
.read_memory = arm7_9_read_memory,
|
||||||
|
|
|
@ -1693,6 +1693,7 @@ struct target_type arm920t_target = {
|
||||||
.deassert_reset = arm7_9_deassert_reset,
|
.deassert_reset = arm7_9_deassert_reset,
|
||||||
.soft_reset_halt = arm920t_soft_reset_halt,
|
.soft_reset_halt = arm920t_soft_reset_halt,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = arm920t_read_memory,
|
.read_memory = arm920t_read_memory,
|
||||||
|
|
|
@ -804,6 +804,7 @@ struct target_type arm926ejs_target = {
|
||||||
.deassert_reset = arm7_9_deassert_reset,
|
.deassert_reset = arm7_9_deassert_reset,
|
||||||
.soft_reset_halt = arm926ejs_soft_reset_halt,
|
.soft_reset_halt = arm926ejs_soft_reset_halt,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = arm7_9_read_memory,
|
.read_memory = arm7_9_read_memory,
|
||||||
|
|
|
@ -756,6 +756,7 @@ struct target_type arm946e_target = {
|
||||||
.deassert_reset = arm7_9_deassert_reset,
|
.deassert_reset = arm7_9_deassert_reset,
|
||||||
.soft_reset_halt = arm7_9_soft_reset_halt,
|
.soft_reset_halt = arm7_9_soft_reset_halt,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
/* .read_memory = arm7_9_read_memory, */
|
/* .read_memory = arm7_9_read_memory, */
|
||||||
|
|
|
@ -259,6 +259,7 @@ struct target_type arm966e_target = {
|
||||||
.deassert_reset = arm7_9_deassert_reset,
|
.deassert_reset = arm7_9_deassert_reset,
|
||||||
.soft_reset_halt = arm7_9_soft_reset_halt,
|
.soft_reset_halt = arm7_9_soft_reset_halt,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = arm7_9_read_memory,
|
.read_memory = arm7_9_read_memory,
|
||||||
|
|
|
@ -902,6 +902,7 @@ struct target_type arm9tdmi_target = {
|
||||||
.deassert_reset = arm7_9_deassert_reset,
|
.deassert_reset = arm7_9_deassert_reset,
|
||||||
.soft_reset_halt = arm7_9_soft_reset_halt,
|
.soft_reset_halt = arm7_9_soft_reset_halt,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = arm7_9_read_memory,
|
.read_memory = arm7_9_read_memory,
|
||||||
|
|
|
@ -1179,6 +1179,20 @@ const struct command_registration arm_command_handlers[] = {
|
||||||
COMMAND_REGISTRATION_DONE
|
COMMAND_REGISTRATION_DONE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* gdb for arm targets (e.g. arm-none-eabi-gdb) supports several variants
|
||||||
|
* of arm architecture. You can list them using the autocompletion of gdb
|
||||||
|
* command prompt by typing "set architecture " and then press TAB key.
|
||||||
|
* The default, selected automatically, is "arm".
|
||||||
|
* Let's use the default value, here, to make gdb-multiarch behave in the
|
||||||
|
* same way as a gdb for arm. This can be changed later on. User can still
|
||||||
|
* set the specific architecture variant with the gdb command.
|
||||||
|
*/
|
||||||
|
const char *arm_get_gdb_arch(struct target *target)
|
||||||
|
{
|
||||||
|
return "arm";
|
||||||
|
}
|
||||||
|
|
||||||
int arm_get_gdb_reg_list(struct target *target,
|
int arm_get_gdb_reg_list(struct target *target,
|
||||||
struct reg **reg_list[], int *reg_list_size,
|
struct reg **reg_list[], int *reg_list_size,
|
||||||
enum target_register_class reg_class)
|
enum target_register_class reg_class)
|
||||||
|
|
|
@ -3171,6 +3171,7 @@ struct target_type cortexa_target = {
|
||||||
.deassert_reset = cortex_a_deassert_reset,
|
.deassert_reset = cortex_a_deassert_reset,
|
||||||
|
|
||||||
/* REVISIT allow exporting VFP3 registers ... */
|
/* REVISIT allow exporting VFP3 registers ... */
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = cortex_a_read_memory,
|
.read_memory = cortex_a_read_memory,
|
||||||
|
@ -3250,6 +3251,7 @@ struct target_type cortexr4_target = {
|
||||||
.deassert_reset = cortex_a_deassert_reset,
|
.deassert_reset = cortex_a_deassert_reset,
|
||||||
|
|
||||||
/* REVISIT allow exporting VFP3 registers ... */
|
/* REVISIT allow exporting VFP3 registers ... */
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = cortex_a_read_phys_memory,
|
.read_memory = cortex_a_read_phys_memory,
|
||||||
|
|
|
@ -2518,6 +2518,7 @@ struct target_type cortexm_target = {
|
||||||
.deassert_reset = cortex_m_deassert_reset,
|
.deassert_reset = cortex_m_deassert_reset,
|
||||||
.soft_reset_halt = cortex_m_soft_reset_halt,
|
.soft_reset_halt = cortex_m_soft_reset_halt,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = armv7m_get_gdb_reg_list,
|
.get_gdb_reg_list = armv7m_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = cortex_m_read_memory,
|
.read_memory = cortex_m_read_memory,
|
||||||
|
|
|
@ -364,6 +364,7 @@ struct target_type fa526_target = {
|
||||||
.deassert_reset = arm7_9_deassert_reset,
|
.deassert_reset = arm7_9_deassert_reset,
|
||||||
.soft_reset_halt = arm920t_soft_reset_halt,
|
.soft_reset_halt = arm920t_soft_reset_halt,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = arm920t_read_memory,
|
.read_memory = arm920t_read_memory,
|
||||||
|
|
|
@ -710,6 +710,7 @@ struct target_type feroceon_target = {
|
||||||
.deassert_reset = arm7_9_deassert_reset,
|
.deassert_reset = arm7_9_deassert_reset,
|
||||||
.soft_reset_halt = arm926ejs_soft_reset_halt,
|
.soft_reset_halt = arm926ejs_soft_reset_halt,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = arm7_9_read_memory,
|
.read_memory = arm7_9_read_memory,
|
||||||
|
@ -747,6 +748,7 @@ struct target_type dragonite_target = {
|
||||||
.deassert_reset = arm7_9_deassert_reset,
|
.deassert_reset = arm7_9_deassert_reset,
|
||||||
.soft_reset_halt = arm7_9_soft_reset_halt,
|
.soft_reset_halt = arm7_9_soft_reset_halt,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = arm7_9_read_memory,
|
.read_memory = arm7_9_read_memory,
|
||||||
|
|
|
@ -820,6 +820,7 @@ struct target_type hla_target = {
|
||||||
.resume = adapter_resume,
|
.resume = adapter_resume,
|
||||||
.step = adapter_step,
|
.step = adapter_step,
|
||||||
|
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = armv7m_get_gdb_reg_list,
|
.get_gdb_reg_list = armv7m_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = adapter_read_memory,
|
.read_memory = adapter_read_memory,
|
||||||
|
|
|
@ -3703,6 +3703,7 @@ struct target_type xscale_target = {
|
||||||
.deassert_reset = xscale_deassert_reset,
|
.deassert_reset = xscale_deassert_reset,
|
||||||
|
|
||||||
/* REVISIT on some cores, allow exporting iwmmxt registers ... */
|
/* REVISIT on some cores, allow exporting iwmmxt registers ... */
|
||||||
|
.get_gdb_arch = arm_get_gdb_arch,
|
||||||
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
.get_gdb_reg_list = arm_get_gdb_reg_list,
|
||||||
|
|
||||||
.read_memory = xscale_read_memory,
|
.read_memory = xscale_read_memory,
|
||||||
|
|
Loading…
Reference in New Issue