public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 3/4] Use flexible target descriptors for aarch64
@ 2017-10-25  8:31 Alan Hayward
  2017-10-30 12:27 ` Yao Qi
  2017-10-30 13:00 ` Yao Qi
  0 siblings, 2 replies; 18+ 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] 18+ 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 12:27 ` Yao Qi
  2017-10-30 13:00 ` Yao Qi
  1 sibling, 0 replies; 18+ messages in thread
From: Yao Qi @ 2017-10-30 12:27 UTC (permalink / raw)
  To: Alan Hayward; +Cc: gdb-patches, nd

Alan Hayward <Alan.Hayward@arm.com> writes:

> 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

This file should be removed from the repo, and also removed from
features/Makefile:XMLTOC.

-- 
Yao (齐尧)

^ permalink raw reply	[flat|nested] 18+ 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 12:27 ` Yao Qi
@ 2017-10-30 13:00 ` Yao Qi
  2017-10-31 17:16   ` Alan Hayward
  1 sibling, 1 reply; 18+ 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] 18+ messages in thread

* Re: [PATCH 3/4] Use flexible target descriptors for aarch64
  2017-10-30 13:00 ` Yao Qi
@ 2017-10-31 17:16   ` Alan Hayward
  2017-11-06 10:06     ` Alan Hayward
  0 siblings, 1 reply; 18+ messages in thread
From: Alan Hayward @ 2017-10-31 17:16 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches, nd


> 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.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 3/4] Use flexible target descriptors for aarch64
  2017-10-31 17:16   ` Alan Hayward
@ 2017-11-06 10:06     ` Alan Hayward
  2017-11-06 11:49       ` Yao Qi
  0 siblings, 1 reply; 18+ messages in thread
From: Alan Hayward @ 2017-11-06 10:06 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches, nd


> 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);



^ permalink raw reply	[flat|nested] 18+ 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; 18+ 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] 18+ 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
  2017-11-20 15:38           ` Alan Hayward
  0 siblings, 1 reply; 18+ 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] 18+ messages in thread

* Re: [PATCH 3/4] Use flexible target descriptors for aarch64
  2017-11-06 12:58         ` Alan Hayward
@ 2017-11-20 15:38           ` Alan Hayward
  2017-11-22 15:47             ` Yao Qi
  0 siblings, 1 reply; 18+ messages in thread
From: Alan Hayward @ 2017-11-20 15:38 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches, nd


> On 6 Nov 2017, at 12:57, Alan Hayward <Alan.Hayward@arm.com> wrote:
> 
>> 
>> 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.

Alan.

Patch committed that allows osabi to be null.
This leaves this patch as below.

{
 Also, ping on  [PATCH 4/4] Add xml selftests
 https://sourceware.org/ml/gdb-patches/2017-10/msg00762.html
 because it hasn't been reviewed yet (due to the previous issues in this patch).
}

All four patches tested together on a --enable-targets=all build and aarch64
build with board files unix, native-gdbserver and unittest.exp.


2017-11-20  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 541a909edaaa1937294b1bb4375ecdd7de3d4c3c..61023dd3bb946c2bfbfbc1b88e986030107acd26 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"
@@ -3058,8 +3055,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..64f522dea9a5b863af8d1359c3a8f781af9526c6 100644
--- a/gdb/arch/aarch64.c
+++ b/gdb/arch/aarch64.c
@@ -15,16 +15,38 @@
    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 "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 b41d56106b8adeb07cf6e6e86b02f52bb2c078b3..bb9ac2093448523b212b5c93d271bfb5674f1647 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 \
@@ -206,7 +205,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 8518ef73389ce9d7bd526de75716bd21dbef7959..b1c3dd4441dbc784747cf245f359a034af88eb8c 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 3a5999c50de3ae97f84f648bb3ea08c845c7e88d..2a0940f211942d56072762f520f39dc5d2911c0d 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] 18+ messages in thread

* Re: [PATCH 3/4] Use flexible target descriptors for aarch64
  2017-11-20 15:38           ` Alan Hayward
