* [PATCH 4/4] Add xml selftests @ 2017-10-25 8:31 Alan Hayward 0 siblings, 0 replies; 2+ messages in thread From: Alan Hayward @ 2017-10-25 8:31 UTC (permalink / raw) To: gdb-patches; +Cc: nd This patch adds selftests for the new target descriptors. Tested on a --enable-targets=all build and aarch64 build with board files unix, native-gdbserver and unittest.exp. Alan. 2017-10-25 Alan Hayward <alan.hayward@arm.com> gdb/ * aarch64-tdep.c: Add target desc selftest. gdbserver/ * configure.srv: Add new file. * linux-aarch64-low.c (initialize_low_arch): Call init func. * linux-aarch64-tdesc-selftest.c: New file. * linux-aarch64-tdesc.h (initialize_low_tdesc): New declaration. diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index 5d6f455319f3003240239f7977da9f994765f4d3..e99da65af559408158a3276ebfe81c5fa4b389d6 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -3070,6 +3070,8 @@ When on, AArch64 specific debugging is enabled."), selftests::aarch64_analyze_prologue_test); selftests::register_test ("aarch64-process-record", selftests::aarch64_process_record_test); + selftests::record_xml_tdesc ("aarch64.xml", + aarch64_create_target_description ()); #endif } diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv index 08d8e9875a148f931253bed2340498b6d94b9946..9863db0a85c3e0d55314cd0ef0669eba3b51dcca 100644 --- a/gdb/gdbserver/configure.srv +++ b/gdb/gdbserver/configure.srv @@ -27,7 +27,7 @@ srv_hostio_err_objs="hostio-errno.o" if $development; then srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-avx-avx512-linux.o i386-avx-mpx-avx512-pku-linux.o i386-mpx-linux.o i386-avx-mpx-linux.o i386-mmx-linux.o linux-x86-tdesc-selftest.o" srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-avx-avx512-linux.o amd64-avx-mpx-avx512-pku-linux.o amd64-mpx-linux.o amd64-avx-mpx-linux.o x32-linux.o x32-avx-linux.o x32-avx-avx512-linux.o" - srv_aarch64_linux_regobj="aarch64.o" + srv_aarch64_linux_regobj="aarch64.o linux-aarch64-tdesc-selftest.o" else srv_i386_linux_regobj="" srv_amd64_linux_regobj="" diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c index 9682537728847850d824c7eac949c68ab09226ac..243d1e0bbf3d31819136b0867953733379c9c437 100644 --- a/gdb/gdbserver/linux-aarch64-low.c +++ b/gdb/gdbserver/linux-aarch64-low.c @@ -2998,4 +2998,8 @@ initialize_low_arch (void) initialize_low_arch_aarch32 (); initialize_regsets_info (&aarch64_regsets_info); + +#if GDB_SELF_TEST + initialize_low_tdesc (); +#endif } diff --git a/gdb/gdbserver/linux-aarch64-tdesc-selftest.c b/gdb/gdbserver/linux-aarch64-tdesc-selftest.c new file mode 100644 index 0000000000000000000000000000000000000000..11284b0b9f5cbef967cfc0ebed6463d2ca9030a5 --- /dev/null +++ b/gdb/gdbserver/linux-aarch64-tdesc-selftest.c @@ -0,0 +1,45 @@ +/* Copyright (C) 2017 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "server.h" +#include "tdesc.h" +#include "common/selftest.h" +#include "linux-aarch64-tdesc.h" + +/* Defined in auto-generated file features/aarch64.c. */ +void init_registers_aarch64 (void); +extern const struct target_desc *tdesc_aarch64; + +namespace selftests { +namespace tdesc { +static void +aarch64_tdesc_test () +{ + const target_desc *tdesc = aarch64_linux_read_description (); + SELF_CHECK (*tdesc == *tdesc_aarch64); +} +} +} // namespace selftests + +void +initialize_low_tdesc () +{ + init_registers_aarch64 (); + + selftests::register_test ("aarch64-tdesc", + selftests::tdesc::aarch64_tdesc_test); +} diff --git a/gdb/gdbserver/linux-aarch64-tdesc.h b/gdb/gdbserver/linux-aarch64-tdesc.h index 48314e934e0c1163fce400b368a3717a27239be8..7c56b703a057b19dc8c610ac2e49698fd0277d21 100644 --- a/gdb/gdbserver/linux-aarch64-tdesc.h +++ b/gdb/gdbserver/linux-aarch64-tdesc.h @@ -18,3 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ const struct target_desc * aarch64_linux_read_description (); + +#if GDB_SELF_TEST +void initialize_low_tdesc (); +#endif ^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH 3/4] Use flexible target descriptors for aarch64 @ 2017-10-25 8:31 Alan Hayward 2017-10-30 13:00 ` Yao Qi 0 siblings, 1 reply; 2+ messages in thread From: Alan Hayward @ 2017-10-25 8:31 UTC (permalink / raw) To: gdb-patches; +Cc: nd This patch adds flexible target description code autogenerated from the aarch64 feature files (fpu and core). It then moves both gdb and gdbserver across to use it. Tested on a --enable-targets=all build and aarch64 build with board files unix, native-gdbserver and unittest.exp. Alan. 2017-10-25 Alan Hayward <alan.hayward@arm.com> gdb/ * aarch64-tdep.c (_initialize_aarch64_tdep): Remove init. * arch/aarch64.c (aarch64_create_target_description): Create new target description. * features/Makefile: Add new files. * features/aarch64-core.c: New autogenerated file. * features/aarch64-fpu.c: New autogenerated file. * target-descriptions.c (maint_print_c_tdesc_cmd): Check for aarch64. gdbserver/ * linux-aarch64-ipa.c (initialize_low_tracepoint): Remove init. * linux-aarch64-low.c (initialize_low_arch): Remove init. * linux-aarch64-tdesc.c (aarch64_linux_read_description): Add init. diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index 96d1391a193a43100e0fd4a262210ac7e90242dc..5d6f455319f3003240239f7977da9f994765f4d3 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -54,9 +54,6 @@ #include "record.h" #include "record-full.h" - -#include "features/aarch64.c" - #include "arch/aarch64-insn.h" #include "opcode/aarch64.h" @@ -3059,8 +3056,6 @@ _initialize_aarch64_tdep (void) gdbarch_register (bfd_arch_aarch64, aarch64_gdbarch_init, aarch64_dump_tdep); - initialize_tdesc_aarch64 (); - /* Debug this file's internals. */ add_setshow_boolean_cmd ("aarch64", class_maintenance, &aarch64_debug, _("\ Set AArch64 debugging."), _("\ diff --git a/gdb/arch/aarch64.c b/gdb/arch/aarch64.c index 95d9906f10e660fda99d73a0d2a9d184fd3a7b52..85a44da93c71158de5d8a735b6a448b09c9dac1a 100644 --- a/gdb/arch/aarch64.c +++ b/gdb/arch/aarch64.c @@ -15,16 +15,39 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ - +#include <stdlib.h> +#include <string.h> #include "aarch64.h" -extern struct target_desc *tdesc_aarch64; +#ifdef GDBSERVER +#include "common/common-defs.h" +#include "common/gdb_vecs.h" +#include "common/vec.h" +#include "tdesc.h" +#else +#include "defs.h" +#include "osabi.h" +#include "target-descriptions.h" +#endif + +#include "../features/aarch64-core.c" +#include "../features/aarch64-fpu.c" /* Create the aarch64 target description. */ target_desc * aarch64_create_target_description () { - return tdesc_aarch64; -} + target_desc *tdesc = allocate_target_description (); + +#ifndef IN_PROCESS_AGENT + set_tdesc_architecture (tdesc, "aarch64"); +#endif + long regnum = 0; + + regnum = create_feature_aarch64_core (tdesc, regnum); + regnum = create_feature_aarch64_fpu (tdesc, regnum); + + return tdesc; +} diff --git a/gdb/features/Makefile b/gdb/features/Makefile index 2d8e3fea3687de1ba5b9a9cffc42728c9e6808e5..268e1b6f4ab09f23409dac64a44c61f19bf0f1f3 100644 --- a/gdb/features/Makefile +++ b/gdb/features/Makefile @@ -207,7 +207,9 @@ $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl $(XSLTPROC) gdbserver-regs.xsl - >> $(outdir)/$*.tmp sh ../../move-if-change $(outdir)/$*.tmp $(outdir)/$*.dat -FEATURE_XMLFILES = i386/32bit-core.xml \ +FEATURE_XMLFILES = aarch64-core.xml \ + aarch64-fpu.xml \ + i386/32bit-core.xml \ i386/32bit-sse.xml \ i386/32bit-linux.xml \ i386/32bit-avx.xml \ diff --git a/gdb/features/aarch64-core.c b/gdb/features/aarch64-core.c new file mode 100644 index 0000000000000000000000000000000000000000..a735515ae67211d29634e7c39b375a36edef2bb1 --- /dev/null +++ b/gdb/features/aarch64-core.c @@ -0,0 +1,72 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: aarch64-core.xml.tmp */ + +#ifdef GDBSERVER +#include "tdesc.h" +#else +#include "defs.h" +#include "osabi.h" +#include "target-descriptions.h" +#endif + +static int +create_feature_aarch64_core (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.core", "aarch64-core.xml"); + struct tdesc_type *field_type; + struct tdesc_type *type; + type = tdesc_create_flags (feature, "cpsr_flags", 4); + tdesc_add_flag (type, 0, "SP"); + tdesc_add_flag (type, 1, ""); + tdesc_add_bitfield (type, "EL", 2, 3); + tdesc_add_flag (type, 4, "nRW"); + tdesc_add_flag (type, 5, ""); + tdesc_add_flag (type, 6, "F"); + tdesc_add_flag (type, 7, "I"); + tdesc_add_flag (type, 8, "A"); + tdesc_add_flag (type, 9, "D"); + tdesc_add_flag (type, 20, "IL"); + tdesc_add_flag (type, 21, "SS"); + tdesc_add_flag (type, 28, "V"); + tdesc_add_flag (type, 29, "C"); + tdesc_add_flag (type, 30, "Z"); + tdesc_add_flag (type, 31, "N"); + + tdesc_create_reg (feature, "x0", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x1", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x2", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x3", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x4", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x5", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x6", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x7", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x8", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x9", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x10", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x11", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x12", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x13", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x14", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x15", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x16", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x17", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x18", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x19", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x20", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x21", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x22", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x23", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x24", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x25", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x26", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x27", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x28", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x29", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x30", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "sp", regnum++, 1, NULL, 64, "data_ptr"); + tdesc_create_reg (feature, "pc", regnum++, 1, NULL, 64, "code_ptr"); + tdesc_create_reg (feature, "cpsr", regnum++, 1, NULL, 32, "cpsr_flags"); + return regnum; +} diff --git a/gdb/features/aarch64-fpu.c b/gdb/features/aarch64-fpu.c new file mode 100644 index 0000000000000000000000000000000000000000..db3dfe771531f7a4c6aa09ee51053fa0266e8c2a --- /dev/null +++ b/gdb/features/aarch64-fpu.c @@ -0,0 +1,138 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: aarch64-fpu.xml.tmp */ + +#ifdef GDBSERVER +#include "tdesc.h" +#else +#include "defs.h" +#include "osabi.h" +#include "target-descriptions.h" +#endif + +static int +create_feature_aarch64_fpu (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.fpu", "aarch64-fpu.xml"); + struct tdesc_type *field_type; + field_type = tdesc_named_type (feature, "ieee_double"); + tdesc_create_vector (feature, "v2d", field_type, 2); + + field_type = tdesc_named_type (feature, "uint64"); + tdesc_create_vector (feature, "v2u", field_type, 2); + + field_type = tdesc_named_type (feature, "int64"); + tdesc_create_vector (feature, "v2i", field_type, 2); + + field_type = tdesc_named_type (feature, "ieee_single"); + tdesc_create_vector (feature, "v4f", field_type, 4); + + field_type = tdesc_named_type (feature, "uint32"); + tdesc_create_vector (feature, "v4u", field_type, 4); + + field_type = tdesc_named_type (feature, "int32"); + tdesc_create_vector (feature, "v4i", field_type, 4); + + field_type = tdesc_named_type (feature, "uint16"); + tdesc_create_vector (feature, "v8u", field_type, 8); + + field_type = tdesc_named_type (feature, "int16"); + tdesc_create_vector (feature, "v8i", field_type, 8); + + field_type = tdesc_named_type (feature, "uint8"); + tdesc_create_vector (feature, "v16u", field_type, 16); + + field_type = tdesc_named_type (feature, "int8"); + tdesc_create_vector (feature, "v16i", field_type, 16); + + field_type = tdesc_named_type (feature, "uint128"); + tdesc_create_vector (feature, "v1u", field_type, 1); + + field_type = tdesc_named_type (feature, "int128"); + tdesc_create_vector (feature, "v1i", field_type, 1); + + struct tdesc_type *type; + type = tdesc_create_union (feature, "vnd"); + field_type = tdesc_named_type (feature, "v2d"); + tdesc_add_field (type, "f", field_type); + field_type = tdesc_named_type (feature, "v2u"); + tdesc_add_field (type, "u", field_type); + field_type = tdesc_named_type (feature, "v2i"); + tdesc_add_field (type, "s", field_type); + + type = tdesc_create_union (feature, "vns"); + field_type = tdesc_named_type (feature, "v4f"); + tdesc_add_field (type, "f", field_type); + field_type = tdesc_named_type (feature, "v4u"); + tdesc_add_field (type, "u", field_type); + field_type = tdesc_named_type (feature, "v4i"); + tdesc_add_field (type, "s", field_type); + + type = tdesc_create_union (feature, "vnh"); + field_type = tdesc_named_type (feature, "v8u"); + tdesc_add_field (type, "u", field_type); + field_type = tdesc_named_type (feature, "v8i"); + tdesc_add_field (type, "s", field_type); + + type = tdesc_create_union (feature, "vnb"); + field_type = tdesc_named_type (feature, "v16u"); + tdesc_add_field (type, "u", field_type); + field_type = tdesc_named_type (feature, "v16i"); + tdesc_add_field (type, "s", field_type); + + type = tdesc_create_union (feature, "vnq"); + field_type = tdesc_named_type (feature, "v1u"); + tdesc_add_field (type, "u", field_type); + field_type = tdesc_named_type (feature, "v1i"); + tdesc_add_field (type, "s", field_type); + + type = tdesc_create_union (feature, "aarch64v"); + field_type = tdesc_named_type (feature, "vnd"); + tdesc_add_field (type, "d", field_type); + field_type = tdesc_named_type (feature, "vns"); + tdesc_add_field (type, "s", field_type); + field_type = tdesc_named_type (feature, "vnh"); + tdesc_add_field (type, "h", field_type); + field_type = tdesc_named_type (feature, "vnb"); + tdesc_add_field (type, "b", field_type); + field_type = tdesc_named_type (feature, "vnq"); + tdesc_add_field (type, "q", field_type); + + regnum = 34; + tdesc_create_reg (feature, "v0", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v1", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v2", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v3", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v4", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v5", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v6", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v7", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v8", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v9", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v10", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v11", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v12", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v13", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v14", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v15", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v16", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v17", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v18", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v19", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v20", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v21", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v22", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v23", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v24", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v25", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v26", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v27", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v28", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v29", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v30", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v31", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "fpsr", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "fpcr", regnum++, 1, NULL, 32, "int"); + return regnum; +} diff --git a/gdb/gdbserver/linux-aarch64-ipa.c b/gdb/gdbserver/linux-aarch64-ipa.c index 28dc9776a1c8d273e8bc749296a57bc62b8619d5..b240100a13eccdfa696937158dbb365dcff12730 100644 --- a/gdb/gdbserver/linux-aarch64-ipa.c +++ b/gdb/gdbserver/linux-aarch64-ipa.c @@ -27,9 +27,6 @@ #endif #include "linux-aarch64-tdesc.h" -/* Defined in auto-generated file aarch64.c. */ -void init_registers_aarch64 (void); - /* Each register saved by the jump pad is in a 16 byte cell. */ #define FT_CR_SIZE 16 @@ -207,5 +204,4 @@ alloc_jump_pad_buffer (size_t size) void initialize_low_tracepoint (void) { - init_registers_aarch64 (); } diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c index dcce287974cb6afd2f530ce1257dbbf25ed25ddc..9682537728847850d824c7eac949c68ab09226ac 100644 --- a/gdb/gdbserver/linux-aarch64-low.c +++ b/gdb/gdbserver/linux-aarch64-low.c @@ -41,9 +41,6 @@ #include "arch/aarch64.h" #include "linux-aarch64-tdesc.h" -/* Defined in auto-generated files. */ -void init_registers_aarch64 (void); - #ifdef HAVE_SYS_REG_H #include <sys/reg.h> #endif @@ -2998,8 +2995,6 @@ struct linux_target_ops the_low_target = void initialize_low_arch (void) { - init_registers_aarch64 (); - initialize_low_arch_aarch32 (); initialize_regsets_info (&aarch64_regsets_info); diff --git a/gdb/gdbserver/linux-aarch64-tdesc.c b/gdb/gdbserver/linux-aarch64-tdesc.c index 4148ed70c4ca973652e860492cd7cc1a249991d8..4a984caa8c0493cb65480c9988b3997dec95730b 100644 --- a/gdb/gdbserver/linux-aarch64-tdesc.c +++ b/gdb/gdbserver/linux-aarch64-tdesc.c @@ -35,6 +35,13 @@ aarch64_linux_read_description () if (*tdesc == NULL) { *tdesc = aarch64_create_target_description (); + + init_target_desc (*tdesc); + +#ifndef IN_PROCESS_AGENT + static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL }; + (*tdesc)->expedite_regs = expedite_regs_aarch64; +#endif } return *tdesc; diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 4f5e9d60a6d98b5855d6ee4ffeaa9fd7149d6395..cb6e4e7c9055795eef9777c7226bd53975610340 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -2327,7 +2327,8 @@ maint_print_c_tdesc_cmd (const char *args, int from_tty) counterparts. */ if (startswith (filename_after_features.c_str (), "i386/32bit-") || startswith (filename_after_features.c_str (), "i386/64bit-") - || startswith (filename_after_features.c_str (), "i386/x32-core.xml")) + || startswith (filename_after_features.c_str (), "i386/x32-core.xml") + || startswith (filename_after_features.c_str (), "aarch64")) { print_c_feature v (filename_after_features); ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH 3/4] Use flexible target descriptors for aarch64 2017-10-25 8:31 [PATCH 3/4] Use flexible target descriptors for aarch64 Alan Hayward @ 2017-10-30 13:00 ` Yao Qi [not found] ` <A0F02AC1-8FF2-4022-B089-F68D2949CEB6@arm.com> 0 siblings, 1 reply; 2+ messages in thread From: Yao Qi @ 2017-10-30 13:00 UTC (permalink / raw) To: Alan Hayward; +Cc: gdb-patches, nd Alan Hayward <Alan.Hayward@arm.com> writes: > Tested on a --enable-targets=all build and aarch64 build with board > files unix, native-gdbserver and unittest.exp. Hi Alan, With your patches applied, did you see following assert in gdbserver? gdb/gdbserver/tdesc.c:96: A problem internal to GDBserver has been detected. const char* tdesc_get_features_xml(target_desc*): Assertion `tdesc->xmltarget != NULL || (tdesc->features != NULL && tdesc->arch != NULL && tdesc->osabi != NULL)' failed. you can reproduce it by starting gdbserver, and "target remote XXX" in gdb to connect to gdbserver. -- Yao (齐尧) ^ permalink raw reply [flat|nested] 2+ messages in thread
[parent not found: <A0F02AC1-8FF2-4022-B089-F68D2949CEB6@arm.com>]
* Re: [PATCH 3/4] Use flexible target descriptors for aarch64 [not found] ` <A0F02AC1-8FF2-4022-B089-F68D2949CEB6@arm.com> @ 2017-11-06 10:06 ` Alan Hayward 2017-11-06 11:49 ` Yao Qi 0 siblings, 1 reply; 2+ messages in thread From: Alan Hayward @ 2017-11-06 10:06 UTC (permalink / raw) To: Yao Qi; +Cc: gdb-patches, nd [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain; charset="utf-8", Size: 27924 bytes --] > On 31 Oct 2017, at 17:16, Alan Hayward <Alan.Hayward@arm.com> wrote: > > >> On 30 Oct 2017, at 13:00, Yao Qi <qiyaoltc@gmail.com> wrote: >> >> Alan Hayward <Alan.Hayward@arm.com> writes: >> >>> Tested on a --enable-targets=all build and aarch64 build with board >>> files unix, native-gdbserver and unittest.exp. >> >> Hi Alan, >> With your patches applied, did you see following assert in gdbserver? >> >> gdb/gdbserver/tdesc.c:96: A problem internal to GDBserver has been detected. >> const char* tdesc_get_features_xml(target_desc*): Assertion `tdesc->xmltarget != NULL || (tdesc->features != NULL && tdesc->arch != NULL && tdesc->osabi != NULL)' failed. >> >> you can reproduce it by starting gdbserver, and "target remote XXX" in >> gdb to connect to gdbserver. >> >> -- >> Yao (é½å°§) > > Yes, I do now. Didnât the last time I tested. Will look into it. > > Thanks for spotting! > > > Alan. Code was asserting because osabi wasnât set. (A last minute change I had made getting 4/4 to work). In the existing code, osabi is never set for aarch64 - the osabi line is missing from the .xml files. Some other architectures set to âGNU/Linuxâ. I assumed there was a reason aarch64 didnât do this. I didnât want to change this behaviour, so instead in my code osabi is set to ââ. Also removed files as suggested. Restested the whole set manually and tested with --enable-targets=all build and aarch64 build with board files unix, native-gdbserver and unittest.exp. (Not reposting 4/4 because there have been no changes to it). Alan. 2017-11-06 Alan Hayward <alan.hayward@arm.com> gdb/ * aarch64-tdep.c (_initialize_aarch64_tdep): Remove init. * arch/aarch64.c (aarch64_create_target_description): Create new target description. * features/Makefile: Add/Remove xml files. * features/aarch64.c: Remove file. * features/aarch64-core.c: New autogenerated file. * features/aarch64-fpu.c: New autogenerated file. * target-descriptions.c (maint_print_c_tdesc_cmd): Check for aarch64. gdbserver/ * linux-aarch64-ipa.c (initialize_low_tracepoint): Remove init. * linux-aarch64-low.c (initialize_low_arch): Remove init. * linux-aarch64-tdesc.c (aarch64_linux_read_description): Add init. diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index c91b3435c151019dfe4087e756bd6665e12cd8b1..aed478144b6f0306cdbf4bd9ca69bdc539b49273 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -54,9 +54,6 @@ #include "record.h" #include "record-full.h" - -#include "features/aarch64.c" - #include "arch/aarch64-insn.h" #include "opcode/aarch64.h" @@ -3057,8 +3054,6 @@ _initialize_aarch64_tdep (void) gdbarch_register (bfd_arch_aarch64, aarch64_gdbarch_init, aarch64_dump_tdep); - initialize_tdesc_aarch64 (); - /* Debug this file's internals. */ add_setshow_boolean_cmd ("aarch64", class_maintenance, &aarch64_debug, _("\ Set AArch64 debugging."), _("\ diff --git a/gdb/arch/aarch64.c b/gdb/arch/aarch64.c index 95d9906f10e660fda99d73a0d2a9d184fd3a7b52..31f292e2df8153ad95be67dd064853d6ce9de807 100644 --- a/gdb/arch/aarch64.c +++ b/gdb/arch/aarch64.c @@ -15,16 +15,40 @@ You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ - +#include <stdlib.h> +#include <string.h> #include "aarch64.h" -extern struct target_desc *tdesc_aarch64; +#ifdef GDBSERVER +#include "common/common-defs.h" +#include "common/gdb_vecs.h" +#include "common/vec.h" +#include "tdesc.h" +#else +#include "defs.h" +#include "osabi.h" +#include "target-descriptions.h" +#endif + +#include "../features/aarch64-core.c" +#include "../features/aarch64-fpu.c" /* Create the aarch64 target description. */ target_desc * aarch64_create_target_description () { - return tdesc_aarch64; -} + target_desc *tdesc = allocate_target_description (); + +#ifndef IN_PROCESS_AGENT + set_tdesc_architecture (tdesc, "aarch64"); + set_tdesc_osabi (tdesc, ""); +#endif + long regnum = 0; + + regnum = create_feature_aarch64_core (tdesc, regnum); + regnum = create_feature_aarch64_fpu (tdesc, regnum); + + return tdesc; +} diff --git a/gdb/features/Makefile b/gdb/features/Makefile index 2d8e3fea3687de1ba5b9a9cffc42728c9e6808e5..0733c9bbb54d36d78595370e47f133d71e09856e 100644 --- a/gdb/features/Makefile +++ b/gdb/features/Makefile @@ -119,7 +119,6 @@ OUTPUTS = $(patsubst %,$(outdir)/%.dat,$(WHICH)) # --enable-targets=all GDB. You can override this by passing XMLTOC # to make on the command line. XMLTOC = \ - aarch64.xml \ arc-v2.xml \ arc-arcompact.xml \ arm/arm-with-iwmmxt.xml \ @@ -207,7 +206,9 @@ $(outdir)/%.dat: %.xml number-regs.xsl sort-regs.xsl gdbserver-regs.xsl $(XSLTPROC) gdbserver-regs.xsl - >> $(outdir)/$*.tmp sh ../../move-if-change $(outdir)/$*.tmp $(outdir)/$*.dat -FEATURE_XMLFILES = i386/32bit-core.xml \ +FEATURE_XMLFILES = aarch64-core.xml \ + aarch64-fpu.xml \ + i386/32bit-core.xml \ i386/32bit-sse.xml \ i386/32bit-linux.xml \ i386/32bit-avx.xml \ diff --git a/gdb/features/aarch64-core.c b/gdb/features/aarch64-core.c new file mode 100644 index 0000000000000000000000000000000000000000..a735515ae67211d29634e7c39b375a36edef2bb1 --- /dev/null +++ b/gdb/features/aarch64-core.c @@ -0,0 +1,72 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: aarch64-core.xml.tmp */ + +#ifdef GDBSERVER +#include "tdesc.h" +#else +#include "defs.h" +#include "osabi.h" +#include "target-descriptions.h" +#endif + +static int +create_feature_aarch64_core (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.core", "aarch64-core.xml"); + struct tdesc_type *field_type; + struct tdesc_type *type; + type = tdesc_create_flags (feature, "cpsr_flags", 4); + tdesc_add_flag (type, 0, "SP"); + tdesc_add_flag (type, 1, ""); + tdesc_add_bitfield (type, "EL", 2, 3); + tdesc_add_flag (type, 4, "nRW"); + tdesc_add_flag (type, 5, ""); + tdesc_add_flag (type, 6, "F"); + tdesc_add_flag (type, 7, "I"); + tdesc_add_flag (type, 8, "A"); + tdesc_add_flag (type, 9, "D"); + tdesc_add_flag (type, 20, "IL"); + tdesc_add_flag (type, 21, "SS"); + tdesc_add_flag (type, 28, "V"); + tdesc_add_flag (type, 29, "C"); + tdesc_add_flag (type, 30, "Z"); + tdesc_add_flag (type, 31, "N"); + + tdesc_create_reg (feature, "x0", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x1", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x2", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x3", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x4", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x5", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x6", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x7", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x8", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x9", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x10", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x11", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x12", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x13", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x14", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x15", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x16", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x17", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x18", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x19", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x20", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x21", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x22", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x23", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x24", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x25", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x26", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x27", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x28", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x29", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "x30", regnum++, 1, NULL, 64, "int"); + tdesc_create_reg (feature, "sp", regnum++, 1, NULL, 64, "data_ptr"); + tdesc_create_reg (feature, "pc", regnum++, 1, NULL, 64, "code_ptr"); + tdesc_create_reg (feature, "cpsr", regnum++, 1, NULL, 32, "cpsr_flags"); + return regnum; +} diff --git a/gdb/features/aarch64-fpu.c b/gdb/features/aarch64-fpu.c new file mode 100644 index 0000000000000000000000000000000000000000..db3dfe771531f7a4c6aa09ee51053fa0266e8c2a --- /dev/null +++ b/gdb/features/aarch64-fpu.c @@ -0,0 +1,138 @@ +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: + Original: aarch64-fpu.xml.tmp */ + +#ifdef GDBSERVER +#include "tdesc.h" +#else +#include "defs.h" +#include "osabi.h" +#include "target-descriptions.h" +#endif + +static int +create_feature_aarch64_fpu (struct target_desc *result, long regnum) +{ + struct tdesc_feature *feature; + + feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.fpu", "aarch64-fpu.xml"); + struct tdesc_type *field_type; + field_type = tdesc_named_type (feature, "ieee_double"); + tdesc_create_vector (feature, "v2d", field_type, 2); + + field_type = tdesc_named_type (feature, "uint64"); + tdesc_create_vector (feature, "v2u", field_type, 2); + + field_type = tdesc_named_type (feature, "int64"); + tdesc_create_vector (feature, "v2i", field_type, 2); + + field_type = tdesc_named_type (feature, "ieee_single"); + tdesc_create_vector (feature, "v4f", field_type, 4); + + field_type = tdesc_named_type (feature, "uint32"); + tdesc_create_vector (feature, "v4u", field_type, 4); + + field_type = tdesc_named_type (feature, "int32"); + tdesc_create_vector (feature, "v4i", field_type, 4); + + field_type = tdesc_named_type (feature, "uint16"); + tdesc_create_vector (feature, "v8u", field_type, 8); + + field_type = tdesc_named_type (feature, "int16"); + tdesc_create_vector (feature, "v8i", field_type, 8); + + field_type = tdesc_named_type (feature, "uint8"); + tdesc_create_vector (feature, "v16u", field_type, 16); + + field_type = tdesc_named_type (feature, "int8"); + tdesc_create_vector (feature, "v16i", field_type, 16); + + field_type = tdesc_named_type (feature, "uint128"); + tdesc_create_vector (feature, "v1u", field_type, 1); + + field_type = tdesc_named_type (feature, "int128"); + tdesc_create_vector (feature, "v1i", field_type, 1); + + struct tdesc_type *type; + type = tdesc_create_union (feature, "vnd"); + field_type = tdesc_named_type (feature, "v2d"); + tdesc_add_field (type, "f", field_type); + field_type = tdesc_named_type (feature, "v2u"); + tdesc_add_field (type, "u", field_type); + field_type = tdesc_named_type (feature, "v2i"); + tdesc_add_field (type, "s", field_type); + + type = tdesc_create_union (feature, "vns"); + field_type = tdesc_named_type (feature, "v4f"); + tdesc_add_field (type, "f", field_type); + field_type = tdesc_named_type (feature, "v4u"); + tdesc_add_field (type, "u", field_type); + field_type = tdesc_named_type (feature, "v4i"); + tdesc_add_field (type, "s", field_type); + + type = tdesc_create_union (feature, "vnh"); + field_type = tdesc_named_type (feature, "v8u"); + tdesc_add_field (type, "u", field_type); + field_type = tdesc_named_type (feature, "v8i"); + tdesc_add_field (type, "s", field_type); + + type = tdesc_create_union (feature, "vnb"); + field_type = tdesc_named_type (feature, "v16u"); + tdesc_add_field (type, "u", field_type); + field_type = tdesc_named_type (feature, "v16i"); + tdesc_add_field (type, "s", field_type); + + type = tdesc_create_union (feature, "vnq"); + field_type = tdesc_named_type (feature, "v1u"); + tdesc_add_field (type, "u", field_type); + field_type = tdesc_named_type (feature, "v1i"); + tdesc_add_field (type, "s", field_type); + + type = tdesc_create_union (feature, "aarch64v"); + field_type = tdesc_named_type (feature, "vnd"); + tdesc_add_field (type, "d", field_type); + field_type = tdesc_named_type (feature, "vns"); + tdesc_add_field (type, "s", field_type); + field_type = tdesc_named_type (feature, "vnh"); + tdesc_add_field (type, "h", field_type); + field_type = tdesc_named_type (feature, "vnb"); + tdesc_add_field (type, "b", field_type); + field_type = tdesc_named_type (feature, "vnq"); + tdesc_add_field (type, "q", field_type); + + regnum = 34; + tdesc_create_reg (feature, "v0", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v1", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v2", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v3", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v4", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v5", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v6", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v7", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v8", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v9", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v10", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v11", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v12", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v13", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v14", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v15", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v16", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v17", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v18", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v19", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v20", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v21", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v22", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v23", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v24", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v25", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v26", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v27", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v28", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v29", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v30", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "v31", regnum++, 1, NULL, 128, "aarch64v"); + tdesc_create_reg (feature, "fpsr", regnum++, 1, NULL, 32, "int"); + tdesc_create_reg (feature, "fpcr", regnum++, 1, NULL, 32, "int"); + return regnum; +} diff --git a/gdb/features/aarch64.c b/gdb/features/aarch64.c deleted file mode 100644 index 7411cacd4b80bd51a3301a650de588260b0c30ba..0000000000000000000000000000000000000000 --- a/gdb/features/aarch64.c +++ /dev/null @@ -1,191 +0,0 @@ -/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: aarch64.xml */ - -#include "defs.h" -#include "osabi.h" -#include "target-descriptions.h" - -struct target_desc *tdesc_aarch64; -static void -initialize_tdesc_aarch64 (void) -{ - struct target_desc *result = allocate_target_description (); - set_tdesc_architecture (result, bfd_scan_arch ("aarch64")); - - struct tdesc_feature *feature; - - feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.core"); - struct tdesc_type *field_type; - struct tdesc_type *type; - type = tdesc_create_flags (feature, "cpsr_flags", 4); - tdesc_add_flag (type, 0, "SP"); - tdesc_add_flag (type, 1, ""); - tdesc_add_bitfield (type, "EL", 2, 3); - tdesc_add_flag (type, 4, "nRW"); - tdesc_add_flag (type, 5, ""); - tdesc_add_flag (type, 6, "F"); - tdesc_add_flag (type, 7, "I"); - tdesc_add_flag (type, 8, "A"); - tdesc_add_flag (type, 9, "D"); - tdesc_add_flag (type, 20, "IL"); - tdesc_add_flag (type, 21, "SS"); - tdesc_add_flag (type, 28, "V"); - tdesc_add_flag (type, 29, "C"); - tdesc_add_flag (type, 30, "Z"); - tdesc_add_flag (type, 31, "N"); - - tdesc_create_reg (feature, "x0", 0, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x1", 1, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x2", 2, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x3", 3, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x4", 4, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x5", 5, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x6", 6, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x7", 7, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x8", 8, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x9", 9, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x10", 10, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x11", 11, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x12", 12, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x13", 13, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x14", 14, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x15", 15, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x16", 16, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x17", 17, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x18", 18, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x19", 19, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x20", 20, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x21", 21, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x22", 22, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x23", 23, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x24", 24, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x25", 25, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x26", 26, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x27", 27, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x28", 28, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x29", 29, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "x30", 30, 1, NULL, 64, "int"); - tdesc_create_reg (feature, "sp", 31, 1, NULL, 64, "data_ptr"); - tdesc_create_reg (feature, "pc", 32, 1, NULL, 64, "code_ptr"); - tdesc_create_reg (feature, "cpsr", 33, 1, NULL, 32, "cpsr_flags"); - - feature = tdesc_create_feature (result, "org.gnu.gdb.aarch64.fpu"); - field_type = tdesc_named_type (feature, "ieee_double"); - tdesc_create_vector (feature, "v2d", field_type, 2); - - field_type = tdesc_named_type (feature, "uint64"); - tdesc_create_vector (feature, "v2u", field_type, 2); - - field_type = tdesc_named_type (feature, "int64"); - tdesc_create_vector (feature, "v2i", field_type, 2); - - field_type = tdesc_named_type (feature, "ieee_single"); - tdesc_create_vector (feature, "v4f", field_type, 4); - - field_type = tdesc_named_type (feature, "uint32"); - tdesc_create_vector (feature, "v4u", field_type, 4); - - field_type = tdesc_named_type (feature, "int32"); - tdesc_create_vector (feature, "v4i", field_type, 4); - - field_type = tdesc_named_type (feature, "uint16"); - tdesc_create_vector (feature, "v8u", field_type, 8); - - field_type = tdesc_named_type (feature, "int16"); - tdesc_create_vector (feature, "v8i", field_type, 8); - - field_type = tdesc_named_type (feature, "uint8"); - tdesc_create_vector (feature, "v16u", field_type, 16); - - field_type = tdesc_named_type (feature, "int8"); - tdesc_create_vector (feature, "v16i", field_type, 16); - - field_type = tdesc_named_type (feature, "uint128"); - tdesc_create_vector (feature, "v1u", field_type, 1); - - field_type = tdesc_named_type (feature, "int128"); - tdesc_create_vector (feature, "v1i", field_type, 1); - - type = tdesc_create_union (feature, "vnd"); - field_type = tdesc_named_type (feature, "v2d"); - tdesc_add_field (type, "f", field_type); - field_type = tdesc_named_type (feature, "v2u"); - tdesc_add_field (type, "u", field_type); - field_type = tdesc_named_type (feature, "v2i"); - tdesc_add_field (type, "s", field_type); - - type = tdesc_create_union (feature, "vns"); - field_type = tdesc_named_type (feature, "v4f"); - tdesc_add_field (type, "f", field_type); - field_type = tdesc_named_type (feature, "v4u"); - tdesc_add_field (type, "u", field_type); - field_type = tdesc_named_type (feature, "v4i"); - tdesc_add_field (type, "s", field_type); - - type = tdesc_create_union (feature, "vnh"); - field_type = tdesc_named_type (feature, "v8u"); - tdesc_add_field (type, "u", field_type); - field_type = tdesc_named_type (feature, "v8i"); - tdesc_add_field (type, "s", field_type); - - type = tdesc_create_union (feature, "vnb"); - field_type = tdesc_named_type (feature, "v16u"); - tdesc_add_field (type, "u", field_type); - field_type = tdesc_named_type (feature, "v16i"); - tdesc_add_field (type, "s", field_type); - - type = tdesc_create_union (feature, "vnq"); - field_type = tdesc_named_type (feature, "v1u"); - tdesc_add_field (type, "u", field_type); - field_type = tdesc_named_type (feature, "v1i"); - tdesc_add_field (type, "s", field_type); - - type = tdesc_create_union (feature, "aarch64v"); - field_type = tdesc_named_type (feature, "vnd"); - tdesc_add_field (type, "d", field_type); - field_type = tdesc_named_type (feature, "vns"); - tdesc_add_field (type, "s", field_type); - field_type = tdesc_named_type (feature, "vnh"); - tdesc_add_field (type, "h", field_type); - field_type = tdesc_named_type (feature, "vnb"); - tdesc_add_field (type, "b", field_type); - field_type = tdesc_named_type (feature, "vnq"); - tdesc_add_field (type, "q", field_type); - - tdesc_create_reg (feature, "v0", 34, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v1", 35, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v2", 36, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v3", 37, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v4", 38, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v5", 39, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v6", 40, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v7", 41, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v8", 42, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v9", 43, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v10", 44, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v11", 45, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v12", 46, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v13", 47, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v14", 48, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v15", 49, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v16", 50, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v17", 51, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v18", 52, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v19", 53, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v20", 54, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v21", 55, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v22", 56, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v23", 57, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v24", 58, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v25", 59, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v26", 60, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v27", 61, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v28", 62, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v29", 63, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v30", 64, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "v31", 65, 1, NULL, 128, "aarch64v"); - tdesc_create_reg (feature, "fpsr", 66, 1, NULL, 32, "int"); - tdesc_create_reg (feature, "fpcr", 67, 1, NULL, 32, "int"); - - tdesc_aarch64 = result; -} diff --git a/gdb/gdbserver/linux-aarch64-ipa.c b/gdb/gdbserver/linux-aarch64-ipa.c index 28dc9776a1c8d273e8bc749296a57bc62b8619d5..b240100a13eccdfa696937158dbb365dcff12730 100644 --- a/gdb/gdbserver/linux-aarch64-ipa.c +++ b/gdb/gdbserver/linux-aarch64-ipa.c @@ -27,9 +27,6 @@ #endif #include "linux-aarch64-tdesc.h" -/* Defined in auto-generated file aarch64.c. */ -void init_registers_aarch64 (void); - /* Each register saved by the jump pad is in a 16 byte cell. */ #define FT_CR_SIZE 16 @@ -207,5 +204,4 @@ alloc_jump_pad_buffer (size_t size) void initialize_low_tracepoint (void) { - init_registers_aarch64 (); } diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c index dcce287974cb6afd2f530ce1257dbbf25ed25ddc..9682537728847850d824c7eac949c68ab09226ac 100644 --- a/gdb/gdbserver/linux-aarch64-low.c +++ b/gdb/gdbserver/linux-aarch64-low.c @@ -41,9 +41,6 @@ #include "arch/aarch64.h" #include "linux-aarch64-tdesc.h" -/* Defined in auto-generated files. */ -void init_registers_aarch64 (void); - #ifdef HAVE_SYS_REG_H #include <sys/reg.h> #endif @@ -2998,8 +2995,6 @@ struct linux_target_ops the_low_target = void initialize_low_arch (void) { - init_registers_aarch64 (); - initialize_low_arch_aarch32 (); initialize_regsets_info (&aarch64_regsets_info); diff --git a/gdb/gdbserver/linux-aarch64-tdesc.c b/gdb/gdbserver/linux-aarch64-tdesc.c index 138b23c2ae07c67c019b7556efebcded73c6fcb2..08112d2431c51b8b5bde88abd41d42dddff17f0b 100644 --- a/gdb/gdbserver/linux-aarch64-tdesc.c +++ b/gdb/gdbserver/linux-aarch64-tdesc.c @@ -31,7 +31,16 @@ aarch64_linux_read_description () target_desc **tdesc = &aarch64_tdesc; if (*tdesc == NULL) - *tdesc = aarch64_create_target_description (); + { + *tdesc = aarch64_create_target_description (); + + init_target_desc (*tdesc); + +#ifndef IN_PROCESS_AGENT + static const char *expedite_regs_aarch64[] = { "x29", "sp", "pc", NULL }; + (*tdesc)->expedite_regs = expedite_regs_aarch64; +#endif + } return *tdesc; } diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index 4f5e9d60a6d98b5855d6ee4ffeaa9fd7149d6395..cb6e4e7c9055795eef9777c7226bd53975610340 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -2327,7 +2327,8 @@ maint_print_c_tdesc_cmd (const char *args, int from_tty) counterparts. */ if (startswith (filename_after_features.c_str (), "i386/32bit-") || startswith (filename_after_features.c_str (), "i386/64bit-") - || startswith (filename_after_features.c_str (), "i386/x32-core.xml")) + || startswith (filename_after_features.c_str (), "i386/x32-core.xml") + || startswith (filename_after_features.c_str (), "aarch64")) { print_c_feature v (filename_after_features); \x16º&Öéj×!zÊÞ¶êç×ößyb²Ö«r\x18\x1dnr\x17¬ ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH 3/4] Use flexible target descriptors for aarch64 2017-11-06 10:06 ` Alan Hayward @ 2017-11-06 11:49 ` Yao Qi 2017-11-06 12:58 ` Alan Hayward 0 siblings, 1 reply; 2+ messages in thread From: Yao Qi @ 2017-11-06 11:49 UTC (permalink / raw) To: Alan Hayward; +Cc: gdb-patches, nd Alan Hayward <Alan.Hayward@arm.com> writes: > In the existing code, osabi is never set for aarch64 - the osabi line is missing > from the .xml files. Some other architectures set to “GNU/Linux”. I assumed > there was a reason aarch64 didn’t do this. I didn’t want to change > this behaviour, Agreed, it should be a separated patch to address this, if needed. See PR 19895 "gdbserver target description on aarch64/arm doesn't specify osabi" > so instead in my code osabi is set to “”. However, setting osabi to "" in GDBserver may slightly change the the XML content GDB received from GDBserver. Without your changes, the XML contents received from GDBserver doesn't have "<osabi>XXX</osabi>", however with your changes, the XML contents have "<osabi></osabi>". Can you confirm this? The change like this doesn't affect any GDB's behavior, because osabi in GDB side is still GDB_OSABI_UNKNOWN. On the other hand, "osabi" is an optional field, https://sourceware.org/gdb/current/onlinedocs/gdb/Target-Description-Format.html so it is optional in "tdesc" too. IMO, we need to remove "tdesc->osabi != NULL" from the assert, and let GDBserver only generate "<osabi>XXX</osabi>" when tdesc->osabi isn't NULL. What do you think? -- Yao (齐尧) ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH 3/4] Use flexible target descriptors for aarch64 2017-11-06 11:49 ` Yao Qi @ 2017-11-06 12:58 ` Alan Hayward [not found] ` <B3614F09-2732-4B13-A45D-5EC111A8DC7E@arm.com> 0 siblings, 1 reply; 2+ messages in thread From: Alan Hayward @ 2017-11-06 12:58 UTC (permalink / raw) To: Yao Qi; +Cc: gdb-patches, nd > On 6 Nov 2017, at 11:49, Yao Qi <qiyaoltc@gmail.com> wrote: > > Alan Hayward <Alan.Hayward@arm.com> writes: > >> In the existing code, osabi is never set for aarch64 - the osabi line is missing >> from the .xml files. Some other architectures set to “GNU/Linux”. I assumed >> there was a reason aarch64 didn’t do this. I didn’t want to change >> this behaviour, > > Agreed, it should be a separated patch to address this, if needed. See > PR 19895 "gdbserver target description on aarch64/arm doesn't specify osabi" > >> so instead in my code osabi is set to “”. > > However, setting osabi to "" in GDBserver may slightly change the > the XML content GDB received from GDBserver. Without your changes, the > XML contents received from GDBserver doesn't have "<osabi>XXX</osabi>", > however with your changes, the XML contents have "<osabi></osabi>". Can > you confirm this? The change like this doesn't affect any GDB's > behavior, because osabi in GDB side is still GDB_OSABI_UNKNOWN. > > On the other hand, "osabi" is an optional field, > https://sourceware.org/gdb/current/onlinedocs/gdb/Target-Description-Format.html > so it is optional in "tdesc" too. IMO, we need to remove > "tdesc->osabi != NULL" from the assert, and let GDBserver only generate > "<osabi>XXX</osabi>" when tdesc->osabi isn't NULL. What do you think? > Given that osabi is optional, it makes sense to me that it should be removed from the assert. Setting to “” feels a bit of a hack. Alan. ^ permalink raw reply [flat|nested] 2+ messages in thread
[parent not found: <B3614F09-2732-4B13-A45D-5EC111A8DC7E@arm.com>]
* Re: [PATCH 3/4] Use flexible target descriptors for aarch64 [not found] ` <B3614F09-2732-4B13-A45D-5EC111A8DC7E@arm.com> @ 2017-11-22 15:47 ` Yao Qi 2017-11-22 16:00 ` Yao Qi 0 siblings, 1 reply; 2+ messages in thread From: Yao Qi @ 2017-11-22 15:47 UTC (permalink / raw) To: Alan Hayward; +Cc: gdb-patches, nd Alan Hayward <Alan.Hayward@arm.com> writes: > +#include <stdlib.h> > +#include <string.h> > #include "aarch64.h" > > -extern struct target_desc *tdesc_aarch64; > +#ifdef GDBSERVER > +#include "common/common-defs.h" > +#include "common/gdb_vecs.h" > +#include "common/vec.h" > +#include "tdesc.h" > +#else > +#include "defs.h" > +#include "target-descriptions.h" > +#endif > + Do we need to include headers this way? We don't have that in arch/i386.c and arch/amd64.c. > diff --git a/gdb/features/aarch64-core.c b/gdb/features/aarch64-core.c > new file mode 100644 > index 0000000000000000000000000000000000000000..a735515ae67211d29634e7c39b375a36edef2bb1 > --- /dev/null > +++ b/gdb/features/aarch64-core.c > @@ -0,0 +1,72 @@ > +/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: > + Original: aarch64-core.xml.tmp */ > + Looks this file is not generated by the recent GDB. Can you re-generate them? -- Yao (齐尧) ^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH 3/4] Use flexible target descriptors for aarch64 2017-11-22 15:47 ` Yao Qi @ 2017-11-22 16:00 ` Yao Qi [not found] ` <8E1DED12-D169-49CD-A9A3-388280EBDB60@arm.com> 0 siblings, 1 reply; 2+ messages in thread From: Yao Qi @ 2017-11-22 16:00 UTC (permalink / raw) To: Alan Hayward; +Cc: gdb-patches, nd Hi Alan, When you post the new version of patches, could you post the whole series in the same email thread? These four patches are not in the same thread, so I have to go through my inbox to find them one by one. -- Yao (齐尧) ^ permalink raw reply [flat|nested] 2+ messages in thread
[parent not found: <8E1DED12-D169-49CD-A9A3-388280EBDB60@arm.com>]
* Re: [PATCH 4/4] Add xml selftests [not found] ` <8E1DED12-D169-49CD-A9A3-388280EBDB60@arm.com> @ 2017-11-23 17:53 ` Yao Qi 0 siblings, 0 replies; 2+ messages in thread From: Yao Qi @ 2017-11-23 17:53 UTC (permalink / raw) To: Alan Hayward; +Cc: gdb-patches, nd On 17-11-23 16:29:01, Alan Hayward wrote: > 2017-11-23 Alan Hayward <alan.hayward@arm.com> > > gdb/ > * aarch64-tdep.c: Add target desc selftest. Add the function name _initialize_aarch64_tdep in ChangeLog entry. > > gdbserver/ > * configure.srv: Add new file. "Add linux-aarch64-tdesc-selftest.o". > * linux-aarch64-low.c (initialize_low_arch): Call init func. > * linux-aarch64-tdesc-selftest.c: New file. > * linux-aarch64-tdesc.h (initialize_low_tdesc): New declaration. > Patch is good to me otherwise. -- Yao (é½å°§) ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-11-23 17:53 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-25 8:31 [PATCH 4/4] Add xml selftests Alan Hayward
2017-10-25 8:31 [PATCH 3/4] Use flexible target descriptors for aarch64 Alan Hayward
2017-10-30 13:00 ` Yao Qi
[not found] ` <A0F02AC1-8FF2-4022-B089-F68D2949CEB6@arm.com>
2017-11-06 10:06 ` Alan Hayward
2017-11-06 11:49 ` Yao Qi
2017-11-06 12:58 ` Alan Hayward
[not found] ` <B3614F09-2732-4B13-A45D-5EC111A8DC7E@arm.com>
2017-11-22 15:47 ` Yao Qi
2017-11-22 16:00 ` Yao Qi
[not found] ` <8E1DED12-D169-49CD-A9A3-388280EBDB60@arm.com>
2017-11-23 17:53 ` [PATCH 4/4] Add xml selftests Yao Qi
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox