target/aarch64: 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.

aarch64-linux-gnu-gdb 8.2 uses "aarch64" as default architecture,
but also supports the value "aarch64:ilp32" and all the values
supported by arm-none-eabi-gdb.
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 aarch64 target to "aarch64".

Change-Id: I63e9769f47d8e73f048eb84fa73e082dd1c8e52c
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: http://openocd.zylin.com/4755
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
This commit is contained in:
Antonio Borneo 2018-11-01 15:08:21 +01:00 committed by Tomas Vanek
parent 5c941edc7b
commit 3799eded67
3 changed files with 7 additions and 0 deletions

View File

@ -2824,6 +2824,7 @@ struct target_type aarch64_target = {
.deassert_reset = aarch64_deassert_reset, .deassert_reset = aarch64_deassert_reset,
/* REVISIT allow exporting VFP3 registers ... */ /* REVISIT allow exporting VFP3 registers ... */
.get_gdb_arch = armv8_get_gdb_arch,
.get_gdb_reg_list = armv8_get_gdb_reg_list, .get_gdb_reg_list = armv8_get_gdb_reg_list,
.read_memory = aarch64_read_memory, .read_memory = aarch64_read_memory,

View File

@ -267,6 +267,7 @@ 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);
const char *armv8_get_gdb_arch(struct target *target);
int armv8_get_gdb_reg_list(struct target *target, int armv8_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);

View File

@ -1674,6 +1674,11 @@ const struct command_registration armv8_command_handlers[] = {
COMMAND_REGISTRATION_DONE COMMAND_REGISTRATION_DONE
}; };
const char *armv8_get_gdb_arch(struct target *target)
{
return "aarch64";
}
int armv8_get_gdb_reg_list(struct target *target, int armv8_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)