@ 2017-11-22 15:47             ` Yao Qi
  2017-11-22 16:00               ` Yao Qi
  2017-11-23 16:19               ` [PATCH 3/4] Use flexible target descriptors for aarch64 Alan Hayward
  0 siblings, 2 replies; 18+ 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] 18+ 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
  2017-11-23 16:29                 ` [PATCH 4/4] Add xml selftests Alan Hayward
  2017-11-23 16:19               ` [PATCH 3/4] Use flexible target descriptors for aarch64 Alan Hayward
  1 sibling, 1 reply; 18+ 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] 18+ 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
@ 2017-11-23 16:19               ` Alan Hayward
  2017-11-23 17:50                 ` Yao Qi
  1 sibling, 1 reply; 18+ messages in thread
From: Alan Hayward @ 2017-11-23 16:19 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches, nd


> On 22 Nov 2017, at 15:47, Yao Qi <qiyaoltc@gmail.com> wrote:
> 
> 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.
> 

I had that because….


>> 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?
> 

…I had copied from here!

Files regenerated in patch below:


diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index 541a909edaaa1937294b1bb4375ecdd7de3d4c3c..61023dd3bb946c2bfbfbc1b88e986030107acd26 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"
@@ -3058,8 +3055,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..59f9330235e639d44920cab79b595e5266a935ff 100644
--- a/gdb/arch/aarch64.c
+++ b/gdb/arch/aarch64.c
@@ -17,14 +17,27 @@


 #include "aarch64.h"
+#include <stdlib.h>
+#include <string.h>

-extern struct target_desc *tdesc_aarch64;
+#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 b41d56106b8adeb07cf6e6e86b02f52bb2c078b3..bb9ac2093448523b212b5c93d271bfb5674f1647 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 \
@@ -206,7 +205,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..f3fad40133bc48760dd18db0cebbca52e5ba29e9
--- /dev/null
+++ b/gdb/features/aarch64-core.c
@@ -0,0 +1,66 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: aarch64-core.xml */
+
+#include "arch/tdesc.h"
+
+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..3672f2541ef604668300a27ed0cc58262eaf45ad
--- /dev/null
+++ b/gdb/features/aarch64-fpu.c
@@ -0,0 +1,132 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: aarch64-fpu.xml */
+
+#include "arch/tdesc.h"
+
+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 8518ef73389ce9d7bd526de75716bd21dbef7959..b1c3dd4441dbc784747cf245f359a034af88eb8c 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 3a5999c50de3ae97f84f648bb3ea08c845c7e88d..2a0940f211942d56072762f520f39dc5d2911c0d 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] 18+ messages in thread

* Re: [PATCH 4/4] Add xml selftests
  2017-11-22 16:00               ` Yao Qi
@ 2017-11-23 16:29                 ` Alan Hayward
  2017-11-23 17:53                   ` Yao Qi
  0 siblings, 1 reply; 18+ messages in thread
From: Alan Hayward @ 2017-11-23 16:29 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches, nd


> On 22 Nov 2017, at 16:00, Yao Qi <qiyaoltc@gmail.com> wrote:
> 
> 
> 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.
> 

Will do for future patches.

Reposting 4/4 (nothing has changed since original post, except for a rebase):


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-11-23  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 61023dd3bb946c2bfbfbc1b88e986030107acd26..6a0d4b744c89c39d5b62b7dcc12273fccb0c32e6 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -3069,6 +3069,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 0136ec326c916b0f35e49bf1500876e4cb80ce1f..3171b9791cafff80458a0648df58fed913f20d03 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -53,6 +53,7 @@ case "${target}" in
 			srv_regobj="arm-with-neon.o"
 			if $development; then
 			  srv_regobj="${srv_regobj} aarch64.o"
