From 3799eded676183eba05c146f7b2ae8dbf4a02ee1 Mon Sep 17 00:00:00 2001 From: Antonio Borneo Date: Thu, 1 Nov 2018 15:08:21 +0100 Subject: [PATCH] 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 e65acd889c61a424c7bd72fdee5d6a3aee1d8504 ("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 Reviewed-on: http://openocd.zylin.com/4755 Tested-by: jenkins Reviewed-by: Spencer Oliver --- src/target/aarch64.c | 1 + src/target/arm.h | 1 + src/target/armv8.c | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/src/target/aarch64.c b/src/target/aarch64.c index 454de9e924..8fab3b5d7c 100644 --- a/src/target/aarch64.c +++ b/src/target/aarch64.c @@ -2824,6 +2824,7 @@ struct target_type aarch64_target = { .deassert_reset = aarch64_deassert_reset, /* REVISIT allow exporting VFP3 registers ... */ + .get_gdb_arch = armv8_get_gdb_arch, .get_gdb_reg_list = armv8_get_gdb_reg_list, .read_memory = aarch64_read_memory, diff --git a/src/target/arm.h b/src/target/arm.h index 10a053cede..ea83d38673 100644 --- a/src/target/arm.h +++ b/src/target/arm.h @@ -267,6 +267,7 @@ const char *arm_get_gdb_arch(struct target *target); int arm_get_gdb_reg_list(struct target *target, struct reg **reg_list[], int *reg_list_size, enum target_register_class reg_class); +const char *armv8_get_gdb_arch(struct target *target); int armv8_get_gdb_reg_list(struct target *target, struct reg **reg_list[], int *reg_list_size, enum target_register_class reg_class); diff --git a/src/target/armv8.c b/src/target/armv8.c index 887e21df73..1981e7c3d5 100644 --- a/src/target/armv8.c +++ b/src/target/armv8.c @@ -1674,6 +1674,11 @@ const struct command_registration armv8_command_handlers[] = { COMMAND_REGISTRATION_DONE }; +const char *armv8_get_gdb_arch(struct target *target) +{ + return "aarch64"; +} + int armv8_get_gdb_reg_list(struct target *target, struct reg **reg_list[], int *reg_list_size, enum target_register_class reg_class) -- 2.30.2