+			  srv_regobj="${srv_regobj} linux-aarch64-tdesc-selftest.o"
                         fi
 			srv_tgtobj="linux-aarch64-low.o aarch64-linux-hw-point.o"
 			srv_tgtobj="$srv_tgtobj linux-aarch32-low.o"
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 6d6731720c3b4123d16f179acc5087ffd2d9b454..2dd969f5f0abcbe5b7aee56ec1a9319a7755dc62 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 target_desc * aarch64_linux_read_description ();
+
+#if GDB_SELF_TEST
+void initialize_low_tdesc ();
+#endif

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 3/4] Use flexible target descriptors for aarch64
  2017-11-23 16:19               ` [PATCH 3/4] Use flexible target descriptors for aarch64 Alan Hayward
@ 2017-11-23 17:50                 ` Yao Qi
  2017-11-24 11:34                   ` Alan Hayward
  0 siblings, 1 reply; 18+ messages in thread
From: Yao Qi @ 2017-11-23 17:50 UTC (permalink / raw)
  To: Alan Hayward; +Cc: gdb-patches, nd

On 17-11-23 16:19:44, Alan Hayward wrote:
> 
> Files regenerated in patch below:

Commit log is the part to be reviewed in the patch review.  It is
better to post the patch together with the commit log, although the
commit log may not be changed.

> 
> 
> diff --git a/gdb/arch/aarch64.c b/gdb/arch/aarch64.c
> index 95d9906f10e660fda99d73a0d2a9d184fd3a7b52..59f9330235e639d44920cab79b595e5266a935ff 100644
> --- a/gdb/arch/aarch64.c
> +++ b/gdb/arch/aarch64.c
> @@ -17,14 +17,27 @@
> 
> 
>  #include "aarch64.h"
> +#include <stdlib.h>
> +#include <string.h>
> 

Is it necessary to include string.h?  Otherwise, patch is good to me.

-- 
Yao (齐尧)

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 4/4] Add xml selftests
  2017-11-23 16:29                 ` [PATCH 4/4] Add xml selftests Alan Hayward
@ 2017-11-23 17:53                   ` Yao Qi
  0 siblings, 0 replies; 18+ 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] 18+ messages in thread

* Re: [PATCH 3/4] Use flexible target descriptors for aarch64
  2017-11-23 17:50                 ` Yao Qi
@ 2017-11-24 11:34                   ` Alan Hayward
  2017-11-24 12:49                     ` Yao Qi
  0 siblings, 1 reply; 18+ messages in thread
From: Alan Hayward @ 2017-11-24 11:34 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches, nd


> On 23 Nov 2017, at 17:50, Yao Qi <qiyaoltc@gmail.com> wrote:
> 
> On 17-11-23 16:19:44, Alan Hayward wrote:
>> 
>> Files regenerated in patch below:
> 
> Commit log is the part to be reviewed in the patch review.  It is
> better to post the patch together with the commit log, although the
> commit log may not be changed.
> 
>> 
>> 
>> diff --git a/gdb/arch/aarch64.c b/gdb/arch/aarch64.c
>> index 95d9906f10e660fda99d73a0d2a9d184fd3a7b52..59f9330235e639d44920cab79b595e5266a935ff 100644
>> --- a/gdb/arch/aarch64.c
>> +++ b/gdb/arch/aarch64.c
>> @@ -17,14 +17,27 @@
>> 
>> 
>> #include "aarch64.h"
>> +#include <stdlib.h>
>> +#include <string.h>
>> 
> 
> Is it necessary to include string.h?  Otherwise, patch is good to me.
> 

Removed sting.h (I was sure I had a strcmp in here)
All 4 Patches pushed.

Alan.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH 3/4] Use flexible target descriptors for aarch64
  2017-11-24 11:34                   ` Alan Hayward
@ 2017-11-24 12:49                     ` Yao Qi
  2017-11-24 13:26                       ` [PATCH] fix aarch64-none-elf build error Alan Hayward
  0 siblings, 1 reply; 18+ messages in thread
From: Yao Qi @ 2017-11-24 12:49 UTC (permalink / raw)
  To: Alan Hayward; +Cc: gdb-patches, nd

On Fri, Nov 24, 2017 at 11:34 AM, Alan Hayward <Alan.Hayward@arm.com> wrote:
>
>
> All 4 Patches pushed.
>

They break aarch64-elf build.

aarch64-tdep.o: In function `aarch64_read_description()':
binutils-gdb/gdb/aarch64-tdep.c:2837: undefined reference to
`aarch64_create_target_description()'
binutils-gdb/gdb/aarch64-tdep.c:2837: undefined reference to
`aarch64_create_target_description()'
aarch64-tdep.o: In function `_initialize_aarch64_tdep()':
binutils-gdb/gdb/aarch64-tdep.c:3073: undefined reference to
`aarch64_create_target_description()'
collect2: error: ld returned 1 exit status

https://ci.linaro.org/job/tcwg-binutils/4251/

-- 
Yao (齐尧)

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH] fix aarch64-none-elf build error
  2017-11-24 12:49                     ` Yao Qi
@ 2017-11-24 13:26                       ` Alan Hayward
  2017-11-24 14:05                         ` Yao Qi
  0 siblings, 1 reply; 18+ messages in thread
From: Alan Hayward @ 2017-11-24 13:26 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches, nd


> On 24 Nov 2017, at 12:49, Yao Qi <qiyaoltc@gmail.com> wrote:
> 
> On Fri, Nov 24, 2017 at 11:34 AM, Alan Hayward <Alan.Hayward@arm.com> wrote:
>> 
>> 
>> All 4 Patches pushed.
>> 
> 
> They break aarch64-elf build.
> 
> aarch64-tdep.o: In function `aarch64_read_description()':
> binutils-gdb/gdb/aarch64-tdep.c:2837: undefined reference to
> `aarch64_create_target_description()'
> binutils-gdb/gdb/aarch64-tdep.c:2837: undefined reference to
> `aarch64_create_target_description()'
> aarch64-tdep.o: In function `_initialize_aarch64_tdep()':
> binutils-gdb/gdb/aarch64-tdep.c:3073: undefined reference to
> `aarch64_create_target_description()'
> collect2: error: ld returned 1 exit status
> 
> https://ci.linaro.org/job/tcwg-binutils/4251/
> 
> -- 
> Yao (齐尧)


This patch fixes the build error I introduced for aarch64-none-elf.
Apologies, I hadn’t run that build.

2017-11-24  Alan Hayward  <alan.hayward@arm.com>

	* configure.tgt: Add arch/aarch64.o


Alan.


diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index daec0a7bcd31944679b87fb4c3775dedc15dfd21..701ad6c48605fd72cb8afea40fa711c3b817133c 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -46,7 +46,7 @@ amd64_tobjs="amd64-tdep.o arch/amd64.o"

 case "${targ}" in
 aarch64*-*-*)
-	cpu_obs="aarch64-tdep.o arch/aarch64-insn.o";;
+	cpu_obs="aarch64-tdep.o arch/aarch64-insn.o arch/aarch64.o";;

 alpha*-*-*)
 	# Target: Alpha


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] fix aarch64-none-elf build error
  2017-11-24 13:26                       ` [PATCH] fix aarch64-none-elf build error Alan Hayward
@ 2017-11-24 14:05                         ` Yao Qi
  0 siblings, 0 replies; 18+ messages in thread
From: Yao Qi @ 2017-11-24 14:05 UTC (permalink / raw)
  To: Alan Hayward; +Cc: gdb-patches, nd

On Fri, Nov 24, 2017 at 1:26 PM, Alan Hayward <Alan.Hayward@arm.com> wrote:
>
> This patch fixes the build error I introduced for aarch64-none-elf.
> Apologies, I hadn’t run that build.
>
> 2017-11-24  Alan Hayward  <alan.hayward@arm.com>
>
>         * configure.tgt: Add arch/aarch64.o

Patch is good to me.

-- 
Yao (齐尧)

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2017-11-24 14:05 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-25  8:31 [PATCH 3/4] Use flexible target descriptors for aarch64 Alan Hayward
2017-10-30 12:27 ` Yao Qi
2017-10-30 13:00 ` Yao Qi
2017-10-31 17:16   ` Alan Hayward
2017-11-06 10:06     ` Alan Hayward
2017-11-06 11:49       ` Yao Qi
2017-11-06 12:58         ` Alan Hayward
2017-11-20 15:38           ` Alan Hayward
2017-11-22 15:47             ` Yao Qi
2017-11-22 16:00               ` Yao Qi
2017-11-23 16:29                 ` [PATCH 4/4] Add xml selftests Alan Hayward
2017-11-23 17:53                   ` Yao Qi
2017-11-23 16:19               ` [PATCH 3/4] Use flexible target descriptors for aarch64 Alan Hayward
2017-11-23 17:50                 ` Yao Qi
2017-11-24 11:34                   ` Alan Hayward
2017-11-24 12:49                     ` Yao Qi
2017-11-24 13:26                       ` [PATCH] fix aarch64-none-elf build error Alan Hayward
2017-11-24 14:05                         ` Yao Qi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).