public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 20/22] [GDBserver] Shorten srv_amd64_linux_xmlfiles
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (2 preceding siblings ...)
  2017-08-21 15:29 ` [PATCH 04/22] Let i386_target_description return tdesc_i386_mmx Yao Qi
@ 2017-08-21 15:29 ` Yao Qi
  2017-08-21 15:29 ` [PATCH 01/22] Use amd64_target_description to get tdesc_amd64 Yao Qi
                   ` (18 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches

GDBserver now is able to generate target descriptions from features, so
don't need to remember these target description files.

Note that it should be i386/amd64-avx-avx512-linux.xml instead of
i386/amd64-avx-avx512.xml in $srv_amd64_linux_xmlfiles.  This patch
removes it anyway.

gdb/gdbserver:

2017-07-10  Yao Qi  <yao.qi@linaro.org>

	* configure.srv (srv_amd64_linux_xmlfiles): Remove
	i386/amd64-XXX-linux from it.
---
 gdb/gdbserver/configure.srv | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index aca11c6..a2c5afe 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -43,7 +43,7 @@ srv_i386_64bit_xmlfiles="i386/64bit-core.xml i386/64bit-segments.xml i386/64bit-
 srv_i386_xmlfiles="i386/i386.xml $srv_i386_32bit_xmlfiles"
 srv_amd64_xmlfiles="i386/amd64.xml $srv_i386_64bit_xmlfiles"
 srv_i386_linux_xmlfiles="i386/32bit-linux.xml $srv_i386_32bit_xmlfiles"
-srv_amd64_linux_xmlfiles="i386/amd64-linux.xml i386/amd64-avx-linux.xml i386/amd64-avx-avx512.xml i386/amd64-avx-mpx-avx512-pku-linux.xml i386/64bit-linux.xml i386/amd64-mpx-linux.xml i386/amd64-avx-mpx-linux.xml i386/x32-linux.xml i386/x32-avx-linux.xml i386/x32-avx-avx512-linux.xml $srv_i386_64bit_xmlfiles"
+srv_amd64_linux_xmlfiles="i386/64bit-linux.xml $srv_i386_64bit_xmlfiles"
 
 
 # Linux object files.  This is so we don't have to repeat
-- 
1.9.1

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

* [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible
@ 2017-08-21 15:29 Yao Qi
  2017-08-21 15:29 ` [PATCH 15/22] Update comments in amd64_linux_core_read_description Yao Qi
                   ` (22 more replies)
  0 siblings, 23 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches

This patch series is to change GDB and GDBserver builtin target
descriptions more flexible, by removing pre-generated ones.  Nowadays,
GDB builtin target descriptions are created from initialize_tdesc_*
functions in features/*.c files, while GDBserver builtin target
descriptions are generated from regformats/*.dat files.  Instead,
with these patches applied, these builtin target descriptions can be
got lazily and dynamically.

This patch series changes both GDB and GDBserver to create target
description dynamically from features, instead of using pre-generated
target descriptions.  This patch series only convert x86 target
descriptions to demonstrate the usefulness of the change.

Once one target architecture switches to the new flexible target
description,

 - We only need xml feature files under gdb/features directory.  All
 existing target description xml files can be kept for tests.  Add
 new xml feature file if we want to support the new feature, but
 don't need to add new target description xml files.

 - All existing gdb/regformats/*.dat are not used, but kept for
 the tests.

This is the v4, and v3 can be found
https://sourceware.org/ml/gdb-patches/2017-07/msg00076.html
v3 changes only x86-linux target descriptions, while v4 changes the
whole x86 target descriptions.  The rest of patches aren't changed
since v3.  The first four patches are new in v4, which is about
getting target descriptions via {i386,amd64}_target_description.

I pushed my branch to users/qiyao/target-desc-4

*** BLURB HERE ***

Yao Qi (22):
  Use amd64_target_description to get tdesc_amd64
  Use i386_target_description to get tdesc_i386
  Return X86_XSTATE_SSE_MASK instead of 0 in i386fbsd_core_read_xcr0
  Let i386_target_description return tdesc_i386_mmx
  Adjust code generated by regformats/regdat.sh
  Use VEC for target_desc.reg_defs
  Return X86_TDESC_MMX in x86_get_ipa_tdesc_idx
  [GDBserver] Centralize tdesc for i386-linux
  [GDBserver] unit test to i386_tdesc
  Dynamically composite xml in reply to GDB
  Share i386-linux target description between GDB and GDBserver
  Remove features/i386/i386-*linux.c
  [GDBserver] Use pre-generated tdesc as test
  [GDBserver] Shorten srv_i386_linux_xmlfiles
  Update comments in amd64_linux_core_read_description
  Centralize amd64-linux target descriptions
  Lazily and dynamically create amd64-linux target descriptions
  Convert amd64-linux target descriptions
  [GDBserver] Use pre-generated amd64-linux tdesc as test
  [GDBserver] Shorten srv_amd64_linux_xmlfiles
  Remove features/i386/amd64-*linux.c and features/i386/x32-*linux.c
  Convert the rest x86 target descriptions

 gdb/Makefile.in                                    |   4 +
 gdb/amd64-darwin-tdep.c                            |   4 +-
 gdb/amd64-dicos-tdep.c                             |   4 +-
 gdb/amd64-fbsd-nat.c                               |   4 +-
 gdb/amd64-fbsd-tdep.c                              |   3 +-
 gdb/amd64-linux-tdep.c                             | 124 ++++----
 gdb/amd64-linux-tdep.h                             |   6 +
 gdb/amd64-nbsd-tdep.c                              |   4 +-
 gdb/amd64-obsd-tdep.c                              |   4 +-
 gdb/amd64-sol2-tdep.c                              |   4 +-
 gdb/amd64-tdep.c                                   |  66 +++--
 gdb/amd64-tdep.h                                   |   2 -
 gdb/amd64-windows-tdep.c                           |   4 +-
 gdb/arch/amd64.c                                   |  74 +++++
 gdb/arch/amd64.h                                   |  22 ++
 gdb/arch/i386.c                                    |  68 +++++
 gdb/arch/i386.h                                    |  21 ++
 gdb/arch/tdesc.h                                   |  92 ++++++
 gdb/configure.tgt                                  |  63 ++--
 gdb/features/Makefile                              |  40 +--
 gdb/features/i386/32bit-avx.c                      |   4 +-
 gdb/features/i386/32bit-avx512.c                   |   4 +-
 gdb/features/i386/32bit-core.c                     |   4 +-
 gdb/features/i386/32bit-linux.c                    |   4 +-
 gdb/features/i386/32bit-mpx.c                      |   4 +-
 gdb/features/i386/32bit-pkeys.c                    |   4 +-
 gdb/features/i386/32bit-sse.c                      |   4 +-
 gdb/features/i386/64bit-avx.c                      |  29 ++
 gdb/features/i386/64bit-avx512.c                   | 124 ++++++++
 gdb/features/i386/64bit-core.c                     |  74 +++++
 gdb/features/i386/64bit-linux.c                    |  15 +
 gdb/features/i386/64bit-mpx.c                      |  51 ++++
 gdb/features/i386/64bit-pkeys.c                    |  14 +
 gdb/features/i386/64bit-segments.c                 |  15 +
 gdb/features/i386/64bit-sse.c                      |  83 ++++++
 gdb/features/i386/amd64-avx-avx512-linux.c         | 288 ------------------
 gdb/features/i386/amd64-avx-avx512.c               | 283 ------------------
 gdb/features/i386/amd64-avx-linux.c                | 177 -----------
 gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c | 329 ---------------------
 gdb/features/i386/amd64-avx-mpx-avx512-pku.c       | 324 --------------------
 gdb/features/i386/amd64-avx-mpx-linux.c            | 215 --------------
 gdb/features/i386/amd64-avx-mpx.c                  | 210 -------------
 gdb/features/i386/amd64-avx.c                      | 172 -----------
 gdb/features/i386/amd64-linux.c                    | 159 ----------
 gdb/features/i386/amd64-mpx-linux.c                | 197 ------------
 gdb/features/i386/amd64-mpx.c                      | 192 ------------
 gdb/features/i386/amd64.c                          | 154 ----------
 gdb/features/i386/i386-avx-avx512-linux.c          | 170 -----------
 gdb/features/i386/i386-avx-avx512.c                | 165 -----------
 gdb/features/i386/i386-avx-linux.c                 | 149 ----------
 gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c  | 211 -------------
 gdb/features/i386/i386-avx-mpx-avx512-pku.c        | 206 -------------
 gdb/features/i386/i386-avx-mpx-linux.c             | 187 ------------
 gdb/features/i386/i386-avx-mpx.c                   | 182 ------------
 gdb/features/i386/i386-avx.c                       | 144 ---------
 gdb/features/i386/i386-linux.c                     | 139 ---------
 gdb/features/i386/i386-mmx-linux.c                 |  78 -----
 gdb/features/i386/i386-mmx.c                       |  73 -----
 gdb/features/i386/i386-mpx-linux.c                 | 177 -----------
 gdb/features/i386/i386-mpx.c                       | 172 -----------
 gdb/features/i386/i386.c                           | 134 ---------
 gdb/features/i386/x32-avx-avx512-linux.c           | 288 ------------------
 gdb/features/i386/x32-avx-linux.c                  | 177 -----------
 gdb/features/i386/x32-core.c                       |  74 +++++
 gdb/features/i386/x32-linux.c                      | 159 ----------
 gdb/gdbserver/Makefile.in                          |  13 +
 gdb/gdbserver/configure.srv                        |  55 ++--
 gdb/gdbserver/linux-amd64-ipa.c                    |  56 ++--
 gdb/gdbserver/linux-i386-ipa.c                     |  39 +--
 gdb/gdbserver/linux-x86-low.c                      | 146 ++-------
 gdb/gdbserver/linux-x86-tdesc-selftest.c           | 183 ++++++++++++
 gdb/gdbserver/linux-x86-tdesc.c                    | 173 +++++++++++
 gdb/gdbserver/linux-x86-tdesc.h                    |  78 +----
 gdb/gdbserver/lynx-i386-low.c                      |   9 +-
 gdb/gdbserver/nto-x86-low.c                        |  11 +-
 gdb/gdbserver/regcache.c                           |  34 ++-
 gdb/gdbserver/server.c                             |  10 +-
 gdb/gdbserver/tdesc.c                              | 186 +++++++++++-
 gdb/gdbserver/tdesc.h                              | 106 ++++++-
 gdb/gdbserver/win32-i386-low.c                     |  22 +-
 gdb/i386-fbsd-nat.c                                |  10 +-
 gdb/i386-fbsd-tdep.c                               |   4 +-
 gdb/i386-go32-tdep.c                               |   3 +-
 gdb/i386-linux-tdep.c                              |  37 +--
 gdb/i386-tdep.c                                    |  73 +++--
 gdb/i386-tdep.h                                    |   3 -
 gdb/regformats/regdat.sh                           |  26 +-
 gdb/regformats/regdef.h                            |  12 +
 gdb/target-descriptions.c                          |  62 ++--
 gdb/target-descriptions.h                          |  37 +--
 gdb/x86-linux-nat.c                                |  35 +--
 91 files changed, 1858 insertions(+), 6196 deletions(-)
 create mode 100644 gdb/arch/amd64.c
 create mode 100644 gdb/arch/amd64.h
 create mode 100644 gdb/arch/i386.c
 create mode 100644 gdb/arch/i386.h
 create mode 100644 gdb/arch/tdesc.h
 create mode 100644 gdb/features/i386/64bit-avx.c
 create mode 100644 gdb/features/i386/64bit-avx512.c
 create mode 100644 gdb/features/i386/64bit-core.c
 create mode 100644 gdb/features/i386/64bit-linux.c
 create mode 100644 gdb/features/i386/64bit-mpx.c
 create mode 100644 gdb/features/i386/64bit-pkeys.c
 create mode 100644 gdb/features/i386/64bit-segments.c
 create mode 100644 gdb/features/i386/64bit-sse.c
 delete mode 100644 gdb/features/i386/amd64-avx-avx512-linux.c
 delete mode 100644 gdb/features/i386/amd64-avx-avx512.c
 delete mode 100644 gdb/features/i386/amd64-avx-linux.c
 delete mode 100644 gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c
 delete mode 100644 gdb/features/i386/amd64-avx-mpx-avx512-pku.c
 delete mode 100644 gdb/features/i386/amd64-avx-mpx-linux.c
 delete mode 100644 gdb/features/i386/amd64-avx-mpx.c
 delete mode 100644 gdb/features/i386/amd64-avx.c
 delete mode 100644 gdb/features/i386/amd64-linux.c
 delete mode 100644 gdb/features/i386/amd64-mpx-linux.c
 delete mode 100644 gdb/features/i386/amd64-mpx.c
 delete mode 100644 gdb/features/i386/amd64.c
 delete mode 100644 gdb/features/i386/i386-avx-avx512-linux.c
 delete mode 100644 gdb/features/i386/i386-avx-avx512.c
 delete mode 100644 gdb/features/i386/i386-avx-linux.c
 delete mode 100644 gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c
 delete mode 100644 gdb/features/i386/i386-avx-mpx-avx512-pku.c
 delete mode 100644 gdb/features/i386/i386-avx-mpx-linux.c
 delete mode 100644 gdb/features/i386/i386-avx-mpx.c
 delete mode 100644 gdb/features/i386/i386-avx.c
 delete mode 100644 gdb/features/i386/i386-linux.c
 delete mode 100644 gdb/features/i386/i386-mmx-linux.c
 delete mode 100644 gdb/features/i386/i386-mmx.c
 delete mode 100644 gdb/features/i386/i386-mpx-linux.c
 delete mode 100644 gdb/features/i386/i386-mpx.c
 delete mode 100644 gdb/features/i386/i386.c
 delete mode 100644 gdb/features/i386/x32-avx-avx512-linux.c
 delete mode 100644 gdb/features/i386/x32-avx-linux.c
 create mode 100644 gdb/features/i386/x32-core.c
 delete mode 100644 gdb/features/i386/x32-linux.c
 create mode 100644 gdb/gdbserver/linux-x86-tdesc-selftest.c
 create mode 100644 gdb/gdbserver/linux-x86-tdesc.c

-- 
1.9.1

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

* [PATCH 04/22] Let i386_target_description return tdesc_i386_mmx
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
  2017-08-21 15:29 ` [PATCH 15/22] Update comments in amd64_linux_core_read_description Yao Qi
  2017-08-21 15:29 ` [PATCH 03/22] Return X86_XSTATE_SSE_MASK instead of 0 in i386fbsd_core_read_xcr0 Yao Qi
@ 2017-08-21 15:29 ` Yao Qi
  2017-08-21 15:29 ` [PATCH 20/22] [GDBserver] Shorten srv_amd64_linux_xmlfiles Yao Qi
                   ` (19 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches; +Cc: eliz

This patch remove the usage of tdesc_i386_mmx in i386-go32-tdep.c, and use
i386_target_description to get it instead.

gdb:

2017-08-21  Yao Qi  <yao.qi@linaro.org>

	* i386-go32-tdep.c: Include x86-xstate.h.
	(i386_go32_init_abi): Call i386_target_description.
	* i386-tdep.c (i386_target_description): Return tdesc_i386_mmx
	if xcr0 is X86_XSTATE_X87_MASK.
	* i386-tdep.h (tdesc_i386): Remove the declaration.
	(tdesc_i386_mmx): Likewise.
---
 gdb/i386-go32-tdep.c | 3 ++-
 gdb/i386-tdep.c      | 4 ++++
 gdb/i386-tdep.h      | 3 ---
 3 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/gdb/i386-go32-tdep.c b/gdb/i386-go32-tdep.c
index 5bd4857..6778e52 100644
--- a/gdb/i386-go32-tdep.c
+++ b/gdb/i386-go32-tdep.c
@@ -19,6 +19,7 @@
 
 #include "defs.h"
 #include "i386-tdep.h"
+#include "x86-xstate.h"
 #include "target-descriptions.h"
 #include "osabi.h"
 
@@ -34,7 +35,7 @@ i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 
   /* DJGPP does not support the SSE registers.  */
   if (!tdesc_has_registers (info.target_desc))
-    tdep->tdesc = tdesc_i386_mmx;
+    tdep->tdesc = i386_target_description (X86_XSTATE_X87_MASK);
 
   /* Native compiler is GCC, which uses the SVR4 register numbering
      even in COFF and STABS.  See the comment in i386_gdbarch_init,
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index 9d0dd3d..d162e92 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -8730,6 +8730,10 @@ i386_target_description (uint64_t xcr0)
       return tdesc_i386_mpx;
     case X86_XSTATE_AVX_MASK:
       return tdesc_i386_avx;
+    case X86_XSTATE_SSE_MASK:
+      return tdesc_i386;
+    case X86_XSTATE_X87_MASK:
+      return tdesc_i386_mmx;
     default:
       return tdesc_i386;
     }
diff --git a/gdb/i386-tdep.h b/gdb/i386-tdep.h
index 1ce89fc..99b89e7 100644
--- a/gdb/i386-tdep.h
+++ b/gdb/i386-tdep.h
@@ -339,9 +339,6 @@ enum record_i386_regnum
 /* Size of the largest register.  */
 #define I386_MAX_REGISTER_SIZE	64
 
-extern struct target_desc *tdesc_i386;
-extern struct target_desc *tdesc_i386_mmx;
-
 /* Types for i386-specific registers.  */
 extern struct type *i387_ext_type (struct gdbarch *gdbarch);
 
-- 
1.9.1

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

* [PATCH 05/22] Adjust code generated by regformats/regdat.sh
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (9 preceding siblings ...)
  2017-08-21 15:29 ` [PATCH 08/22] [GDBserver] Centralize tdesc for i386-linux Yao Qi
@ 2017-08-21 15:29 ` Yao Qi
  2017-08-21 15:30 ` [PATCH 18/22] Convert amd64-linux target descriptions Yao Qi
                   ` (11 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches

regformats/regdat.sh generate some *-generated.c files when GDBserver
is built.  Each .c file has some static variables, which are only used
within function init_registers_XXX, like this,

static struct reg regs_i386_linux[] = {
  { "eax", 0, 32 },
  { "ecx", 32, 32 },
  ...
};

static const char *expedite_regs_i386_linux[] = { "ebp", "esp", "eip", 0 };
static const char *xmltarget_i386_linux = "i386-linux.xml";

void
init_registers_i386_linux (void)
{
  ...
}

This patch moves these static variables' definitions to function
init_registers_XXX, so the generated files look like this,

void
init_registers_i386_linux (void)
{
  static struct target_desc tdesc_i386_linux_s;
  struct target_desc *result = &tdesc_i386_linux_s;
static struct reg regs_i386_linux[] = {
  ...
};

static const char *expedite_regs_i386_linux[] = { "ebp", "esp", "eip", 0 };
static const char *xmltarget_i386_linux = "i386-linux.xml";

  ...
}

We want GDBserver create target descriptions dynamically in each
init_registers_XXXX functions, so this patch moves all the related code
into function init_registers_XXXX, so that the following patch can easily
change function init_registers_XXXX to create target description
dynamically, rather than using current pre-generated array.

gdb:

2017-06-06  Yao Qi  <yao.qi@linaro.org>

	* regformats/regdat.sh: Adjust code order.
---
 gdb/regformats/regdat.sh | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/gdb/regformats/regdat.sh b/gdb/regformats/regdat.sh
index 651f703..2c764cd 100755
--- a/gdb/regformats/regdat.sh
+++ b/gdb/regformats/regdat.sh
@@ -123,6 +123,15 @@ while do_read
 do
   if test "${type}" = "name"; then
     name="${entry}"
+
+    echo "const struct target_desc *tdesc_${name};"
+    echo ""
+    echo "void"
+    echo "init_registers_${name} (void)"
+    echo "{"
+    echo "  static struct target_desc tdesc_${name}_s;"
+    echo "  struct target_desc *result = &tdesc_${name}_s;"
+
     echo "static struct reg regs_${name}[] = {"
     continue
   elif test "${type}" = "xmltarget"; then
@@ -169,14 +178,6 @@ fi
 echo
 
 cat <<EOF
-const struct target_desc *tdesc_${name};
-
-void
-init_registers_${name} (void)
-{
-  static struct target_desc tdesc_${name}_s;
-  struct target_desc *result = &tdesc_${name}_s;
-
   result->reg_defs = regs_${name};
   result->num_registers = sizeof (regs_${name}) / sizeof (regs_${name}[0]);
 
-- 
1.9.1

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

* [PATCH 16/22] Centralize amd64-linux target descriptions
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (5 preceding siblings ...)
  2017-08-21 15:29 ` [PATCH 11/22] Share i386-linux target description between GDB and GDBserver Yao Qi
@ 2017-08-21 15:29 ` Yao Qi
  2017-08-21 15:29 ` [PATCH 09/22] [GDBserver] unit test to i386_tdesc Yao Qi
                   ` (15 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches

This patch adds a new function amd64_linux_read_description, which
creates amd64-linux target descriptions according to its two
arguments, xcr0 and is_x32.

gdb:

2017-06-07  Yao Qi  <yao.qi@linaro.org>

	* amd64-linux-tdep.c (amd64_linux_read_description): New
	function.
	(amd64_linux_core_read_description): Call
	amd64_linux_read_description.
	(amd64_linux_init_abi): Likewise.
	(amd64_x32_linux_init_abi): Likewise.
	* amd64-linux-tdep.h (amd64_linux_read_description): Declare.
	* x86-linux-nat.c (x86_linux_read_description): Call
	amd64_linux_read_description.
---
 gdb/amd64-linux-tdep.c | 46 ++++++++++++++++++++++++++++------------------
 gdb/amd64-linux-tdep.h |  6 ++++++
 gdb/x86-linux-nat.c    | 35 +----------------------------------
 3 files changed, 35 insertions(+), 52 deletions(-)

diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index 54c2eb9..85efbef 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -1575,54 +1575,61 @@ amd64_linux_record_signal (struct gdbarch *gdbarch,
   return 0;
 }
 
-/* Get Linux/x86 target description from core dump.  */
-
-static const struct target_desc *
-amd64_linux_core_read_description (struct gdbarch *gdbarch,
-				  struct target_ops *target,
-				  bfd *abfd)
+const target_desc *
+amd64_linux_read_description (uint64_t xcr0_features_bit, bool is_x32)
 {
-  /* Linux/x86-64.  */
-  uint64_t xcr0 = i386_linux_core_read_xcr0 (abfd);
-
-  switch (xcr0 & X86_XSTATE_ALL_MASK)
+  switch (xcr0_features_bit)
     {
     case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK:
-      if (gdbarch_ptr_bit (gdbarch) == 32)
+      if (is_x32)
 	/* No MPX, PKU on x32, fallback to AVX-AVX512.  */
 	return tdesc_x32_avx_avx512_linux;
       else
 	return tdesc_amd64_avx_mpx_avx512_pku_linux;
     case X86_XSTATE_AVX_AVX512_MASK:
-      if (gdbarch_ptr_bit (gdbarch) == 32)
+      if (is_x32)
 	return tdesc_x32_avx_avx512_linux;
       else
 	return tdesc_amd64_avx_avx512_linux;
     case X86_XSTATE_MPX_MASK:
-      if (gdbarch_ptr_bit (gdbarch) == 32)
+      if (is_x32)
 	/* No MPX on x32, fallback to AVX.  */
 	return tdesc_x32_avx_linux;
       else
 	return tdesc_amd64_mpx_linux;
     case X86_XSTATE_AVX_MPX_MASK:
-      if (gdbarch_ptr_bit (gdbarch) == 32)
+      if (is_x32)
 	/* No MPX on x32, fallback to AVX.  */
 	return tdesc_x32_avx_linux;
       else
 	return tdesc_amd64_avx_mpx_linux;
     case X86_XSTATE_AVX_MASK:
-      if (gdbarch_ptr_bit (gdbarch) == 32)
+      if (is_x32)
 	return tdesc_x32_avx_linux;
       else
 	return tdesc_amd64_avx_linux;
     default:
-      if (gdbarch_ptr_bit (gdbarch) == 32)
+      if (is_x32)
 	return tdesc_x32_linux;
       else
 	return tdesc_amd64_linux;
     }
 }
 
+/* Get Linux/x86 target description from core dump.  */
+
+static const struct target_desc *
+amd64_linux_core_read_description (struct gdbarch *gdbarch,
+				  struct target_ops *target,
+				  bfd *abfd)
+{
+  /* Linux/x86-64.  */
+  uint64_t xcr0 = i386_linux_core_read_xcr0 (abfd);
+
+  return amd64_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK,
+				       gdbarch_ptr_bit (gdbarch) == 32);
+}
+
 /* Similar to amd64_supply_fpregset, but use XSAVE extended state.  */
 
 static void
@@ -1873,7 +1880,8 @@ amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
   tdep->sizeof_gregset = 27 * 8;
 
-  amd64_init_abi (info, gdbarch, tdesc_amd64_linux);
+  amd64_init_abi (info, gdbarch,
+		  amd64_linux_read_description (X86_XSTATE_SSE_MASK, false));
 
   const target_desc *tdesc = tdep->tdesc;
 
@@ -2086,7 +2094,9 @@ amd64_x32_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   tdep->gregset_num_regs = ARRAY_SIZE (amd64_linux_gregset_reg_offset);
   tdep->sizeof_gregset = 27 * 8;
 
-  amd64_x32_init_abi (info, gdbarch, tdesc_x32_linux);
+  amd64_x32_init_abi (info, gdbarch,
+		      amd64_linux_read_description (X86_XSTATE_SSE_MASK,
+						    true));
 
   /* Reserve a number for orig_rax.  */
   set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
diff --git a/gdb/amd64-linux-tdep.h b/gdb/amd64-linux-tdep.h
index 7453408..ab134a4 100644
--- a/gdb/amd64-linux-tdep.h
+++ b/gdb/amd64-linux-tdep.h
@@ -43,6 +43,12 @@ extern struct target_desc *tdesc_x32_linux;
 extern struct target_desc *tdesc_x32_avx_linux;
 extern struct target_desc *tdesc_x32_avx_avx512_linux;
 
+/* Return the right amd64-linux target descriptions according to
+   XCR0_FEATURES_BIT and IS_X32.  */
+
+const target_desc *amd64_linux_read_description (uint64_t xcr0_features_bit,
+						 bool is_x32);
+
 /* Enum that defines the syscall identifiers for amd64 linux.
    Used for process record/replay, these will be translated into
    a gdb-canonical set of syscall ids in linux-record.c.  */
diff --git a/gdb/x86-linux-nat.c b/gdb/x86-linux-nat.c
index 2c4afb1..4611527 100644
--- a/gdb/x86-linux-nat.c
+++ b/gdb/x86-linux-nat.c
@@ -192,40 +192,7 @@ x86_linux_read_description (struct target_ops *ops)
   if (is_64bit)
     {
 #ifdef __x86_64__
-      switch (xcr0_features_bits)
-	{
-	case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK:
-	  if (is_x32)
-	    /* No MPX, PKU on x32, fall back to AVX-AVX512.  */
-	    return tdesc_x32_avx_avx512_linux;
-	  else
-	    return tdesc_amd64_avx_mpx_avx512_pku_linux;
-	case X86_XSTATE_AVX_AVX512_MASK:
-	  if (is_x32)
-	    return tdesc_x32_avx_avx512_linux;
-	  else
-	    return tdesc_amd64_avx_avx512_linux;
-	case X86_XSTATE_MPX_MASK:
-	  if (is_x32)
-	    return tdesc_x32_avx_linux; /* No MPX on x32 using AVX.  */
-	  else
-	    return tdesc_amd64_mpx_linux;
-	case X86_XSTATE_AVX_MPX_MASK:
-	  if (is_x32)
-	    return tdesc_x32_avx_linux; /* No MPX on x32 using AVX.  */
-	  else
-	    return tdesc_amd64_avx_mpx_linux;
-	case X86_XSTATE_AVX_MASK:
-	  if (is_x32)
-	    return tdesc_x32_avx_linux;
-	  else
-	    return tdesc_amd64_avx_linux;
-	default:
-	  if (is_x32)
-	    return tdesc_x32_linux;
-	  else
-	    return tdesc_amd64_linux;
-	}
+      return amd64_linux_read_description (xcr0_features_bits, is_x32);
 #endif
     }
   else
-- 
1.9.1

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

* [PATCH 11/22] Share i386-linux target description between GDB and GDBserver
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (4 preceding siblings ...)
  2017-08-21 15:29 ` [PATCH 01/22] Use amd64_target_description to get tdesc_amd64 Yao Qi
@ 2017-08-21 15:29 ` Yao Qi
  2017-08-21 15:29 ` [PATCH 16/22] Centralize amd64-linux target descriptions Yao Qi
                   ` (16 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches

The code on creating i386-linux target descriptions are quite similar
between GDB and GDBserver, so this patch moves them into a shared file
arch/i386.c.  I didn't name it as i386-linux.c, because I want to reuse it
to create other i386 non-linux target descriptions later.

gdb:

2017-07-05  Yao Qi  <yao.qi@linaro.org>

	* Makefile.in (ALL_TARGET_OBS): Add i386.o.
	(SFILES): Add arch/i386.c.
	(HFILES_NO_SRCDIR): Add arch/i386.h.
	* arch/i386.c: New file.
	* arch/i386.h: New file.
	* arch/tdesc.h (allocate_target_description): Declare.
	(set_tdesc_architecture): Declare.
	(set_tdesc_osabi): Declare.
	* configure.tgt (i[34567]86-*-linux*): Add i386.o.
	* i386-linux-tdep.c: Don't include ../features/i386/32bit-XXX.c.
	include arch/i386.h.
	(i386_linux_read_description): Remove code and call
	i386_create_target_description.
	(set_tdesc_architecture): New function.
	(set_tdesc_osabi): New function.
	* target-descriptions.h (allocate_target_description): Remove.

gdb/gdbserver:

2017-07-05  Yao Qi  <yao.qi@linaro.org>

	* Makefile.in (arch-i386.o): New rule.
	* configure.srv (i[34567]86-*-linux*): Add arch-i386.o.
	(x86_64-*-linux*): Likewise.
	* linux-x86-tdesc.c: Don't include ../features/i386/32bit-XXX.c,
	include arch/i386.h.
	(i386_linux_read_description): Remove code and call
	i386_create_target_description.
	* tdesc.c (allocate_target_description): New function.
	* tdesc.h (set_tdesc_architecture): Remove declaration.
	(set_tdesc_osabi): Likewise.
---
 gdb/Makefile.in                 |  3 ++
 gdb/arch/i386.c                 | 66 +++++++++++++++++++++++++++++++++++++++++
 gdb/arch/i386.h                 | 21 +++++++++++++
 gdb/arch/tdesc.h                | 10 +++++++
 gdb/configure.tgt               |  5 ++--
 gdb/gdbserver/Makefile.in       |  8 +++++
 gdb/gdbserver/configure.srv     |  3 ++
 gdb/gdbserver/linux-x86-tdesc.c | 39 ++----------------------
 gdb/gdbserver/tdesc.c           | 10 +++++++
 gdb/gdbserver/tdesc.h           |  4 ---
 gdb/i386-linux-tdep.c           | 36 ++--------------------
 gdb/target-descriptions.c       | 17 +++++++++++
 gdb/target-descriptions.h       |  1 -
 13 files changed, 146 insertions(+), 77 deletions(-)
 create mode 100644 gdb/arch/i386.c
 create mode 100644 gdb/arch/i386.h

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 85de646..40ae421 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -812,6 +812,7 @@ ALL_TARGET_OBS = \
 	hppa-nbsd-tdep.o \
 	hppa-obsd-tdep.o \
 	hppa-tdep.o \
+	i386.o \
 	i386-bsd-tdep.o \
 	i386-cygwin-tdep.o \
 	i386-darwin-tdep.o \
@@ -1030,6 +1031,7 @@ SFILES = \
 	agent.c \
 	annotate.c \
 	arch-utils.c \
+	arch/i386.c \
 	auto-load.c \
 	auxv.c \
 	ax-gdb.c \
@@ -1500,6 +1502,7 @@ HFILES_NO_SRCDIR = \
 	xtensa-tdep.h \
 	arch/aarch64-insn.h \
 	arch/arm.h \
+	arch/i386.h \
 	cli/cli-cmds.h \
 	cli/cli-decode.h \
 	cli/cli-script.h \
diff --git a/gdb/arch/i386.c b/gdb/arch/i386.c
new file mode 100644
index 0000000..60cf63b
--- /dev/null
+++ b/gdb/arch/i386.c
@@ -0,0 +1,66 @@
+/* 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 "i386.h"
+#include "tdesc.h"
+#include "x86-xstate.h"
+#include <stdlib.h>
+
+#include "../features/i386/32bit-core.c"
+#include "../features/i386/32bit-linux.c"
+#include "../features/i386/32bit-sse.c"
+#include "../features/i386/32bit-avx.c"
+#include "../features/i386/32bit-avx512.c"
+#include "../features/i386/32bit-mpx.c"
+#include "../features/i386/32bit-pkeys.c"
+
+/* Create i386 target descriptions according to XCR0.  */
+
+target_desc *
+i386_create_target_description (uint64_t xcr0)
+{
+  target_desc *tdesc = allocate_target_description ();
+
+#ifndef IN_PROCESS_AGENT
+  set_tdesc_architecture (tdesc, "i386");
+  set_tdesc_osabi (tdesc, "GNU/Linux");
+#endif
+
+  long regnum = 0;
+
+  if (xcr0 & X86_XSTATE_X87)
+    regnum = create_feature_i386_32bit_core (tdesc, regnum);
+
+  if (xcr0 & X86_XSTATE_SSE)
+    regnum = create_feature_i386_32bit_sse (tdesc, regnum);
+
+  regnum = create_feature_i386_32bit_linux (tdesc, regnum);
+
+  if (xcr0 & X86_XSTATE_AVX)
+    regnum = create_feature_i386_32bit_avx (tdesc, regnum);
+
+  if (xcr0 & X86_XSTATE_MPX)
+    regnum = create_feature_i386_32bit_mpx (tdesc, regnum);
+
+  if (xcr0 & X86_XSTATE_AVX512)
+    regnum = create_feature_i386_32bit_avx512 (tdesc, regnum);
+
+  if (xcr0 & X86_XSTATE_PKRU)
+    regnum = create_feature_i386_32bit_pkeys (tdesc, regnum);
+
+  return tdesc;
+}
diff --git a/gdb/arch/i386.h b/gdb/arch/i386.h
new file mode 100644
index 0000000..0163372
--- /dev/null
+++ b/gdb/arch/i386.h
@@ -0,0 +1,21 @@
+/* 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 "tdesc.h"
+#include <stdint.h>
+
+target_desc *i386_create_target_description (uint64_t xcr0);
diff --git a/gdb/arch/tdesc.h b/gdb/arch/tdesc.h
index bf50e24..78bb0fb 100644
--- a/gdb/arch/tdesc.h
+++ b/gdb/arch/tdesc.h
@@ -23,6 +23,16 @@ struct tdesc_type;
 struct tdesc_reg;
 struct target_desc;
 
+/* Allocate a new target_desc.  */
+target_desc *allocate_target_description (void);
+
+/* Set TARGET_DESC's architecture by NAME.  */
+void set_tdesc_architecture (target_desc *target_desc,
+			     const char *name);
+
+/* Set TARGET_DESC's osabi by NAME.  */
+void set_tdesc_osabi (target_desc *target_desc, const char *name);
+
 /* Return the type associated with ID in the context of FEATURE, or
    NULL if none.  */
 struct tdesc_type *tdesc_named_type (const struct tdesc_feature *feature,
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index fdcb7b1..1f263515 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -228,7 +228,8 @@ i[34567]86-*-solaris*)
 	;;
 i[34567]86-*-linux*)
 	# Target: Intel 386 running GNU/Linux
-	gdb_target_obs="i386-tdep.o i386-linux-tdep.o glibc-tdep.o i387-tdep.o \
+	gdb_target_obs="i386-tdep.o i386.o i386-linux-tdep.o \
+			glibc-tdep.o i387-tdep.o \
 			solib-svr4.o symfile-mem.o \
 			linux-tdep.o linux-record.o"
 	if test "x$enable_64_bit_bfd" = "xyes"; then
@@ -678,7 +679,7 @@ x86_64-*-elf*)
 x86_64-*-linux*)
 	# Target: GNU/Linux x86-64
 	gdb_target_obs="amd64-tdep.o amd64-linux-tdep.o i386-tdep.o \
-			i387-tdep.o i386-linux-tdep.o glibc-tdep.o \
+			i387-tdep.o i386.o i386-linux-tdep.o glibc-tdep.o \
 			solib-svr4.o symfile-mem.o linux-tdep.o linux-record.o"
 	build_gdbserver=yes
 	;;
diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index 9b5982b..5f9b2fe 100644
--- a/gdb/gdbserver/Makefile.in
+++ b/gdb/gdbserver/Makefile.in
@@ -528,6 +528,10 @@ ax.o: ax.c
 	$(COMPILE) $(WARN_CFLAGS_NO_FORMAT) $<
 	$(POSTCOMPILE)
 
+arch-i386.o: ../arch/i386.c
+	$(COMPILE) $<
+	$(POSTCOMPILE)
+
 # Rules for objects that go in the in-process agent.
 
 %-ipa.o: %-generated.c
@@ -553,6 +557,10 @@ ax.o: ax.c
 	$(IPAGENT_COMPILE) $<
 	$(POSTCOMPILE)
 
+%-ipa.o: ../arch/%.c
+	$(IPAGENT_COMPILE) $<
+	$(POSTCOMPILE)
+
 # Rules for objects that go in the gdbserver binary.
 
 %.o: %-generated.c
diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index 1a27012..876098b 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -122,6 +122,7 @@ case "${target}" in
 			    srv_xmlfiles="${srv_xmlfiles} $srv_amd64_linux_xmlfiles"
 			    srv_tgtobj="amd64-linux-siginfo.o"
 			fi
+			srv_tgtobj="${srv_tgtobj} arch-i386.o"
 			srv_tgtobj="${srv_tgtobj} $srv_linux_obj linux-x86-low.o x86-low.o x86-dregs.o i387-fp.o"
 			srv_tgtobj="${srv_tgtobj} linux-x86-tdesc.o"
 			srv_tgtobj="${srv_tgtobj} linux-btrace.o x86-linux.o"
@@ -131,6 +132,7 @@ case "${target}" in
 			srv_linux_thread_db=yes
 			srv_linux_btrace=yes
 			ipa_obj="${ipa_i386_linux_regobj} linux-i386-ipa.o linux-x86-tdesc-ipa.o"
+			ipa_obj="${ipa_obj} i386-ipa.o"
 			;;
   i[34567]86-*-lynxos*)	srv_regobj="i386.o"
 			srv_tgtobj="lynx-low.o lynx-i386-low.o fork-child.o fork-inferior.o"
@@ -358,6 +360,7 @@ case "${target}" in
 			;;
   x86_64-*-linux*)	srv_regobj="$srv_amd64_linux_regobj $srv_i386_linux_regobj"
 			srv_tgtobj="$srv_linux_obj linux-x86-low.o x86-low.o x86-dregs.o i387-fp.o"
+			srv_tgtobj="${srv_tgtobj} arch-i386.o"
 			srv_tgtobj="${srv_tgtobj} linux-x86-tdesc.o"
 			srv_tgtobj="${srv_tgtobj} linux-btrace.o x86-linux.o"
 			srv_tgtobj="${srv_tgtobj} x86-linux-dregs.o"
diff --git a/gdb/gdbserver/linux-x86-tdesc.c b/gdb/gdbserver/linux-x86-tdesc.c
index 3f63d8e..548e780 100644
--- a/gdb/gdbserver/linux-x86-tdesc.c
+++ b/gdb/gdbserver/linux-x86-tdesc.c
@@ -20,16 +20,10 @@
 #include "server.h"
 #include "tdesc.h"
 #include "linux-x86-tdesc.h"
-#include "x86-xstate.h"
+#include "arch/i386.h"
+#include "common/x86-xstate.h"
 
 #if defined __i386__ || !defined IN_PROCESS_AGENT
-#include "../features/i386/32bit-core.c"
-#include "../features/i386/32bit-linux.c"
-#include "../features/i386/32bit-sse.c"
-#include "../features/i386/32bit-avx.c"
-#include "../features/i386/32bit-avx512.c"
-#include "../features/i386/32bit-mpx.c"
-#include "../features/i386/32bit-pkeys.c"
 
 /* Defined in auto-generated file i386-linux.c.  */
 void init_registers_i386_linux (void);
@@ -142,34 +136,7 @@ i386_linux_read_description (uint64_t xcr0)
 
   if (*tdesc == NULL)
     {
-      *tdesc = new target_desc ();
-
-#ifndef IN_PROCESS_AGENT
-      set_tdesc_architecture (*tdesc, "i386");
-      set_tdesc_osabi (*tdesc, "GNU/Linux");
-#endif
-
-      long regnum = 0;
-
-      if (xcr0 & X86_XSTATE_X87)
-	regnum = create_feature_i386_32bit_core (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_SSE)
-	regnum = create_feature_i386_32bit_sse (*tdesc, regnum);
-
-      regnum = create_feature_i386_32bit_linux (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_AVX)
-	regnum = create_feature_i386_32bit_avx (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_MPX)
-	regnum = create_feature_i386_32bit_mpx (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_AVX512)
-	regnum = create_feature_i386_32bit_avx512 (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_PKRU)
-	regnum = create_feature_i386_32bit_pkeys (*tdesc, regnum);
+      *tdesc = i386_create_target_description (xcr0);
 
       init_target_desc (*tdesc);
 
diff --git a/gdb/gdbserver/tdesc.c b/gdb/gdbserver/tdesc.c
index 0b5096b..53f36d5 100644
--- a/gdb/gdbserver/tdesc.c
+++ b/gdb/gdbserver/tdesc.c
@@ -39,6 +39,12 @@ init_target_desc (struct target_desc *tdesc)
   gdb_assert (2 * tdesc->registers_size + 32 <= PBUFSIZ);
 }
 
+struct target_desc *
+allocate_target_description (void)
+{
+  return new target_desc ();
+}
+
 #ifndef IN_PROCESS_AGENT
 
 static const struct target_desc default_description {};
@@ -62,6 +68,8 @@ current_target_desc (void)
   return current_process ()->tdesc;
 }
 
+/* See arch/tdesc.h.  */
+
 void
 set_tdesc_architecture (struct target_desc *target_desc,
 			const char *name)
@@ -69,6 +77,8 @@ set_tdesc_architecture (struct target_desc *target_desc,
   target_desc->arch = xstrdup (name);
 }
 
+/* See arch/tdesc.h.  */
+
 void
 set_tdesc_osabi (struct target_desc *target_desc, const char *name)
 {
diff --git a/gdb/gdbserver/tdesc.h b/gdb/gdbserver/tdesc.h
index fe3c78f..71249e4 100644
--- a/gdb/gdbserver/tdesc.h
+++ b/gdb/gdbserver/tdesc.h
@@ -142,10 +142,6 @@ void init_target_desc (struct target_desc *tdesc);
 const struct target_desc *current_target_desc (void);
 
 #ifndef IN_PROCESS_AGENT
-void set_tdesc_architecture (struct target_desc *target_desc,
-			     const char *name);
-void set_tdesc_osabi (struct target_desc *target_desc, const char *name);
-
 const char *tdesc_get_features_xml (struct target_desc *tdesc);
 #endif
 
diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c
index 792706c..c47aa6e 100644
--- a/gdb/i386-linux-tdep.c
+++ b/gdb/i386-linux-tdep.c
@@ -46,13 +46,7 @@
 #include "record-full.h"
 #include "linux-record.h"
 
-#include "features/i386/32bit-core.c"
-#include "features/i386/32bit-sse.c"
-#include "features/i386/32bit-linux.c"
-#include "features/i386/32bit-avx.c"
-#include "features/i386/32bit-mpx.c"
-#include "features/i386/32bit-avx512.c"
-#include "features/i386/32bit-pkeys.c"
+#include "arch/i386.h"
 #include "target-descriptions.h"
 
 /* Return non-zero, when the register is in the corresponding register
@@ -700,33 +694,7 @@ i386_linux_read_description (uint64_t xcr0)
     [(xcr0 & X86_XSTATE_PKRU) ? 1 : 0];
 
   if (*tdesc == NULL)
-    {
-      *tdesc = allocate_target_description ();
-      set_tdesc_architecture (*tdesc, bfd_scan_arch ("i386"));
-      set_tdesc_osabi (*tdesc, osabi_from_tdesc_string ("GNU/Linux"));
-
-      long regnum = 0;
-
-      if (xcr0 & X86_XSTATE_X87)
-	regnum = create_feature_i386_32bit_core (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_SSE)
-	regnum = create_feature_i386_32bit_sse (*tdesc, regnum);
-
-      regnum = create_feature_i386_32bit_linux (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_AVX)
-	regnum = create_feature_i386_32bit_avx (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_MPX)
-	regnum = create_feature_i386_32bit_mpx (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_AVX512)
-	regnum = create_feature_i386_32bit_avx512 (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_PKRU)
-	regnum = create_feature_i386_32bit_pkeys (*tdesc, regnum);
-    }
+    *tdesc = i386_create_target_description (xcr0);
 
   return *tdesc;
 }
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
index 6135e0d..7a8dac0 100644
--- a/gdb/target-descriptions.c
+++ b/gdb/target-descriptions.c
@@ -1823,6 +1823,15 @@ set_tdesc_property (struct target_desc *target_desc,
   VEC_safe_push (property_s, target_desc->properties, &new_prop);
 }
 
+/* See arch/tdesc.h.  */
+
+void
+set_tdesc_architecture (struct target_desc *target_desc,
+			const char *name)
+{
+  set_tdesc_architecture (target_desc, bfd_scan_arch (name));
+}
+
 void
 set_tdesc_architecture (struct target_desc *target_desc,
 			const struct bfd_arch_info *arch)
@@ -1830,6 +1839,14 @@ set_tdesc_architecture (struct target_desc *target_desc,
   target_desc->arch = arch;
 }
 
+/* See arch/tdesc.h.  */
+
+void
+set_tdesc_osabi (struct target_desc *target_desc, const char *name)
+{
+  set_tdesc_osabi (target_desc, osabi_from_tdesc_string (name));
+}
+
 void
 set_tdesc_osabi (struct target_desc *target_desc, enum gdb_osabi osabi)
 {
diff --git a/gdb/target-descriptions.h b/gdb/target-descriptions.h
index c4f9b92..e97a373 100644
--- a/gdb/target-descriptions.h
+++ b/gdb/target-descriptions.h
@@ -201,7 +201,6 @@ int tdesc_register_in_reggroup_p (struct gdbarch *gdbarch, int regno,
 
 /* Methods for constructing a target description.  */
 
-struct target_desc *allocate_target_description (void);
 struct cleanup *make_cleanup_free_target_description (struct target_desc *);
 void set_tdesc_architecture (struct target_desc *,
 			     const struct bfd_arch_info *);
-- 
1.9.1

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

* [PATCH 01/22] Use amd64_target_description to get tdesc_amd64
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (3 preceding siblings ...)
  2017-08-21 15:29 ` [PATCH 20/22] [GDBserver] Shorten srv_amd64_linux_xmlfiles Yao Qi
@ 2017-08-21 15:29 ` Yao Qi
  2017-08-21 15:29 ` [PATCH 11/22] Share i386-linux target description between GDB and GDBserver Yao Qi
                   ` (17 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches; +Cc: jhb

This patch changes amd64-*-tdep.c files to use function
amd64_target_description to get the right target description rather than
use the variable tdesd_amd64.

gdb:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

	* amd64-darwin-tdep.c: Include "x86-xstate.h".
	(x86_darwin_init_abi_64): Call amd64_target_description.
	* amd64-dicos-tdep.c: Likewise.
	* amd64-fbsd-nat.c: Likewise.
	* amd64-fbsd-tdep.c: Likewise.
	* amd64-nbsd-tdep.c: Likewise.
	* amd64-obsd-tdep.c: Likewise.
	* amd64-sol2-tdep.c: Likewise.
	* amd64-windows-tdep.c: Likewise.
	* amd64-tdep.h (tdesc_amd64): Remove the declaration.
---
 gdb/amd64-darwin-tdep.c  | 4 +++-
 gdb/amd64-dicos-tdep.c   | 4 +++-
 gdb/amd64-fbsd-nat.c     | 2 +-
 gdb/amd64-fbsd-tdep.c    | 3 ++-
 gdb/amd64-nbsd-tdep.c    | 4 +++-
 gdb/amd64-obsd-tdep.c    | 4 +++-
 gdb/amd64-sol2-tdep.c    | 4 +++-
 gdb/amd64-tdep.h         | 2 --
 gdb/amd64-windows-tdep.c | 4 +++-
 9 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/gdb/amd64-darwin-tdep.c b/gdb/amd64-darwin-tdep.c
index be26d9e..81dba82 100644
--- a/gdb/amd64-darwin-tdep.c
+++ b/gdb/amd64-darwin-tdep.c
@@ -29,6 +29,7 @@
 #include "objfiles.h"
 
 #include "i387-tdep.h"
+#include "x86-xstate.h"
 #include "amd64-tdep.h"
 #include "osabi.h"
 #include "ui-out.h"
@@ -99,7 +100,8 @@ x86_darwin_init_abi_64 (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
-  amd64_init_abi (info, gdbarch, tdesc_amd64);
+  amd64_init_abi (info, gdbarch,
+		  amd64_target_description (X86_XSTATE_SSE_MASK));
 
   tdep->struct_return = reg_struct_return;
 
diff --git a/gdb/amd64-dicos-tdep.c b/gdb/amd64-dicos-tdep.c
index 7bdb167..d319dd9 100644
--- a/gdb/amd64-dicos-tdep.c
+++ b/gdb/amd64-dicos-tdep.c
@@ -20,12 +20,14 @@
 #include "defs.h"
 #include "osabi.h"
 #include "amd64-tdep.h"
+#include "x86-xstate.h"
 #include "dicos-tdep.h"
 
 static void
 amd64_dicos_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  amd64_init_abi (info, gdbarch, tdesc_amd64);
+  amd64_init_abi (info, gdbarch,
+		  amd64_target_description (X86_XSTATE_SSE_MASK));
 
   dicos_init_abi (gdbarch);
 }
diff --git a/gdb/amd64-fbsd-nat.c b/gdb/amd64-fbsd-nat.c
index 1fe0d56..f3ddbdd 100644
--- a/gdb/amd64-fbsd-nat.c
+++ b/gdb/amd64-fbsd-nat.c
@@ -179,7 +179,7 @@ amd64fbsd_read_description (struct target_ops *ops)
     }
 #endif
   if (is64)
-    return tdesc_amd64;
+    return amd64_target_description (X86_XSTATE_SSE_MASK);
   else
     return tdesc_i386;
 }
diff --git a/gdb/amd64-fbsd-tdep.c b/gdb/amd64-fbsd-tdep.c
index ad4d787..897cab9 100644
--- a/gdb/amd64-fbsd-tdep.c
+++ b/gdb/amd64-fbsd-tdep.c
@@ -217,7 +217,8 @@ amd64fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   tdep->gregset_num_regs = ARRAY_SIZE (amd64fbsd_r_reg_offset);
   tdep->sizeof_gregset = 22 * 8;
 
-  amd64_init_abi (info, gdbarch, tdesc_amd64);
+  amd64_init_abi (info, gdbarch,
+		  amd64_target_description (X86_XSTATE_SSE_MASK));
 
   tdep->sigtramp_p = amd64fbsd_sigtramp_p;
   tdep->sigtramp_start = amd64fbsd_sigtramp_start_addr;
diff --git a/gdb/amd64-nbsd-tdep.c b/gdb/amd64-nbsd-tdep.c
index 02bf427..9ae02272 100644
--- a/gdb/amd64-nbsd-tdep.c
+++ b/gdb/amd64-nbsd-tdep.c
@@ -25,6 +25,7 @@
 #include "symtab.h"
 
 #include "amd64-tdep.h"
+#include "x86-xstate.h"
 #include "nbsd-tdep.h"
 #include "solib-svr4.h"
 
@@ -103,7 +104,8 @@ amd64nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   tdep->gregset_num_regs = ARRAY_SIZE (amd64nbsd_r_reg_offset);
   tdep->sizeof_gregset = 26 * 8;
 
-  amd64_init_abi (info, gdbarch, tdesc_amd64);
+  amd64_init_abi (info, gdbarch,
+		  amd64_target_description (X86_XSTATE_SSE_MASK));
 
   tdep->jb_pc_offset = 7 * 8;
 
diff --git a/gdb/amd64-obsd-tdep.c b/gdb/amd64-obsd-tdep.c
index ad90c20..54942cc 100644
--- a/gdb/amd64-obsd-tdep.c
+++ b/gdb/amd64-obsd-tdep.c
@@ -32,6 +32,7 @@
 #include "obsd-tdep.h"
 #include "amd64-tdep.h"
 #include "i387-tdep.h"
+#include "x86-xstate.h"
 #include "solib-svr4.h"
 #include "bsd-uthread.h"
 
@@ -419,7 +420,8 @@ amd64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
   struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
 
-  amd64_init_abi (info, gdbarch, tdesc_amd64);
+  amd64_init_abi (info, gdbarch,
+		  amd64_target_description (X86_XSTATE_SSE_MASK));
   obsd_init_abi (info, gdbarch);
 
   /* Initialize general-purpose register set details.  */
diff --git a/gdb/amd64-sol2-tdep.c b/gdb/amd64-sol2-tdep.c
index ca474db..1ae2edc 100644
--- a/gdb/amd64-sol2-tdep.c
+++ b/gdb/amd64-sol2-tdep.c
@@ -28,6 +28,7 @@
 
 #include "sol2-tdep.h"
 #include "amd64-tdep.h"
+#include "x86-xstate.h"
 #include "solib-svr4.h"
 
 /* Mapping between the general-purpose registers in gregset_t format
@@ -99,7 +100,8 @@ amd64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   tdep->gregset_num_regs = ARRAY_SIZE (amd64_sol2_gregset_reg_offset);
   tdep->sizeof_gregset = 28 * 8;
 
-  amd64_init_abi (info, gdbarch, tdesc_amd64);
+  amd64_init_abi (info, gdbarch,
+		  amd64_target_description (X86_XSTATE_SSE_MASK));
 
   tdep->sigtramp_p = amd64_sol2_sigtramp_p;
   tdep->sigcontext_addr = amd64_sol2_mcontext_addr;
diff --git a/gdb/amd64-tdep.h b/gdb/amd64-tdep.h
index 23fa5b8..047af3f 100644
--- a/gdb/amd64-tdep.h
+++ b/gdb/amd64-tdep.h
@@ -87,8 +87,6 @@ enum amd64_regnum
 
 #define AMD64_NUM_REGS		(AMD64_GSBASE_REGNUM + 1)
 
-extern struct target_desc *tdesc_amd64;
-
 extern struct displaced_step_closure *amd64_displaced_step_copy_insn
   (struct gdbarch *gdbarch, CORE_ADDR from, CORE_ADDR to,
    struct regcache *regs);
diff --git a/gdb/amd64-windows-tdep.c b/gdb/amd64-windows-tdep.c
index 9158282..5ac73bd 100644
--- a/gdb/amd64-windows-tdep.c
+++ b/gdb/amd64-windows-tdep.c
@@ -18,6 +18,7 @@
 #include "defs.h"
 #include "osabi.h"
 #include "amd64-tdep.h"
+#include "x86-xstate.h"
 #include "gdbtypes.h"
 #include "gdbcore.h"
 #include "regcache.h"
@@ -1224,7 +1225,8 @@ amd64_windows_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   */
   frame_unwind_append_unwinder (gdbarch, &amd64_windows_frame_unwind);
 
-  amd64_init_abi (info, gdbarch, tdesc_amd64);
+  amd64_init_abi (info, gdbarch,
+		  amd64_target_description (X86_XSTATE_SSE_MASK));
 
   windows_init_abi (info, gdbarch);
 
-- 
1.9.1

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

* [PATCH 09/22] [GDBserver] unit test to i386_tdesc
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (6 preceding siblings ...)
  2017-08-21 15:29 ` [PATCH 16/22] Centralize amd64-linux target descriptions Yao Qi
@ 2017-08-21 15:29 ` Yao Qi
  2017-08-21 15:29 ` [PATCH 19/22] [GDBserver] Use pre-generated amd64-linux tdesc as test Yao Qi
                   ` (14 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches

This patch adds a unit test in GDBserver to test dynamically created
target descriptions equal these pre-generated ones.

gdb/gdbserver:

2017-07-07  Yao Qi  <yao.qi@linaro.org>

	* linux-x86-tdesc.c: Include selftest.h.
	(i386_tdesc_test): New function.
	(initialize_low_tdesc): Call selftests::register_test.
	* tdesc.h: Include regdef.h.
	(target_desc): Override operator == and !=.

gdb:

2017-07-07  Yao Qi  <yao.qi@linaro.org>

	* regformats/regdef.h (struct reg): Override operator == and !=.
---
 gdb/gdbserver/linux-x86-tdesc.c | 37 ++++++++++++++++++++++++++++++++++++
 gdb/gdbserver/tdesc.h           | 42 ++++++++++++++++++++++++++++++++++++++++-
 gdb/regformats/regdef.h         | 12 ++++++++++++
 3 files changed, 90 insertions(+), 1 deletion(-)

diff --git a/gdb/gdbserver/linux-x86-tdesc.c b/gdb/gdbserver/linux-x86-tdesc.c
index 0d0be83..1f3dbaf 100644
--- a/gdb/gdbserver/linux-x86-tdesc.c
+++ b/gdb/gdbserver/linux-x86-tdesc.c
@@ -63,6 +63,39 @@ extern const struct target_desc *tdesc_i386_mpx_linux;
 
 static struct target_desc *i386_tdescs[X86_TDESC_LAST] = { };
 
+#if defined GDB_SELF_TEST && !defined IN_PROCESS_AGENT
+#include "selftest.h"
+
+namespace selftests {
+namespace tdesc {
+static void
+i386_tdesc_test ()
+{
+  struct
+  {
+    unsigned int mask;
+    const target_desc *tdesc;
+  } tdesc_tests[] = {
+    { X86_XSTATE_X87, tdesc_i386_mmx_linux },
+    { X86_XSTATE_SSE_MASK, tdesc_i386_linux },
+    { X86_XSTATE_AVX_MASK, tdesc_i386_avx_linux },
+    { X86_XSTATE_MPX_MASK, tdesc_i386_mpx_linux },
+    { X86_XSTATE_AVX_MPX_MASK, tdesc_i386_avx_mpx_linux },
+    { X86_XSTATE_AVX_AVX512_MASK, tdesc_i386_avx_avx512_linux },
+    { X86_XSTATE_AVX_MPX_AVX512_PKU_MASK, tdesc_i386_avx_mpx_avx512_pku_linux }
+  };
+
+  for (auto &elem : tdesc_tests)
+    {
+      const target_desc *tdesc = i386_linux_read_description (elem.mask);
+
+      SELF_CHECK (*tdesc == *elem.tdesc);
+    }
+}
+}
+} // namespace selftests
+#endif /* GDB_SELF_TEST */
+
 void
 initialize_low_tdesc ()
 {
@@ -74,6 +107,10 @@ initialize_low_tdesc ()
   init_registers_i386_avx_mpx_linux ();
   init_registers_i386_avx_avx512_linux ();
   init_registers_i386_avx_mpx_avx512_pku_linux ();
+
+#if GDB_SELF_TEST && !defined IN_PROCESS_AGENT
+  selftests::register_test (selftests::tdesc::i386_tdesc_test);
+#endif
 #endif
 }
 
diff --git a/gdb/gdbserver/tdesc.h b/gdb/gdbserver/tdesc.h
index 50d0364..49c82c6 100644
--- a/gdb/gdbserver/tdesc.h
+++ b/gdb/gdbserver/tdesc.h
@@ -21,7 +21,7 @@
 
 #include "arch/tdesc.h"
 
-struct reg;
+#include "regdef.h"
 
 typedef struct reg *tdesc_reg_p;
 DEF_VEC_P(tdesc_reg_p);
@@ -66,6 +66,46 @@ public:
       xfree (reg);
     VEC_free (tdesc_reg_p, reg_defs);
   }
+
+  bool operator== (const target_desc &other) const
+  {
+    if (VEC_length (tdesc_reg_p, reg_defs)
+	!= VEC_length (tdesc_reg_p, other.reg_defs))
+      return false;
+
+    struct reg *reg;
+
+    for (int ix = 0;
+	 VEC_iterate (tdesc_reg_p, reg_defs, ix, reg);
+	 ix++)
+      {
+	struct reg *reg2
+	  = VEC_index (tdesc_reg_p, other.reg_defs, ix);
+
+	if (reg != reg2 && *reg != *reg2)
+	  return false;
+      }
+
+    /* Compare expedite_regs.  */
+    int i = 0;
+    for (; expedite_regs[i] != NULL; i++)
+      {
+	if (strcmp (expedite_regs[i], other.expedite_regs[i]) != 0)
+	  return false;
+      }
+    if (other.expedite_regs[i] != NULL)
+      return false;
+
+    if (strcmp (xmltarget, other.xmltarget) != 0)
+      return false;
+
+    return true;
+  }
+
+  bool operator!= (const target_desc &other) const
+  {
+    return !(*this == other);
+  }
 #endif
 };
 
diff --git a/gdb/regformats/regdef.h b/gdb/regformats/regdef.h
index de7a010..ff1d40b 100644
--- a/gdb/regformats/regdef.h
+++ b/gdb/regformats/regdef.h
@@ -34,6 +34,18 @@ struct reg
 
   /* The size (in bits) of the value of this register, as transmitted.  */
   int size;
+
+  bool operator== (const reg &other) const
+  {
+    return (strcmp (name, other.name) == 0
+	    && offset == other.offset
+	    && size == other.size);
+  }
+
+  bool operator!= (const reg &other) const
+  {
+    return !(*this == other);
+  }
 };
 
 #endif /* REGDEF_H */
-- 
1.9.1

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

* [PATCH 08/22] [GDBserver] Centralize tdesc for i386-linux
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (8 preceding siblings ...)
  2017-08-21 15:29 ` [PATCH 19/22] [GDBserver] Use pre-generated amd64-linux tdesc as test Yao Qi
@ 2017-08-21 15:29 ` Yao Qi
  2017-08-21 15:29 ` [PATCH 05/22] Adjust code generated by regformats/regdat.sh Yao Qi
                   ` (12 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches

tdesc_i386_XXX_linux is used in many places in linux-x86-low.c and this
patch adds a new function i386_linux_read_description to return the right
tdesc according to xcr0.  i386_linux_read_description is quite similar to
the counterpart in GDB, and the following patch will share the duplicated
code, so this patch adds arch/tdesc.h includes the declarations of various
tdesc apis which are used by the shared code.  The generated c feature
files can include arch/tdesc.h only.

gdb/gdbserver:

2017-07-10  Yao Qi  <yao.qi@linaro.org>

	* configure.srv (srv_tgtobj): Append linux-x86-tdesc.o.
	(ipa_obj): Likewise.
	* linux-i386-ipa.c: Include common/x86-xstate.h
	(get_ipa_tdesc): Call i386_linux_read_description.
	(initialize_low_tracepoint): Don't call  init_registers_XXX
	functions, call initialize_low_tdesc instead.
	* linux-x86-low.c (x86_linux_read_description): Call
	i386_linux_read_description.
	(initialize_low_arch): Don't call init_registers_i386_XXX
	functions, call initialize_low_tdesc.
	* linux-x86-tdesc.c: New file.
	* linux-x86-tdesc.h (x86_linux_tdesc): New X86_TDESC_LAST.
	(i386_get_ipa_tdesc_idx): Declare.
	(i386_get_ipa_tdesc): Declare.
	(initialize_low_tdesc): Declare.

gdb:

2017-07-10  Yao Qi  <yao.qi@linaro.org>

	* arch/tdesc.h: New file.
	* regformats/regdat.sh: Generate code using tdesc_create_reg.
	* target-descriptions.c: Update comments.
	* target-descriptions.h: Include "arch/tdesc.h".  Remove the
	declarations.
	* features/i386/32bit-avx.c: Re-generated.
	* features/i386/32bit-avx512.c: Re-generated.
	* features/i386/32bit-core.c: Re-generated.
	* features/i386/32bit-linux.c: Re-generated.
	* features/i386/32bit-mpx.c: Re-generated.
	* features/i386/32bit-pkeys.c: Re-generated.
	* features/i386/32bit-sse.c: Re-generated.
---
 gdb/arch/tdesc.h                 |  80 ++++++++++++++++++
 gdb/features/i386/32bit-avx.c    |   2 +-
 gdb/features/i386/32bit-avx512.c |   2 +-
 gdb/features/i386/32bit-core.c   |   2 +-
 gdb/features/i386/32bit-linux.c  |   2 +-
 gdb/features/i386/32bit-mpx.c    |   2 +-
 gdb/features/i386/32bit-pkeys.c  |   2 +-
 gdb/features/i386/32bit-sse.c    |   2 +-
 gdb/gdbserver/configure.srv      |   6 +-
 gdb/gdbserver/linux-i386-ipa.c   |  39 ++++-----
 gdb/gdbserver/linux-x86-low.c    |  59 +++----------
 gdb/gdbserver/linux-x86-tdesc.c  | 177 +++++++++++++++++++++++++++++++++++++++
 gdb/gdbserver/linux-x86-tdesc.h  |  31 ++-----
 gdb/gdbserver/tdesc.c            | 110 +++++++++++++++++++++++-
 gdb/gdbserver/tdesc.h            |  29 ++++++-
 gdb/i386-linux-tdep.c            |   1 +
 gdb/regformats/regdat.sh         |  10 +--
 gdb/target-descriptions.c        |  32 +++----
 gdb/target-descriptions.h        |  36 +-------
 19 files changed, 458 insertions(+), 166 deletions(-)
 create mode 100644 gdb/arch/tdesc.h
 create mode 100644 gdb/gdbserver/linux-x86-tdesc.c

diff --git a/gdb/arch/tdesc.h b/gdb/arch/tdesc.h
new file mode 100644
index 0000000..872df68
--- /dev/null
+++ b/gdb/arch/tdesc.h
@@ -0,0 +1,80 @@
+/* Copyright (C) 2006-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/>.  */
+
+#ifndef ARCH_TDESC_H
+#define ARCH_TDESC_H 1
+
+struct tdesc_feature;
+struct tdesc_type;
+struct tdesc_reg;
+struct target_desc;
+
+/* Return the type associated with ID in the context of FEATURE, or
+   NULL if none.  */
+struct tdesc_type *tdesc_named_type (const struct tdesc_feature *feature,
+				     const char *id);
+
+/* Return the created feature named NAME in target description TDESC.  */
+struct tdesc_feature *tdesc_create_feature (struct target_desc *tdesc,
+					    const char *name);
+
+/* Return the created vector tdesc_type named NAME in FEATURE.  */
+struct tdesc_type *tdesc_create_vector (struct tdesc_feature *feature,
+					const char *name,
+					struct tdesc_type *field_type,
+					int count);
+
+/* Return the created struct tdesc_type named NAME in FEATURE.  */
+struct tdesc_type *tdesc_create_struct (struct tdesc_feature *feature,
+					const char *name);
+
+/* Return the created union tdesc_type named NAME in FEATURE.  */
+struct tdesc_type *tdesc_create_union (struct tdesc_feature *feature,
+				       const char *name);
+
+/* Return the created flags tdesc_type named NAME in FEATURE.  */
+struct tdesc_type *tdesc_create_flags (struct tdesc_feature *feature,
+				       const char *name,
+				       int size);
+
+/* Add a new field to TYPE.  FIELD_NAME is its name, and FIELD_TYPE is
+   its type.  */
+void tdesc_add_field (struct tdesc_type *type, const char *field_name,
+		      struct tdesc_type *field_type);
+
+/* Set the total length of TYPE.  Structs which contain bitfields may
+   omit the reserved bits, so the end of the last field may not
+   suffice.  */
+void tdesc_set_struct_size (struct tdesc_type *type, int size);
+
+/* Add a new untyped bitfield to TYPE.
+   Untyped bitfields become either uint32 or uint64 depending on the size
+   of the underlying type.  */
+void tdesc_add_bitfield (struct tdesc_type *type, const char *field_name,
+			 int start, int end);
+
+/* A flag is just a typed(bool) single-bit bitfield.
+   This function is kept to minimize changes in generated files.  */
+void tdesc_add_flag (struct tdesc_type *type, int start,
+		     const char *flag_name);
+
+/* Create a register in feature FEATURE.  */
+void tdesc_create_reg (struct tdesc_feature *feature, const char *name,
+		       int regnum, int save_restore, const char *group,
+		       int bitsize, const char *type);
+
+#endif /* ARCH_TDESC_H */
diff --git a/gdb/features/i386/32bit-avx.c b/gdb/features/i386/32bit-avx.c
index 0e71515..3a98936 100644
--- a/gdb/features/i386/32bit-avx.c
+++ b/gdb/features/i386/32bit-avx.c
@@ -1,7 +1,7 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
   Original: 32bit-avx.xml */
 
-#include "target-descriptions.h"
+#include "arch/tdesc.h"
 
 static int
 create_feature_i386_32bit_avx (struct target_desc *result, long regnum)
diff --git a/gdb/features/i386/32bit-avx512.c b/gdb/features/i386/32bit-avx512.c
index 034f557..b13e1d3 100644
--- a/gdb/features/i386/32bit-avx512.c
+++ b/gdb/features/i386/32bit-avx512.c
@@ -1,7 +1,7 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
   Original: 32bit-avx512.xml */
 
-#include "target-descriptions.h"
+#include "arch/tdesc.h"
 
 static int
 create_feature_i386_32bit_avx512 (struct target_desc *result, long regnum)
diff --git a/gdb/features/i386/32bit-core.c b/gdb/features/i386/32bit-core.c
index b43de4d..ea6db93 100644
--- a/gdb/features/i386/32bit-core.c
+++ b/gdb/features/i386/32bit-core.c
@@ -1,7 +1,7 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
   Original: 32bit-core.xml */
 
-#include "target-descriptions.h"
+#include "arch/tdesc.h"
 
 static int
 create_feature_i386_32bit_core (struct target_desc *result, long regnum)
diff --git a/gdb/features/i386/32bit-linux.c b/gdb/features/i386/32bit-linux.c
index 1b50882..1ba932d 100644
--- a/gdb/features/i386/32bit-linux.c
+++ b/gdb/features/i386/32bit-linux.c
@@ -1,7 +1,7 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
   Original: 32bit-linux.xml */
 
-#include "target-descriptions.h"
+#include "arch/tdesc.h"
 
 static int
 create_feature_i386_32bit_linux (struct target_desc *result, long regnum)
diff --git a/gdb/features/i386/32bit-mpx.c b/gdb/features/i386/32bit-mpx.c
index 6ed3b2e..f7d2ef0 100644
--- a/gdb/features/i386/32bit-mpx.c
+++ b/gdb/features/i386/32bit-mpx.c
@@ -1,7 +1,7 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
   Original: 32bit-mpx.xml */
 
-#include "target-descriptions.h"
+#include "arch/tdesc.h"
 
 static int
 create_feature_i386_32bit_mpx (struct target_desc *result, long regnum)
diff --git a/gdb/features/i386/32bit-pkeys.c b/gdb/features/i386/32bit-pkeys.c
index 24a40aa..89f1a5b 100644
--- a/gdb/features/i386/32bit-pkeys.c
+++ b/gdb/features/i386/32bit-pkeys.c
@@ -1,7 +1,7 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
   Original: 32bit-pkeys.xml */
 
-#include "target-descriptions.h"
+#include "arch/tdesc.h"
 
 static int
 create_feature_i386_32bit_pkeys (struct target_desc *result, long regnum)
diff --git a/gdb/features/i386/32bit-sse.c b/gdb/features/i386/32bit-sse.c
index c0684fb..98f4cd0 100644
--- a/gdb/features/i386/32bit-sse.c
+++ b/gdb/features/i386/32bit-sse.c
@@ -1,7 +1,7 @@
 /* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
   Original: 32bit-sse.xml */
 
-#include "target-descriptions.h"
+#include "arch/tdesc.h"
 
 static int
 create_feature_i386_32bit_sse (struct target_desc *result, long regnum)
diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index 789a16b..1a27012 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -123,13 +123,14 @@ case "${target}" in
 			    srv_tgtobj="amd64-linux-siginfo.o"
 			fi
 			srv_tgtobj="${srv_tgtobj} $srv_linux_obj linux-x86-low.o x86-low.o x86-dregs.o i387-fp.o"
+			srv_tgtobj="${srv_tgtobj} linux-x86-tdesc.o"
 			srv_tgtobj="${srv_tgtobj} linux-btrace.o x86-linux.o"
 			srv_tgtobj="${srv_tgtobj} x86-linux-dregs.o"
 			srv_linux_usrregs=yes
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
 			srv_linux_btrace=yes
-			ipa_obj="${ipa_i386_linux_regobj} linux-i386-ipa.o"
+			ipa_obj="${ipa_i386_linux_regobj} linux-i386-ipa.o linux-x86-tdesc-ipa.o"
 			;;
   i[34567]86-*-lynxos*)	srv_regobj="i386.o"
 			srv_tgtobj="lynx-low.o lynx-i386-low.o fork-child.o fork-inferior.o"
@@ -357,6 +358,7 @@ case "${target}" in
 			;;
   x86_64-*-linux*)	srv_regobj="$srv_amd64_linux_regobj $srv_i386_linux_regobj"
 			srv_tgtobj="$srv_linux_obj linux-x86-low.o x86-low.o x86-dregs.o i387-fp.o"
+			srv_tgtobj="${srv_tgtobj} linux-x86-tdesc.o"
 			srv_tgtobj="${srv_tgtobj} linux-btrace.o x86-linux.o"
 			srv_tgtobj="${srv_tgtobj} x86-linux-dregs.o"
 			srv_tgtobj="${srv_tgtobj} amd64-linux-siginfo.o"
@@ -370,7 +372,7 @@ case "${target}" in
 			else
 			    ipa_obj="${ipa_amd64_linux_regobj}"
 			fi
-			ipa_obj="${ipa_obj} linux-amd64-ipa.o"
+			ipa_obj="${ipa_obj} linux-amd64-ipa.o linux-x86-tdesc-ipa.o"
 			;;
   x86_64-*-mingw*)	srv_regobj="$srv_amd64_regobj"
 			srv_tgtobj="x86-low.o x86-dregs.o i387-fp.o win32-low.o win32-i386-low.o"
diff --git a/gdb/gdbserver/linux-i386-ipa.c b/gdb/gdbserver/linux-i386-ipa.c
index e9ac78b..54608da 100644
--- a/gdb/gdbserver/linux-i386-ipa.c
+++ b/gdb/gdbserver/linux-i386-ipa.c
@@ -22,6 +22,7 @@
 #include <sys/mman.h>
 #include "tracepoint.h"
 #include "linux-x86-tdesc.h"
+#include "common/x86-xstate.h"
 
 /* GDB register numbers.  */
 
@@ -250,27 +251,24 @@ initialize_fast_tracepoint_trampoline_buffer (void)
 const struct target_desc *
 get_ipa_tdesc (int idx)
 {
-  switch (idx)
+  if (idx >= X86_TDESC_LAST)
     {
-    case X86_TDESC_MMX:
-      return tdesc_i386_mmx_linux;
-    case X86_TDESC_SSE:
-      return tdesc_i386_linux;
-    case X86_TDESC_AVX:
-      return tdesc_i386_avx_linux;
-    case X86_TDESC_MPX:
-      return tdesc_i386_mpx_linux;
-    case X86_TDESC_AVX_MPX:
-      return tdesc_i386_avx_mpx_linux;
-    case X86_TDESC_AVX_AVX512:
-      return tdesc_i386_avx_avx512_linux;
-    case X86_TDESC_AVX_MPX_AVX512_PKU:
-      return tdesc_i386_avx_mpx_avx512_pku_linux;
-    default:
       internal_error (__FILE__, __LINE__,
 		      "unknown ipa tdesc index: %d", idx);
-      return tdesc_i386_linux;
     }
+
+  /* Map the tdesc index to xcr0 mask.  */
+  uint64_t idx2mask[X86_TDESC_LAST] = {
+    X86_XSTATE_X87_MASK,
+    X86_XSTATE_SSE_MASK,
+    X86_XSTATE_AVX_MASK,
+    X86_XSTATE_MPX_MASK,
+    X86_XSTATE_AVX_MPX_MASK,
+    X86_XSTATE_AVX_AVX512_MASK,
+    X86_XSTATE_AVX_MPX_AVX512_PKU_MASK,
+  };
+
+  return i386_linux_read_description (idx2mask[idx]);
 }
 
 /* Allocate buffer for the jump pads.  On i386, we can reach an arbitrary
@@ -291,12 +289,7 @@ alloc_jump_pad_buffer (size_t size)
 void
 initialize_low_tracepoint (void)
 {
-  init_registers_i386_mmx_linux ();
-  init_registers_i386_linux ();
-  init_registers_i386_avx_linux ();
-  init_registers_i386_mpx_linux ();
-  init_registers_i386_avx_avx512_linux ();
-  init_registers_i386_avx_mpx_avx512_pku_linux ();
+  initialize_low_tdesc ();
 
   initialize_fast_tracepoint_trampoline_buffer ();
 }
diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c
index 5c56a5d..24b76a7 100644
--- a/gdb/gdbserver/linux-x86-low.c
+++ b/gdb/gdbserver/linux-x86-low.c
@@ -757,7 +757,7 @@ x86_linux_read_description (void)
 	{
 	  have_ptrace_getfpxregs = 0;
 	  have_ptrace_getregset = 0;
-	  return tdesc_i386_mmx_linux;
+	  return i386_linux_read_description (X86_XSTATE_X87);
 	}
       else
 	have_ptrace_getfpxregs = 1;
@@ -873,31 +873,15 @@ x86_linux_read_description (void)
     }
   else
     {
-      if (xcr0_features)
-	{
-	  switch (xcr0 & X86_XSTATE_ALL_MASK)
-	    {
-	    case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK:
-	      return tdesc_i386_avx_mpx_avx512_pku_linux;
-
-	    case (X86_XSTATE_AVX_AVX512_MASK):
-	      return tdesc_i386_avx_avx512_linux;
+      const target_desc *tdesc = NULL;
 
-	    case (X86_XSTATE_MPX_MASK):
-	      return tdesc_i386_mpx_linux;
-
-	    case (X86_XSTATE_AVX_MPX_MASK):
-	      return tdesc_i386_avx_mpx_linux;
+      if (xcr0_features)
+	  tdesc = i386_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK);
 
-	    case (X86_XSTATE_AVX_MASK):
-	      return tdesc_i386_avx_linux;
+      if (tdesc == NULL)
+	tdesc = i386_linux_read_description (X86_XSTATE_SSE);
 
-	    default:
-	      return tdesc_i386_linux;
-	    }
-	}
-      else
-	return tdesc_i386_linux;
+      return tdesc;
     }
 
   gdb_assert_not_reached ("failed to return tdesc");
@@ -2912,23 +2896,10 @@ x86_get_ipa_tdesc_idx (void)
     return X86_TDESC_AVX_AVX512;
 #endif
 
-  if (tdesc == tdesc_i386_mmx_linux)
-    return X86_TDESC_MMX;
-  if (tdesc == tdesc_i386_linux || tdesc == tdesc_i386_linux_no_xml)
+  if (tdesc == tdesc_i386_linux_no_xml)
     return X86_TDESC_SSE;
-  if (tdesc == tdesc_i386_avx_linux)
-    return X86_TDESC_AVX;
-  if (tdesc == tdesc_i386_mpx_linux)
-    return X86_TDESC_MPX;
-  if (tdesc == tdesc_i386_avx_mpx_linux)
-    return X86_TDESC_AVX_MPX;
-  if (tdesc == tdesc_i386_avx_mpx_avx512_pku_linux)
-    return X86_TDESC_AVX_MPX_AVX512_PKU;
-  if (tdesc == tdesc_i386_avx_avx512_linux)
-    return X86_TDESC_AVX_AVX512;
 
-  /* If none tdesc is found, return the one with minimum features.  */
-  return X86_TDESC_MMX;
+  return i386_get_ipa_tdesc_idx (tdesc);
 }
 
 /* This is initialized assuming an amd64 target.
@@ -2997,16 +2968,12 @@ initialize_low_arch (void)
   copy_target_description (tdesc_amd64_linux_no_xml, tdesc_amd64_linux);
   tdesc_amd64_linux_no_xml->xmltarget = xmltarget_amd64_linux_no_xml;
 #endif
-  init_registers_i386_linux ();
-  init_registers_i386_mmx_linux ();
-  init_registers_i386_avx_linux ();
-  init_registers_i386_mpx_linux ();
-  init_registers_i386_avx_mpx_linux ();
-  init_registers_i386_avx_avx512_linux ();
-  init_registers_i386_avx_mpx_avx512_pku_linux ();
+
+  initialize_low_tdesc ();
 
   tdesc_i386_linux_no_xml = XNEW (struct target_desc);
-  copy_target_description (tdesc_i386_linux_no_xml, tdesc_i386_linux);
+  copy_target_description (tdesc_i386_linux_no_xml,
+			   i386_linux_read_description (X86_XSTATE_SSE_MASK));
   tdesc_i386_linux_no_xml->xmltarget = xmltarget_i386_linux_no_xml;
 
   initialize_regsets_info (&x86_regsets_info);
diff --git a/gdb/gdbserver/linux-x86-tdesc.c b/gdb/gdbserver/linux-x86-tdesc.c
new file mode 100644
index 0000000..0d0be83
--- /dev/null
+++ b/gdb/gdbserver/linux-x86-tdesc.c
@@ -0,0 +1,177 @@
+/* GNU/Linux/x86-64 specific target description, for the remote server
+   for GDB.
+   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 "linux-x86-tdesc.h"
+#include "x86-xstate.h"
+#include <inttypes.h>
+
+#if defined __i386__ || !defined IN_PROCESS_AGENT
+#include "../features/i386/32bit-core.c"
+#include "../features/i386/32bit-linux.c"
+#include "../features/i386/32bit-sse.c"
+#include "../features/i386/32bit-avx.c"
+#include "../features/i386/32bit-avx512.c"
+#include "../features/i386/32bit-mpx.c"
+#include "../features/i386/32bit-pkeys.c"
+
+/* Defined in auto-generated file i386-linux.c.  */
+void init_registers_i386_linux (void);
+extern const struct target_desc *tdesc_i386_linux;
+
+/* Defined in auto-generated file i386-mmx-linux.c.  */
+void init_registers_i386_mmx_linux (void);
+extern const struct target_desc *tdesc_i386_mmx_linux;
+
+/* Defined in auto-generated file i386-avx-linux.c.  */
+void init_registers_i386_avx_linux (void);
+extern const struct target_desc *tdesc_i386_avx_linux;
+
+/* Defined in auto-generated file i386-avx-mpx-linux.c.  */
+void init_registers_i386_avx_mpx_linux (void);
+extern const struct target_desc *tdesc_i386_avx_mpx_linux;
+
+/* Defined in auto-generated file i386-avx-avx512-linux.c.  */
+void init_registers_i386_avx_avx512_linux (void);
+extern const struct target_desc *tdesc_i386_avx_avx512_linux;
+
+/* Defined in auto-generated file i386-avx-mpx-avx512-linux.c.  */
+void init_registers_i386_avx_mpx_avx512_pku_linux (void);
+extern const struct target_desc *tdesc_i386_avx_mpx_avx512_pku_linux;
+
+/* Defined in auto-generated file i386-mpx-linux.c.  */
+void init_registers_i386_mpx_linux (void);
+extern const struct target_desc *tdesc_i386_mpx_linux;
+#endif
+
+static struct target_desc *i386_tdescs[X86_TDESC_LAST] = { };
+
+void
+initialize_low_tdesc ()
+{
+#if defined __i386__ || !defined IN_PROCESS_AGENT
+  init_registers_i386_linux ();
+  init_registers_i386_mmx_linux ();
+  init_registers_i386_avx_linux ();
+  init_registers_i386_mpx_linux ();
+  init_registers_i386_avx_mpx_linux ();
+  init_registers_i386_avx_avx512_linux ();
+  init_registers_i386_avx_mpx_avx512_pku_linux ();
+#endif
+}
+
+#if defined __i386__ || !defined IN_PROCESS_AGENT
+
+/* Return the target description according to XCR0.  */
+
+const struct target_desc *
+i386_linux_read_description (uint64_t xcr0)
+{
+  struct target_desc **tdesc = NULL;
+
+  if (xcr0 & X86_XSTATE_PKRU)
+     tdesc = &i386_tdescs[X86_TDESC_AVX_MPX_AVX512_PKU];
+  else if (xcr0 & X86_XSTATE_AVX512)
+    tdesc = &i386_tdescs[X86_TDESC_AVX_AVX512];
+  else if ((xcr0 & X86_XSTATE_AVX_MPX_MASK) == X86_XSTATE_AVX_MPX_MASK)
+    tdesc = &i386_tdescs[X86_TDESC_AVX_MPX];
+  else if (xcr0 & X86_XSTATE_MPX)
+    tdesc = &i386_tdescs[X86_TDESC_MPX];
+  else if (xcr0 & X86_XSTATE_AVX)
+    tdesc = &i386_tdescs[X86_TDESC_AVX];
+  else if (xcr0 & X86_XSTATE_SSE)
+    tdesc = &i386_tdescs[X86_TDESC_SSE];
+  else if (xcr0 & X86_XSTATE_X87)
+    tdesc = &i386_tdescs[X86_TDESC_MMX];
+
+  if (tdesc == NULL)
+    return NULL;
+
+  if (*tdesc == NULL)
+    {
+      *tdesc = new target_desc ();
+
+      long regnum = 0;
+
+      if (xcr0 & X86_XSTATE_X87)
+	regnum = create_feature_i386_32bit_core (*tdesc, regnum);
+
+      if (xcr0 & X86_XSTATE_SSE)
+	regnum = create_feature_i386_32bit_sse (*tdesc, regnum);
+
+      regnum = create_feature_i386_32bit_linux (*tdesc, regnum);
+
+      if (xcr0 & X86_XSTATE_AVX)
+	regnum = create_feature_i386_32bit_avx (*tdesc, regnum);
+
+      if (xcr0 & X86_XSTATE_MPX)
+	regnum = create_feature_i386_32bit_mpx (*tdesc, regnum);
+
+      if (xcr0 & X86_XSTATE_AVX512)
+	regnum = create_feature_i386_32bit_avx512 (*tdesc, regnum);
+
+      if (xcr0 & X86_XSTATE_PKRU)
+	regnum = create_feature_i386_32bit_pkeys (*tdesc, regnum);
+
+      init_target_desc (*tdesc);
+
+#ifndef IN_PROCESS_AGENT
+      static const char *expedite_regs_i386[] = { "ebp", "esp", "eip", NULL };
+      (*tdesc)->expedite_regs = expedite_regs_i386;
+
+      if (xcr0 & X86_XSTATE_PKRU)
+	(*tdesc)->xmltarget = "i386-avx-mpx-avx512-pku-linux.xml";
+      else if (xcr0 & X86_XSTATE_AVX512)
+	(*tdesc)->xmltarget = "i386-avx-avx512-linux.xml";
+      else if ((xcr0 & X86_XSTATE_AVX_MPX_MASK) == X86_XSTATE_AVX_MPX_MASK)
+	(*tdesc)->xmltarget = "i386-avx-mpx-linux.xml";
+      else if (xcr0 & X86_XSTATE_MPX)
+	(*tdesc)->xmltarget = "i386-mpx-linux.xml";
+      else if (xcr0 & X86_XSTATE_AVX)
+	(*tdesc)->xmltarget = "i386-avx-linux.xml";
+      else if (xcr0 & X86_XSTATE_SSE)
+	(*tdesc)->xmltarget = "i386-linux.xml";
+      else if (xcr0 & X86_XSTATE_X87)
+	(*tdesc)->xmltarget = "i386-mmx-linux.xml";
+      else
+	internal_error (__FILE__, __LINE__,
+			"unknown xcr0: %" PRIu64, xcr0);
+#endif
+    }
+
+  return *tdesc;;
+}
+#endif
+
+#ifndef IN_PROCESS_AGENT
+int
+i386_get_ipa_tdesc_idx (const struct target_desc *tdesc)
+{
+  for (int i = 0; i < X86_TDESC_LAST; i++)
+    {
+      if (tdesc == i386_tdescs[i])
+	return i;
+    }
+
+  /* If none tdesc is found, return the one with minimum features.  */
+  return X86_TDESC_MMX;
+}
+
+#endif
diff --git a/gdb/gdbserver/linux-x86-tdesc.h b/gdb/gdbserver/linux-x86-tdesc.h
index bbe4078..03bd1f1 100644
--- a/gdb/gdbserver/linux-x86-tdesc.h
+++ b/gdb/gdbserver/linux-x86-tdesc.h
@@ -30,6 +30,7 @@ enum x86_linux_tdesc {
   X86_TDESC_AVX_MPX = 4,
   X86_TDESC_AVX_AVX512 = 5,
   X86_TDESC_AVX_MPX_AVX512_PKU = 6,
+  X86_TDESC_LAST = 7,
 };
 
 #ifdef __x86_64__
@@ -77,31 +78,9 @@ extern const struct target_desc *tdesc_x32_avx_avx512_linux;
 #endif
 
 #if defined __i386__ || !defined IN_PROCESS_AGENT
-/* Defined in auto-generated file i386-linux.c.  */
-void init_registers_i386_linux (void);
-extern const struct target_desc *tdesc_i386_linux;
-
-/* Defined in auto-generated file i386-mmx-linux.c.  */
-void init_registers_i386_mmx_linux (void);
-extern const struct target_desc *tdesc_i386_mmx_linux;
-
-/* Defined in auto-generated file i386-avx-linux.c.  */
-void init_registers_i386_avx_linux (void);
-extern const struct target_desc *tdesc_i386_avx_linux;
-
-/* Defined in auto-generated file i386-avx-mpx-linux.c.  */
-void init_registers_i386_avx_mpx_linux (void);
-extern const struct target_desc *tdesc_i386_avx_mpx_linux;
-
-/* Defined in auto-generated file i386-avx-avx512-linux.c.  */
-void init_registers_i386_avx_avx512_linux (void);
-extern const struct target_desc *tdesc_i386_avx_avx512_linux;
+int i386_get_ipa_tdesc_idx (const struct target_desc *tdesc);
+#endif
 
-/* Defined in auto-generated file i386-avx-mpx-avx512-linux.c.  */
-void init_registers_i386_avx_mpx_avx512_pku_linux (void);
-extern const struct target_desc *tdesc_i386_avx_mpx_avx512_pku_linux;
+const struct target_desc *i386_linux_read_description (uint64_t xcr0);
 
-/* Defined in auto-generated file i386-mpx-linux.c.  */
-void init_registers_i386_mpx_linux (void);
-extern const struct target_desc *tdesc_i386_mpx_linux;
-#endif
+void initialize_low_tdesc ();
diff --git a/gdb/gdbserver/tdesc.c b/gdb/gdbserver/tdesc.c
index 1b1882e..4504c9b 100644
--- a/gdb/gdbserver/tdesc.c
+++ b/gdb/gdbserver/tdesc.c
@@ -41,7 +41,7 @@ init_target_desc (struct target_desc *tdesc)
 
 #ifndef IN_PROCESS_AGENT
 
-static const struct target_desc default_description = { NULL, 0, NULL, NULL };
+static const struct target_desc default_description {};
 
 void
 copy_target_description (struct target_desc *dest,
@@ -61,5 +61,111 @@ current_target_desc (void)
 
   return current_process ()->tdesc;
 }
-
 #endif
+
+struct tdesc_type
+{};
+
+/* See arch/tdesc.h.  */
+
+struct tdesc_feature *
+tdesc_create_feature (struct target_desc *tdesc, const char *name)
+{
+  return tdesc;
+}
+
+/* See arch/tdesc.h.  */
+
+struct tdesc_type *
+tdesc_create_flags (struct tdesc_feature *feature, const char *name,
+		    int size)
+{
+  return NULL;
+}
+
+/* See arch/tdesc.h.  */
+
+void
+tdesc_add_flag (struct tdesc_type *type, int start,
+		const char *flag_name)
+{}
+
+/* See arch/tdesc.h.  */
+
+struct tdesc_type *
+tdesc_named_type (const struct tdesc_feature *feature, const char *id)
+{
+  return NULL;
+}
+
+/* See arch/tdesc.h.  */
+
+struct tdesc_type *
+tdesc_create_union (struct tdesc_feature *feature, const char *id)
+{
+  return NULL;
+}
+
+/* See arch/tdesc.h.  */
+
+struct tdesc_type *
+tdesc_create_struct (struct tdesc_feature *feature, const char *id)
+{
+  return NULL;
+}
+
+/* See arch/tdesc.h.  */
+
+void
+tdesc_create_reg (struct tdesc_feature *feature, const char *name,
+		  int regnum, int save_restore, const char *group,
+		  int bitsize, const char *type)
+{
+  struct target_desc *tdesc = (struct target_desc *) feature;
+
+  while (VEC_length (tdesc_reg_p, tdesc->reg_defs) < regnum)
+    {
+      struct reg *reg = XCNEW (struct reg);
+
+      reg->name = "";
+      reg->size = 0;
+      VEC_safe_push (tdesc_reg_p, tdesc->reg_defs, reg);
+    }
+
+  gdb_assert (regnum == 0
+	      || regnum == VEC_length (tdesc_reg_p, tdesc->reg_defs));
+
+  struct reg *reg = XCNEW (struct reg);
+
+  reg->name = name;
+  reg->size = bitsize;
+  VEC_safe_push (tdesc_reg_p, tdesc->reg_defs, reg);
+}
+
+/* See arch/tdesc.h.  */
+
+struct tdesc_type *
+tdesc_create_vector (struct tdesc_feature *feature, const char *name,
+		     struct tdesc_type *field_type, int count)
+{
+  return NULL;
+}
+
+void
+tdesc_add_bitfield (struct tdesc_type *type, const char *field_name,
+		    int start, int end)
+{}
+
+/* See arch/tdesc.h.  */
+
+void
+tdesc_add_field (struct tdesc_type *type, const char *field_name,
+		 struct tdesc_type *field_type)
+{}
+
+/* See arch/tdesc.h.  */
+
+void
+tdesc_set_struct_size (struct tdesc_type *type, int size)
+{
+}
diff --git a/gdb/gdbserver/tdesc.h b/gdb/gdbserver/tdesc.h
index 424a2fd..50d0364 100644
--- a/gdb/gdbserver/tdesc.h
+++ b/gdb/gdbserver/tdesc.h
@@ -19,14 +19,20 @@
 #ifndef TDESC_H
 #define TDESC_H
 
+#include "arch/tdesc.h"
+
 struct reg;
 
 typedef struct reg *tdesc_reg_p;
 DEF_VEC_P(tdesc_reg_p);
 
-/* A target description.  */
+struct tdesc_feature
+{};
+
+/* A target description.  Inherit from tdesc_feature so that target_desc
+   can be used as tdesc_feature.  */
 
-struct target_desc
+struct target_desc : tdesc_feature
 {
   /* A vector of elements of register definitions that
      describe the inferior's register set.  */
@@ -38,13 +44,28 @@ struct target_desc
 #ifndef IN_PROCESS_AGENT
   /* An array of register names.  These are the "expedite" registers:
      registers whose values are sent along with stop replies.  */
-  const char **expedite_regs;
+  const char **expedite_regs = NULL;
 
   /* Defines what to return when looking for the "target.xml" file in
      response to qXfer:features:read.  Its contents can either be
      verbatim XML code (prefixed with a '@') or else the name of the
      actual XML file to be used in place of "target.xml".  */
-  const char *xmltarget;
+  const char *xmltarget = NULL;
+
+public:
+  target_desc ()
+    : reg_defs (NULL), registers_size (0)
+  {}
+
+  ~target_desc ()
+  {
+    int i;
+    struct reg *reg;
+
+    for (i = 0; VEC_iterate (tdesc_reg_p, reg_defs, i, reg); i++)
+      xfree (reg);
+    VEC_free (tdesc_reg_p, reg_defs);
+  }
 #endif
 };
 
diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c
index dd21b70..792706c 100644
--- a/gdb/i386-linux-tdep.c
+++ b/gdb/i386-linux-tdep.c
@@ -53,6 +53,7 @@
 #include "features/i386/32bit-mpx.c"
 #include "features/i386/32bit-avx512.c"
 #include "features/i386/32bit-pkeys.c"
+#include "target-descriptions.h"
 
 /* Return non-zero, when the register is in the corresponding register
    group.  Put the LINUX_ORIG_EAX register in the system group.  */
diff --git a/gdb/regformats/regdat.sh b/gdb/regformats/regdat.sh
index 236cd93..66449cc 100755
--- a/gdb/regformats/regdat.sh
+++ b/gdb/regformats/regdat.sh
@@ -131,7 +131,6 @@ do
     echo "{"
     echo "  static struct target_desc tdesc_${name}_s;"
     echo "  struct target_desc *result = &tdesc_${name}_s;"
-    echo "  memset (result, 0, sizeof (*result));"
 
     continue
   elif test "${type}" = "xmltarget"; then
@@ -150,12 +149,9 @@ do
     echo "$0: $1 does not specify \`\`name''." 1>&2
     exit 1
   else
-    echo "  {struct reg *reg = XCNEW (struct reg);"
-    echo "  reg->name = \"${entry}\";"
-    echo "  reg->offset = ${offset};"
-    echo "  reg->size = ${type};"
-    echo "  VEC_safe_push (tdesc_reg_p, result->reg_defs, reg);"
-    echo "  };"
+    echo "  tdesc_create_reg ((struct tdesc_feature *) result, \"${entry}\","
+    echo "  0, 0, NULL, ${type}, NULL);"
+
     offset=`expr ${offset} + ${type}`
     i=`expr $i + 1`
   fi
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
index bee8e00..f0ced66 100644
--- a/gdb/target-descriptions.c
+++ b/gdb/target-descriptions.c
@@ -846,8 +846,7 @@ tdesc_predefined_type (enum tdesc_type_kind kind)
   gdb_assert_not_reached ("bad predefined tdesc type");
 }
 
-/* Return the type associated with ID in the context of FEATURE, or
-   NULL if none.  */
+/* See arch/tdesc.h.  */
 
 struct tdesc_type *
 tdesc_named_type (const struct tdesc_feature *feature, const char *id)
@@ -1566,6 +1565,8 @@ tdesc_use_registers (struct gdbarch *gdbarch,
 }
 \f
 
+/* See arch/tdesc.h.  */
+
 void
 tdesc_create_reg (struct tdesc_feature *feature, const char *name,
 		  int regnum, int save_restore, const char *group,
@@ -1577,6 +1578,8 @@ tdesc_create_reg (struct tdesc_feature *feature, const char *name,
   VEC_safe_push (tdesc_reg_p, feature->registers, reg);
 }
 
+/* See arch/tdesc.h.  */
+
 struct tdesc_type *
 tdesc_create_vector (struct tdesc_feature *feature, const char *name,
 		     struct tdesc_type *field_type, int count)
@@ -1590,6 +1593,8 @@ tdesc_create_vector (struct tdesc_feature *feature, const char *name,
   return type;
 }
 
+/* See arch/tdesc.h.  */
+
 struct tdesc_type *
 tdesc_create_struct (struct tdesc_feature *feature, const char *name)
 {
@@ -1599,9 +1604,7 @@ tdesc_create_struct (struct tdesc_feature *feature, const char *name)
   return type;
 }
 
-/* Set the total length of TYPE.  Structs which contain bitfields may
-   omit the reserved bits, so the end of the last field may not
-   suffice.  */
+/* See arch/tdesc.h.  */
 
 void
 tdesc_set_struct_size (struct tdesc_type *type, int size)
@@ -1611,6 +1614,8 @@ tdesc_set_struct_size (struct tdesc_type *type, int size)
   type->u.u.size = size;
 }
 
+/* See arch/tdesc.h.  */
+
 struct tdesc_type *
 tdesc_create_union (struct tdesc_feature *feature, const char *name)
 {
@@ -1620,6 +1625,8 @@ tdesc_create_union (struct tdesc_feature *feature, const char *name)
   return type;
 }
 
+/* See arch/tdesc.h.  */
+
 struct tdesc_type *
 tdesc_create_flags (struct tdesc_feature *feature, const char *name,
 		    int size)
@@ -1648,7 +1655,7 @@ tdesc_create_enum (struct tdesc_feature *feature, const char *name,
   return type;
 }
 
-/* Add a new field to TYPE.  */
+/* See arch/tdesc.h.  */
 
 void
 tdesc_add_field (struct tdesc_type *type, const char *field_name,
@@ -1669,8 +1676,6 @@ tdesc_add_field (struct tdesc_type *type, const char *field_name,
   VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
 }
 
-/* Add a new typed bitfield to TYPE.  */
-
 void
 tdesc_add_typed_bitfield (struct tdesc_type *type, const char *field_name,
 			  int start, int end, struct tdesc_type *field_type)
@@ -1689,9 +1694,7 @@ tdesc_add_typed_bitfield (struct tdesc_type *type, const char *field_name,
   VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
 }
 
-/* Add a new untyped bitfield to TYPE.
-   Untyped bitfields become either uint32 or uint64 depending on the size
-   of the underlying type.  */
+/* See arch/tdesc.h.  */
 
 void
 tdesc_add_bitfield (struct tdesc_type *type, const char *field_name,
@@ -1709,8 +1712,7 @@ tdesc_add_bitfield (struct tdesc_type *type, const char *field_name,
   tdesc_add_typed_bitfield (type, field_name, start, end, field_type);
 }
 
-/* A flag is just a typed(bool) single-bit bitfield.
-   This function is kept to minimize changes in generated files.  */
+/* See arch/tdesc.h.  */
 
 void
 tdesc_add_flag (struct tdesc_type *type, int start,
@@ -1745,6 +1747,8 @@ tdesc_add_enum_value (struct tdesc_type *type, int value,
   VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
 }
 
+/* See arch/tdesc.h.  */
+
 struct tdesc_feature *
 tdesc_create_feature (struct target_desc *tdesc, const char *name)
 {
@@ -2175,7 +2179,7 @@ public:
     printf_unfiltered ("  Original: %s */\n\n",
 		       lbasename (m_filename_after_features.c_str ()));
 
-    printf_unfiltered ("#include \"target-descriptions.h\"\n");
+    printf_unfiltered ("#include \"arch/tdesc.h\"\n");
     printf_unfiltered ("\n");
   }
 
diff --git a/gdb/target-descriptions.h b/gdb/target-descriptions.h
index 591da15..c4f9b92 100644
--- a/gdb/target-descriptions.h
+++ b/gdb/target-descriptions.h
@@ -21,14 +21,10 @@
 
 #ifndef TARGET_DESCRIPTIONS_H
 #define TARGET_DESCRIPTIONS_H 1
+#include "arch/tdesc.h"
 
-struct tdesc_feature;
 struct tdesc_arch_data;
-struct tdesc_type;
-struct tdesc_reg;
-struct target_desc;
 struct target_ops;
-struct target_desc;
 /* An inferior's target description info is stored in this opaque
    object.  There's one such object per inferior.  */
 struct target_desc_info;
@@ -182,12 +178,6 @@ const struct tdesc_feature *tdesc_find_feature (const struct target_desc *,
 
 const char *tdesc_feature_name (const struct tdesc_feature *feature);
 
-/* Return the type associated with ID in the context of FEATURE, or
-   NULL if none.  */
-
-struct tdesc_type *tdesc_named_type (const struct tdesc_feature *feature,
-				     const char *id);
-
 /* Return the name of register REGNO, from the target description or
    from an architecture-provided pseudo_register_name method.  */
 
@@ -220,38 +210,14 @@ void set_tdesc_property (struct target_desc *,
 			 const char *key, const char *value);
 void tdesc_add_compatible (struct target_desc *,
 			   const struct bfd_arch_info *);
-
-struct tdesc_feature *tdesc_create_feature (struct target_desc *tdesc,
-					    const char *name);
-struct tdesc_type *tdesc_create_vector (struct tdesc_feature *feature,
-					const char *name,
-					struct tdesc_type *field_type,
-					int count);
-struct tdesc_type *tdesc_create_struct (struct tdesc_feature *feature,
-					const char *name);
-void tdesc_set_struct_size (struct tdesc_type *type, int size);
-struct tdesc_type *tdesc_create_union (struct tdesc_feature *feature,
-				       const char *name);
-struct tdesc_type *tdesc_create_flags (struct tdesc_feature *feature,
-				       const char *name,
-				       int size);
 struct tdesc_type *tdesc_create_enum (struct tdesc_feature *feature,
 				      const char *name,
 				      int size);
-void tdesc_add_field (struct tdesc_type *type, const char *field_name,
-		      struct tdesc_type *field_type);
 void tdesc_add_typed_bitfield (struct tdesc_type *type, const char *field_name,
 			       int start, int end,
 			       struct tdesc_type *field_type);
-void tdesc_add_bitfield (struct tdesc_type *type, const char *field_name,
-			 int start, int end);
-void tdesc_add_flag (struct tdesc_type *type, int start,
-		     const char *flag_name);
 void tdesc_add_enum_value (struct tdesc_type *type, int value,
 			   const char *name);
-void tdesc_create_reg (struct tdesc_feature *feature, const char *name,
-		       int regnum, int save_restore, const char *group,
-		       int bitsize, const char *type);
 
 #if GDB_SELF_TEST
 namespace selftests {
-- 
1.9.1

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

* [PATCH 03/22] Return X86_XSTATE_SSE_MASK instead of 0 in i386fbsd_core_read_xcr0
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
  2017-08-21 15:29 ` [PATCH 15/22] Update comments in amd64_linux_core_read_description Yao Qi
@ 2017-08-21 15:29 ` Yao Qi
  2017-08-21 16:23   ` John Baldwin
  2017-08-21 15:29 ` [PATCH 04/22] Let i386_target_description return tdesc_i386_mmx Yao Qi
                   ` (20 subsequent siblings)
  22 siblings, 1 reply; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches; +Cc: jhb

i386fbsd_core_read_xcr0 reads the value of xcr0 from the corefile.  If
it fails, returns 0.  This makes its caller {i386,amd64}_target_description
has to handle this special value.  IMO, i386fbsd_core_read_xcr0 should
return the default xcr0 in case of error.

gdb:

2017-08-21  Yao Qi  <yao.qi@linaro.org>

	* i386-fbsd-tdep.c (i386fbsd_core_read_xcr0): Return
	X86_XSTATE_SSE_MASK instead of 0.
---
 gdb/i386-fbsd-tdep.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gdb/i386-fbsd-tdep.c b/gdb/i386-fbsd-tdep.c
index 594b8f6..baca978 100644
--- a/gdb/i386-fbsd-tdep.c
+++ b/gdb/i386-fbsd-tdep.c
@@ -248,14 +248,14 @@ i386fbsd_core_read_xcr0 (bfd *abfd)
 	    {
 	      warning (_("Couldn't read `xcr0' bytes from "
 			 "`.reg-xstate' section in core file."));
-	      return 0;
+	      return X86_XSTATE_SSE_MASK;
 	    }
 
 	  xcr0 = bfd_get_64 (abfd, contents);
 	}
     }
   else
-    xcr0 = 0;
+    xcr0 = X86_XSTATE_SSE_MASK;
 
   return xcr0;
 }
-- 
1.9.1

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

* [PATCH 15/22] Update comments in amd64_linux_core_read_description
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
@ 2017-08-21 15:29 ` Yao Qi
  2017-08-21 15:29 ` [PATCH 03/22] Return X86_XSTATE_SSE_MASK instead of 0 in i386fbsd_core_read_xcr0 Yao Qi
                   ` (21 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches

gdb:

2017-07-06  Yao Qi  <yao.qi@linaro.org>

	* amd64-linux-tdep.c (amd64_linux_core_read_description): Update
	comments.
---
 gdb/amd64-linux-tdep.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index 31d2b16..54c2eb9 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -1589,7 +1589,7 @@ amd64_linux_core_read_description (struct gdbarch *gdbarch,
     {
     case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK:
       if (gdbarch_ptr_bit (gdbarch) == 32)
-	  /* No MPX on x32, fallback to AVX-AVX512.  */
+	/* No MPX, PKU on x32, fallback to AVX-AVX512.  */
 	return tdesc_x32_avx_avx512_linux;
       else
 	return tdesc_amd64_avx_mpx_avx512_pku_linux;
@@ -1600,13 +1600,13 @@ amd64_linux_core_read_description (struct gdbarch *gdbarch,
 	return tdesc_amd64_avx_avx512_linux;
     case X86_XSTATE_MPX_MASK:
       if (gdbarch_ptr_bit (gdbarch) == 32)
-	  /* No MPX on x32, fallback to AVX-AVX512.  */
+	/* No MPX on x32, fallback to AVX.  */
 	return tdesc_x32_avx_linux;
       else
 	return tdesc_amd64_mpx_linux;
     case X86_XSTATE_AVX_MPX_MASK:
       if (gdbarch_ptr_bit (gdbarch) == 32)
-	  /* No MPX on x32, fallback to AVX-AVX512.  */
+	/* No MPX on x32, fallback to AVX.  */
 	return tdesc_x32_avx_linux;
       else
 	return tdesc_amd64_avx_mpx_linux;
-- 
1.9.1

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

* [PATCH 19/22] [GDBserver] Use pre-generated amd64-linux tdesc as test
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (7 preceding siblings ...)
  2017-08-21 15:29 ` [PATCH 09/22] [GDBserver] unit test to i386_tdesc Yao Qi
@ 2017-08-21 15:29 ` Yao Qi
  2017-08-21 15:29 ` [PATCH 08/22] [GDBserver] Centralize tdesc for i386-linux Yao Qi
                   ` (13 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:29 UTC (permalink / raw)
  To: gdb-patches

Now, all these amd64-linux pre-generated tdesc can be used as test, so
don't need to build them if $development is false.

gdb/gdbserver:

2017-06-09  Yao Qi  <yao.qi@linaro.org>

	* configure.srv: Empty srv_amd64_linux_regobj if $development is
	false.
	(ipa_amd64_linux_regobj): Remove.
	(ipa_x32_linux_regobj): Remove.
---
 gdb/gdbserver/configure.srv | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index 95649f4..aca11c6 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -28,15 +28,14 @@ srv_i386_regobj="i386.o"
 
 if $development; then
    srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-avx-avx512-linux.o i386-avx-mpx-avx512-pku-linux.o i386-mpx-linux.o i386-avx-mpx-linux.o i386-mmx-linux.o linux-x86-tdesc-selftest.o"
+   srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-avx-avx512-linux.o amd64-avx-mpx-avx512-pku-linux.o amd64-mpx-linux.o amd64-avx-mpx-linux.o x32-linux.o x32-avx-linux.o x32-avx-avx512-linux.o"
 else
    srv_i386_linux_regobj=""
+   srv_amd64_linux_regobj=""
 fi
 
 srv_amd64_regobj="amd64.o"
-srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-avx-avx512-linux.o amd64-avx-mpx-avx512-pku-linux.o amd64-mpx-linux.o amd64-avx-mpx-linux.o x32-linux.o x32-avx-linux.o x32-avx-avx512-linux.o"
 
-ipa_amd64_linux_regobj="amd64-linux-ipa.o amd64-avx-linux-ipa.o amd64-avx-mpx-linux-ipa.o amd64-avx-avx512-linux-ipa.o amd64-avx-mpx-avx512-pku-linux-ipa.o amd64-mpx-linux-ipa.o"
-ipa_x32_linux_regobj="x32-linux-ipa.o x32-avx-linux-ipa.o x32-avx-avx512-linux-ipa.o"
 ipa_ppc_linux_regobj="powerpc-32l-ipa.o powerpc-altivec32l-ipa.o powerpc-cell32l-ipa.o powerpc-vsx32l-ipa.o powerpc-isa205-32l-ipa.o powerpc-isa205-altivec32l-ipa.o powerpc-isa205-vsx32l-ipa.o powerpc-e500l-ipa.o powerpc-64l-ipa.o powerpc-altivec64l-ipa.o powerpc-cell64l-ipa.o powerpc-vsx64l-ipa.o powerpc-isa205-64l-ipa.o powerpc-isa205-altivec64l-ipa.o powerpc-isa205-vsx64l-ipa.o"
 
 srv_i386_32bit_xmlfiles="i386/32bit-core.xml i386/32bit-sse.xml i386/32bit-avx.xml i386/32bit-avx512.xml i386/32bit-mpx.xml i386/32bit-pkeys.xml"
@@ -375,12 +374,7 @@ case "${target}" in
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
 			srv_linux_btrace=yes
-			if test "$gdb_cv_x86_is_x32" = yes ; then
-			    ipa_obj="${ipa_x32_linux_regobj}"
-			else
-			    ipa_obj="${ipa_amd64_linux_regobj}"
-			fi
-			ipa_obj="${ipa_obj} linux-amd64-ipa.o linux-x86-tdesc-ipa.o"
+			ipa_obj="linux-amd64-ipa.o linux-x86-tdesc-ipa.o"
 			ipa_obj="${ipa_obj} amd64-ipa.o"
 			;;
   x86_64-*-mingw*)	srv_regobj="$srv_amd64_regobj"
-- 
1.9.1

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

* [PATCH 18/22] Convert amd64-linux target descriptions
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (10 preceding siblings ...)
  2017-08-21 15:29 ` [PATCH 05/22] Adjust code generated by regformats/regdat.sh Yao Qi
@ 2017-08-21 15:30 ` Yao Qi
  2017-08-21 15:31 ` [PATCH 10/22] Dynamically composite xml in reply to GDB Yao Qi
                   ` (10 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:30 UTC (permalink / raw)
  To: gdb-patches

This patch changes amd64-linux target descriptions so that they can be
dynamically generated in both GDB and GDBserver.

gdb/gdbserver:

2017-06-09  Yao Qi  <yao.qi@linaro.org>

	* Makefile.in (arch-amd64.o): New rule.
	* configure.srv: Append arch-amd64.o.
	* linux-amd64-ipa.c: Include common/x86-xstate.h.
	(get_ipa_tdesc): Call amd64_linux_read_description.
	(initialize_low_tracepoint): Don't call init_registers_x32_XXX
	and init_registers_amd64_XXX.
	* linux-x86-low.c (x86_linux_read_description): Call
	amd64_linux_read_description.
	(x86_get_ipa_tdesc_idx): Call amd64_get_ipa_tdesc_idx.
	(initialize_low_arch): Don't call init_registers_x32_XXX and
	init_registers_amd64_XXX.
	* linux-x86-tdesc-selftest.c: Declare init_registers_amd64_XXX
	and tdesc_amd64_XXX.
	[__x86_64__] (amd64_tdesc_test): New function.
	(initialize_low_tdesc) [__x86_64__]: Call init_registers_x32_XXX
	and init_registers_amd64_XXX.
	* linux-x86-tdesc.c: Include arch/amd64.h.
	(xcr0_to_tdesc_idx): New function.
	(i386_linux_read_description): New function.
	(amd64_get_ipa_tdesc_idx): New function.
	* linux-x86-tdesc.h (amd64_get_ipa_tdesc_idx): Declare.
	(amd64_get_ipa_tdesc): Declare.

gdb:

2017-07-03  Yao Qi  <yao.qi@linaro.org>

	* amd64-linux-tdep.c: Include arch/amd64.h.  Don't include
	features/i386/*.c.
	(amd64_linux_read_description): Call
	amd64_create_target_description.
	* arch/amd64.c: New file.
	* arch/amd64.h: New file.
	* configure.tgt (x86_64-*-linux*): Append amd64.o.
	* Makefile.in (ALL_64_TARGET_OBS): Append amd64.o.
---
 gdb/Makefile.in                          |   1 +
 gdb/amd64-linux-tdep.c                   |  44 +----------
 gdb/arch/amd64.c                         |  71 ++++++++++++++++++
 gdb/arch/amd64.h                         |  21 ++++++
 gdb/configure.tgt                        |   2 +-
 gdb/gdbserver/Makefile.in                |   4 +
 gdb/gdbserver/configure.srv              |   3 +-
 gdb/gdbserver/linux-amd64-ipa.c          |  56 ++++++--------
 gdb/gdbserver/linux-x86-low.c            |  86 +++-------------------
 gdb/gdbserver/linux-x86-tdesc-selftest.c |  90 +++++++++++++++++++++++
 gdb/gdbserver/linux-x86-tdesc.c          | 122 ++++++++++++++++++++++++++-----
 gdb/gdbserver/linux-x86-tdesc.h          |  49 ++-----------
 12 files changed, 339 insertions(+), 210 deletions(-)
 create mode 100644 gdb/arch/amd64.c
 create mode 100644 gdb/arch/amd64.h

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 40ae421..bcc7bd2 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -761,6 +761,7 @@ ALL_64_TARGET_OBS = \
 	alpha-nbsd-tdep.o \
 	alpha-obsd-tdep.o \
 	alpha-tdep.o \
+	amd64.o \
 	amd64-darwin-tdep.o \
 	amd64-dicos-tdep.o \
 	amd64-fbsd-tdep.o \
diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index 7afa012..7fbd328 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -39,19 +39,9 @@
 #include "solib-svr4.h"
 #include "xml-syscall.h"
 #include "glibc-tdep.h"
+#include "arch/amd64.h"
 #include "target-descriptions.h"
 
-#include "features/i386/64bit-avx.c"
-#include "features/i386/64bit-avx512.c"
-#include "features/i386/64bit-core.c"
-#include "features/i386/64bit-linux.c"
-#include "features/i386/64bit-mpx.c"
-#include "features/i386/64bit-pkeys.c"
-#include "features/i386/64bit-segments.c"
-#include "features/i386/64bit-sse.c"
-
-#include "features/i386/x32-core.c"
-
 /* The syscall's XML filename for i386.  */
 #define XML_SYSCALL_FILENAME_AMD64 "syscalls/amd64-linux.xml"
 
@@ -1599,37 +1589,7 @@ amd64_linux_read_description (uint64_t xcr0_features_bit, bool is_x32)
     }
 
   if (*tdesc == NULL)
-    {
-      *tdesc = allocate_target_description ();
-
-      set_tdesc_architecture (*tdesc,
-			      is_x32 ? "i386:x64-32" : "i386:x86-64");
-
-      set_tdesc_osabi (*tdesc, osabi_from_tdesc_string ("GNU/Linux"));
-
-      long regnum = 0;
-
-      if (is_x32)
-	regnum = create_feature_i386_x32_core (*tdesc, regnum);
-      else
-	regnum = create_feature_i386_64bit_core (*tdesc, regnum);
-
-      regnum = create_feature_i386_64bit_sse (*tdesc, regnum);
-      regnum = create_feature_i386_64bit_linux (*tdesc, regnum);
-      regnum = create_feature_i386_64bit_segments (*tdesc, regnum);
-
-      if (xcr0_features_bit & X86_XSTATE_AVX)
-	regnum = create_feature_i386_64bit_avx (*tdesc, regnum);
-
-      if ((xcr0_features_bit & X86_XSTATE_MPX) && !is_x32)
-	regnum = create_feature_i386_64bit_mpx (*tdesc, regnum);
-
-      if (xcr0_features_bit & X86_XSTATE_AVX512)
-	regnum = create_feature_i386_64bit_avx512 (*tdesc, regnum);
-
-      if ((xcr0_features_bit & X86_XSTATE_PKRU) && !is_x32)
-	regnum = create_feature_i386_64bit_pkeys (*tdesc, regnum);
-    }
+    *tdesc = amd64_create_target_description (xcr0_features_bit, is_x32);
 
   return *tdesc;
 }
diff --git a/gdb/arch/amd64.c b/gdb/arch/amd64.c
new file mode 100644
index 0000000..626733d
--- /dev/null
+++ b/gdb/arch/amd64.c
@@ -0,0 +1,71 @@
+/* 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 "amd64.h"
+#include "x86-xstate.h"
+#include <stdlib.h>
+
+#include "../features/i386/64bit-avx.c"
+#include "../features/i386/64bit-avx512.c"
+#include "../features/i386/64bit-core.c"
+#include "../features/i386/64bit-linux.c"
+#include "../features/i386/64bit-mpx.c"
+#include "../features/i386/64bit-pkeys.c"
+#include "../features/i386/64bit-segments.c"
+#include "../features/i386/64bit-sse.c"
+
+#include "../features/i386/x32-core.c"
+
+/* Create amd64 target descriptions according to XCR0.  If IS_X32 is
+   true, create the x32 ones.  */
+
+target_desc *
+amd64_create_target_description (uint64_t xcr0, bool is_x32)
+{
+  target_desc *tdesc = allocate_target_description ();
+
+#ifndef IN_PROCESS_AGENT
+  set_tdesc_architecture (tdesc, is_x32 ? "i386:x64-32" : "i386:x86-64");
+
+  set_tdesc_osabi (tdesc, "GNU/Linux");
+#endif
+
+  long regnum = 0;
+
+  if (is_x32)
+    regnum = create_feature_i386_x32_core (tdesc, regnum);
+  else
+    regnum = create_feature_i386_64bit_core (tdesc, regnum);
+
+  regnum = create_feature_i386_64bit_sse (tdesc, regnum);
+  regnum = create_feature_i386_64bit_linux (tdesc, regnum);
+  regnum = create_feature_i386_64bit_segments (tdesc, regnum);
+
+  if (xcr0 & X86_XSTATE_AVX)
+    regnum = create_feature_i386_64bit_avx (tdesc, regnum);
+
+  if ((xcr0 & X86_XSTATE_MPX) && !is_x32)
+    regnum = create_feature_i386_64bit_mpx (tdesc, regnum);
+
+  if (xcr0 & X86_XSTATE_AVX512)
+    regnum = create_feature_i386_64bit_avx512 (tdesc, regnum);
+
+  if ((xcr0 & X86_XSTATE_PKRU) && !is_x32)
+    regnum = create_feature_i386_64bit_pkeys (tdesc, regnum);
+
+  return tdesc;
+}
diff --git a/gdb/arch/amd64.h b/gdb/arch/amd64.h
new file mode 100644
index 0000000..0821a7c
--- /dev/null
+++ b/gdb/arch/amd64.h
@@ -0,0 +1,21 @@
+/* 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 "tdesc.h"
+#include <stdint.h>
+
+target_desc *amd64_create_target_description (uint64_t xcr0, bool is_x32);
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 1f263515..402d6ba 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -678,7 +678,7 @@ x86_64-*-elf*)
 	;;
 x86_64-*-linux*)
 	# Target: GNU/Linux x86-64
-	gdb_target_obs="amd64-tdep.o amd64-linux-tdep.o i386-tdep.o \
+	gdb_target_obs="amd64-tdep.o amd64-linux-tdep.o amd64.o i386-tdep.o \
 			i387-tdep.o i386.o i386-linux-tdep.o glibc-tdep.o \
 			solib-svr4.o symfile-mem.o linux-tdep.o linux-record.o"
 	build_gdbserver=yes
diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index 5f9b2fe..5cc4220 100644
--- a/gdb/gdbserver/Makefile.in
+++ b/gdb/gdbserver/Makefile.in
@@ -532,6 +532,10 @@ arch-i386.o: ../arch/i386.c
 	$(COMPILE) $<
 	$(POSTCOMPILE)
 
+arch-amd64.o: ../arch/amd64.c
+	$(COMPILE) $<
+	$(POSTCOMPILE)
+
 # Rules for objects that go in the in-process agent.
 
 %-ipa.o: %-generated.c
diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index 946119c..95649f4 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -365,7 +365,7 @@ case "${target}" in
 			;;
   x86_64-*-linux*)	srv_regobj="$srv_amd64_linux_regobj $srv_i386_linux_regobj"
 			srv_tgtobj="$srv_linux_obj linux-x86-low.o x86-low.o x86-dregs.o i387-fp.o"
-			srv_tgtobj="${srv_tgtobj} arch-i386.o"
+			srv_tgtobj="${srv_tgtobj} arch-i386.o arch-amd64.o"
 			srv_tgtobj="${srv_tgtobj} linux-x86-tdesc.o"
 			srv_tgtobj="${srv_tgtobj} linux-btrace.o x86-linux.o"
 			srv_tgtobj="${srv_tgtobj} x86-linux-dregs.o"
@@ -381,6 +381,7 @@ case "${target}" in
 			    ipa_obj="${ipa_amd64_linux_regobj}"
 			fi
 			ipa_obj="${ipa_obj} linux-amd64-ipa.o linux-x86-tdesc-ipa.o"
+			ipa_obj="${ipa_obj} amd64-ipa.o"
 			;;
   x86_64-*-mingw*)	srv_regobj="$srv_amd64_regobj"
 			srv_tgtobj="x86-low.o x86-dregs.o i387-fp.o win32-low.o win32-i386-low.o"
diff --git a/gdb/gdbserver/linux-amd64-ipa.c b/gdb/gdbserver/linux-amd64-ipa.c
index 683339b..85d0d45 100644
--- a/gdb/gdbserver/linux-amd64-ipa.c
+++ b/gdb/gdbserver/linux-amd64-ipa.c
@@ -22,6 +22,7 @@
 #include <sys/mman.h>
 #include "tracepoint.h"
 #include "linux-x86-tdesc.h"
+#include "common/x86-xstate.h"
 
 /* Defined in auto-generated file amd64-linux.c.  */
 void init_registers_amd64_linux (void);
@@ -174,38 +175,37 @@ supply_static_tracepoint_registers (struct regcache *regcache,
 const struct target_desc *
 get_ipa_tdesc (int idx)
 {
+  if (idx >= X86_TDESC_LAST)
+    {
+      internal_error (__FILE__, __LINE__,
+		      "unknown ipa tdesc index: %d", idx);
+    }
+
 #if defined __ILP32__
   switch (idx)
     {
     case X86_TDESC_SSE:
-      return tdesc_x32_linux;
+      return amd64_linux_read_description (X86_XSTATE_SSE_MASK, true);
     case X86_TDESC_AVX:
-      return tdesc_x32_avx_linux;
+      return amd64_linux_read_description (X86_XSTATE_AVX_MASK, true);
     case X86_TDESC_AVX_AVX512:
-      return tdesc_x32_avx_avx512_linux;
+      return amd64_linux_read_description (X86_XSTATE_AVX_AVX512_MASK, true);
     default:
       break;
     }
 #else
-  switch (idx)
-    {
-    case X86_TDESC_SSE:
-      return tdesc_amd64_linux;
-    case X86_TDESC_AVX:
-      return tdesc_amd64_avx_linux;
-    case X86_TDESC_MPX:
-      return tdesc_amd64_mpx_linux;
-    case X86_TDESC_AVX_MPX:
-      return tdesc_amd64_avx_mpx_linux;
-    case X86_TDESC_AVX_MPX_AVX512_PKU:
-      return tdesc_amd64_avx_mpx_avx512_pku_linux;
-    case X86_TDESC_AVX_AVX512:
-      return tdesc_amd64_avx_avx512_linux;
-    default:
-      internal_error (__FILE__, __LINE__,
-		      "unknown ipa tdesc index: %d", idx);
-      return tdesc_amd64_linux;
-    }
+  /* Map the tdesc index to xcr0 mask.  */
+  uint64_t idx2mask[X86_TDESC_LAST] = {
+    X86_XSTATE_X87_MASK,
+    X86_XSTATE_SSE_MASK,
+    X86_XSTATE_AVX_MASK,
+    X86_XSTATE_MPX_MASK,
+    X86_XSTATE_AVX_MPX_MASK,
+    X86_XSTATE_AVX_AVX512_MASK,
+    X86_XSTATE_AVX_MPX_AVX512_PKU_MASK,
+  };
+
+  return amd64_linux_read_description (idx2mask[idx], false);
 #endif
 
   internal_error (__FILE__, __LINE__,
@@ -276,16 +276,4 @@ alloc_jump_pad_buffer (size_t size)
 void
 initialize_low_tracepoint (void)
 {
-#if defined __ILP32__
-  init_registers_x32_linux ();
-  init_registers_x32_avx_linux ();
-  init_registers_x32_avx_avx512_linux ();
-#else
-  init_registers_amd64_linux ();
-  init_registers_amd64_avx_linux ();
-  init_registers_amd64_mpx_linux ();
-  init_registers_amd64_avx_mpx_linux ();
-  init_registers_amd64_avx_avx512_linux ();
-  init_registers_amd64_avx_mpx_avx512_pku_linux ();
-#endif
 }
diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c
index 54be82f..f09871a 100644
--- a/gdb/gdbserver/linux-x86-low.c
+++ b/gdb/gdbserver/linux-x86-low.c
@@ -817,58 +817,17 @@ x86_linux_read_description (void)
   if (machine == EM_X86_64)
     {
 #ifdef __x86_64__
-      if (is_elf64)
-	{
-	  if (xcr0_features)
-	    {
-	      switch (xcr0 & X86_XSTATE_ALL_MASK)
-	        {
-		case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK:
-		  return tdesc_amd64_avx_mpx_avx512_pku_linux;
-
-		case X86_XSTATE_AVX_AVX512_MASK:
-		  return tdesc_amd64_avx_avx512_linux;
-
-		case X86_XSTATE_AVX_MPX_MASK:
-		  return tdesc_amd64_avx_mpx_linux;
-
-		case X86_XSTATE_MPX_MASK:
-		  return tdesc_amd64_mpx_linux;
-
-		case X86_XSTATE_AVX_MASK:
-		  return tdesc_amd64_avx_linux;
+      const target_desc *tdesc = NULL;
 
-		default:
-		  return tdesc_amd64_linux;
-		}
-	    }
-	  else
-	    return tdesc_amd64_linux;
-	}
-      else
+      if (xcr0_features)
 	{
-	  if (xcr0_features)
-	    {
-	      switch (xcr0 & X86_XSTATE_ALL_MASK)
-	        {
-		case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK:
-		  /* No x32 MPX and PKU, fall back to avx_avx512.  */
-		  return tdesc_x32_avx_avx512_linux;
-
-		case X86_XSTATE_AVX_AVX512_MASK:
-		  return tdesc_x32_avx_avx512_linux;
-
-		case X86_XSTATE_MPX_MASK: /* No MPX on x32.  */
-		case X86_XSTATE_AVX_MASK:
-		  return tdesc_x32_avx_linux;
-
-		default:
-		  return tdesc_x32_linux;
-		}
-	    }
-	  else
-	    return tdesc_x32_linux;
+	  tdesc = amd64_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK,
+						!is_elf64);
 	}
+
+      if (tdesc == NULL)
+	tdesc = amd64_linux_read_description (X86_XSTATE_SSE_MASK, !is_elf64);
+      return tdesc;
 #endif
     }
   else
@@ -2881,19 +2840,7 @@ x86_get_ipa_tdesc_idx (void)
   const struct target_desc *tdesc = regcache->tdesc;
 
 #ifdef __x86_64__
-  if (tdesc == tdesc_amd64_linux || tdesc == tdesc_amd64_linux_no_xml
-      || tdesc == tdesc_x32_linux)
-    return X86_TDESC_SSE;
-  if (tdesc == tdesc_amd64_avx_linux || tdesc == tdesc_x32_avx_linux)
-    return X86_TDESC_AVX;
-  if (tdesc == tdesc_amd64_mpx_linux)
-    return X86_TDESC_MPX;
-  if (tdesc == tdesc_amd64_avx_mpx_linux)
-    return X86_TDESC_AVX_MPX;
-  if (tdesc == tdesc_amd64_avx_mpx_avx512_pku_linux || tdesc == tdesc_x32_avx_avx512_linux)
-    return X86_TDESC_AVX_MPX_AVX512_PKU;
-  if (tdesc == tdesc_amd64_avx_avx512_linux)
-    return X86_TDESC_AVX_AVX512;
+  return amd64_get_ipa_tdesc_idx (tdesc);
 #endif
 
   if (tdesc == tdesc_i386_linux_no_xml)
@@ -2953,19 +2900,10 @@ initialize_low_arch (void)
 {
   /* Initialize the Linux target descriptions.  */
 #ifdef __x86_64__
-  init_registers_amd64_linux ();
-  init_registers_amd64_avx_linux ();
-  init_registers_amd64_mpx_linux ();
-  init_registers_amd64_avx_mpx_linux ();
-  init_registers_amd64_avx_avx512_linux ();
-  init_registers_amd64_avx_mpx_avx512_pku_linux ();
-
-  init_registers_x32_linux ();
-  init_registers_x32_avx_linux ();
-  init_registers_x32_avx_avx512_linux ();
-
   tdesc_amd64_linux_no_xml = XNEW (struct target_desc);
-  copy_target_description (tdesc_amd64_linux_no_xml, tdesc_amd64_linux);
+  copy_target_description (tdesc_amd64_linux_no_xml,
+			   amd64_linux_read_description (X86_XSTATE_SSE_MASK,
+							 false));
   tdesc_amd64_linux_no_xml->xmltarget = xmltarget_amd64_linux_no_xml;
 #endif
 
diff --git a/gdb/gdbserver/linux-x86-tdesc-selftest.c b/gdb/gdbserver/linux-x86-tdesc-selftest.c
index 558a25b..aa5a8e9 100644
--- a/gdb/gdbserver/linux-x86-tdesc-selftest.c
+++ b/gdb/gdbserver/linux-x86-tdesc-selftest.c
@@ -49,6 +49,46 @@ extern const struct target_desc *tdesc_i386_avx_mpx_avx512_pku_linux;
 void init_registers_i386_mpx_linux (void);
 extern const struct target_desc *tdesc_i386_mpx_linux;
 
+#ifdef __x86_64__
+
+/* Defined in auto-generated file amd64-linux.c.  */
+void init_registers_amd64_linux (void);
+extern const struct target_desc *tdesc_amd64_linux;
+
+/* Defined in auto-generated file amd64-avx-linux.c.  */
+void init_registers_amd64_avx_linux (void);
+extern const struct target_desc *tdesc_amd64_avx_linux;
+
+/* Defined in auto-generated file amd64-avx-avx512-linux.c.  */
+void init_registers_amd64_avx_avx512_linux (void);
+extern const struct target_desc *tdesc_amd64_avx_avx512_linux;
+
+/* Defined in auto-generated file amd64-avx-mpx-avx512-pku-linux.c.  */
+void init_registers_amd64_avx_mpx_avx512_pku_linux (void);
+extern const struct target_desc *tdesc_amd64_avx_mpx_avx512_pku_linux;
+
+/* Defined in auto-generated file amd64-avx-mpx-linux.c.  */
+void init_registers_amd64_avx_mpx_linux (void);
+extern const struct target_desc *tdesc_amd64_avx_mpx_linux;
+
+/* Defined in auto-generated file amd64-mpx-linux.c.  */
+void init_registers_amd64_mpx_linux (void);
+extern const struct target_desc *tdesc_amd64_mpx_linux;
+
+/* Defined in auto-generated file x32-linux.c.  */
+void init_registers_x32_linux (void);
+extern const struct target_desc *tdesc_x32_linux;
+
+/* Defined in auto-generated file x32-avx-linux.c.  */
+void init_registers_x32_avx_linux (void);
+extern const struct target_desc *tdesc_x32_avx_linux;
+
+/* Defined in auto-generated file x32-avx-avx512-linux.c.  */
+void init_registers_x32_avx_avx512_linux (void);
+extern const struct target_desc *tdesc_x32_avx_avx512_linux;
+
+#endif
+
 namespace selftests {
 namespace tdesc {
 static void
@@ -75,6 +115,41 @@ i386_tdesc_test ()
       SELF_CHECK (*tdesc == *elem.tdesc);
     }
 }
+
+#ifdef __x86_64__
+
+static void
+amd64_tdesc_test ()
+{
+  struct
+  {
+    unsigned int mask;
+    const target_desc *tdesc[2];
+  } tdesc_tests[] = {
+    { X86_XSTATE_SSE_MASK, { tdesc_amd64_linux, tdesc_x32_linux } },
+    { X86_XSTATE_AVX_MASK, { tdesc_amd64_avx_linux, tdesc_x32_avx_linux } },
+    { X86_XSTATE_MPX_MASK, { tdesc_amd64_mpx_linux, tdesc_x32_avx_linux } },
+    { X86_XSTATE_AVX_MPX_MASK, { tdesc_amd64_avx_mpx_linux,
+				 tdesc_x32_avx_linux } },
+    { X86_XSTATE_AVX_AVX512_MASK, { tdesc_amd64_avx_avx512_linux,
+      tdesc_x32_avx_avx512_linux } },
+    { X86_XSTATE_AVX_MPX_AVX512_PKU_MASK,
+      { tdesc_amd64_avx_mpx_avx512_pku_linux,  tdesc_x32_avx_avx512_linux } },
+  };
+
+  for (auto &elem : tdesc_tests)
+    {
+      for (int i = 0; i < 2; i++)
+	{
+	  const target_desc *tdesc = amd64_linux_read_description (elem.mask,
+								   i);
+
+	  SELF_CHECK (*tdesc == *elem.tdesc[i]);
+	}
+    }
+}
+
+#endif
 }
 } // namespace selftests
 
@@ -90,4 +165,19 @@ initialize_low_tdesc ()
   init_registers_i386_avx_mpx_avx512_pku_linux ();
 
   selftests::register_test (selftests::tdesc::i386_tdesc_test);
+
+#ifdef __x86_64__
+  init_registers_x32_linux ();
+  init_registers_x32_avx_linux ();
+  init_registers_x32_avx_avx512_linux ();
+
+  init_registers_amd64_linux ();
+  init_registers_amd64_avx_linux ();
+  init_registers_amd64_mpx_linux ();
+  init_registers_amd64_avx_mpx_linux ();
+  init_registers_amd64_avx_avx512_linux ();
+  init_registers_amd64_avx_mpx_avx512_pku_linux ();
+
+  selftests::register_test (selftests::tdesc::amd64_tdesc_test);
+#endif
 }
diff --git a/gdb/gdbserver/linux-x86-tdesc.c b/gdb/gdbserver/linux-x86-tdesc.c
index d1e262c..9eb61a7 100644
--- a/gdb/gdbserver/linux-x86-tdesc.c
+++ b/gdb/gdbserver/linux-x86-tdesc.c
@@ -22,36 +22,68 @@
 #include "linux-x86-tdesc.h"
 #include "arch/i386.h"
 #include "common/x86-xstate.h"
+#ifdef __x86_64__
+#include "arch/amd64.h"
+#endif
 
-static struct target_desc *i386_tdescs[X86_TDESC_LAST] = { };
+/* Return the right x86_linux_tdesc index for a given XCR0.  Return
+   X86_TDESC_LAST if can't find a match.  */
 
-#if defined __i386__ || !defined IN_PROCESS_AGENT
-
-/* Return the target description according to XCR0.  */
-
-const struct target_desc *
-i386_linux_read_description (uint64_t xcr0)
+static enum x86_linux_tdesc
+xcr0_to_tdesc_idx (uint64_t xcr0, bool is_x32)
 {
-  struct target_desc **tdesc = NULL;
-
   if (xcr0 & X86_XSTATE_PKRU)
-     tdesc = &i386_tdescs[X86_TDESC_AVX_MPX_AVX512_PKU];
+    {
+      if (is_x32)
+	{
+	  /* No x32 MPX and PKU, fall back to avx_avx512.  */
+	  return X86_TDESC_AVX_AVX512;
+	}
+      else
+	return X86_TDESC_AVX_MPX_AVX512_PKU;
+    }
   else if (xcr0 & X86_XSTATE_AVX512)
-    tdesc = &i386_tdescs[X86_TDESC_AVX_AVX512];
+    return X86_TDESC_AVX_AVX512;
   else if ((xcr0 & X86_XSTATE_AVX_MPX_MASK) == X86_XSTATE_AVX_MPX_MASK)
-    tdesc = &i386_tdescs[X86_TDESC_AVX_MPX];
+    {
+      if (is_x32) /* No MPX on x32.  */
+	return X86_TDESC_AVX;
+      else
+	return X86_TDESC_AVX_MPX;
+    }
   else if (xcr0 & X86_XSTATE_MPX)
-    tdesc = &i386_tdescs[X86_TDESC_MPX];
+    {
+      if (is_x32) /* No MPX on x32.  */
+	return X86_TDESC_AVX;
+      else
+	return X86_TDESC_MPX;
+    }
   else if (xcr0 & X86_XSTATE_AVX)
-    tdesc = &i386_tdescs[X86_TDESC_AVX];
+    return X86_TDESC_AVX;
   else if (xcr0 & X86_XSTATE_SSE)
-    tdesc = &i386_tdescs[X86_TDESC_SSE];
+    return X86_TDESC_SSE;
   else if (xcr0 & X86_XSTATE_X87)
-    tdesc = &i386_tdescs[X86_TDESC_MMX];
+    return X86_TDESC_MMX;
+  else
+    return X86_TDESC_LAST;
+}
 
-  if (tdesc == NULL)
+static struct target_desc *i386_tdescs[X86_TDESC_LAST] = { };
+
+#if defined __i386__ || !defined IN_PROCESS_AGENT
+
+/* Return the target description according to XCR0.  */
+
+const struct target_desc *
+i386_linux_read_description (uint64_t xcr0)
+{
+  enum x86_linux_tdesc idx = xcr0_to_tdesc_idx (xcr0, false);
+
+  if (idx == X86_TDESC_LAST)
     return NULL;
 
+  struct target_desc **tdesc = &i386_tdescs[idx];
+
   if (*tdesc == NULL)
     {
       *tdesc = i386_create_target_description (xcr0);
@@ -68,7 +100,44 @@ i386_linux_read_description (uint64_t xcr0)
 }
 #endif
 
+#ifdef __x86_64__
+
+static target_desc *amd64_tdescs[X86_TDESC_LAST] = { };
+static target_desc *x32_tdescs[X86_TDESC_LAST] = { };
+
+const struct target_desc *
+amd64_linux_read_description (uint64_t xcr0, bool is_x32)
+{
+  enum x86_linux_tdesc idx = xcr0_to_tdesc_idx (xcr0, is_x32);
+
+  if (idx == X86_TDESC_LAST)
+    return NULL;
+
+  struct target_desc **tdesc = NULL;
+
+  if (is_x32)
+    tdesc = &x32_tdescs[idx];
+  else
+    tdesc = &amd64_tdescs[idx];
+
+  if (*tdesc == NULL)
+    {
+      *tdesc = amd64_create_target_description (xcr0, is_x32);
+
+      init_target_desc (*tdesc);
+
+#ifndef IN_PROCESS_AGENT
+      static const char *expedite_regs_amd64[] = { "rbp", "rsp", "rip", NULL };
+      (*tdesc)->expedite_regs = expedite_regs_amd64;
+#endif
+    }
+  return *tdesc;
+}
+
+#endif
+
 #ifndef IN_PROCESS_AGENT
+
 int
 i386_get_ipa_tdesc_idx (const struct target_desc *tdesc)
 {
@@ -82,4 +151,23 @@ i386_get_ipa_tdesc_idx (const struct target_desc *tdesc)
   return X86_TDESC_MMX;
 }
 
+#if defined __x86_64__
+int
+amd64_get_ipa_tdesc_idx (const struct target_desc *tdesc)
+{
+  for (int i = 0; i < X86_TDESC_LAST; i++)
+    {
+      if (tdesc == amd64_tdescs[i])
+	return i;
+    }
+  for (int i = 0; i < X86_TDESC_LAST; i++)
+    {
+      if (tdesc == x32_tdescs[i])
+	return i;
+    }
+
+  return X86_TDESC_SSE;
+}
+
+#endif
 #endif
diff --git a/gdb/gdbserver/linux-x86-tdesc.h b/gdb/gdbserver/linux-x86-tdesc.h
index 03bd1f1..a6dc330 100644
--- a/gdb/gdbserver/linux-x86-tdesc.h
+++ b/gdb/gdbserver/linux-x86-tdesc.h
@@ -33,52 +33,19 @@ enum x86_linux_tdesc {
   X86_TDESC_LAST = 7,
 };
 
-#ifdef __x86_64__
-
-#if defined __LP64__  || !defined IN_PROCESS_AGENT
-/* Defined in auto-generated file amd64-linux.c.  */
-void init_registers_amd64_linux (void);
-extern const struct target_desc *tdesc_amd64_linux;
-
-/* Defined in auto-generated file amd64-avx-linux.c.  */
-void init_registers_amd64_avx_linux (void);
-extern const struct target_desc *tdesc_amd64_avx_linux;
-
-/* Defined in auto-generated file amd64-avx-avx512-linux.c.  */
-void init_registers_amd64_avx_avx512_linux (void);
-extern const struct target_desc *tdesc_amd64_avx_avx512_linux;
-
-/* Defined in auto-generated file amd64-avx-mpx-avx512-pku-linux.c.  */
-void init_registers_amd64_avx_mpx_avx512_pku_linux (void);
-extern const struct target_desc *tdesc_amd64_avx_mpx_avx512_pku_linux;
-
-/* Defined in auto-generated file amd64-avx-mpx-linux.c.  */
-void init_registers_amd64_avx_mpx_linux (void);
-extern const struct target_desc *tdesc_amd64_avx_mpx_linux;
-
-/* Defined in auto-generated file amd64-mpx-linux.c.  */
-void init_registers_amd64_mpx_linux (void);
-extern const struct target_desc *tdesc_amd64_mpx_linux;
+#if defined __i386__ || !defined IN_PROCESS_AGENT
+int i386_get_ipa_tdesc_idx (const struct target_desc *tdesc);
 #endif
 
-#if defined __ILP32__ || !defined IN_PROCESS_AGENT
-/* Defined in auto-generated file x32-linux.c.  */
-void init_registers_x32_linux (void);
-extern const struct target_desc *tdesc_x32_linux;
-
-/* Defined in auto-generated file x32-avx-linux.c.  */
-void init_registers_x32_avx_linux (void);
-extern const struct target_desc *tdesc_x32_avx_linux;
-
-/* Defined in auto-generated file x32-avx-avx512-linux.c.  */
-void init_registers_x32_avx_avx512_linux (void);
-extern const struct target_desc *tdesc_x32_avx_avx512_linux;
+#if defined __x86_64__ && !defined IN_PROCESS_AGENT
+int amd64_get_ipa_tdesc_idx (const struct target_desc *tdesc);
 #endif
 
-#endif
+const struct target_desc *i386_get_ipa_tdesc (int idx);
 
-#if defined __i386__ || !defined IN_PROCESS_AGENT
-int i386_get_ipa_tdesc_idx (const struct target_desc *tdesc);
+#ifdef __x86_64__
+const struct target_desc *amd64_linux_read_description (uint64_t xcr0,
+							bool is_x32);
 #endif
 
 const struct target_desc *i386_linux_read_description (uint64_t xcr0);
-- 
1.9.1

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

* [PATCH 12/22] Remove features/i386/i386-*linux.c
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (17 preceding siblings ...)
  2017-08-21 15:31 ` [PATCH 06/22] Use VEC for target_desc.reg_defs Yao Qi
@ 2017-08-21 15:31 ` Yao Qi
  2017-08-21 15:31 ` [PATCH 13/22] [GDBserver] Use pre-generated tdesc as test Yao Qi
                   ` (3 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:31 UTC (permalink / raw)
  To: gdb-patches

Now, features/i386/i386-XXX-linux.c are not used, remove them.

gdb:

2017-05-26  Yao Qi  <yao.qi@linaro.org>

	* features/Makefile (XMLTOC): Remove i386/i386-XX-linux.xml.
	* features/i386/i386-avx-avx512-linux.c: Remove.
	* features/i386/i386-avx-linux.c: Remove.
	* features/i386/i386-avx-mpx-avx512-pku-linux.c: Remove.
	* features/i386/i386-avx-mpx-linux.c: Remove.
	* features/i386/i386-linux.c: Remove.
	* features/i386/i386-mmx-linux.c: Remove.
	* features/i386/i386-mpx-linux.c: Remove.
---
 gdb/features/Makefile                             |   7 -
 gdb/features/i386/i386-avx-avx512-linux.c         | 170 -----------------
 gdb/features/i386/i386-avx-linux.c                | 149 ---------------
 gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c | 211 ----------------------
 gdb/features/i386/i386-avx-mpx-linux.c            | 187 -------------------
 gdb/features/i386/i386-linux.c                    | 139 --------------
 gdb/features/i386/i386-mmx-linux.c                |  78 --------
 gdb/features/i386/i386-mpx-linux.c                | 177 ------------------
 8 files changed, 1118 deletions(-)
 delete mode 100644 gdb/features/i386/i386-avx-avx512-linux.c
 delete mode 100644 gdb/features/i386/i386-avx-linux.c
 delete mode 100644 gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c
 delete mode 100644 gdb/features/i386/i386-avx-mpx-linux.c
 delete mode 100644 gdb/features/i386/i386-linux.c
 delete mode 100644 gdb/features/i386/i386-mmx-linux.c
 delete mode 100644 gdb/features/i386/i386-mpx-linux.c

diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index df24d74..5a59e78 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -150,18 +150,11 @@ XMLTOC = \
 	i386/amd64-avx-mpx-linux.xml \
 	i386/amd64-avx-mpx.xml \
 	i386/amd64.xml \
-	i386/i386-avx-linux.xml \
 	i386/i386-avx.xml \
-	i386/i386-avx-avx512-linux.xml \
 	i386/i386-avx-avx512.xml \
-	i386/i386-avx-mpx-avx512-pku-linux.xml \
 	i386/i386-avx-mpx-avx512-pku.xml \
-	i386/i386-linux.xml \
-	i386/i386-mmx-linux.xml \
 	i386/i386-mmx.xml \
-	i386/i386-mpx-linux.xml \
 	i386/i386-mpx.xml \
-	i386/i386-avx-mpx-linux.xml \
 	i386/i386-avx-mpx.xml \
 	i386/i386.xml \
 	i386/x32-avx-linux.xml \
diff --git a/gdb/features/i386/i386-avx-avx512-linux.c b/gdb/features/i386/i386-avx-avx512-linux.c
deleted file mode 100644
index 545149d..0000000
--- a/gdb/features/i386/i386-avx-avx512-linux.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-avx-avx512-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_avx_avx512_linux;
-static void
-initialize_tdesc_i386_avx_avx512_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_eax", 41, 1, NULL, 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 42, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 43, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 44, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 45, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 46, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 47, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 48, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 49, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512");
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_create_vector (feature, "v2ui128", field_type, 2);
-
-  tdesc_create_reg (feature, "k0", 50, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k1", 51, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k2", 52, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k3", 53, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k4", 54, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k5", 55, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k6", 56, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k7", 57, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "zmm0h", 58, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm1h", 59, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm2h", 60, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm3h", 61, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm4h", 62, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm5h", 63, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm6h", 64, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm7h", 65, 1, NULL, 256, "v2ui128");
-
-  tdesc_i386_avx_avx512_linux = result;
-}
diff --git a/gdb/features/i386/i386-avx-linux.c b/gdb/features/i386/i386-avx-linux.c
deleted file mode 100644
index 3ef087d..0000000
--- a/gdb/features/i386/i386-avx-linux.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-avx-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_avx_linux;
-static void
-initialize_tdesc_i386_avx_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_eax", 41, 1, NULL, 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 42, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 43, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 44, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 45, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 46, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 47, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 48, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 49, 1, NULL, 128, "uint128");
-
-  tdesc_i386_avx_linux = result;
-}
diff --git a/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c b/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c
deleted file mode 100644
index e6eebf1..0000000
--- a/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-avx-mpx-avx512-pku-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_avx_mpx_avx512_pku_linux;
-static void
-initialize_tdesc_i386_avx_mpx_avx512_pku_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_eax", 41, 1, NULL, 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 42, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 43, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 44, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 45, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 46, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 47, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 48, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 49, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 31);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 31);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 50, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 51, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 52, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 53, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 54, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 55, 1, NULL, 64, "status");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512");
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_create_vector (feature, "v2ui128", field_type, 2);
-
-  tdesc_create_reg (feature, "k0", 56, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k1", 57, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k2", 58, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k3", 59, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k4", 60, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k5", 61, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k6", 62, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k7", 63, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "zmm0h", 64, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm1h", 65, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm2h", 66, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm3h", 67, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm4h", 68, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm5h", 69, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm6h", 70, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm7h", 71, 1, NULL, 256, "v2ui128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.pkeys");
-  tdesc_create_reg (feature, "pkru", 72, 1, NULL, 32, "uint32");
-
-  tdesc_i386_avx_mpx_avx512_pku_linux = result;
-}
diff --git a/gdb/features/i386/i386-avx-mpx-linux.c b/gdb/features/i386/i386-avx-mpx-linux.c
deleted file mode 100644
index f62c487..0000000
--- a/gdb/features/i386/i386-avx-mpx-linux.c
+++ /dev/null
@@ -1,187 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-avx-mpx-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_avx_mpx_linux;
-static void
-initialize_tdesc_i386_avx_mpx_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_eax", 41, 1, NULL, 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 42, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 43, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 44, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 45, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 46, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 47, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 48, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 49, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 31);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 31);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 50, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 51, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 52, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 53, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 54, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 55, 1, NULL, 64, "status");
-
-  tdesc_i386_avx_mpx_linux = result;
-}
diff --git a/gdb/features/i386/i386-linux.c b/gdb/features/i386/i386-linux.c
deleted file mode 100644
index 0394842..0000000
--- a/gdb/features/i386/i386-linux.c
+++ /dev/null
@@ -1,139 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_linux;
-static void
-initialize_tdesc_i386_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_eax", 41, 1, NULL, 32, "int");
-
-  tdesc_i386_linux = result;
-}
diff --git a/gdb/features/i386/i386-mmx-linux.c b/gdb/features/i386/i386-mmx-linux.c
deleted file mode 100644
index 1577972..0000000
--- a/gdb/features/i386/i386-mmx-linux.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-mmx-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_mmx_linux;
-static void
-initialize_tdesc_i386_mmx_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_eax", 41, 1, NULL, 32, "int");
-
-  tdesc_i386_mmx_linux = result;
-}
diff --git a/gdb/features/i386/i386-mpx-linux.c b/gdb/features/i386/i386-mpx-linux.c
deleted file mode 100644
index 6dea8e0..0000000
--- a/gdb/features/i386/i386-mpx-linux.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-mpx-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_mpx_linux;
-static void
-initialize_tdesc_i386_mpx_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_eax", 41, 1, NULL, 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 31);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 31);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 42, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 43, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 44, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 45, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 46, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 47, 1, NULL, 64, "status");
-
-  tdesc_i386_mpx_linux = result;
-}
-- 
1.9.1

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

* [PATCH 22/22] Convert the rest x86 target descriptions
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (20 preceding siblings ...)
  2017-08-21 15:31 ` [PATCH 14/22] [GDBserver] Shorten srv_i386_linux_xmlfiles Yao Qi
@ 2017-08-21 15:31 ` Yao Qi
  2017-09-05  9:04 ` [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:31 UTC (permalink / raw)
  To: gdb-patches

This patch changes the rest of x86 target descriptions in GDB and
GDBserver.  This patch touches lynx and nto GDBserver, but I can't find
a cross compiler to build GDBserver for them.

gdb:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

	* amd64-tdep.c (amd64_target_description): Create target
	descriptions.
	(_initialize_amd64_tdep): Don't call functions
	initialize_tdesc_amd64_*.  Add self tests.
	* arch/amd64.c (amd64_create_target_description): Add parameter
	is_linux.  Call set_tdesc_osabi if is_linux is true.
	* arch/amd64.h (amd64_create_target_description): Update the
	declaration.
	* arch/i386.c (i386_create_target_description): Add parameter
	is_linux.  Call set_tdesc_osabi if is_linux is true.
	* arch/i386.h (i386_create_target_description): Update
	declaration.
	* configure.tgt: Add i386.o to gdb_target_obs.
	* features/Makefile (XMLTOC): Remove i386/*.xml.
	* features/i386/amd64-avx-avx512.c: Remove.
	* features/i386/amd64-avx-mpx-avx512-pku.c: Remove.
	* features/i386/amd64-avx-mpx.c: Remove.
	* features/i386/amd64-avx.c: Remove.
	* features/i386/amd64-mpx.c: Remove.
	* features/i386/amd64.c: Remove.
	* features/i386/i386-avx-avx512.c: Remove.
	* features/i386/i386-avx-mpx-avx512-pku.c: Remove.
	* features/i386/i386-avx-mpx.c: Remove.
	* features/i386/i386-avx.c: Remove.
	* features/i386/i386-mmx.c: Remove.
	* features/i386/i386-mpx.c: Remove.
	* features/i386/i386.c: Remove.
	* i386-tdep.c: Don't include features/i386/i386*.c., include
	target-descriptions.h and arch/i386.h.
	(i386_target_description): Create target descriptions.
	(i386_gdbarch_init): Don't call initialize_tdesc_i386_*
	functions.  Do self tests.

gdb/gdbserver:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

	* configure.srv (srv_i386_regobj): Remove.
	(srv_amd64_regobj): Remove.
	(srv_regobj): Set it to "" for x86 non-linux targets.
	* linux-x86-tdesc.c (i386_linux_read_description):
	* lynx-i386-low.c: Include x86-xstate.h and arch/i386.h.
	(init_registers_i386): Remove the declaration.
	(tdesc_i386): Remove the declaration.
	(lynx_i386_arch_setup): Call i386_create_target_description.
	* nto-x86-low.c: Likewise.
	* win32-i386-low.c [__x86_64__]: include arch/amd64.h.
	[!__x86_64__]: include arch/i386.h.
	(i386_arch_setup) [__x86_64__]: Call amd64_create_target_description.
---
 gdb/amd64-linux-tdep.c                       |   2 +-
 gdb/amd64-tdep.c                             |  66 +++---
 gdb/arch/amd64.c                             |  11 +-
 gdb/arch/amd64.h                             |   3 +-
 gdb/arch/i386.c                              |   8 +-
 gdb/arch/i386.h                              |   2 +-
 gdb/configure.tgt                            |  56 ++---
 gdb/features/Makefile                        |  13 --
 gdb/features/i386/amd64-avx-avx512.c         | 283 -----------------------
 gdb/features/i386/amd64-avx-mpx-avx512-pku.c | 324 ---------------------------
 gdb/features/i386/amd64-avx-mpx.c            | 210 -----------------
 gdb/features/i386/amd64-avx.c                | 172 --------------
 gdb/features/i386/amd64-mpx.c                | 192 ----------------
 gdb/features/i386/amd64.c                    | 154 -------------
 gdb/features/i386/i386-avx-avx512.c          | 165 --------------
 gdb/features/i386/i386-avx-mpx-avx512-pku.c  | 206 -----------------
 gdb/features/i386/i386-avx-mpx.c             | 182 ---------------
 gdb/features/i386/i386-avx.c                 | 144 ------------
 gdb/features/i386/i386-mmx.c                 |  73 ------
 gdb/features/i386/i386-mpx.c                 | 172 --------------
 gdb/features/i386/i386.c                     | 134 -----------
 gdb/gdbserver/configure.srv                  |  26 ++-
 gdb/gdbserver/linux-x86-tdesc.c              |   4 +-
 gdb/gdbserver/lynx-i386-low.c                |   9 +-
 gdb/gdbserver/nto-x86-low.c                  |  11 +-
 gdb/gdbserver/win32-i386-low.c               |  22 +-
 gdb/i386-linux-tdep.c                        |   2 +-
 gdb/i386-tdep.c                              |  75 ++++---
 28 files changed, 153 insertions(+), 2568 deletions(-)
 delete mode 100644 gdb/features/i386/amd64-avx-avx512.c
 delete mode 100644 gdb/features/i386/amd64-avx-mpx-avx512-pku.c
 delete mode 100644 gdb/features/i386/amd64-avx-mpx.c
 delete mode 100644 gdb/features/i386/amd64-avx.c
 delete mode 100644 gdb/features/i386/amd64-mpx.c
 delete mode 100644 gdb/features/i386/amd64.c
 delete mode 100644 gdb/features/i386/i386-avx-avx512.c
 delete mode 100644 gdb/features/i386/i386-avx-mpx-avx512-pku.c
 delete mode 100644 gdb/features/i386/i386-avx-mpx.c
 delete mode 100644 gdb/features/i386/i386-avx.c
 delete mode 100644 gdb/features/i386/i386-mmx.c
 delete mode 100644 gdb/features/i386/i386-mpx.c
 delete mode 100644 gdb/features/i386/i386.c

diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index 7fbd328..89d3b6a 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -1589,7 +1589,7 @@ amd64_linux_read_description (uint64_t xcr0_features_bit, bool is_x32)
     }
 
   if (*tdesc == NULL)
-    *tdesc = amd64_create_target_description (xcr0_features_bit, is_x32);
+    *tdesc = amd64_create_target_description (xcr0_features_bit, is_x32, true);
 
   return *tdesc;
 }
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index 89a060d..d459eb2 100644
--- a/gdb/amd64-tdep.c
+++ b/gdb/amd64-tdep.c
@@ -41,14 +41,8 @@
 #include "i387-tdep.h"
 #include "x86-xstate.h"
 #include <algorithm>
-
-#include "features/i386/amd64.c"
-#include "features/i386/amd64-avx.c"
-#include "features/i386/amd64-mpx.c"
-#include "features/i386/amd64-avx-mpx.c"
-#include "features/i386/amd64-avx-avx512.c"
-#include "features/i386/amd64-avx-mpx-avx512-pku.c"
-
+#include "target-descriptions.h"
+#include "arch/amd64.h"
 #include "ax.h"
 #include "ax-gdb.h"
 
@@ -3212,21 +3206,19 @@ amd64_x32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch,
 const struct target_desc *
 amd64_target_description (uint64_t xcr0)
 {
-  switch (xcr0 & X86_XSTATE_ALL_MASK)
-    {
-    case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK:
-      return tdesc_amd64_avx_mpx_avx512_pku;
-    case X86_XSTATE_AVX_AVX512_MASK:
-      return tdesc_amd64_avx_avx512;
-    case X86_XSTATE_MPX_MASK:
-      return tdesc_amd64_mpx;
-    case X86_XSTATE_AVX_MPX_MASK:
-      return tdesc_amd64_avx_mpx;
-    case X86_XSTATE_AVX_MASK:
-      return tdesc_amd64_avx;
-    default:
-      return tdesc_amd64;
-    }
+  static target_desc *amd64_tdescs \
+    [2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/] = {};
+  target_desc **tdesc;
+
+  tdesc = &amd64_tdescs[(xcr0 & X86_XSTATE_AVX) ? 1 : 0]
+    [(xcr0 & X86_XSTATE_MPX) ? 1 : 0]
+    [(xcr0 & X86_XSTATE_AVX512) ? 1 : 0]
+    [(xcr0 & X86_XSTATE_PKRU) ? 1 : 0];
+
+  if (*tdesc == NULL)
+    *tdesc = amd64_create_target_description (xcr0, false, false);
+
+  return *tdesc;
 }
 
 /* Provide a prototype to silence -Wmissing-prototypes.  */
@@ -3235,12 +3227,28 @@ void _initialize_amd64_tdep (void);
 void
 _initialize_amd64_tdep (void)
 {
-  initialize_tdesc_amd64 ();
-  initialize_tdesc_amd64_avx ();
-  initialize_tdesc_amd64_mpx ();
-  initialize_tdesc_amd64_avx_mpx ();
-  initialize_tdesc_amd64_avx_avx512 ();
-  initialize_tdesc_amd64_avx_mpx_avx512_pku ();
+#if GDB_SELF_TEST
+  struct
+  {
+    const char *xml;
+    uint64_t mask;
+  } xml_masks[] = {
+    { "i386/amd64.xml", X86_XSTATE_SSE_MASK },
+    { "i386/amd64-avx.xml", X86_XSTATE_AVX_MASK },
+    { "i386/amd64-mpx.xml", X86_XSTATE_MPX_MASK },
+    { "i386/amd64-avx-mpx.xml", X86_XSTATE_AVX_MPX_MASK },
+    { "i386/amd64-avx-avx512.xml", X86_XSTATE_AVX_AVX512_MASK },
+    { "i386/amd64-avx-mpx-avx512-pku.xml",
+      X86_XSTATE_AVX_MPX_AVX512_PKU_MASK },
+  };
+
+  for (auto &a : xml_masks)
+    {
+      auto tdesc = amd64_target_description (a.mask);
+
+      selftests::record_xml_tdesc (a.xml, tdesc);
+    }
+#endif /* GDB_SELF_TEST */
 }
 \f
 
diff --git a/gdb/arch/amd64.c b/gdb/arch/amd64.c
index 626733d..30c73e6 100644
--- a/gdb/arch/amd64.c
+++ b/gdb/arch/amd64.c
@@ -31,17 +31,19 @@
 #include "../features/i386/x32-core.c"
 
 /* Create amd64 target descriptions according to XCR0.  If IS_X32 is
-   true, create the x32 ones.  */
+   true, create the x32 ones.  If IS_LINUX is true, create target
+   descriptions for Linux.  */
 
 target_desc *
-amd64_create_target_description (uint64_t xcr0, bool is_x32)
+amd64_create_target_description (uint64_t xcr0, bool is_x32, bool is_linux)
 {
   target_desc *tdesc = allocate_target_description ();
 
 #ifndef IN_PROCESS_AGENT
   set_tdesc_architecture (tdesc, is_x32 ? "i386:x64-32" : "i386:x86-64");
 
-  set_tdesc_osabi (tdesc, "GNU/Linux");
+  if (is_linux)
+    set_tdesc_osabi (tdesc, "GNU/Linux");
 #endif
 
   long regnum = 0;
@@ -52,7 +54,8 @@ amd64_create_target_description (uint64_t xcr0, bool is_x32)
     regnum = create_feature_i386_64bit_core (tdesc, regnum);
 
   regnum = create_feature_i386_64bit_sse (tdesc, regnum);
-  regnum = create_feature_i386_64bit_linux (tdesc, regnum);
+  if (is_linux)
+    regnum = create_feature_i386_64bit_linux (tdesc, regnum);
   regnum = create_feature_i386_64bit_segments (tdesc, regnum);
 
   if (xcr0 & X86_XSTATE_AVX)
diff --git a/gdb/arch/amd64.h b/gdb/arch/amd64.h
index 0821a7c..22c63d2 100644
--- a/gdb/arch/amd64.h
+++ b/gdb/arch/amd64.h
@@ -18,4 +18,5 @@
 #include "tdesc.h"
 #include <stdint.h>
 
-target_desc *amd64_create_target_description (uint64_t xcr0, bool is_x32);
+target_desc *amd64_create_target_description (uint64_t xcr0, bool is_x32,
+					      bool is_linux);
diff --git a/gdb/arch/i386.c b/gdb/arch/i386.c
index 60cf63b..7d71506 100644
--- a/gdb/arch/i386.c
+++ b/gdb/arch/i386.c
@@ -31,13 +31,14 @@
 /* Create i386 target descriptions according to XCR0.  */
 
 target_desc *
-i386_create_target_description (uint64_t xcr0)
+i386_create_target_description (uint64_t xcr0, bool is_linux)
 {
   target_desc *tdesc = allocate_target_description ();
 
 #ifndef IN_PROCESS_AGENT
   set_tdesc_architecture (tdesc, "i386");
-  set_tdesc_osabi (tdesc, "GNU/Linux");
+  if (is_linux)
+    set_tdesc_osabi (tdesc, "GNU/Linux");
 #endif
 
   long regnum = 0;
@@ -48,7 +49,8 @@ i386_create_target_description (uint64_t xcr0)
   if (xcr0 & X86_XSTATE_SSE)
     regnum = create_feature_i386_32bit_sse (tdesc, regnum);
 
-  regnum = create_feature_i386_32bit_linux (tdesc, regnum);
+  if (is_linux)
+    regnum = create_feature_i386_32bit_linux (tdesc, regnum);
 
   if (xcr0 & X86_XSTATE_AVX)
     regnum = create_feature_i386_32bit_avx (tdesc, regnum);
diff --git a/gdb/arch/i386.h b/gdb/arch/i386.h
index 0163372..c44e24b 100644
--- a/gdb/arch/i386.h
+++ b/gdb/arch/i386.h
@@ -18,4 +18,4 @@
 #include "tdesc.h"
 #include <stdint.h>
 
-target_desc *i386_create_target_description (uint64_t xcr0);
+target_desc *i386_create_target_description (uint64_t xcr0, bool is_linux);
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index 402d6ba..2b48749 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -184,7 +184,7 @@ hppa*-*-*)
 
 i[34567]86-*-darwin*)
 	# Target: Darwin/i386
-	gdb_target_obs="i386-tdep.o i387-tdep.o \
+	gdb_target_obs="i386-tdep.o i386.o i387-tdep.o \
 			i386-darwin-tdep.o solib-darwin.o"
 	if test "x$enable_64_bit_bfd" = "xyes"; then
 	    # Target: GNU/Linux x86-64
@@ -193,38 +193,40 @@ i[34567]86-*-darwin*)
 	;;
 i[34567]86-*-dicos*)
 	# Target: DICOS/i386
-	gdb_target_obs="i386-tdep.o i387-tdep.o dicos-tdep.o i386-dicos-tdep.o"
+	gdb_target_obs="i386-tdep.o i386.o i387-tdep.o dicos-tdep.o i386-dicos-tdep.o"
 	;;
 i[34567]86-*-freebsd* | i[34567]86-*-kfreebsd*-gnu)
 	# Target: FreeBSD/i386
-	gdb_target_obs="i386-tdep.o i387-tdep.o i386-bsd-tdep.o i386-fbsd-tdep.o \
-			fbsd-tdep.o solib-svr4.o"
+	gdb_target_obs="i386-tdep.o i386.o i387-tdep.o i386-bsd-tdep.o \
+			i386-fbsd-tdep.o fbsd-tdep.o solib-svr4.o"
 	;;
 i[34567]86-*-netbsd* | i[34567]86-*-knetbsd*-gnu)
 	# Target: NetBSD/i386
-	gdb_target_obs="i386-tdep.o i387-tdep.o i386-bsd-tdep.o i386-nbsd-tdep.o \
-			nbsd-tdep.o solib-svr4.o"
+	gdb_target_obs="i386-tdep.o i386.o i387-tdep.o i386-bsd-tdep.o \
+			i386-nbsd-tdep.o nbsd-tdep.o solib-svr4.o"
 	;;
 i[34567]86-*-openbsd*)
 	# Target: OpenBSD/i386
-	gdb_target_obs="i386-tdep.o i387-tdep.o i386-bsd-tdep.o i386-obsd-tdep.o \
-			obsd-tdep.o bsd-uthread.o solib-svr4.o"
+	gdb_target_obs="i386-tdep.o i386.o i387-tdep.o i386-bsd-tdep.o \
+			i386-obsd-tdep.o obsd-tdep.o bsd-uthread.o \
+			solib-svr4.o"
 	;;
 i[34567]86-*-nto*)
 	# Target: Intel 386 running qnx6.
-	gdb_target_obs="i386-tdep.o i387-tdep.o solib-svr4.o \
+	gdb_target_obs="i386-tdep.o i386.o i387-tdep.o solib-svr4.o \
 			i386-nto-tdep.o nto-tdep.o"
 	build_gdbserver=yes
 	;;
 i[34567]86-*-solaris2.1[0-9]* | x86_64-*-solaris2.1[0-9]*)
 	# Target: Solaris x86_64
-	gdb_target_obs="i386-tdep.o i387-tdep.o amd64-tdep.o amd64-sol2-tdep.o \
-			i386-sol2-tdep.o sol2-tdep.o solib-svr4.o"
+	gdb_target_obs="i386-tdep.o i386.o i387-tdep.o amd64-tdep.o \
+			 amd64-sol2-tdep.o i386-sol2-tdep.o sol2-tdep.o \
+			 solib-svr4.o"
 	;;
 i[34567]86-*-solaris*)
 	# Target: Solaris x86
 	gdb_target_obs="i386-tdep.o i387-tdep.o i386-sol2-tdep.o sol2-tdep.o \
-			solib-svr4.o"
+			i386.o solib-svr4.o"
 	;;
 i[34567]86-*-linux*)
 	# Target: Intel 386 running GNU/Linux
@@ -240,27 +242,27 @@ i[34567]86-*-linux*)
 	;;
 i[34567]86-*-gnu*)
 	# Target: Intel 386 running the GNU Hurd
-	gdb_target_obs="i386-tdep.o i387-tdep.o i386-gnu-tdep.o solib-svr4.o"
+	gdb_target_obs="i386-tdep.o i386.o i387-tdep.o i386-gnu-tdep.o solib-svr4.o"
 	;;
 i[34567]86-*-cygwin*)
 	# Target: Intel 386 running win32
-	gdb_target_obs="i386-tdep.o i386-cygwin-tdep.o i387-tdep.o \
+	gdb_target_obs="i386-tdep.o i386.o i386-cygwin-tdep.o i387-tdep.o \
 			windows-tdep.o"
 	build_gdbserver=yes
 	;;
 i[34567]86-*-mingw32*)
 	# Target: Intel 386 running win32
-	gdb_target_obs="i386-tdep.o i386-cygwin-tdep.o i387-tdep.o \
+	gdb_target_obs="i386-tdep.o i386.o i386-cygwin-tdep.o i387-tdep.o \
 			windows-tdep.o"
 	build_gdbserver=yes
 	;;
 i[34567]86-*-go32* | i[34567]86-*-msdosdjgpp*)
 	# Target: i386 running DJGPP/go32.
-	gdb_target_obs="i386-tdep.o i387-tdep.o i386-go32-tdep.o"
+	gdb_target_obs="i386-tdep.o i386.o i387-tdep.o i386-go32-tdep.o"
 	;;
 i[34567]86-*-*)
 	# Target: i386
-	gdb_target_obs="i386-tdep.o i387-tdep.o"
+	gdb_target_obs="i386-tdep.o i386.o i387-tdep.o"
 	;;
 
 ia64-*-linux*)
@@ -663,18 +665,18 @@ vax-*-*)
 
 x86_64-*-darwin*)
 	# Target: Darwin/x86-64
-	gdb_target_obs="amd64-tdep.o i386-tdep.o i387-tdep.o \
+	gdb_target_obs="amd64-tdep.o amd64.o i386-tdep.o i387-tdep.o \
 			i386-darwin-tdep.o amd64-darwin-tdep.o \
                         solib-darwin.o"
 	;;
 
 x86_64-*-dicos*)
 	# Target: DICOS/x86-64
-	gdb_target_obs="amd64-tdep.o i386-tdep.o i387-tdep.o \
+	gdb_target_obs="amd64-tdep.o amd64.o i386-tdep.o i387-tdep.o \
 			dicos-tdep.o i386-dicos-tdep.o amd64-dicos-tdep.o"
 	;;
 x86_64-*-elf*)
-	gdb_target_obs="amd64-tdep.o i386-tdep.o i387-tdep.o"
+	gdb_target_obs="amd64-tdep.o amd64.o i386-tdep.o i387-tdep.o"
 	;;
 x86_64-*-linux*)
 	# Target: GNU/Linux x86-64
@@ -685,30 +687,30 @@ x86_64-*-linux*)
 	;;
 x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
 	# Target: FreeBSD/amd64
-	gdb_target_obs="amd64-tdep.o amd64-fbsd-tdep.o i386-tdep.o \
+	gdb_target_obs="amd64-tdep.o amd64.o amd64-fbsd-tdep.o i386-tdep.o \
 			i387-tdep.o i386-bsd-tdep.o i386-fbsd-tdep.o \
 			fbsd-tdep.o solib-svr4.o"
 	;;
 x86_64-*-mingw* | x86_64-*-cygwin*)
         # Target: MingW/amd64
-	gdb_target_obs="amd64-tdep.o amd64-windows-tdep.o \
-                        i386-tdep.o i386-cygwin-tdep.o i387-tdep.o \
+	gdb_target_obs="amd64-tdep.o amd64.o amd64-windows-tdep.o \
+                        i386-tdep.o i386.o i386-cygwin-tdep.o i387-tdep.o \
                         windows-tdep.o"
 	build_gdbserver=yes
         ;;
 x86_64-*-netbsd* | x86_64-*-knetbsd*-gnu)
 	# Target: NetBSD/amd64
-	gdb_target_obs="amd64-tdep.o amd64-nbsd-tdep.o i386-tdep.o i387-tdep.o \
-			nbsd-tdep.o solib-svr4.o"
+	gdb_target_obs="amd64-tdep.o amd64.o amd64-nbsd-tdep.o i386-tdep.o \
+			i387-tdep.o nbsd-tdep.o solib-svr4.o"
 	;;
 x86_64-*-openbsd*)
 	# Target: OpenBSD/amd64
-	gdb_target_obs="amd64-tdep.o amd64-obsd-tdep.o i386-tdep.o \
+	gdb_target_obs="amd64-tdep.o amd64.o amd64-obsd-tdep.o i386-tdep.o \
 			i387-tdep.o i386-bsd-tdep.o i386-obsd-tdep.o \
 			obsd-tdep.o bsd-uthread.o solib-svr4.o"
 	;;
 x86_64-*-rtems*)
-	gdb_target_obs="amd64-tdep.o i386-tdep.o i387-tdep.o i386-bsd-tdep.o"
+	gdb_target_obs="amd64-tdep.o amd64.o i386-tdep.o i387-tdep.o i386-bsd-tdep.o"
 	;;
 xtensa*-*-linux*)	gdb_target=linux
 	# Target: GNU/Linux Xtensa
diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index 6c4a9b3..4a95c81 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -138,19 +138,6 @@ XMLTOC = \
 	arm/arm-with-neon.xml \
 	arm/arm-with-vfpv2.xml \
 	arm/arm-with-vfpv3.xml \
-	i386/amd64-avx.xml \
-	i386/amd64-avx-avx512.xml \
-	i386/amd64-avx-mpx-avx512-pku.xml \
-	i386/amd64-mpx.xml \
-	i386/amd64-avx-mpx.xml \
-	i386/amd64.xml \
-	i386/i386-avx.xml \
-	i386/i386-avx-avx512.xml \
-	i386/i386-avx-mpx-avx512-pku.xml \
-	i386/i386-mmx.xml \
-	i386/i386-mpx.xml \
-	i386/i386-avx-mpx.xml \
-	i386/i386.xml \
 	microblaze-with-stack-protect.xml \
 	microblaze.xml \
 	mips-dsp-linux.xml \
diff --git a/gdb/features/i386/amd64-avx-avx512.c b/gdb/features/i386/amd64-avx-avx512.c
deleted file mode 100644
index 354d826..0000000
--- a/gdb/features/i386/amd64-avx-avx512.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64-avx-avx512.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64_avx_avx512;
-static void
-initialize_tdesc_amd64_avx_avx512 (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 57, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 58, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 59, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 72, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 73, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 74, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_create_vector (feature, "v2ui128", field_type, 2);
-
-  tdesc_create_reg (feature, "xmm16", 75, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm17", 76, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm18", 77, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm19", 78, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm20", 79, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm21", 80, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm22", 81, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm23", 82, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm24", 83, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm25", 84, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm26", 85, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm27", 86, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm28", 87, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm29", 88, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm30", 89, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm31", 90, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "ymm16h", 91, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm17h", 92, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm18h", 93, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm19h", 94, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm20h", 95, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm21h", 96, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm22h", 97, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm23h", 98, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm24h", 99, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm25h", 100, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm26h", 101, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm27h", 102, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm28h", 103, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm29h", 104, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm30h", 105, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm31h", 106, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "k0", 107, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k1", 108, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k2", 109, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k3", 110, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k4", 111, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k5", 112, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k6", 113, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k7", 114, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "zmm0h", 115, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm1h", 116, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm2h", 117, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm3h", 118, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm4h", 119, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm5h", 120, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm6h", 121, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm7h", 122, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm8h", 123, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm9h", 124, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm10h", 125, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm11h", 126, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm12h", 127, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm13h", 128, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm14h", 129, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm15h", 130, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm16h", 131, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm17h", 132, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm18h", 133, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm19h", 134, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm20h", 135, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm21h", 136, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm22h", 137, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm23h", 138, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm24h", 139, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm25h", 140, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm26h", 141, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm27h", 142, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm28h", 143, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm29h", 144, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm30h", 145, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm31h", 146, 1, NULL, 256, "v2ui128");
-
-  tdesc_amd64_avx_avx512 = result;
-}
diff --git a/gdb/features/i386/amd64-avx-mpx-avx512-pku.c b/gdb/features/i386/amd64-avx-mpx-avx512-pku.c
deleted file mode 100644
index bade64d..0000000
--- a/gdb/features/i386/amd64-avx-mpx-avx512-pku.c
+++ /dev/null
@@ -1,324 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64-avx-mpx-avx512-pku.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64_avx_mpx_avx512_pku;
-static void
-initialize_tdesc_amd64_avx_mpx_avx512_pku (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 57, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 58, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 59, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 72, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 73, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 74, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 63);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 63);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 75, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 76, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 77, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 78, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 79, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 80, 1, NULL, 64, "status");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_create_vector (feature, "v2ui128", field_type, 2);
-
-  tdesc_create_reg (feature, "xmm16", 81, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm17", 82, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm18", 83, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm19", 84, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm20", 85, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm21", 86, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm22", 87, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm23", 88, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm24", 89, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm25", 90, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm26", 91, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm27", 92, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm28", 93, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm29", 94, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm30", 95, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm31", 96, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "ymm16h", 97, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm17h", 98, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm18h", 99, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm19h", 100, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm20h", 101, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm21h", 102, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm22h", 103, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm23h", 104, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm24h", 105, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm25h", 106, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm26h", 107, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm27h", 108, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm28h", 109, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm29h", 110, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm30h", 111, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm31h", 112, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "k0", 113, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k1", 114, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k2", 115, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k3", 116, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k4", 117, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k5", 118, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k6", 119, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k7", 120, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "zmm0h", 121, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm1h", 122, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm2h", 123, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm3h", 124, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm4h", 125, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm5h", 126, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm6h", 127, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm7h", 128, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm8h", 129, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm9h", 130, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm10h", 131, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm11h", 132, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm12h", 133, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm13h", 134, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm14h", 135, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm15h", 136, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm16h", 137, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm17h", 138, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm18h", 139, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm19h", 140, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm20h", 141, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm21h", 142, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm22h", 143, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm23h", 144, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm24h", 145, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm25h", 146, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm26h", 147, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm27h", 148, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm28h", 149, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm29h", 150, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm30h", 151, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm31h", 152, 1, NULL, 256, "v2ui128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.pkeys");
-  tdesc_create_reg (feature, "pkru", 153, 1, NULL, 32, "uint32");
-
-  tdesc_amd64_avx_mpx_avx512_pku = result;
-}
diff --git a/gdb/features/i386/amd64-avx-mpx.c b/gdb/features/i386/amd64-avx-mpx.c
deleted file mode 100644
index 5dced15..0000000
--- a/gdb/features/i386/amd64-avx-mpx.c
+++ /dev/null
@@ -1,210 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64-avx-mpx.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64_avx_mpx;
-static void
-initialize_tdesc_amd64_avx_mpx (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 57, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 58, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 59, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 72, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 73, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 74, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 63);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 63);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 75, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 76, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 77, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 78, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 79, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 80, 1, NULL, 64, "status");
-
-  tdesc_amd64_avx_mpx = result;
-}
diff --git a/gdb/features/i386/amd64-avx.c b/gdb/features/i386/amd64-avx.c
deleted file mode 100644
index 016689a..0000000
--- a/gdb/features/i386/amd64-avx.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64-avx.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64_avx;
-static void
-initialize_tdesc_amd64_avx (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 57, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 58, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 59, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 72, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 73, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 74, 1, NULL, 128, "uint128");
-
-  tdesc_amd64_avx = result;
-}
diff --git a/gdb/features/i386/amd64-mpx.c b/gdb/features/i386/amd64-mpx.c
deleted file mode 100644
index ed7767d..0000000
--- a/gdb/features/i386/amd64-mpx.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64-mpx.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64_mpx;
-static void
-initialize_tdesc_amd64_mpx (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 57, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 58, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 63);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 63);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 59, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 60, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 61, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 62, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 63, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 64, 1, NULL, 64, "status");
-
-  tdesc_amd64_mpx = result;
-}
diff --git a/gdb/features/i386/amd64.c b/gdb/features/i386/amd64.c
deleted file mode 100644
index 4ad79cb..0000000
--- a/gdb/features/i386/amd64.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64;
-static void
-initialize_tdesc_amd64 (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 57, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 58, 1, NULL, 64, "int");
-
-  tdesc_amd64 = result;
-}
diff --git a/gdb/features/i386/i386-avx-avx512.c b/gdb/features/i386/i386-avx-avx512.c
deleted file mode 100644
index 585a0ac..0000000
--- a/gdb/features/i386/i386-avx-avx512.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-avx-avx512.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_avx_avx512;
-static void
-initialize_tdesc_i386_avx_avx512 (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 41, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 42, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 43, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 44, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 45, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 46, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 47, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 48, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512");
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_create_vector (feature, "v2ui128", field_type, 2);
-
-  tdesc_create_reg (feature, "k0", 49, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k1", 50, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k2", 51, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k3", 52, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k4", 53, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k5", 54, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k6", 55, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k7", 56, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "zmm0h", 57, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm1h", 58, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm2h", 59, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm3h", 60, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm4h", 61, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm5h", 62, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm6h", 63, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm7h", 64, 1, NULL, 256, "v2ui128");
-
-  tdesc_i386_avx_avx512 = result;
-}
diff --git a/gdb/features/i386/i386-avx-mpx-avx512-pku.c b/gdb/features/i386/i386-avx-mpx-avx512-pku.c
deleted file mode 100644
index d7dd3bb..0000000
--- a/gdb/features/i386/i386-avx-mpx-avx512-pku.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-avx-mpx-avx512-pku.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_avx_mpx_avx512_pku;
-static void
-initialize_tdesc_i386_avx_mpx_avx512_pku (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 41, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 42, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 43, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 44, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 45, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 46, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 47, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 48, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 31);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 31);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 49, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 50, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 51, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 52, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 53, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 54, 1, NULL, 64, "status");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512");
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_create_vector (feature, "v2ui128", field_type, 2);
-
-  tdesc_create_reg (feature, "k0", 55, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k1", 56, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k2", 57, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k3", 58, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k4", 59, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k5", 60, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k6", 61, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k7", 62, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "zmm0h", 63, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm1h", 64, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm2h", 65, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm3h", 66, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm4h", 67, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm5h", 68, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm6h", 69, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm7h", 70, 1, NULL, 256, "v2ui128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.pkeys");
-  tdesc_create_reg (feature, "pkru", 71, 1, NULL, 32, "uint32");
-
-  tdesc_i386_avx_mpx_avx512_pku = result;
-}
diff --git a/gdb/features/i386/i386-avx-mpx.c b/gdb/features/i386/i386-avx-mpx.c
deleted file mode 100644
index f479bda..0000000
--- a/gdb/features/i386/i386-avx-mpx.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-avx-mpx.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_avx_mpx;
-static void
-initialize_tdesc_i386_avx_mpx (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 41, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 42, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 43, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 44, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 45, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 46, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 47, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 48, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 31);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 31);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 49, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 50, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 51, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 52, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 53, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 54, 1, NULL, 64, "status");
-
-  tdesc_i386_avx_mpx = result;
-}
diff --git a/gdb/features/i386/i386-avx.c b/gdb/features/i386/i386-avx.c
deleted file mode 100644
index f888335..0000000
--- a/gdb/features/i386/i386-avx.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-avx.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_avx;
-static void
-initialize_tdesc_i386_avx (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 41, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 42, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 43, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 44, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 45, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 46, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 47, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 48, 1, NULL, 128, "uint128");
-
-  tdesc_i386_avx = result;
-}
diff --git a/gdb/features/i386/i386-mmx.c b/gdb/features/i386/i386-mmx.c
deleted file mode 100644
index 02aee89..0000000
--- a/gdb/features/i386/i386-mmx.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-mmx.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_mmx;
-static void
-initialize_tdesc_i386_mmx (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  tdesc_i386_mmx = result;
-}
diff --git a/gdb/features/i386/i386-mpx.c b/gdb/features/i386/i386-mpx.c
deleted file mode 100644
index d08441b..0000000
--- a/gdb/features/i386/i386-mpx.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386-mpx.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386_mpx;
-static void
-initialize_tdesc_i386_mpx (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 31);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 31);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 41, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 42, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 43, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 44, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 45, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 46, 1, NULL, 64, "status");
-
-  tdesc_i386_mpx = result;
-}
diff --git a/gdb/features/i386/i386.c b/gdb/features/i386/i386.c
deleted file mode 100644
index eb9a266..0000000
--- a/gdb/features/i386/i386.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: i386.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_i386;
-static void
-initialize_tdesc_i386 (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ebx", 3, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "esp", 4, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "ebp", 5, 1, NULL, 32, "data_ptr");
-  tdesc_create_reg (feature, "esi", 6, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "edi", 7, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "eip", 8, 1, NULL, 32, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 9, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 10, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 11, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 12, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 13, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 14, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 15, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 16, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 17, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 18, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 19, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 20, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 21, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 22, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 23, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 24, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 25, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 26, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 27, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 28, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 29, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 30, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 31, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 35, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 36, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 37, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 38, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 39, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 40, 1, "vector", 32, "i386_mxcsr");
-
-  tdesc_i386 = result;
-}
diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index a2c5afe..2a0c2b2 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -24,8 +24,6 @@
 # Default hostio_last_error implementation
 srv_hostio_err_objs="hostio-errno.o"
 
-srv_i386_regobj="i386.o"
-
 if $development; then
    srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-avx-avx512-linux.o i386-avx-mpx-avx512-pku-linux.o i386-mpx-linux.o i386-avx-mpx-linux.o i386-mmx-linux.o linux-x86-tdesc-selftest.o"
    srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-avx-avx512-linux.o amd64-avx-mpx-avx512-pku-linux.o amd64-mpx-linux.o amd64-avx-mpx-linux.o x32-linux.o x32-avx-linux.o x32-avx-avx512-linux.o"
@@ -34,8 +32,6 @@ else
    srv_amd64_linux_regobj=""
 fi
 
-srv_amd64_regobj="amd64.o"
-
 ipa_ppc_linux_regobj="powerpc-32l-ipa.o powerpc-altivec32l-ipa.o powerpc-cell32l-ipa.o powerpc-vsx32l-ipa.o powerpc-isa205-32l-ipa.o powerpc-isa205-altivec32l-ipa.o powerpc-isa205-vsx32l-ipa.o powerpc-e500l-ipa.o powerpc-64l-ipa.o powerpc-altivec64l-ipa.o powerpc-cell64l-ipa.o powerpc-vsx64l-ipa.o powerpc-isa205-64l-ipa.o powerpc-isa205-altivec64l-ipa.o powerpc-isa205-vsx64l-ipa.o"
 
 srv_i386_32bit_xmlfiles="i386/32bit-core.xml i386/32bit-sse.xml i386/32bit-avx.xml i386/32bit-avx512.xml i386/32bit-mpx.xml i386/32bit-pkeys.xml"
@@ -115,8 +111,9 @@ case "${target}" in
 			srv_linux_usrregs=yes
 			srv_linux_thread_db=yes
 			;;
-  i[34567]86-*-cygwin*)	srv_regobj="$srv_i386_regobj"
+  i[34567]86-*-cygwin*)	srv_regobj=""
 			srv_tgtobj="x86-low.o x86-dregs.o win32-low.o win32-i386-low.o"
+			srv_tgtobj="${srv_tgtobj} arch-i386.o"
 			srv_xmlfiles="$srv_i386_xmlfiles"
 			;;
   i[34567]86-*-linux*)	srv_regobj="$srv_i386_linux_regobj"
@@ -138,16 +135,18 @@ case "${target}" in
 			ipa_obj="linux-i386-ipa.o linux-x86-tdesc-ipa.o"
 			ipa_obj="${ipa_obj} i386-ipa.o"
 			;;
-  i[34567]86-*-lynxos*)	srv_regobj="i386.o"
+  i[34567]86-*-lynxos*)	srv_regobj=""
 			srv_tgtobj="lynx-low.o lynx-i386-low.o fork-child.o fork-inferior.o"
+			srv_tgtobj="${srv_tgtobj} arch-i386.o"
 			srv_xmlfiles="i386/i386.xml"
 			srv_xmlfiles="${srv_xmlfiles} i386/32bit-core.xml"
 			srv_xmlfiles="${srv_xmlfiles} i386/32bit-sse.xml"
 			srv_lynxos=yes
 			;;
   i[34567]86-*-mingw32ce*)
-			srv_regobj="$srv_i386_regobj"
+			srv_regobj=""
 			srv_tgtobj="x86-low.o x86-dregs.o win32-low.o win32-i386-low.o"
+			srv_tgtobj="${srv_tgtobj} arch-i386.o"
 			srv_tgtobj="${srv_tgtobj} wincecompat.o"
 			srv_xmlfiles="$srv_i386_xmlfiles"
 			# hostio_last_error implementation is in win32-low.c
@@ -155,13 +154,14 @@ case "${target}" in
 			srv_mingw=yes
 			srv_mingwce=yes
 			;;
-  i[34567]86-*-mingw*)	srv_regobj="$srv_i386_regobj"
+  i[34567]86-*-mingw*)	srv_regobj=""
 			srv_tgtobj="x86-low.o x86-dregs.o win32-low.o win32-i386-low.o"
+			srv_tgtobj="${srv_tgtobj} arch-i386.o"
 			srv_xmlfiles="$srv_i386_xmlfiles"
 			srv_mingw=yes
 			;;
-  i[34567]86-*-nto*)	srv_regobj="$srv_i386_regobj"
-			srv_tgtobj="nto-low.o nto-x86-low.o"
+  i[34567]86-*-nto*)	srv_regobj=""
+			srv_tgtobj="nto-low.o nto-x86-low.o arch-i386.o"
 			srv_xmlfiles="$srv_i386_xmlfiles"
 			srv_qnx="yes"
 			;;
@@ -377,13 +377,15 @@ case "${target}" in
 			ipa_obj="linux-amd64-ipa.o linux-x86-tdesc-ipa.o"
 			ipa_obj="${ipa_obj} amd64-ipa.o"
 			;;
-  x86_64-*-mingw*)	srv_regobj="$srv_amd64_regobj"
+  x86_64-*-mingw*)	srv_regobj=""
 			srv_tgtobj="x86-low.o x86-dregs.o i387-fp.o win32-low.o win32-i386-low.o"
+			srv_tgtobj="${srv_tgtobj} arch-amd64.o"
 			srv_xmlfiles="$srv_i386_xmlfiles $srv_amd64_xmlfiles"
 			srv_mingw=yes
 			;;
-  x86_64-*-cygwin*)	srv_regobj="$srv_amd64_regobj"
+  x86_64-*-cygwin*)	srv_regobj=""
 			srv_tgtobj="x86-low.o x86-dregs.o i387-fp.o win32-low.o win32-i386-low.o"
+			srv_tgtobj="${srv_tgtobj} arch-amd64.o"
 			srv_xmlfiles="$srv_i386_xmlfiles"
 			;;
 
diff --git a/gdb/gdbserver/linux-x86-tdesc.c b/gdb/gdbserver/linux-x86-tdesc.c
index 9eb61a7..d27068c 100644
--- a/gdb/gdbserver/linux-x86-tdesc.c
+++ b/gdb/gdbserver/linux-x86-tdesc.c
@@ -86,7 +86,7 @@ i386_linux_read_description (uint64_t xcr0)
 
   if (*tdesc == NULL)
     {
-      *tdesc = i386_create_target_description (xcr0);
+      *tdesc = i386_create_target_description (xcr0, true);
 
       init_target_desc (*tdesc);
 
@@ -122,7 +122,7 @@ amd64_linux_read_description (uint64_t xcr0, bool is_x32)
 
   if (*tdesc == NULL)
     {
-      *tdesc = amd64_create_target_description (xcr0, is_x32);
+      *tdesc = amd64_create_target_description (xcr0, is_x32, true);
 
       init_target_desc (*tdesc);
 
diff --git a/gdb/gdbserver/lynx-i386-low.c b/gdb/gdbserver/lynx-i386-low.c
index 64e6c0f..57181d6 100644
--- a/gdb/gdbserver/lynx-i386-low.c
+++ b/gdb/gdbserver/lynx-i386-low.c
@@ -19,6 +19,8 @@
 #include "lynx-low.h"
 #include <limits.h>
 #include <sys/ptrace.h>
+#include "x86-xstate.h"
+#include "arch/i386.h"
 
 /* The following two typedefs are defined in a .h file which is not
    in the standard include path (/sys/include/family/x86/ucontext.h),
@@ -118,10 +120,6 @@ enum lynx_i386_gdb_regnum
   I386_SENTINEL_REGUM
 };
 
-/* Defined in auto-generated file i386.c.  */
-extern void init_registers_i386 (void);
-extern const struct target_desc *tdesc_i386;
-
 /* The fill_function for the general-purpose register set.  */
 
 static void
@@ -295,8 +293,7 @@ lynx_i386_store_fpregset (struct regcache *regcache, const char *buf)
 static void
 lynx_i386_arch_setup (void)
 {
-  init_registers_i386 ();
-  lynx_tdesc = tdesc_i386;
+  lynx_tdesc = i386_create_target_description (X86_XSTATE_SSE_MASK, false);
 }
 
 /* Description of all the x86-lynx register sets.  */
diff --git a/gdb/gdbserver/nto-x86-low.c b/gdb/gdbserver/nto-x86-low.c
index 901ac7b..cfa5993 100644
--- a/gdb/gdbserver/nto-x86-low.c
+++ b/gdb/gdbserver/nto-x86-low.c
@@ -23,12 +23,8 @@
 #include "regcache.h"
 
 #include <x86/context.h>
-
-
-/* Defined in auto-generated build-time file gdb/gdbserver/i386.c.  */
-extern void init_registers_i386 ();
-extern struct reg *regs_i386;
-extern const struct target_desc *tdesc_i386;
+#include "x86-xstate.h"
+#include "arch/i386.h"
 
 const unsigned char x86_breakpoint[] = { 0xCC };
 #define x86_breakpoint_len 1
@@ -90,9 +86,8 @@ nto_x86_register_offset (int gdbregno)
 static void
 nto_x86_arch_setup (void)
 {
-  init_registers_i386 ();
   the_low_target.num_regs = 16;
-  nto_tdesc = tdesc_i386;
+  nto_tdesc = i386_create_target_description (X86_XSTATE_SSE_MASK, false);
 }
 
 struct nto_target_ops the_low_target =
diff --git a/gdb/gdbserver/win32-i386-low.c b/gdb/gdbserver/win32-i386-low.c
index c505190..f6a0428 100644
--- a/gdb/gdbserver/win32-i386-low.c
+++ b/gdb/gdbserver/win32-i386-low.c
@@ -18,6 +18,11 @@
 #include "server.h"
 #include "win32-low.h"
 #include "x86-low.h"
+#include "x86-xstate.h"
+#ifdef __x86_64__
+#include "arch/amd64.h"
+#endif
+#include "arch/i386.h"
 
 #ifndef CONTEXT_EXTENDED_REGISTERS
 #define CONTEXT_EXTENDED_REGISTERS 0
@@ -28,16 +33,6 @@
 
 #define FLAG_TRACE_BIT 0x100
 
-#ifdef __x86_64__
-/* Defined in auto-generated build-time file gdb/gdbserver/amd64.c.  */
-void init_registers_amd64 (void);
-extern const struct target_desc *tdesc_amd64;
-#else
-/* Defined in auto-generated build-time file gdb/gdbserver/i386.c.  */
-void init_registers_i386 (void);
-extern const struct target_desc *tdesc_i386;
-#endif
-
 static struct x86_debug_reg_state debug_reg_state;
 
 static int
@@ -449,11 +444,10 @@ static void
 i386_arch_setup (void)
 {
 #ifdef __x86_64__
-  init_registers_amd64 ();
-  win32_tdesc = tdesc_amd64;
+  win32_tdesc = amd64_create_target_description (X86_XSTATE_SSE_MASK, false,
+						 false);
 #else
-  init_registers_i386 ();
-  win32_tdesc = tdesc_i386;
+  win32_tdesc = i386_create_target_description (X86_XSTATE_SSE_MASK, false);
 #endif
 }
 
diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c
index c47aa6e..3e2bee9 100644
--- a/gdb/i386-linux-tdep.c
+++ b/gdb/i386-linux-tdep.c
@@ -694,7 +694,7 @@ i386_linux_read_description (uint64_t xcr0)
     [(xcr0 & X86_XSTATE_PKRU) ? 1 : 0];
 
   if (*tdesc == NULL)
-    *tdesc = i386_create_target_description (xcr0);
+    *tdesc = i386_create_target_description (xcr0, true);
 
   return *tdesc;
 }
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index d162e92..7401139 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -50,13 +50,8 @@
 
 #include "record.h"
 #include "record-full.h"
-#include "features/i386/i386.c"
-#include "features/i386/i386-avx.c"
-#include "features/i386/i386-mpx.c"
-#include "features/i386/i386-avx-mpx.c"
-#include "features/i386/i386-avx-avx512.c"
-#include "features/i386/i386-avx-mpx-avx512-pku.c"
-#include "features/i386/i386-mmx.c"
+#include "target-descriptions.h"
+#include "arch/i386.h"
 
 #include "ax.h"
 #include "ax-gdb.h"
@@ -8718,25 +8713,20 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 const struct target_desc *
 i386_target_description (uint64_t xcr0)
 {
-  switch (xcr0 & X86_XSTATE_ALL_MASK)
-    {
-    case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK:
-      return tdesc_i386_avx_mpx_avx512_pku;
-    case X86_XSTATE_AVX_AVX512_MASK:
-      return tdesc_i386_avx_avx512;
-    case X86_XSTATE_AVX_MPX_MASK:
-      return tdesc_i386_avx_mpx;
-    case X86_XSTATE_MPX_MASK:
-      return tdesc_i386_mpx;
-    case X86_XSTATE_AVX_MASK:
-      return tdesc_i386_avx;
-    case X86_XSTATE_SSE_MASK:
-      return tdesc_i386;
-    case X86_XSTATE_X87_MASK:
-      return tdesc_i386_mmx;
-    default:
-      return tdesc_i386;
-    }
+  static target_desc *i386_tdescs \
+    [2/*SSE*/][2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/] = {};
+  target_desc **tdesc;
+
+  tdesc = &i386_tdescs[(xcr0 & X86_XSTATE_SSE) ? 1 : 0]
+    [(xcr0 & X86_XSTATE_AVX) ? 1 : 0]
+    [(xcr0 & X86_XSTATE_MPX) ? 1 : 0]
+    [(xcr0 & X86_XSTATE_AVX512) ? 1 : 0]
+    [(xcr0 & X86_XSTATE_PKRU) ? 1 : 0];
+
+  if (*tdesc == NULL)
+    *tdesc = i386_create_target_description (xcr0, false);
+
+  return *tdesc;
 }
 
 #define MPX_BASE_MASK (~(ULONGEST) 0xfff)
@@ -9058,15 +9048,30 @@ Show Intel Memory Protection Extensions specific variables."),
   /* Initialize the i386-specific register groups.  */
   i386_init_reggroups ();
 
-  /* Initialize the standard target descriptions.  */
-  initialize_tdesc_i386 ();
-  initialize_tdesc_i386_mmx ();
-  initialize_tdesc_i386_avx ();
-  initialize_tdesc_i386_mpx ();
-  initialize_tdesc_i386_avx_mpx ();
-  initialize_tdesc_i386_avx_avx512 ();
-  initialize_tdesc_i386_avx_mpx_avx512_pku ();
-
   /* Tell remote stub that we support XML target description.  */
   register_remote_support_xml ("i386");
+
+#if GDB_SELF_TEST
+  struct
+  {
+    const char *xml;
+    uint64_t mask;
+  } xml_masks[] = {
+    { "i386/i386.xml", X86_XSTATE_SSE_MASK },
+    { "i386/i386-mmx.xml", X86_XSTATE_X87_MASK },
+    { "i386/i386-avx.xml", X86_XSTATE_AVX_MASK },
+    { "i386/i386-mpx.xml", X86_XSTATE_MPX_MASK },
+    { "i386/i386-avx-mpx.xml", X86_XSTATE_AVX_MPX_MASK },
+    { "i386/i386-avx-avx512.xml", X86_XSTATE_AVX_AVX512_MASK },
+    { "i386/i386-avx-mpx-avx512-pku.xml",
+      X86_XSTATE_AVX_MPX_AVX512_PKU_MASK },
+  };
+
+  for (auto &a : xml_masks)
+    {
+      auto tdesc = i386_target_description (a.mask);
+
+      selftests::record_xml_tdesc (a.xml, tdesc);
+    }
+#endif /* GDB_SELF_TEST */
 }
-- 
1.9.1

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

* [PATCH 06/22] Use VEC for target_desc.reg_defs
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (16 preceding siblings ...)
  2017-08-21 15:31 ` [PATCH 21/22] Remove features/i386/amd64-*linux.c and features/i386/x32-*linux.c Yao Qi
@ 2017-08-21 15:31 ` Yao Qi
  2017-08-21 15:31 ` [PATCH 12/22] Remove features/i386/i386-*linux.c Yao Qi
                   ` (4 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:31 UTC (permalink / raw)
  To: gdb-patches

Nowadays, target_desc.reg_defs is a pointer points to a pre-generated
array, which is not flexible.  This patch changes it from an array
to a VEC so that GDBserver can create target descriptions dynamically
later.  Instead of using pre-generated array, the -generated.c calls
VEC_safe_push to add each register to vector.

Since target_desc.reg_defs is used in IPA, we need to build common/vec.c
for IPA too.

gdb/gdbserver:

2017-05-23  Yao Qi  <yao.qi@linaro.org>

	* Makefile.in (IPA_OBJS): Add vec-ipa.o
	* regcache.c (get_thread_regcache): Use VEC_length.
	(init_register_cache): Likewise.
	(regcache_cpy): Likewise.
	(registers_to_string): Iterate reg_defs via VEC_iterate.
	(find_regno): Likewise.
	(find_register_by_number): Use VEC_index.
	(register_size): Call find_register_by_number.
	(register_data): Call find_register_by_number.
	(supply_regblock): Use VEC_length.
	(regcache_raw_read_unsigned): Likewise.
	* tdesc.c (init_target_desc): Iterate reg_defs via
	VEC_iterate.
	(default_description): Update initializer.
	(copy_target_description): Don't update field num_registers.
	* tdesc.h (struct target_desc) <reg_defs>: Change it to VEC.
	<num_registers>: Remove.

gdb:

2017-05-23  Yao Qi  <yao.qi@linaro.org>

	* regformats/regdat.sh: Update generated code.
---
 gdb/gdbserver/Makefile.in |  1 +
 gdb/gdbserver/regcache.c  | 34 +++++++++++++++++++---------------
 gdb/gdbserver/tdesc.c     | 10 +++++-----
 gdb/gdbserver/tdesc.h     | 11 +++++------
 gdb/regformats/regdat.sh  | 13 +++++++------
 5 files changed, 37 insertions(+), 32 deletions(-)

diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in
index 6cd0959..9b5982b 100644
--- a/gdb/gdbserver/Makefile.in
+++ b/gdb/gdbserver/Makefile.in
@@ -400,6 +400,7 @@ IPA_OBJS = \
 	tdesc-ipa.o \
 	tracepoint-ipa.o \
 	utils-ipa.o \
+	vec-ipa.o \
 	${IPA_DEPFILES}
 
 IPA_LIB = libinproctrace.so
diff --git a/gdb/gdbserver/regcache.c b/gdb/gdbserver/regcache.c
index 0f16f60..d1bcdc3 100644
--- a/gdb/gdbserver/regcache.c
+++ b/gdb/gdbserver/regcache.c
@@ -54,7 +54,7 @@ get_thread_regcache (struct thread_info *thread, int fetch)
       current_thread = thread;
       /* Invalidate all registers, to prevent stale left-overs.  */
       memset (regcache->register_status, REG_UNAVAILABLE,
-	      regcache->tdesc->num_registers);
+	      VEC_length (tdesc_reg_p, regcache->tdesc->reg_defs));
       fetch_inferior_registers (regcache, -1);
       current_thread = saved_thread;
       regcache->registers_valid = 1;
@@ -145,9 +145,9 @@ init_register_cache (struct regcache *regcache,
 	= (unsigned char *) xcalloc (1, tdesc->registers_size);
       regcache->registers_owned = 1;
       regcache->register_status
-	= (unsigned char *) xmalloc (tdesc->num_registers);
+	= (unsigned char *) xmalloc (VEC_length (tdesc_reg_p, tdesc->reg_defs));
       memset ((void *) regcache->register_status, REG_UNAVAILABLE,
-	      tdesc->num_registers);
+	      VEC_length (tdesc_reg_p, tdesc->reg_defs));
 #else
       gdb_assert_not_reached ("can't allocate memory from the heap");
 #endif
@@ -204,7 +204,7 @@ regcache_cpy (struct regcache *dst, struct regcache *src)
 #ifndef IN_PROCESS_AGENT
   if (dst->register_status != NULL && src->register_status != NULL)
     memcpy (dst->register_status, src->register_status,
-	    src->tdesc->num_registers);
+	    VEC_length (tdesc_reg_p, src->tdesc->reg_defs));
 #endif
   dst->registers_valid = src->registers_valid;
 }
@@ -218,8 +218,9 @@ registers_to_string (struct regcache *regcache, char *buf)
   unsigned char *registers = regcache->registers;
   const struct target_desc *tdesc = regcache->tdesc;
   int i;
+  reg *reg;
 
-  for (i = 0; i < tdesc->num_registers; i++)
+  for (i = 0; VEC_iterate (tdesc_reg_p, tdesc->reg_defs, i, reg); i++)
     {
       if (regcache->register_status[i] == REG_VALID)
 	{
@@ -257,22 +258,23 @@ int
 find_regno (const struct target_desc *tdesc, const char *name)
 {
   int i;
+  reg *reg;
 
-  for (i = 0; i < tdesc->num_registers; i++)
-    if (strcmp (name, tdesc->reg_defs[i].name) == 0)
+  for (i = 0; VEC_iterate (tdesc_reg_p, tdesc->reg_defs, i, reg); i++)
+    if (strcmp (name, reg->name) == 0)
       return i;
   internal_error (__FILE__, __LINE__, "Unknown register %s requested",
 		  name);
 }
 
+#endif
+
 struct reg *
 find_register_by_number (const struct target_desc *tdesc, int n)
 {
-  return &tdesc->reg_defs[n];
+  return VEC_index (tdesc_reg_p, tdesc->reg_defs, n);
 }
 
-#endif
-
 #ifndef IN_PROCESS_AGENT
 static void
 free_register_cache_thread (struct thread_info *thread)
@@ -312,7 +314,7 @@ register_cache_size (const struct target_desc *tdesc)
 int
 register_size (const struct target_desc *tdesc, int n)
 {
-  return tdesc->reg_defs[n].size / 8;
+  return find_register_by_number (tdesc, n)->size / 8;
 }
 
 /* See common/common-regcache.h.  */
@@ -326,7 +328,8 @@ regcache_register_size (const struct regcache *regcache, int n)
 static unsigned char *
 register_data (struct regcache *regcache, int n, int fetch)
 {
-  return regcache->registers + regcache->tdesc->reg_defs[n].offset / 8;
+  return (regcache->registers
+	  + find_register_by_number (regcache->tdesc, n)->offset / 8);
 }
 
 /* Supply register N, whose contents are stored in BUF, to REGCACHE.
@@ -385,7 +388,7 @@ supply_regblock (struct regcache *regcache, const void *buf)
       {
 	int i;
 
-	for (i = 0; i < tdesc->num_registers; i++)
+	for (i = 0; i < VEC_length (tdesc_reg_p, tdesc->reg_defs); i++)
 	  regcache->register_status[i] = REG_VALID;
       }
 #endif
@@ -399,7 +402,7 @@ supply_regblock (struct regcache *regcache, const void *buf)
       {
 	int i;
 
-	for (i = 0; i < tdesc->num_registers; i++)
+	for (i = 0; i < VEC_length (tdesc_reg_p, tdesc->reg_defs); i++)
 	  regcache->register_status[i] = REG_UNAVAILABLE;
       }
 #endif
@@ -431,7 +434,8 @@ regcache_raw_read_unsigned (struct regcache *regcache, int regnum,
   int size;
 
   gdb_assert (regcache != NULL);
-  gdb_assert (regnum >= 0 && regnum < regcache->tdesc->num_registers);
+  gdb_assert (regnum >= 0
+	      && regnum < VEC_length (tdesc_reg_p, regcache->tdesc->reg_defs));
 
   size = register_size (regcache->tdesc, regnum);
 
diff --git a/gdb/gdbserver/tdesc.c b/gdb/gdbserver/tdesc.c
index fdd35197..1b1882e 100644
--- a/gdb/gdbserver/tdesc.c
+++ b/gdb/gdbserver/tdesc.c
@@ -23,12 +23,13 @@ void
 init_target_desc (struct target_desc *tdesc)
 {
   int offset, i;
+  struct reg *reg;
 
   offset = 0;
-  for (i = 0; i < tdesc->num_registers; i++)
+  for (i = 0; VEC_iterate (tdesc_reg_p, tdesc->reg_defs, i, reg); i++)
     {
-      tdesc->reg_defs[i].offset = offset;
-      offset += tdesc->reg_defs[i].size;
+      reg->offset = offset;
+      offset += reg->size;
     }
 
   tdesc->registers_size = offset / 8;
@@ -40,14 +41,13 @@ init_target_desc (struct target_desc *tdesc)
 
 #ifndef IN_PROCESS_AGENT
 
-static const struct target_desc default_description = { 0 };
+static const struct target_desc default_description = { NULL, 0, NULL, NULL };
 
 void
 copy_target_description (struct target_desc *dest,
 			 const struct target_desc *src)
 {
   dest->reg_defs = src->reg_defs;
-  dest->num_registers = src->num_registers;
   dest->expedite_regs = src->expedite_regs;
   dest->registers_size = src->registers_size;
   dest->xmltarget = src->xmltarget;
diff --git a/gdb/gdbserver/tdesc.h b/gdb/gdbserver/tdesc.h
index 0341278..424a2fd 100644
--- a/gdb/gdbserver/tdesc.h
+++ b/gdb/gdbserver/tdesc.h
@@ -21,17 +21,16 @@
 
 struct reg;
 
+typedef struct reg *tdesc_reg_p;
+DEF_VEC_P(tdesc_reg_p);
+
 /* A target description.  */
 
 struct target_desc
 {
-  /* An array of NUM_REGISTERS elements of register definitions that
+  /* A vector of elements of register definitions that
      describe the inferior's register set.  */
-  struct reg *reg_defs;
-
-  /* The number of registers in inferior's register set (and thus in
-     the regcache).  */
-  int num_registers;
+  VEC(tdesc_reg_p) *reg_defs;
 
   /* The register cache size, in bytes.  */
   int registers_size;
diff --git a/gdb/regformats/regdat.sh b/gdb/regformats/regdat.sh
index 2c764cd..236cd93 100755
--- a/gdb/regformats/regdat.sh
+++ b/gdb/regformats/regdat.sh
@@ -131,8 +131,8 @@ do
     echo "{"
     echo "  static struct target_desc tdesc_${name}_s;"
     echo "  struct target_desc *result = &tdesc_${name}_s;"
+    echo "  memset (result, 0, sizeof (*result));"
 
-    echo "static struct reg regs_${name}[] = {"
     continue
   elif test "${type}" = "xmltarget"; then
     xmltarget="${entry}"
@@ -150,13 +150,17 @@ do
     echo "$0: $1 does not specify \`\`name''." 1>&2
     exit 1
   else
-    echo "  { \"${entry}\", ${offset}, ${type} },"
+    echo "  {struct reg *reg = XCNEW (struct reg);"
+    echo "  reg->name = \"${entry}\";"
+    echo "  reg->offset = ${offset};"
+    echo "  reg->size = ${type};"
+    echo "  VEC_safe_push (tdesc_reg_p, result->reg_defs, reg);"
+    echo "  };"
     offset=`expr ${offset} + ${type}`
     i=`expr $i + 1`
   fi
 done
 
-echo "};"
 echo
 echo "static const char *expedite_regs_${name}[] = { \"`echo ${expedite} | sed 's/,/", "/g'`\", 0 };"
 if test "${xmltarget}" = x; then
@@ -178,9 +182,6 @@ fi
 echo
 
 cat <<EOF
-  result->reg_defs = regs_${name};
-  result->num_registers = sizeof (regs_${name}) / sizeof (regs_${name}[0]);
-
 #ifndef IN_PROCESS_AGENT
   result->expedite_regs = expedite_regs_${name};
   result->xmltarget = xmltarget_${name};
-- 
1.9.1

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

* [PATCH 14/22] [GDBserver] Shorten srv_i386_linux_xmlfiles
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (19 preceding siblings ...)
  2017-08-21 15:31 ` [PATCH 13/22] [GDBserver] Use pre-generated tdesc as test Yao Qi
@ 2017-08-21 15:31 ` Yao Qi
  2017-08-21 15:31 ` [PATCH 22/22] Convert the rest x86 target descriptions Yao Qi
  2017-09-05  9:04 ` [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:31 UTC (permalink / raw)
  To: gdb-patches

GDBserver now is able to generate target descriptions from features, so
don't need to remember these target description files.

gdb/gdbserver:

2017-07-07  Yao Qi  <yao.qi@linaro.org>

	* configure.srv (srv_i386_linux_xmlfiles): Remove
	i386/i386-XXX-linux.xml from it.
---
 gdb/gdbserver/configure.srv | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index dbd87b2..946119c 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -43,7 +43,7 @@ srv_i386_32bit_xmlfiles="i386/32bit-core.xml i386/32bit-sse.xml i386/32bit-avx.x
 srv_i386_64bit_xmlfiles="i386/64bit-core.xml i386/64bit-segments.xml i386/64bit-sse.xml i386/64bit-avx.xml i386/64bit-avx512.xml i386/x32-core.xml i386/64bit-mpx.xml i386/64bit-pkeys.xml"
 srv_i386_xmlfiles="i386/i386.xml $srv_i386_32bit_xmlfiles"
 srv_amd64_xmlfiles="i386/amd64.xml $srv_i386_64bit_xmlfiles"
-srv_i386_linux_xmlfiles="i386/i386-linux.xml i386/i386-avx-linux.xml i386/i386-avx-avx512-linux.xml i386/i386-avx-mpx-avx512-pku-linux.xml i386/i386-mmx-linux.xml i386/32bit-linux.xml i386/i386-mpx-linux.xml i386/i386-avx-mpx-linux.xml $srv_i386_32bit_xmlfiles"
+srv_i386_linux_xmlfiles="i386/32bit-linux.xml $srv_i386_32bit_xmlfiles"
 srv_amd64_linux_xmlfiles="i386/amd64-linux.xml i386/amd64-avx-linux.xml i386/amd64-avx-avx512.xml i386/amd64-avx-mpx-avx512-pku-linux.xml i386/64bit-linux.xml i386/amd64-mpx-linux.xml i386/amd64-avx-mpx-linux.xml i386/x32-linux.xml i386/x32-avx-linux.xml i386/x32-avx-avx512-linux.xml $srv_i386_64bit_xmlfiles"
 
 
-- 
1.9.1

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

* [PATCH 10/22] Dynamically composite xml in reply to GDB
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (11 preceding siblings ...)
  2017-08-21 15:30 ` [PATCH 18/22] Convert amd64-linux target descriptions Yao Qi
@ 2017-08-21 15:31 ` Yao Qi
  2017-08-21 15:31 ` [PATCH 07/22] Return X86_TDESC_MMX in x86_get_ipa_tdesc_idx Yao Qi
                   ` (9 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:31 UTC (permalink / raw)
  To: gdb-patches

GDBserver still uses pre-generated target descriptions in order to
reply to GDB's query on target description (see xml-builtin-generated.c
in GDBserver build directory).  This patch teaches GDBserver to
create XML contents according to the target descriptions rather than
using pre-generated ones.

First, change target feature c files to pass the feature xml file
name to tdesc_create_feature, so that target description in GDBserver
can record them, and create XML contents from these features in
buffer, like

  ...
  <xi:include href="$FEATURE1_XML_NAME"/>
  <xi:include href="$FEATURE2_XML_NAME"/>
  ...

and send this buffer back to GDB.

Note that this patch reuses target_desc.xmltarget a little bit, which is
to hold the XML contents dynamically generated in tdesc_get_features_xml.
However, it is not xfree'ed in ~target_desc, because we can't tell it is
from xstrdup or a literal string.  Since we don't delete target_desc,
there is no memory leak yet.  After we change all target descriptions to
the new style, target_desc.xmltarget is from xstrdup, then, we can safely
xfree it in ~target_desc.

gdb:

2017-07-07  Yao Qi  <yao.qi@linaro.org>

	* arch/tdesc.h (tdesc_create_feature): Add an argument xml.
	* target-descriptions.c (tdesc_create_feature): Likewise, and
	adjust code.
	* features/i386/32bit-avx.c: Re-generated.
	* features/i386/32bit-avx512.c: Re-generated.
	* features/i386/32bit-core.c: Re-generated.
	* features/i386/32bit-linux.c: Re-generated.
	* features/i386/32bit-mpx.c: Re-generated.
	* features/i386/32bit-pkeys.c: Re-generated.
	* features/i386/32bit-sse.c: Re-generated.

gdb/gdbserver:

2017-07-03  Yao Qi  <yao.qi@linaro.org>

	* linux-x86-tdesc.c: Don't include <inttypes.h>.
	(i386_linux_read_description) [!IN_PROCESS_AGENT]: Call
	set_tdesc_architecture and set_tdesc_osabi.  Remove code setting
	.xmltarget.
	* server.c (get_features_xml): Call tdesc_get_features_xml.
	* tdesc.c (set_tdesc_architecture): New function.
	(set_tdesc_osabi): New function.
	(tdesc_get_features_xml): New function.
	(tdesc_create_feature): Add an argument.
	* tdesc.h (struct target_desc) <features>: New field.
	<arch, osabi>: New field.
	(~target_desc): xfree features, arch, and osabi.
	(target_desc::oerator==): Don't compare .xmltarget.
	[!IN_PROCESS_AGENT] (set_tdesc_architecture): Declare.
	(set_tdesc_osabi): Likewise.
	(tdesc_get_features_xml): Likewise.
---
 gdb/arch/tdesc.h                 |  4 ++-
 gdb/features/i386/32bit-avx.c    |  2 +-
 gdb/features/i386/32bit-avx512.c |  2 +-
 gdb/features/i386/32bit-core.c   |  2 +-
 gdb/features/i386/32bit-linux.c  |  2 +-
 gdb/features/i386/32bit-mpx.c    |  2 +-
 gdb/features/i386/32bit-pkeys.c  |  2 +-
 gdb/features/i386/32bit-sse.c    |  2 +-
 gdb/gdbserver/linux-x86-tdesc.c  | 24 ++++------------
 gdb/gdbserver/server.c           | 10 ++++---
 gdb/gdbserver/tdesc.c            | 62 +++++++++++++++++++++++++++++++++++++++-
 gdb/gdbserver/tdesc.h            | 34 +++++++++++++++++++---
 gdb/target-descriptions.c        |  9 ++++--
 13 files changed, 118 insertions(+), 39 deletions(-)

diff --git a/gdb/arch/tdesc.h b/gdb/arch/tdesc.h
index 872df68..bf50e24 100644
--- a/gdb/arch/tdesc.h
+++ b/gdb/arch/tdesc.h
@@ -30,7 +30,9 @@ struct tdesc_type *tdesc_named_type (const struct tdesc_feature *feature,
 
 /* Return the created feature named NAME in target description TDESC.  */
 struct tdesc_feature *tdesc_create_feature (struct target_desc *tdesc,
-					    const char *name);
+					    const char *name,
+					    const char *xml = nullptr);
+
 
 /* Return the created vector tdesc_type named NAME in FEATURE.  */
 struct tdesc_type *tdesc_create_vector (struct tdesc_feature *feature,
diff --git a/gdb/features/i386/32bit-avx.c b/gdb/features/i386/32bit-avx.c
index 3a98936..8a0c356 100644
--- a/gdb/features/i386/32bit-avx.c
+++ b/gdb/features/i386/32bit-avx.c
@@ -8,7 +8,7 @@ create_feature_i386_32bit_avx (struct target_desc *result, long regnum)
 {
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx", "32bit-avx.xml");
   tdesc_create_reg (feature, "ymm0h", regnum++, 1, NULL, 128, "uint128");
   tdesc_create_reg (feature, "ymm1h", regnum++, 1, NULL, 128, "uint128");
   tdesc_create_reg (feature, "ymm2h", regnum++, 1, NULL, 128, "uint128");
diff --git a/gdb/features/i386/32bit-avx512.c b/gdb/features/i386/32bit-avx512.c
index b13e1d3..82b20c5 100644
--- a/gdb/features/i386/32bit-avx512.c
+++ b/gdb/features/i386/32bit-avx512.c
@@ -8,7 +8,7 @@ create_feature_i386_32bit_avx512 (struct target_desc *result, long regnum)
 {
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512");
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512", "32bit-avx512.xml");
   struct tdesc_type *field_type;
   field_type = tdesc_named_type (feature, "uint128");
   tdesc_create_vector (feature, "v2ui128", field_type, 2);
diff --git a/gdb/features/i386/32bit-core.c b/gdb/features/i386/32bit-core.c
index ea6db93..ec903f3 100644
--- a/gdb/features/i386/32bit-core.c
+++ b/gdb/features/i386/32bit-core.c
@@ -8,7 +8,7 @@ create_feature_i386_32bit_core (struct target_desc *result, long regnum)
 {
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core", "32bit-core.xml");
   struct tdesc_type *field_type;
   struct tdesc_type *type;
   type = tdesc_create_flags (feature, "i386_eflags", 4);
diff --git a/gdb/features/i386/32bit-linux.c b/gdb/features/i386/32bit-linux.c
index 1ba932d..136e3d7 100644
--- a/gdb/features/i386/32bit-linux.c
+++ b/gdb/features/i386/32bit-linux.c
@@ -8,7 +8,7 @@ create_feature_i386_32bit_linux (struct target_desc *result, long regnum)
 {
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux", "32bit-linux.xml");
   regnum = 41;
   tdesc_create_reg (feature, "orig_eax", regnum++, 1, NULL, 32, "int");
   return regnum;
diff --git a/gdb/features/i386/32bit-mpx.c b/gdb/features/i386/32bit-mpx.c
index f7d2ef0..25a3fb1 100644
--- a/gdb/features/i386/32bit-mpx.c
+++ b/gdb/features/i386/32bit-mpx.c
@@ -8,7 +8,7 @@ create_feature_i386_32bit_mpx (struct target_desc *result, long regnum)
 {
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx", "32bit-mpx.xml");
   struct tdesc_type *field_type;
   struct tdesc_type *type;
   type = tdesc_create_struct (feature, "br128");
diff --git a/gdb/features/i386/32bit-pkeys.c b/gdb/features/i386/32bit-pkeys.c
index 89f1a5b..4ad7649 100644
--- a/gdb/features/i386/32bit-pkeys.c
+++ b/gdb/features/i386/32bit-pkeys.c
@@ -8,7 +8,7 @@ create_feature_i386_32bit_pkeys (struct target_desc *result, long regnum)
 {
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.pkeys");
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.pkeys", "32bit-pkeys.xml");
   tdesc_create_reg (feature, "pkru", regnum++, 1, NULL, 32, "uint32");
   return regnum;
 }
diff --git a/gdb/features/i386/32bit-sse.c b/gdb/features/i386/32bit-sse.c
index 98f4cd0..01b2058 100644
--- a/gdb/features/i386/32bit-sse.c
+++ b/gdb/features/i386/32bit-sse.c
@@ -8,7 +8,7 @@ create_feature_i386_32bit_sse (struct target_desc *result, long regnum)
 {
   struct tdesc_feature *feature;
 
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse", "32bit-sse.xml");
   struct tdesc_type *field_type;
   field_type = tdesc_named_type (feature, "ieee_single");
   tdesc_create_vector (feature, "v4f", field_type, 4);
diff --git a/gdb/gdbserver/linux-x86-tdesc.c b/gdb/gdbserver/linux-x86-tdesc.c
index 1f3dbaf..3f63d8e 100644
--- a/gdb/gdbserver/linux-x86-tdesc.c
+++ b/gdb/gdbserver/linux-x86-tdesc.c
@@ -21,7 +21,6 @@
 #include "tdesc.h"
 #include "linux-x86-tdesc.h"
 #include "x86-xstate.h"
-#include <inttypes.h>
 
 #if defined __i386__ || !defined IN_PROCESS_AGENT
 #include "../features/i386/32bit-core.c"
@@ -145,6 +144,11 @@ i386_linux_read_description (uint64_t xcr0)
     {
       *tdesc = new target_desc ();
 
+#ifndef IN_PROCESS_AGENT
+      set_tdesc_architecture (*tdesc, "i386");
+      set_tdesc_osabi (*tdesc, "GNU/Linux");
+#endif
+
       long regnum = 0;
 
       if (xcr0 & X86_XSTATE_X87)
@@ -172,24 +176,6 @@ i386_linux_read_description (uint64_t xcr0)
 #ifndef IN_PROCESS_AGENT
       static const char *expedite_regs_i386[] = { "ebp", "esp", "eip", NULL };
       (*tdesc)->expedite_regs = expedite_regs_i386;
-
-      if (xcr0 & X86_XSTATE_PKRU)
-	(*tdesc)->xmltarget = "i386-avx-mpx-avx512-pku-linux.xml";
-      else if (xcr0 & X86_XSTATE_AVX512)
-	(*tdesc)->xmltarget = "i386-avx-avx512-linux.xml";
-      else if ((xcr0 & X86_XSTATE_AVX_MPX_MASK) == X86_XSTATE_AVX_MPX_MASK)
-	(*tdesc)->xmltarget = "i386-avx-mpx-linux.xml";
-      else if (xcr0 & X86_XSTATE_MPX)
-	(*tdesc)->xmltarget = "i386-mpx-linux.xml";
-      else if (xcr0 & X86_XSTATE_AVX)
-	(*tdesc)->xmltarget = "i386-avx-linux.xml";
-      else if (xcr0 & X86_XSTATE_SSE)
-	(*tdesc)->xmltarget = "i386-linux.xml";
-      else if (xcr0 & X86_XSTATE_X87)
-	(*tdesc)->xmltarget = "i386-mmx-linux.xml";
-      else
-	internal_error (__FILE__, __LINE__,
-			"unknown xcr0: %" PRIu64, xcr0);
 #endif
     }
 
diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c
index 8200aa1..303fd09 100644
--- a/gdb/gdbserver/server.c
+++ b/gdb/gdbserver/server.c
@@ -812,12 +812,14 @@ get_features_xml (const char *annex)
      This variable is set up from the auto-generated
      init_registers_... routine for the current target.  */
 
-  if (desc->xmltarget != NULL && strcmp (annex, "target.xml") == 0)
+  if (strcmp (annex, "target.xml") == 0)
     {
-      if (*desc->xmltarget == '@')
-	return desc->xmltarget + 1;
+      const char *ret = tdesc_get_features_xml ((target_desc*) desc);
+
+      if (*ret == '@')
+	return ret + 1;
       else
-	annex = desc->xmltarget;
+	annex = ret;
     }
 
 #ifdef USE_XML
diff --git a/gdb/gdbserver/tdesc.c b/gdb/gdbserver/tdesc.c
index 4504c9b..0b5096b 100644
--- a/gdb/gdbserver/tdesc.c
+++ b/gdb/gdbserver/tdesc.c
@@ -61,6 +61,62 @@ current_target_desc (void)
 
   return current_process ()->tdesc;
 }
+
+void
+set_tdesc_architecture (struct target_desc *target_desc,
+			const char *name)
+{
+  target_desc->arch = xstrdup (name);
+}
+
+void
+set_tdesc_osabi (struct target_desc *target_desc, const char *name)
+{
+  target_desc->osabi = xstrdup (name);
+}
+
+/* Return a string which is of XML format, including XML target
+   description to be sent to GDB.  */
+
+const char *
+tdesc_get_features_xml (target_desc *tdesc)
+{
+  /* Either .xmltarget or .features is not NULL.  */
+  gdb_assert (tdesc->xmltarget != NULL
+	      || (tdesc->features != NULL
+		  && tdesc->arch != NULL
+		  && tdesc->osabi != NULL));
+
+  if (tdesc->xmltarget == NULL)
+    {
+      std::string buffer ("@<?xml version=\"1.0\"?>");
+
+      buffer += "<!DOCTYPE target SYSTEM \"gdb-target.dtd\">";
+      buffer += "<target>";
+      buffer += "<architecture>";
+      buffer += tdesc->arch;
+      buffer += "</architecture>";
+
+      buffer += "<osabi>";
+      buffer += tdesc->osabi;
+      buffer += "</osabi>";
+
+      char *xml;
+
+      for (int i = 0; VEC_iterate (char_ptr, tdesc->features, i, xml); i++)
+	{
+	  buffer += "<xi:include href=\"";
+	  buffer += xml;
+	  buffer += "\"/>";
+	}
+
+      buffer += "</target>";
+
+      tdesc->xmltarget = xstrdup (buffer.c_str ());
+    }
+
+  return tdesc->xmltarget;
+}
 #endif
 
 struct tdesc_type
@@ -69,8 +125,12 @@ struct tdesc_type
 /* See arch/tdesc.h.  */
 
 struct tdesc_feature *
-tdesc_create_feature (struct target_desc *tdesc, const char *name)
+tdesc_create_feature (struct target_desc *tdesc, const char *name,
+		      const char *xml)
 {
+#ifndef IN_PROCESS_AGENT
+  VEC_safe_push (char_ptr, tdesc->features, xstrdup (xml));
+#endif
   return tdesc;
 }
 
diff --git a/gdb/gdbserver/tdesc.h b/gdb/gdbserver/tdesc.h
index 49c82c6..fe3c78f 100644
--- a/gdb/gdbserver/tdesc.h
+++ b/gdb/gdbserver/tdesc.h
@@ -49,9 +49,21 @@ struct target_desc : tdesc_feature
   /* Defines what to return when looking for the "target.xml" file in
      response to qXfer:features:read.  Its contents can either be
      verbatim XML code (prefixed with a '@') or else the name of the
-     actual XML file to be used in place of "target.xml".  */
+     actual XML file to be used in place of "target.xml".
+
+     It can be NULL, then, its content is got from the following three
+     fields features, arch, and osabi in tdesc_get_features_xml.  */
   const char *xmltarget = NULL;
 
+  /* XML features in this target description.  */
+  VEC (char_ptr) *features = NULL;
+
+  /* The value of <architecture> element in the XML, replying GDB.  */
+  const char *arch = NULL;
+
+  /* The value of <osabi> element in the XML, replying GDB.  */
+  const char *osabi = NULL;
+
 public:
   target_desc ()
     : reg_defs (NULL), registers_size (0)
@@ -65,6 +77,15 @@ public:
     for (i = 0; VEC_iterate (tdesc_reg_p, reg_defs, i, reg); i++)
       xfree (reg);
     VEC_free (tdesc_reg_p, reg_defs);
+
+    xfree ((char *) arch);
+    xfree ((char *) osabi);
+
+    char *f;
+
+    for (i = 0; VEC_iterate (char_ptr, features, i, f); i++)
+      xfree (f);
+    VEC_free (char_ptr, features);
   }
 
   bool operator== (const target_desc &other) const
@@ -96,9 +117,6 @@ public:
     if (other.expedite_regs[i] != NULL)
       return false;
 
-    if (strcmp (xmltarget, other.xmltarget) != 0)
-      return false;
-
     return true;
   }
 
@@ -123,4 +141,12 @@ void init_target_desc (struct target_desc *tdesc);
 
 const struct target_desc *current_target_desc (void);
 
+#ifndef IN_PROCESS_AGENT
+void set_tdesc_architecture (struct target_desc *target_desc,
+			     const char *name);
+void set_tdesc_osabi (struct target_desc *target_desc, const char *name);
+
+const char *tdesc_get_features_xml (struct target_desc *tdesc);
+#endif
+
 #endif /* TDESC_H */
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
index f0ced66..6135e0d 100644
--- a/gdb/target-descriptions.c
+++ b/gdb/target-descriptions.c
@@ -1750,7 +1750,8 @@ tdesc_add_enum_value (struct tdesc_type *type, int value,
 /* See arch/tdesc.h.  */
 
 struct tdesc_feature *
-tdesc_create_feature (struct target_desc *tdesc, const char *name)
+tdesc_create_feature (struct target_desc *tdesc, const char *name,
+		      const char *xml)
 {
   struct tdesc_feature *new_feature = new tdesc_feature (name);
 
@@ -2202,8 +2203,10 @@ public:
 
     printf_unfiltered ("{\n");
     printf_unfiltered ("  struct tdesc_feature *feature;\n");
-    printf_unfiltered ("\n  feature = tdesc_create_feature (result, \"%s\");\n",
-		       e->name);
+
+    printf_unfiltered
+      ("\n  feature = tdesc_create_feature (result, \"%s\", \"%s\");\n",
+       e->name, lbasename (m_filename_after_features.c_str ()));
   }
 
   void visit_post (const tdesc_feature *e) override
-- 
1.9.1

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

* [PATCH 07/22] Return X86_TDESC_MMX in x86_get_ipa_tdesc_idx
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (12 preceding siblings ...)
  2017-08-21 15:31 ` [PATCH 10/22] Dynamically composite xml in reply to GDB Yao Qi
@ 2017-08-21 15:31 ` Yao Qi
  2017-08-21 15:31 ` [PATCH 17/22] Lazily and dynamically create amd64-linux target descriptions Yao Qi
                   ` (8 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:31 UTC (permalink / raw)
  To: gdb-patches

gdb/gdbserver:

2017-07-10  Yao Qi  <yao.qi@linaro.org>

	* linux-x86-low.c (x86_get_ipa_tdesc_idx): Use X86_TDESC_MMX
	instead of 0.
---
 gdb/gdbserver/linux-x86-low.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c
index 12c7a1b..5c56a5d 100644
--- a/gdb/gdbserver/linux-x86-low.c
+++ b/gdb/gdbserver/linux-x86-low.c
@@ -2927,7 +2927,8 @@ x86_get_ipa_tdesc_idx (void)
   if (tdesc == tdesc_i386_avx_avx512_linux)
     return X86_TDESC_AVX_AVX512;
 
-  return 0;
+  /* If none tdesc is found, return the one with minimum features.  */
+  return X86_TDESC_MMX;
 }
 
 /* This is initialized assuming an amd64 target.
-- 
1.9.1

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

* [PATCH 17/22] Lazily and dynamically create amd64-linux target descriptions
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (13 preceding siblings ...)
  2017-08-21 15:31 ` [PATCH 07/22] Return X86_TDESC_MMX in x86_get_ipa_tdesc_idx Yao Qi
@ 2017-08-21 15:31 ` Yao Qi
  2017-08-21 15:31 ` [PATCH 02/22] Use i386_target_description to get tdesc_i386 Yao Qi
                   ` (7 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:31 UTC (permalink / raw)
  To: gdb-patches

This patch starts to use the generate c feature files to dynamically
create amd64-linux target descriptions.

gdb:

2017-06-08  Yao Qi  <yao.qi@linaro.org>

	* amd64-linux-tdep.c: Don't include amd64-XXX-linux and
	x32-XXX-linux.c.  Include 64bit-XX.c and x32-XX.c.
	(amd64_linux_read_description): Create target descriptions.
	(_initialize_amd64_linux_tdep): Don't call initialize_tdesc_XXX
	functions.  Add unit tests.
	* features/Makefile (FEATURE_XMLFILES): Append 64bit-XXX.xml and
	x32-core.xml.
	* features/i386/64bit-avx.c: Generated.
	* features/i386/64bit-avx512.c: Generated.
	* features/i386/64bit-core.c: Generated.
	* features/i386/64bit-linux.c: Generated.
	* features/i386/64bit-mpx.c: Generated.
	* features/i386/64bit-pkeys.c: Generated.
	* features/i386/64bit-segments.c: Generated.
	* features/i386/64bit-sse.c: Generated.
	* features/i386/x32-core.c: Generated.
	* target-descriptions.c (maint_print_c_tdesc_cmd): Print feature
	c files for amd64-linux and x32-linux.
---
 gdb/amd64-linux-tdep.c             | 138 +++++++++++++++++++++++--------------
 gdb/features/Makefile              |  11 ++-
 gdb/features/i386/64bit-avx.c      |  29 ++++++++
 gdb/features/i386/64bit-avx512.c   | 124 +++++++++++++++++++++++++++++++++
 gdb/features/i386/64bit-core.c     |  74 ++++++++++++++++++++
 gdb/features/i386/64bit-linux.c    |  15 ++++
 gdb/features/i386/64bit-mpx.c      |  51 ++++++++++++++
 gdb/features/i386/64bit-pkeys.c    |  14 ++++
 gdb/features/i386/64bit-segments.c |  15 ++++
 gdb/features/i386/64bit-sse.c      |  83 ++++++++++++++++++++++
 gdb/features/i386/x32-core.c       |  74 ++++++++++++++++++++
 gdb/target-descriptions.c          |   4 +-
 12 files changed, 578 insertions(+), 54 deletions(-)
 create mode 100644 gdb/features/i386/64bit-avx.c
 create mode 100644 gdb/features/i386/64bit-avx512.c
 create mode 100644 gdb/features/i386/64bit-core.c
 create mode 100644 gdb/features/i386/64bit-linux.c
 create mode 100644 gdb/features/i386/64bit-mpx.c
 create mode 100644 gdb/features/i386/64bit-pkeys.c
 create mode 100644 gdb/features/i386/64bit-segments.c
 create mode 100644 gdb/features/i386/64bit-sse.c
 create mode 100644 gdb/features/i386/x32-core.c

diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index 85efbef..7afa012 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -39,17 +39,18 @@
 #include "solib-svr4.h"
 #include "xml-syscall.h"
 #include "glibc-tdep.h"
+#include "target-descriptions.h"
 
-#include "features/i386/amd64-linux.c"
-#include "features/i386/amd64-avx-linux.c"
-#include "features/i386/amd64-mpx-linux.c"
-#include "features/i386/amd64-avx-mpx-linux.c"
-#include "features/i386/amd64-avx-avx512-linux.c"
-#include "features/i386/amd64-avx-mpx-avx512-pku-linux.c"
+#include "features/i386/64bit-avx.c"
+#include "features/i386/64bit-avx512.c"
+#include "features/i386/64bit-core.c"
+#include "features/i386/64bit-linux.c"
+#include "features/i386/64bit-mpx.c"
+#include "features/i386/64bit-pkeys.c"
+#include "features/i386/64bit-segments.c"
+#include "features/i386/64bit-sse.c"
 
-#include "features/i386/x32-linux.c"
-#include "features/i386/x32-avx-linux.c"
-#include "features/i386/x32-avx-avx512-linux.c"
+#include "features/i386/x32-core.c"
 
 /* The syscall's XML filename for i386.  */
 #define XML_SYSCALL_FILENAME_AMD64 "syscalls/amd64-linux.xml"
@@ -1578,42 +1579,59 @@ amd64_linux_record_signal (struct gdbarch *gdbarch,
 const target_desc *
 amd64_linux_read_description (uint64_t xcr0_features_bit, bool is_x32)
 {
-  switch (xcr0_features_bit)
+  static target_desc *amd64_linux_tdescs \
+    [2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/] = {};
+  static target_desc *x32_linux_tdescs[2/*AVX*/][2/*AVX512*/] = {};
+
+  target_desc **tdesc;
+
+  if (is_x32)
     {
-    case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK:
-      if (is_x32)
-	/* No MPX, PKU on x32, fallback to AVX-AVX512.  */
-	return tdesc_x32_avx_avx512_linux;
-      else
-	return tdesc_amd64_avx_mpx_avx512_pku_linux;
-    case X86_XSTATE_AVX_AVX512_MASK:
-      if (is_x32)
-	return tdesc_x32_avx_avx512_linux;
-      else
-	return tdesc_amd64_avx_avx512_linux;
-    case X86_XSTATE_MPX_MASK:
-      if (is_x32)
-	/* No MPX on x32, fallback to AVX.  */
-	return tdesc_x32_avx_linux;
-      else
-	return tdesc_amd64_mpx_linux;
-    case X86_XSTATE_AVX_MPX_MASK:
-      if (is_x32)
-	/* No MPX on x32, fallback to AVX.  */
-	return tdesc_x32_avx_linux;
-      else
-	return tdesc_amd64_avx_mpx_linux;
-    case X86_XSTATE_AVX_MASK:
-      if (is_x32)
-	return tdesc_x32_avx_linux;
-      else
-	return tdesc_amd64_avx_linux;
-    default:
+      tdesc = &x32_linux_tdescs[(xcr0_features_bit & X86_XSTATE_AVX) ? 1 : 0 ]
+	[(xcr0_features_bit & X86_XSTATE_AVX512) ? 1 : 0];
+    }
+  else
+    {
+      tdesc = &amd64_linux_tdescs[(xcr0_features_bit & X86_XSTATE_AVX) ? 1 : 0]
+	[(xcr0_features_bit & X86_XSTATE_MPX) ? 1 : 0]
+	[(xcr0_features_bit & X86_XSTATE_AVX512) ? 1 : 0]
+	[(xcr0_features_bit & X86_XSTATE_PKRU) ? 1 : 0];
+    }
+
+  if (*tdesc == NULL)
+    {
+      *tdesc = allocate_target_description ();
+
+      set_tdesc_architecture (*tdesc,
+			      is_x32 ? "i386:x64-32" : "i386:x86-64");
+
+      set_tdesc_osabi (*tdesc, osabi_from_tdesc_string ("GNU/Linux"));
+
+      long regnum = 0;
+
       if (is_x32)
-	return tdesc_x32_linux;
+	regnum = create_feature_i386_x32_core (*tdesc, regnum);
       else
-	return tdesc_amd64_linux;
+	regnum = create_feature_i386_64bit_core (*tdesc, regnum);
+
+      regnum = create_feature_i386_64bit_sse (*tdesc, regnum);
+      regnum = create_feature_i386_64bit_linux (*tdesc, regnum);
+      regnum = create_feature_i386_64bit_segments (*tdesc, regnum);
+
+      if (xcr0_features_bit & X86_XSTATE_AVX)
+	regnum = create_feature_i386_64bit_avx (*tdesc, regnum);
+
+      if ((xcr0_features_bit & X86_XSTATE_MPX) && !is_x32)
+	regnum = create_feature_i386_64bit_mpx (*tdesc, regnum);
+
+      if (xcr0_features_bit & X86_XSTATE_AVX512)
+	regnum = create_feature_i386_64bit_avx512 (*tdesc, regnum);
+
+      if ((xcr0_features_bit & X86_XSTATE_PKRU) && !is_x32)
+	regnum = create_feature_i386_64bit_pkeys (*tdesc, regnum);
     }
+
+  return *tdesc;
 }
 
 /* Get Linux/x86 target description from core dump.  */
@@ -2300,15 +2318,31 @@ _initialize_amd64_linux_tdep (void)
   gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x64_32,
 			  GDB_OSABI_LINUX, amd64_x32_linux_init_abi);
 
-  /* Initialize the Linux target description.  */
-  initialize_tdesc_amd64_linux ();
-  initialize_tdesc_amd64_avx_linux ();
-  initialize_tdesc_amd64_mpx_linux ();
-  initialize_tdesc_amd64_avx_mpx_linux ();
-  initialize_tdesc_amd64_avx_avx512_linux ();
-  initialize_tdesc_amd64_avx_mpx_avx512_pku_linux ();
-
-  initialize_tdesc_x32_linux ();
-  initialize_tdesc_x32_avx_linux ();
-  initialize_tdesc_x32_avx_avx512_linux ();
+#if GDB_SELF_TEST
+  struct
+  {
+    const char *xml;
+    uint64_t mask;
+  } xml_masks[] = {
+    { "i386/amd64-linux.xml", X86_XSTATE_SSE_MASK },
+    { "i386/amd64-avx-linux.xml", X86_XSTATE_AVX_MASK },
+    { "i386/amd64-mpx-linux.xml", X86_XSTATE_MPX_MASK },
+    { "i386/amd64-avx-mpx-linux.xml", X86_XSTATE_AVX_MPX_MASK },
+    { "i386/amd64-avx-avx512-linux.xml", X86_XSTATE_AVX_AVX512_MASK },
+    { "i386/amd64-avx-mpx-avx512-pku-linux.xml",
+      X86_XSTATE_AVX_MPX_AVX512_PKU_MASK },
+    { "i386/x32-linux.xml", X86_XSTATE_SSE_MASK },
+    { "i386/x32-avx-linux.xml", X86_XSTATE_AVX_MASK },
+    { "i386/x32-avx-avx512-linux.xml", X86_XSTATE_AVX_AVX512_MASK },
+  };
+
+  for (auto &a : xml_masks)
+    {
+      auto tdesc = amd64_linux_read_description (a.mask,
+						 startswith (a.xml,
+							     "i386/x32"));
+
+      selftests::record_xml_tdesc (a.xml, tdesc);
+    }
+#endif /* GDB_SELF_TEST */
 }
diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index 5a59e78..d26eea2 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -248,7 +248,16 @@ FEATURE_XMLFILES = i386/32bit-core.xml \
 	i386/32bit-avx.xml \
 	i386/32bit-mpx.xml \
 	i386/32bit-avx512.xml \
-	i386/32bit-pkeys.xml
+	i386/32bit-pkeys.xml \
+	i386/64bit-avx512.xml \
+	i386/64bit-core.xml \
+	i386/64bit-mpx.xml \
+	i386/64bit-segments.xml \
+	i386/64bit-avx.xml \
+	i386/64bit-linux.xml \
+	i386/64bit-pkeys.xml \
+	i386/64bit-sse.xml \
+	i386/x32-core.xml
 
 FEATURE_CFILES = $(patsubst %.xml,%.c,$(FEATURE_XMLFILES))
 
diff --git a/gdb/features/i386/64bit-avx.c b/gdb/features/i386/64bit-avx.c
new file mode 100644
index 0000000..d8e3914
--- /dev/null
+++ b/gdb/features/i386/64bit-avx.c
@@ -0,0 +1,29 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: 64bit-avx.xml */
+
+#include "arch/tdesc.h"
+
+static int
+create_feature_i386_64bit_avx (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx", "64bit-avx.xml");
+  tdesc_create_reg (feature, "ymm0h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm1h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm2h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm3h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm4h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm5h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm6h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm7h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm8h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm9h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm10h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm11h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm12h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm13h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm14h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm15h", regnum++, 1, NULL, 128, "uint128");
+  return regnum;
+}
diff --git a/gdb/features/i386/64bit-avx512.c b/gdb/features/i386/64bit-avx512.c
new file mode 100644
index 0000000..fb50960
--- /dev/null
+++ b/gdb/features/i386/64bit-avx512.c
@@ -0,0 +1,124 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: 64bit-avx512.xml */
+
+#include "arch/tdesc.h"
+
+static int
+create_feature_i386_64bit_avx512 (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512", "64bit-avx512.xml");
+  struct tdesc_type *field_type;
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  struct tdesc_type *type;
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_create_vector (feature, "v2ui128", field_type, 2);
+
+  tdesc_create_reg (feature, "xmm16", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm17", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm18", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm19", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm20", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm21", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm22", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm23", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm24", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm25", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm26", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm27", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm28", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm29", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm30", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm31", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "ymm16h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm17h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm18h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm19h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm20h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm21h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm22h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm23h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm24h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm25h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm26h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm27h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm28h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm29h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm30h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "ymm31h", regnum++, 1, NULL, 128, "uint128");
+  tdesc_create_reg (feature, "k0", regnum++, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "k1", regnum++, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "k2", regnum++, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "k3", regnum++, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "k4", regnum++, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "k5", regnum++, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "k6", regnum++, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "k7", regnum++, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "zmm0h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm1h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm2h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm3h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm4h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm5h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm6h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm7h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm8h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm9h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm10h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm11h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm12h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm13h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm14h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm15h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm16h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm17h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm18h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm19h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm20h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm21h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm22h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm23h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm24h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm25h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm26h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm27h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm28h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm29h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm30h", regnum++, 1, NULL, 256, "v2ui128");
+  tdesc_create_reg (feature, "zmm31h", regnum++, 1, NULL, 256, "v2ui128");
+  return regnum;
+}
diff --git a/gdb/features/i386/64bit-core.c b/gdb/features/i386/64bit-core.c
new file mode 100644
index 0000000..14d4a19
--- /dev/null
+++ b/gdb/features/i386/64bit-core.c
@@ -0,0 +1,74 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: 64bit-core.xml */
+
+#include "arch/tdesc.h"
+
+static int
+create_feature_i386_64bit_core (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core", "64bit-core.xml");
+  struct tdesc_type *field_type;
+  struct tdesc_type *type;
+  type = tdesc_create_flags (feature, "i386_eflags", 4);
+  tdesc_add_flag (type, 0, "CF");
+  tdesc_add_flag (type, 1, "");
+  tdesc_add_flag (type, 2, "PF");
+  tdesc_add_flag (type, 4, "AF");
+  tdesc_add_flag (type, 6, "ZF");
+  tdesc_add_flag (type, 7, "SF");
+  tdesc_add_flag (type, 8, "TF");
+  tdesc_add_flag (type, 9, "IF");
+  tdesc_add_flag (type, 10, "DF");
+  tdesc_add_flag (type, 11, "OF");
+  tdesc_add_flag (type, 14, "NT");
+  tdesc_add_flag (type, 16, "RF");
+  tdesc_add_flag (type, 17, "VM");
+  tdesc_add_flag (type, 18, "AC");
+  tdesc_add_flag (type, 19, "VIF");
+  tdesc_add_flag (type, 20, "VIP");
+  tdesc_add_flag (type, 21, "ID");
+
+  tdesc_create_reg (feature, "rax", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbx", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rcx", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdx", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsi", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdi", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbp", regnum++, 1, NULL, 64, "data_ptr");
+  tdesc_create_reg (feature, "rsp", regnum++, 1, NULL, 64, "data_ptr");
+  tdesc_create_reg (feature, "r8", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r9", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r10", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r11", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r12", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r13", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r14", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r15", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rip", regnum++, 1, NULL, 64, "code_ptr");
+  tdesc_create_reg (feature, "eflags", regnum++, 1, NULL, 32, "i386_eflags");
+  tdesc_create_reg (feature, "cs", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ss", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ds", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "es", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "fs", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "gs", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "st0", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st1", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st2", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st3", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st4", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st5", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st6", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st7", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "fctrl", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fstat", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "ftag", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fiseg", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fioff", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "foseg", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fooff", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fop", regnum++, 1, "float", 32, "int");
+  return regnum;
+}
diff --git a/gdb/features/i386/64bit-linux.c b/gdb/features/i386/64bit-linux.c
new file mode 100644
index 0000000..570910b
--- /dev/null
+++ b/gdb/features/i386/64bit-linux.c
@@ -0,0 +1,15 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: 64bit-linux.xml */
+
+#include "arch/tdesc.h"
+
+static int
+create_feature_i386_64bit_linux (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux", "64bit-linux.xml");
+  regnum = 57;
+  tdesc_create_reg (feature, "orig_rax", regnum++, 1, NULL, 64, "int");
+  return regnum;
+}
diff --git a/gdb/features/i386/64bit-mpx.c b/gdb/features/i386/64bit-mpx.c
new file mode 100644
index 0000000..2751e03
--- /dev/null
+++ b/gdb/features/i386/64bit-mpx.c
@@ -0,0 +1,51 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: 64bit-mpx.xml */
+
+#include "arch/tdesc.h"
+
+static int
+create_feature_i386_64bit_mpx (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx", "64bit-mpx.xml");
+  struct tdesc_type *field_type;
+  struct tdesc_type *type;
+  type = tdesc_create_struct (feature, "br128");
+  field_type = tdesc_named_type (feature, "uint64");
+  tdesc_add_field (type, "lbound", field_type);
+  field_type = tdesc_named_type (feature, "uint64");
+  tdesc_add_field (type, "ubound_raw", field_type);
+
+  type = tdesc_create_struct (feature, "_bndstatus");
+  tdesc_set_struct_size (type, 8);
+  tdesc_add_bitfield (type, "bde", 2, 63);
+  tdesc_add_bitfield (type, "error", 0, 1);
+
+  type = tdesc_create_union (feature, "status");
+  field_type = tdesc_named_type (feature, "data_ptr");
+  tdesc_add_field (type, "raw", field_type);
+  field_type = tdesc_named_type (feature, "_bndstatus");
+  tdesc_add_field (type, "status", field_type);
+
+  type = tdesc_create_struct (feature, "_bndcfgu");
+  tdesc_set_struct_size (type, 8);
+  tdesc_add_bitfield (type, "base", 12, 63);
+  tdesc_add_bitfield (type, "reserved", 2, 11);
+  tdesc_add_bitfield (type, "preserved", 1, 1);
+  tdesc_add_bitfield (type, "enabled", 0, 0);
+
+  type = tdesc_create_union (feature, "cfgu");
+  field_type = tdesc_named_type (feature, "data_ptr");
+  tdesc_add_field (type, "raw", field_type);
+  field_type = tdesc_named_type (feature, "_bndcfgu");
+  tdesc_add_field (type, "config", field_type);
+
+  tdesc_create_reg (feature, "bnd0raw", regnum++, 1, NULL, 128, "br128");
+  tdesc_create_reg (feature, "bnd1raw", regnum++, 1, NULL, 128, "br128");
+  tdesc_create_reg (feature, "bnd2raw", regnum++, 1, NULL, 128, "br128");
+  tdesc_create_reg (feature, "bnd3raw", regnum++, 1, NULL, 128, "br128");
+  tdesc_create_reg (feature, "bndcfgu", regnum++, 1, NULL, 64, "cfgu");
+  tdesc_create_reg (feature, "bndstatus", regnum++, 1, NULL, 64, "status");
+  return regnum;
+}
diff --git a/gdb/features/i386/64bit-pkeys.c b/gdb/features/i386/64bit-pkeys.c
new file mode 100644
index 0000000..9d974c3
--- /dev/null
+++ b/gdb/features/i386/64bit-pkeys.c
@@ -0,0 +1,14 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: 64bit-pkeys.xml */
+
+#include "arch/tdesc.h"
+
+static int
+create_feature_i386_64bit_pkeys (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.pkeys", "64bit-pkeys.xml");
+  tdesc_create_reg (feature, "pkru", regnum++, 1, NULL, 32, "uint32");
+  return regnum;
+}
diff --git a/gdb/features/i386/64bit-segments.c b/gdb/features/i386/64bit-segments.c
new file mode 100644
index 0000000..7a1fbf5
--- /dev/null
+++ b/gdb/features/i386/64bit-segments.c
@@ -0,0 +1,15 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: 64bit-segments.xml */
+
+#include "arch/tdesc.h"
+
+static int
+create_feature_i386_64bit_segments (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments", "64bit-segments.xml");
+  tdesc_create_reg (feature, "fs_base", regnum++, 1, NULL, 64, "int");
+  tdesc_create_reg (feature, "gs_base", regnum++, 1, NULL, 64, "int");
+  return regnum;
+}
diff --git a/gdb/features/i386/64bit-sse.c b/gdb/features/i386/64bit-sse.c
new file mode 100644
index 0000000..bc38498
--- /dev/null
+++ b/gdb/features/i386/64bit-sse.c
@@ -0,0 +1,83 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: 64bit-sse.xml */
+
+#include "arch/tdesc.h"
+
+static int
+create_feature_i386_64bit_sse (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse", "64bit-sse.xml");
+  struct tdesc_type *field_type;
+  field_type = tdesc_named_type (feature, "ieee_single");
+  tdesc_create_vector (feature, "v4f", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "ieee_double");
+  tdesc_create_vector (feature, "v2d", field_type, 2);
+
+  field_type = tdesc_named_type (feature, "int8");
+  tdesc_create_vector (feature, "v16i8", field_type, 16);
+
+  field_type = tdesc_named_type (feature, "int16");
+  tdesc_create_vector (feature, "v8i16", field_type, 8);
+
+  field_type = tdesc_named_type (feature, "int32");
+  tdesc_create_vector (feature, "v4i32", field_type, 4);
+
+  field_type = tdesc_named_type (feature, "int64");
+  tdesc_create_vector (feature, "v2i64", field_type, 2);
+
+  struct tdesc_type *type;
+  type = tdesc_create_union (feature, "vec128");
+  field_type = tdesc_named_type (feature, "v4f");
+  tdesc_add_field (type, "v4_float", field_type);
+  field_type = tdesc_named_type (feature, "v2d");
+  tdesc_add_field (type, "v2_double", field_type);
+  field_type = tdesc_named_type (feature, "v16i8");
+  tdesc_add_field (type, "v16_int8", field_type);
+  field_type = tdesc_named_type (feature, "v8i16");
+  tdesc_add_field (type, "v8_int16", field_type);
+  field_type = tdesc_named_type (feature, "v4i32");
+  tdesc_add_field (type, "v4_int32", field_type);
+  field_type = tdesc_named_type (feature, "v2i64");
+  tdesc_add_field (type, "v2_int64", field_type);
+  field_type = tdesc_named_type (feature, "uint128");
+  tdesc_add_field (type, "uint128", field_type);
+
+  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
+  tdesc_add_flag (type, 0, "IE");
+  tdesc_add_flag (type, 1, "DE");
+  tdesc_add_flag (type, 2, "ZE");
+  tdesc_add_flag (type, 3, "OE");
+  tdesc_add_flag (type, 4, "UE");
+  tdesc_add_flag (type, 5, "PE");
+  tdesc_add_flag (type, 6, "DAZ");
+  tdesc_add_flag (type, 7, "IM");
+  tdesc_add_flag (type, 8, "DM");
+  tdesc_add_flag (type, 9, "ZM");
+  tdesc_add_flag (type, 10, "OM");
+  tdesc_add_flag (type, 11, "UM");
+  tdesc_add_flag (type, 12, "PM");
+  tdesc_add_flag (type, 15, "FZ");
+
+  regnum = 40;
+  tdesc_create_reg (feature, "xmm0", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm1", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm2", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm3", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm4", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm5", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm6", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm7", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm8", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm9", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm10", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm11", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm12", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm13", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm14", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "xmm15", regnum++, 1, NULL, 128, "vec128");
+  tdesc_create_reg (feature, "mxcsr", regnum++, 1, "vector", 32, "i386_mxcsr");
+  return regnum;
+}
diff --git a/gdb/features/i386/x32-core.c b/gdb/features/i386/x32-core.c
new file mode 100644
index 0000000..3939abc
--- /dev/null
+++ b/gdb/features/i386/x32-core.c
@@ -0,0 +1,74 @@
+/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
+  Original: x32-core.xml */
+
+#include "arch/tdesc.h"
+
+static int
+create_feature_i386_x32_core (struct target_desc *result, long regnum)
+{
+  struct tdesc_feature *feature;
+
+  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core", "x32-core.xml");
+  struct tdesc_type *field_type;
+  struct tdesc_type *type;
+  type = tdesc_create_flags (feature, "i386_eflags", 4);
+  tdesc_add_flag (type, 0, "CF");
+  tdesc_add_flag (type, 1, "");
+  tdesc_add_flag (type, 2, "PF");
+  tdesc_add_flag (type, 4, "AF");
+  tdesc_add_flag (type, 6, "ZF");
+  tdesc_add_flag (type, 7, "SF");
+  tdesc_add_flag (type, 8, "TF");
+  tdesc_add_flag (type, 9, "IF");
+  tdesc_add_flag (type, 10, "DF");
+  tdesc_add_flag (type, 11, "OF");
+  tdesc_add_flag (type, 14, "NT");
+  tdesc_add_flag (type, 16, "RF");
+  tdesc_add_flag (type, 17, "VM");
+  tdesc_add_flag (type, 18, "AC");
+  tdesc_add_flag (type, 19, "VIF");
+  tdesc_add_flag (type, 20, "VIP");
+  tdesc_add_flag (type, 21, "ID");
+
+  tdesc_create_reg (feature, "rax", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbx", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rcx", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdx", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsi", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rdi", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rbp", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rsp", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r8", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r9", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r10", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r11", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r12", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r13", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r14", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "r15", regnum++, 1, NULL, 64, "int64");
+  tdesc_create_reg (feature, "rip", regnum++, 1, NULL, 64, "uint64");
+  tdesc_create_reg (feature, "eflags", regnum++, 1, NULL, 32, "i386_eflags");
+  tdesc_create_reg (feature, "cs", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ss", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "ds", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "es", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "fs", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "gs", regnum++, 1, NULL, 32, "int32");
+  tdesc_create_reg (feature, "st0", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st1", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st2", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st3", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st4", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st5", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st6", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "st7", regnum++, 1, NULL, 80, "i387_ext");
+  tdesc_create_reg (feature, "fctrl", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fstat", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "ftag", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fiseg", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fioff", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "foseg", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fooff", regnum++, 1, "float", 32, "int");
+  tdesc_create_reg (feature, "fop", regnum++, 1, "float", 32, "int");
+  return regnum;
+}
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c
index 7a8dac0..2b3c146 100644
--- a/gdb/target-descriptions.c
+++ b/gdb/target-descriptions.c
@@ -2329,7 +2329,9 @@ maint_print_c_tdesc_cmd (char *args, int from_tty)
   /* Print c files for target features instead of target descriptions,
      because c files got from target features are more flexible than the
      counterparts.  */
-  if (startswith (filename_after_features.c_str (), "i386/32bit-"))
+  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"))
     {
       print_c_feature v (filename_after_features);
 
-- 
1.9.1

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

* [PATCH 21/22] Remove features/i386/amd64-*linux.c and features/i386/x32-*linux.c
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (15 preceding siblings ...)
  2017-08-21 15:31 ` [PATCH 02/22] Use i386_target_description to get tdesc_i386 Yao Qi
@ 2017-08-21 15:31 ` Yao Qi
  2017-08-21 15:31 ` [PATCH 06/22] Use VEC for target_desc.reg_defs Yao Qi
                   ` (5 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:31 UTC (permalink / raw)
  To: gdb-patches

gdb:

2017-06-09  Yao Qi  <yao.qi@linaro.org>

	* features/Makefile (XMLTOC): Remove i386/amd64XXX-linux.xml.
	* features/i386/amd64-avx-avx512-linux.c: Removed.
	* features/i386/amd64-avx-linux.c: Removed.
	* features/i386/amd64-avx-mpx-avx512-pku-linux.c: Removed.
	* features/i386/amd64-avx-mpx-linux.c: Removed.
	* features/i386/amd64-linux.c: Removed.
	* features/i386/amd64-mpx-linux.c: Removed.
	* features/i386/x32-avx-avx512-linux.c: Removed.
	* features/i386/x32-avx-linux.c: Removed.
	* features/i386/x32-linux.c: Removed.
---
 gdb/features/Makefile                              |   9 -
 gdb/features/i386/amd64-avx-avx512-linux.c         | 288 ------------------
 gdb/features/i386/amd64-avx-linux.c                | 177 -----------
 gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c | 329 ---------------------
 gdb/features/i386/amd64-avx-mpx-linux.c            | 215 --------------
 gdb/features/i386/amd64-linux.c                    | 159 ----------
 gdb/features/i386/amd64-mpx-linux.c                | 197 ------------
 gdb/features/i386/x32-avx-avx512-linux.c           | 288 ------------------
 gdb/features/i386/x32-avx-linux.c                  | 177 -----------
 gdb/features/i386/x32-linux.c                      | 159 ----------
 10 files changed, 1998 deletions(-)
 delete mode 100644 gdb/features/i386/amd64-avx-avx512-linux.c
 delete mode 100644 gdb/features/i386/amd64-avx-linux.c
 delete mode 100644 gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c
 delete mode 100644 gdb/features/i386/amd64-avx-mpx-linux.c
 delete mode 100644 gdb/features/i386/amd64-linux.c
 delete mode 100644 gdb/features/i386/amd64-mpx-linux.c
 delete mode 100644 gdb/features/i386/x32-avx-avx512-linux.c
 delete mode 100644 gdb/features/i386/x32-avx-linux.c
 delete mode 100644 gdb/features/i386/x32-linux.c

diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index d26eea2..6c4a9b3 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -138,16 +138,10 @@ XMLTOC = \
 	arm/arm-with-neon.xml \
 	arm/arm-with-vfpv2.xml \
 	arm/arm-with-vfpv3.xml \
-	i386/amd64-avx-linux.xml \
 	i386/amd64-avx.xml \
-	i386/amd64-avx-avx512-linux.xml \
 	i386/amd64-avx-avx512.xml \
-	i386/amd64-avx-mpx-avx512-pku-linux.xml \
 	i386/amd64-avx-mpx-avx512-pku.xml \
-	i386/amd64-linux.xml \
-	i386/amd64-mpx-linux.xml \
 	i386/amd64-mpx.xml \
-	i386/amd64-avx-mpx-linux.xml \
 	i386/amd64-avx-mpx.xml \
 	i386/amd64.xml \
 	i386/i386-avx.xml \
@@ -157,9 +151,6 @@ XMLTOC = \
 	i386/i386-mpx.xml \
 	i386/i386-avx-mpx.xml \
 	i386/i386.xml \
-	i386/x32-avx-linux.xml \
-	i386/x32-avx-avx512-linux.xml \
-	i386/x32-linux.xml \
 	microblaze-with-stack-protect.xml \
 	microblaze.xml \
 	mips-dsp-linux.xml \
diff --git a/gdb/features/i386/amd64-avx-avx512-linux.c b/gdb/features/i386/amd64-avx-avx512-linux.c
deleted file mode 100644
index de58f06..0000000
--- a/gdb/features/i386/amd64-avx-avx512-linux.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64-avx-avx512-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64_avx_avx512_linux;
-static void
-initialize_tdesc_amd64_avx_avx512_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 58, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 59, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 72, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 73, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 74, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 75, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_create_vector (feature, "v2ui128", field_type, 2);
-
-  tdesc_create_reg (feature, "xmm16", 76, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm17", 77, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm18", 78, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm19", 79, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm20", 80, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm21", 81, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm22", 82, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm23", 83, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm24", 84, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm25", 85, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm26", 86, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm27", 87, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm28", 88, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm29", 89, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm30", 90, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm31", 91, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "ymm16h", 92, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm17h", 93, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm18h", 94, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm19h", 95, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm20h", 96, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm21h", 97, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm22h", 98, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm23h", 99, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm24h", 100, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm25h", 101, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm26h", 102, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm27h", 103, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm28h", 104, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm29h", 105, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm30h", 106, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm31h", 107, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "k0", 108, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k1", 109, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k2", 110, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k3", 111, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k4", 112, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k5", 113, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k6", 114, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k7", 115, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "zmm0h", 116, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm1h", 117, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm2h", 118, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm3h", 119, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm4h", 120, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm5h", 121, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm6h", 122, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm7h", 123, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm8h", 124, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm9h", 125, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm10h", 126, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm11h", 127, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm12h", 128, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm13h", 129, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm14h", 130, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm15h", 131, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm16h", 132, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm17h", 133, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm18h", 134, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm19h", 135, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm20h", 136, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm21h", 137, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm22h", 138, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm23h", 139, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm24h", 140, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm25h", 141, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm26h", 142, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm27h", 143, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm28h", 144, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm29h", 145, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm30h", 146, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm31h", 147, 1, NULL, 256, "v2ui128");
-
-  tdesc_amd64_avx_avx512_linux = result;
-}
diff --git a/gdb/features/i386/amd64-avx-linux.c b/gdb/features/i386/amd64-avx-linux.c
deleted file mode 100644
index 00dfd3c..0000000
--- a/gdb/features/i386/amd64-avx-linux.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64-avx-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64_avx_linux;
-static void
-initialize_tdesc_amd64_avx_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 58, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 59, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 72, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 73, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 74, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 75, 1, NULL, 128, "uint128");
-
-  tdesc_amd64_avx_linux = result;
-}
diff --git a/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c b/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c
deleted file mode 100644
index 7fd016f..0000000
--- a/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c
+++ /dev/null
@@ -1,329 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64-avx-mpx-avx512-pku-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64_avx_mpx_avx512_pku_linux;
-static void
-initialize_tdesc_amd64_avx_mpx_avx512_pku_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 58, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 59, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 72, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 73, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 74, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 75, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 63);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 63);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 76, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 77, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 78, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 79, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 80, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 81, 1, NULL, 64, "status");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_create_vector (feature, "v2ui128", field_type, 2);
-
-  tdesc_create_reg (feature, "xmm16", 82, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm17", 83, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm18", 84, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm19", 85, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm20", 86, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm21", 87, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm22", 88, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm23", 89, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm24", 90, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm25", 91, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm26", 92, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm27", 93, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm28", 94, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm29", 95, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm30", 96, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm31", 97, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "ymm16h", 98, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm17h", 99, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm18h", 100, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm19h", 101, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm20h", 102, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm21h", 103, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm22h", 104, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm23h", 105, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm24h", 106, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm25h", 107, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm26h", 108, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm27h", 109, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm28h", 110, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm29h", 111, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm30h", 112, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm31h", 113, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "k0", 114, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k1", 115, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k2", 116, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k3", 117, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k4", 118, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k5", 119, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k6", 120, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k7", 121, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "zmm0h", 122, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm1h", 123, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm2h", 124, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm3h", 125, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm4h", 126, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm5h", 127, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm6h", 128, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm7h", 129, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm8h", 130, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm9h", 131, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm10h", 132, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm11h", 133, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm12h", 134, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm13h", 135, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm14h", 136, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm15h", 137, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm16h", 138, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm17h", 139, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm18h", 140, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm19h", 141, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm20h", 142, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm21h", 143, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm22h", 144, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm23h", 145, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm24h", 146, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm25h", 147, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm26h", 148, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm27h", 149, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm28h", 150, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm29h", 151, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm30h", 152, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm31h", 153, 1, NULL, 256, "v2ui128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.pkeys");
-  tdesc_create_reg (feature, "pkru", 154, 1, NULL, 32, "uint32");
-
-  tdesc_amd64_avx_mpx_avx512_pku_linux = result;
-}
diff --git a/gdb/features/i386/amd64-avx-mpx-linux.c b/gdb/features/i386/amd64-avx-mpx-linux.c
deleted file mode 100644
index 5fe1127..0000000
--- a/gdb/features/i386/amd64-avx-mpx-linux.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64-avx-mpx-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64_avx_mpx_linux;
-static void
-initialize_tdesc_amd64_avx_mpx_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 58, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 59, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 72, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 73, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 74, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 75, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 63);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 63);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 76, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 77, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 78, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 79, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 80, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 81, 1, NULL, 64, "status");
-
-  tdesc_amd64_avx_mpx_linux = result;
-}
diff --git a/gdb/features/i386/amd64-linux.c b/gdb/features/i386/amd64-linux.c
deleted file mode 100644
index 58c4405..0000000
--- a/gdb/features/i386/amd64-linux.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64_linux;
-static void
-initialize_tdesc_amd64_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 58, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 59, 1, NULL, 64, "int");
-
-  tdesc_amd64_linux = result;
-}
diff --git a/gdb/features/i386/amd64-mpx-linux.c b/gdb/features/i386/amd64-mpx-linux.c
deleted file mode 100644
index dcf92f9..0000000
--- a/gdb/features/i386/amd64-mpx-linux.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: amd64-mpx-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_amd64_mpx_linux;
-static void
-initialize_tdesc_amd64_mpx_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "data_ptr");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "code_ptr");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 58, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 59, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.mpx");
-  type = tdesc_create_struct (feature, "br128");
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "lbound", field_type);
-  field_type = tdesc_named_type (feature, "uint64");
-  tdesc_add_field (type, "ubound_raw", field_type);
-
-  type = tdesc_create_struct (feature, "_bndstatus");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "bde", 2, 63);
-  tdesc_add_bitfield (type, "error", 0, 1);
-
-  type = tdesc_create_union (feature, "status");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndstatus");
-  tdesc_add_field (type, "status", field_type);
-
-  type = tdesc_create_struct (feature, "_bndcfgu");
-  tdesc_set_struct_size (type, 8);
-  tdesc_add_bitfield (type, "base", 12, 63);
-  tdesc_add_bitfield (type, "reserved", 2, 11);
-  tdesc_add_bitfield (type, "preserved", 1, 1);
-  tdesc_add_bitfield (type, "enabled", 0, 0);
-
-  type = tdesc_create_union (feature, "cfgu");
-  field_type = tdesc_named_type (feature, "data_ptr");
-  tdesc_add_field (type, "raw", field_type);
-  field_type = tdesc_named_type (feature, "_bndcfgu");
-  tdesc_add_field (type, "config", field_type);
-
-  tdesc_create_reg (feature, "bnd0raw", 60, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 61, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 62, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 63, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 64, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 65, 1, NULL, 64, "status");
-
-  tdesc_amd64_mpx_linux = result;
-}
diff --git a/gdb/features/i386/x32-avx-avx512-linux.c b/gdb/features/i386/x32-avx-avx512-linux.c
deleted file mode 100644
index c023a10..0000000
--- a/gdb/features/i386/x32-avx-avx512-linux.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: x32-avx-avx512-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_x32_avx_avx512_linux;
-static void
-initialize_tdesc_x32_avx_avx512_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 58, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 59, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 72, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 73, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 74, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 75, 1, NULL, 128, "uint128");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx512");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_create_vector (feature, "v2ui128", field_type, 2);
-
-  tdesc_create_reg (feature, "xmm16", 76, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm17", 77, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm18", 78, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm19", 79, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm20", 80, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm21", 81, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm22", 82, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm23", 83, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm24", 84, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm25", 85, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm26", 86, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm27", 87, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm28", 88, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm29", 89, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm30", 90, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm31", 91, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "ymm16h", 92, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm17h", 93, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm18h", 94, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm19h", 95, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm20h", 96, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm21h", 97, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm22h", 98, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm23h", 99, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm24h", 100, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm25h", 101, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm26h", 102, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm27h", 103, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm28h", 104, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm29h", 105, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm30h", 106, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm31h", 107, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "k0", 108, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k1", 109, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k2", 110, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k3", 111, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k4", 112, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k5", 113, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k6", 114, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k7", 115, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "zmm0h", 116, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm1h", 117, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm2h", 118, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm3h", 119, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm4h", 120, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm5h", 121, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm6h", 122, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm7h", 123, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm8h", 124, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm9h", 125, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm10h", 126, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm11h", 127, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm12h", 128, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm13h", 129, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm14h", 130, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm15h", 131, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm16h", 132, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm17h", 133, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm18h", 134, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm19h", 135, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm20h", 136, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm21h", 137, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm22h", 138, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm23h", 139, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm24h", 140, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm25h", 141, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm26h", 142, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm27h", 143, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm28h", 144, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm29h", 145, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm30h", 146, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm31h", 147, 1, NULL, 256, "v2ui128");
-
-  tdesc_x32_avx_avx512_linux = result;
-}
diff --git a/gdb/features/i386/x32-avx-linux.c b/gdb/features/i386/x32-avx-linux.c
deleted file mode 100644
index 211d138..0000000
--- a/gdb/features/i386/x32-avx-linux.c
+++ /dev/null
@@ -1,177 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: x32-avx-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_x32_avx_linux;
-static void
-initialize_tdesc_x32_avx_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 58, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 59, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.avx");
-  tdesc_create_reg (feature, "ymm0h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 72, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 73, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 74, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 75, 1, NULL, 128, "uint128");
-
-  tdesc_x32_avx_linux = result;
-}
diff --git a/gdb/features/i386/x32-linux.c b/gdb/features/i386/x32-linux.c
deleted file mode 100644
index 05d502b..0000000
--- a/gdb/features/i386/x32-linux.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/* THIS FILE IS GENERATED.  -*- buffer-read-only: t -*- vi:set ro:
-  Original: x32-linux.xml */
-
-#include "defs.h"
-#include "osabi.h"
-#include "target-descriptions.h"
-
-struct target_desc *tdesc_x32_linux;
-static void
-initialize_tdesc_x32_linux (void)
-{
-  struct target_desc *result = allocate_target_description ();
-  set_tdesc_architecture (result, bfd_scan_arch ("i386:x64-32"));
-
-  set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
-
-  struct tdesc_feature *feature;
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
-  struct tdesc_type *field_type;
-  struct tdesc_type *type;
-  type = tdesc_create_flags (feature, "i386_eflags", 4);
-  tdesc_add_flag (type, 0, "CF");
-  tdesc_add_flag (type, 1, "");
-  tdesc_add_flag (type, 2, "PF");
-  tdesc_add_flag (type, 4, "AF");
-  tdesc_add_flag (type, 6, "ZF");
-  tdesc_add_flag (type, 7, "SF");
-  tdesc_add_flag (type, 8, "TF");
-  tdesc_add_flag (type, 9, "IF");
-  tdesc_add_flag (type, 10, "DF");
-  tdesc_add_flag (type, 11, "OF");
-  tdesc_add_flag (type, 14, "NT");
-  tdesc_add_flag (type, 16, "RF");
-  tdesc_add_flag (type, 17, "VM");
-  tdesc_add_flag (type, 18, "AC");
-  tdesc_add_flag (type, 19, "VIF");
-  tdesc_add_flag (type, 20, "VIP");
-  tdesc_add_flag (type, 21, "ID");
-
-  tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdx", 3, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsi", 4, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rdi", 5, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rbp", 6, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rsp", 7, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r8", 8, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r9", 9, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r10", 10, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r11", 11, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r12", 12, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r13", 13, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r14", 14, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "r15", 15, 1, NULL, 64, "int64");
-  tdesc_create_reg (feature, "rip", 16, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "eflags", 17, 1, NULL, 32, "i386_eflags");
-  tdesc_create_reg (feature, "cs", 18, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ss", 19, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "ds", 20, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "es", 21, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "fs", 22, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "gs", 23, 1, NULL, 32, "int32");
-  tdesc_create_reg (feature, "st0", 24, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st1", 25, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st2", 26, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st3", 27, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st4", 28, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st5", 29, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st6", 30, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "st7", 31, 1, NULL, 80, "i387_ext");
-  tdesc_create_reg (feature, "fctrl", 32, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fstat", 33, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "ftag", 34, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fiseg", 35, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fioff", 36, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "foseg", 37, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fooff", 38, 1, "float", 32, "int");
-  tdesc_create_reg (feature, "fop", 39, 1, "float", 32, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.sse");
-  field_type = tdesc_named_type (feature, "ieee_single");
-  tdesc_create_vector (feature, "v4f", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "ieee_double");
-  tdesc_create_vector (feature, "v2d", field_type, 2);
-
-  field_type = tdesc_named_type (feature, "int8");
-  tdesc_create_vector (feature, "v16i8", field_type, 16);
-
-  field_type = tdesc_named_type (feature, "int16");
-  tdesc_create_vector (feature, "v8i16", field_type, 8);
-
-  field_type = tdesc_named_type (feature, "int32");
-  tdesc_create_vector (feature, "v4i32", field_type, 4);
-
-  field_type = tdesc_named_type (feature, "int64");
-  tdesc_create_vector (feature, "v2i64", field_type, 2);
-
-  type = tdesc_create_union (feature, "vec128");
-  field_type = tdesc_named_type (feature, "v4f");
-  tdesc_add_field (type, "v4_float", field_type);
-  field_type = tdesc_named_type (feature, "v2d");
-  tdesc_add_field (type, "v2_double", field_type);
-  field_type = tdesc_named_type (feature, "v16i8");
-  tdesc_add_field (type, "v16_int8", field_type);
-  field_type = tdesc_named_type (feature, "v8i16");
-  tdesc_add_field (type, "v8_int16", field_type);
-  field_type = tdesc_named_type (feature, "v4i32");
-  tdesc_add_field (type, "v4_int32", field_type);
-  field_type = tdesc_named_type (feature, "v2i64");
-  tdesc_add_field (type, "v2_int64", field_type);
-  field_type = tdesc_named_type (feature, "uint128");
-  tdesc_add_field (type, "uint128", field_type);
-
-  type = tdesc_create_flags (feature, "i386_mxcsr", 4);
-  tdesc_add_flag (type, 0, "IE");
-  tdesc_add_flag (type, 1, "DE");
-  tdesc_add_flag (type, 2, "ZE");
-  tdesc_add_flag (type, 3, "OE");
-  tdesc_add_flag (type, 4, "UE");
-  tdesc_add_flag (type, 5, "PE");
-  tdesc_add_flag (type, 6, "DAZ");
-  tdesc_add_flag (type, 7, "IM");
-  tdesc_add_flag (type, 8, "DM");
-  tdesc_add_flag (type, 9, "ZM");
-  tdesc_add_flag (type, 10, "OM");
-  tdesc_add_flag (type, 11, "UM");
-  tdesc_add_flag (type, 12, "PM");
-  tdesc_add_flag (type, 15, "FZ");
-
-  tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm3", 43, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm4", 44, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm5", 45, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm6", 46, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm7", 47, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm8", 48, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm9", 49, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm10", 50, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm11", 51, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm12", 52, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm13", 53, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm14", 54, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm15", 55, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "mxcsr", 56, 1, "vector", 32, "i386_mxcsr");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.linux");
-  tdesc_create_reg (feature, "orig_rax", 57, 1, NULL, 64, "int");
-
-  feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments");
-  tdesc_create_reg (feature, "fs_base", 58, 1, NULL, 64, "int");
-  tdesc_create_reg (feature, "gs_base", 59, 1, NULL, 64, "int");
-
-  tdesc_x32_linux = result;
-}
-- 
1.9.1

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

* [PATCH 02/22] Use i386_target_description to get tdesc_i386
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (14 preceding siblings ...)
  2017-08-21 15:31 ` [PATCH 17/22] Lazily and dynamically create amd64-linux target descriptions Yao Qi
@ 2017-08-21 15:31 ` Yao Qi
  2017-08-21 16:23   ` John Baldwin
  2017-08-21 15:31 ` [PATCH 21/22] Remove features/i386/amd64-*linux.c and features/i386/x32-*linux.c Yao Qi
                   ` (6 subsequent siblings)
  22 siblings, 1 reply; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:31 UTC (permalink / raw)
  To: gdb-patches; +Cc: jhb

GDB can call function i386_target_description to get the right target
description rather than tdesc_i386.

gdb:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

	* amd64-fbsd-nat.c (amd64fbsd_read_description): Call
	i386_target_description.
	* i386-fbsd-nat.c (i386fbsd_read_description): Call
	i386_target_description.
	* i386-tdep.c (i386_gdbarch_init): Likewise.
---
 gdb/amd64-fbsd-nat.c |  2 +-
 gdb/i386-fbsd-nat.c  | 10 ++++------
 gdb/i386-tdep.c      |  2 +-
 3 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/gdb/amd64-fbsd-nat.c b/gdb/amd64-fbsd-nat.c
index f3ddbdd..a22b82b 100644
--- a/gdb/amd64-fbsd-nat.c
+++ b/gdb/amd64-fbsd-nat.c
@@ -181,7 +181,7 @@ amd64fbsd_read_description (struct target_ops *ops)
   if (is64)
     return amd64_target_description (X86_XSTATE_SSE_MASK);
   else
-    return tdesc_i386;
+    return i386_target_description (X86_XSTATE_SSE_MASK);
 }
 
 /* Provide a prototype to silence -Wmissing-prototypes.  */
diff --git a/gdb/i386-fbsd-nat.c b/gdb/i386-fbsd-nat.c
index dca6c01..ab671ef 100644
--- a/gdb/i386-fbsd-nat.c
+++ b/gdb/i386-fbsd-nat.c
@@ -139,12 +139,10 @@ i386fbsd_read_description (struct target_ops *ops)
       xsave_probed = 1;
     }
 
-  if (x86bsd_xsave_len != 0)
-    {
-      return i386_target_description (xcr0);
-    }
-  else
-    return tdesc_i386;
+  if (x86bsd_xsave_len == 0)
+    xcr0 = X86_XSTATE_SSE_MASK;
+
+  return i386_target_description (xcr0);
 }
 #endif
 
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index b1e5afd..9d0dd3d 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -8549,7 +8549,7 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   /* Get the x86 target description from INFO.  */
   tdesc = info.target_desc;
   if (! tdesc_has_registers (tdesc))
-    tdesc = tdesc_i386;
+    tdesc = i386_target_description (X86_XSTATE_SSE_MASK);
   tdep->tdesc = tdesc;
 
   tdep->num_core_regs = I386_NUM_GREGS + I387_NUM_REGS;
-- 
1.9.1

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

* [PATCH 13/22] [GDBserver] Use pre-generated tdesc as test
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (18 preceding siblings ...)
  2017-08-21 15:31 ` [PATCH 12/22] Remove features/i386/i386-*linux.c Yao Qi
@ 2017-08-21 15:31 ` Yao Qi
  2017-08-21 15:31 ` [PATCH 14/22] [GDBserver] Shorten srv_i386_linux_xmlfiles Yao Qi
                   ` (2 subsequent siblings)
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-08-21 15:31 UTC (permalink / raw)
  To: gdb-patches

Now, these *-generate.c files are only used in GDBserver for unit test.
If $development is false (in release), these *-generate.c files won't be
used at all.

gdb/gdbserver:

2017-07-07  Yao Qi  <yao.qi@linaro.org>

	* configure.srv: Set srv_i386_linux_regobj empty if $development
	is false.
	* linux-i386-ipa.c (initialize_low_tracepoint): Don't call
	initialize_low_tdesc.
	* linux-x86-low.c (initialize_low_arch): Wrap initialize_low_tdesc
	with #if initialize_low_tdesc.
	* linux-x86-tdesc-selftest.c: New file.
	* linux-x86-tdesc.c: Move code to linux-x86-tdesc-selftest.c.
---
 gdb/gdbserver/configure.srv              | 11 ++--
 gdb/gdbserver/linux-i386-ipa.c           |  2 -
 gdb/gdbserver/linux-x86-low.c            |  2 +
 gdb/gdbserver/linux-x86-tdesc-selftest.c | 93 ++++++++++++++++++++++++++++++++
 gdb/gdbserver/linux-x86-tdesc.c          | 82 ----------------------------
 5 files changed, 103 insertions(+), 87 deletions(-)
 create mode 100644 gdb/gdbserver/linux-x86-tdesc-selftest.c

diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv
index 876098b..dbd87b2 100644
--- a/gdb/gdbserver/configure.srv
+++ b/gdb/gdbserver/configure.srv
@@ -25,11 +25,16 @@
 srv_hostio_err_objs="hostio-errno.o"
 
 srv_i386_regobj="i386.o"
-srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-avx-avx512-linux.o i386-avx-mpx-avx512-pku-linux.o i386-mpx-linux.o i386-avx-mpx-linux.o i386-mmx-linux.o"
+
+if $development; then
+   srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-avx-avx512-linux.o i386-avx-mpx-avx512-pku-linux.o i386-mpx-linux.o i386-avx-mpx-linux.o i386-mmx-linux.o linux-x86-tdesc-selftest.o"
+else
+   srv_i386_linux_regobj=""
+fi
+
 srv_amd64_regobj="amd64.o"
 srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-avx-avx512-linux.o amd64-avx-mpx-avx512-pku-linux.o amd64-mpx-linux.o amd64-avx-mpx-linux.o x32-linux.o x32-avx-linux.o x32-avx-avx512-linux.o"
 
-ipa_i386_linux_regobj="i386-linux-ipa.o i386-avx-linux-ipa.o  i386-avx-mpx-linux-ipa.o i386-avx-avx512-linux-ipa.o i386-avx-mpx-avx512-pku-linux-ipa.o i386-mpx-linux-ipa.o i386-mmx-linux-ipa.o"
 ipa_amd64_linux_regobj="amd64-linux-ipa.o amd64-avx-linux-ipa.o amd64-avx-mpx-linux-ipa.o amd64-avx-avx512-linux-ipa.o amd64-avx-mpx-avx512-pku-linux-ipa.o amd64-mpx-linux-ipa.o"
 ipa_x32_linux_regobj="x32-linux-ipa.o x32-avx-linux-ipa.o x32-avx-avx512-linux-ipa.o"
 ipa_ppc_linux_regobj="powerpc-32l-ipa.o powerpc-altivec32l-ipa.o powerpc-cell32l-ipa.o powerpc-vsx32l-ipa.o powerpc-isa205-32l-ipa.o powerpc-isa205-altivec32l-ipa.o powerpc-isa205-vsx32l-ipa.o powerpc-e500l-ipa.o powerpc-64l-ipa.o powerpc-altivec64l-ipa.o powerpc-cell64l-ipa.o powerpc-vsx64l-ipa.o powerpc-isa205-64l-ipa.o powerpc-isa205-altivec64l-ipa.o powerpc-isa205-vsx64l-ipa.o"
@@ -131,7 +136,7 @@ case "${target}" in
 			srv_linux_regsets=yes
 			srv_linux_thread_db=yes
 			srv_linux_btrace=yes
-			ipa_obj="${ipa_i386_linux_regobj} linux-i386-ipa.o linux-x86-tdesc-ipa.o"
+			ipa_obj="linux-i386-ipa.o linux-x86-tdesc-ipa.o"
 			ipa_obj="${ipa_obj} i386-ipa.o"
 			;;
   i[34567]86-*-lynxos*)	srv_regobj="i386.o"
diff --git a/gdb/gdbserver/linux-i386-ipa.c b/gdb/gdbserver/linux-i386-ipa.c
index 54608da..785a63e 100644
--- a/gdb/gdbserver/linux-i386-ipa.c
+++ b/gdb/gdbserver/linux-i386-ipa.c
@@ -289,7 +289,5 @@ alloc_jump_pad_buffer (size_t size)
 void
 initialize_low_tracepoint (void)
 {
-  initialize_low_tdesc ();
-
   initialize_fast_tracepoint_trampoline_buffer ();
 }
diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c
index 24b76a7..54be82f 100644
--- a/gdb/gdbserver/linux-x86-low.c
+++ b/gdb/gdbserver/linux-x86-low.c
@@ -2969,7 +2969,9 @@ initialize_low_arch (void)
   tdesc_amd64_linux_no_xml->xmltarget = xmltarget_amd64_linux_no_xml;
 #endif
 
+#if GDB_SELF_TEST
   initialize_low_tdesc ();
+#endif
 
   tdesc_i386_linux_no_xml = XNEW (struct target_desc);
   copy_target_description (tdesc_i386_linux_no_xml,
diff --git a/gdb/gdbserver/linux-x86-tdesc-selftest.c b/gdb/gdbserver/linux-x86-tdesc-selftest.c
new file mode 100644
index 0000000..558a25b
--- /dev/null
+++ b/gdb/gdbserver/linux-x86-tdesc-selftest.c
@@ -0,0 +1,93 @@
+/* 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 "linux-x86-tdesc.h"
+#include "tdesc.h"
+#include "common/selftest.h"
+#include "x86-xstate.h"
+
+/* Defined in auto-generated file i386-linux.c.  */
+void init_registers_i386_linux (void);
+extern const struct target_desc *tdesc_i386_linux;
+
+/* Defined in auto-generated file i386-mmx-linux.c.  */
+void init_registers_i386_mmx_linux (void);
+extern const struct target_desc *tdesc_i386_mmx_linux;
+
+/* Defined in auto-generated file i386-avx-linux.c.  */
+void init_registers_i386_avx_linux (void);
+extern const struct target_desc *tdesc_i386_avx_linux;
+
+/* Defined in auto-generated file i386-avx-mpx-linux.c.  */
+void init_registers_i386_avx_mpx_linux (void);
+extern const struct target_desc *tdesc_i386_avx_mpx_linux;
+
+/* Defined in auto-generated file i386-avx-avx512-linux.c.  */
+void init_registers_i386_avx_avx512_linux (void);
+extern const struct target_desc *tdesc_i386_avx_avx512_linux;
+
+/* Defined in auto-generated file i386-avx-mpx-avx512-linux.c.  */
+void init_registers_i386_avx_mpx_avx512_pku_linux (void);
+extern const struct target_desc *tdesc_i386_avx_mpx_avx512_pku_linux;
+
+/* Defined in auto-generated file i386-mpx-linux.c.  */
+void init_registers_i386_mpx_linux (void);
+extern const struct target_desc *tdesc_i386_mpx_linux;
+
+namespace selftests {
+namespace tdesc {
+static void
+i386_tdesc_test ()
+{
+  struct
+  {
+    unsigned int mask;
+    const target_desc *tdesc;
+  } tdesc_tests[] = {
+    { X86_XSTATE_X87, tdesc_i386_mmx_linux },
+    { X86_XSTATE_SSE_MASK, tdesc_i386_linux },
+    { X86_XSTATE_AVX_MASK, tdesc_i386_avx_linux },
+    { X86_XSTATE_MPX_MASK, tdesc_i386_mpx_linux },
+    { X86_XSTATE_AVX_MPX_MASK, tdesc_i386_avx_mpx_linux },
+    { X86_XSTATE_AVX_AVX512_MASK, tdesc_i386_avx_avx512_linux },
+    { X86_XSTATE_AVX_MPX_AVX512_PKU_MASK, tdesc_i386_avx_mpx_avx512_pku_linux }
+  };
+
+  for (auto &elem : tdesc_tests)
+    {
+      const target_desc *tdesc = i386_linux_read_description (elem.mask);
+
+      SELF_CHECK (*tdesc == *elem.tdesc);
+    }
+}
+}
+} // namespace selftests
+
+void
+initialize_low_tdesc ()
+{
+  init_registers_i386_linux ();
+  init_registers_i386_mmx_linux ();
+  init_registers_i386_avx_linux ();
+  init_registers_i386_mpx_linux ();
+  init_registers_i386_avx_mpx_linux ();
+  init_registers_i386_avx_avx512_linux ();
+  init_registers_i386_avx_mpx_avx512_pku_linux ();
+
+  selftests::register_test (selftests::tdesc::i386_tdesc_test);
+}
diff --git a/gdb/gdbserver/linux-x86-tdesc.c b/gdb/gdbserver/linux-x86-tdesc.c
index 548e780..d1e262c 100644
--- a/gdb/gdbserver/linux-x86-tdesc.c
+++ b/gdb/gdbserver/linux-x86-tdesc.c
@@ -23,90 +23,8 @@
 #include "arch/i386.h"
 #include "common/x86-xstate.h"
 
-#if defined __i386__ || !defined IN_PROCESS_AGENT
-
-/* Defined in auto-generated file i386-linux.c.  */
-void init_registers_i386_linux (void);
-extern const struct target_desc *tdesc_i386_linux;
-
-/* Defined in auto-generated file i386-mmx-linux.c.  */
-void init_registers_i386_mmx_linux (void);
-extern const struct target_desc *tdesc_i386_mmx_linux;
-
-/* Defined in auto-generated file i386-avx-linux.c.  */
-void init_registers_i386_avx_linux (void);
-extern const struct target_desc *tdesc_i386_avx_linux;
-
-/* Defined in auto-generated file i386-avx-mpx-linux.c.  */
-void init_registers_i386_avx_mpx_linux (void);
-extern const struct target_desc *tdesc_i386_avx_mpx_linux;
-
-/* Defined in auto-generated file i386-avx-avx512-linux.c.  */
-void init_registers_i386_avx_avx512_linux (void);
-extern const struct target_desc *tdesc_i386_avx_avx512_linux;
-
-/* Defined in auto-generated file i386-avx-mpx-avx512-linux.c.  */
-void init_registers_i386_avx_mpx_avx512_pku_linux (void);
-extern const struct target_desc *tdesc_i386_avx_mpx_avx512_pku_linux;
-
-/* Defined in auto-generated file i386-mpx-linux.c.  */
-void init_registers_i386_mpx_linux (void);
-extern const struct target_desc *tdesc_i386_mpx_linux;
-#endif
-
 static struct target_desc *i386_tdescs[X86_TDESC_LAST] = { };
 
-#if defined GDB_SELF_TEST && !defined IN_PROCESS_AGENT
-#include "selftest.h"
-
-namespace selftests {
-namespace tdesc {
-static void
-i386_tdesc_test ()
-{
-  struct
-  {
-    unsigned int mask;
-    const target_desc *tdesc;
-  } tdesc_tests[] = {
-    { X86_XSTATE_X87, tdesc_i386_mmx_linux },
-    { X86_XSTATE_SSE_MASK, tdesc_i386_linux },
-    { X86_XSTATE_AVX_MASK, tdesc_i386_avx_linux },
-    { X86_XSTATE_MPX_MASK, tdesc_i386_mpx_linux },
-    { X86_XSTATE_AVX_MPX_MASK, tdesc_i386_avx_mpx_linux },
-    { X86_XSTATE_AVX_AVX512_MASK, tdesc_i386_avx_avx512_linux },
-    { X86_XSTATE_AVX_MPX_AVX512_PKU_MASK, tdesc_i386_avx_mpx_avx512_pku_linux }
-  };
-
-  for (auto &elem : tdesc_tests)
-    {
-      const target_desc *tdesc = i386_linux_read_description (elem.mask);
-
-      SELF_CHECK (*tdesc == *elem.tdesc);
-    }
-}
-}
-} // namespace selftests
-#endif /* GDB_SELF_TEST */
-
-void
-initialize_low_tdesc ()
-{
-#if defined __i386__ || !defined IN_PROCESS_AGENT
-  init_registers_i386_linux ();
-  init_registers_i386_mmx_linux ();
-  init_registers_i386_avx_linux ();
-  init_registers_i386_mpx_linux ();
-  init_registers_i386_avx_mpx_linux ();
-  init_registers_i386_avx_avx512_linux ();
-  init_registers_i386_avx_mpx_avx512_pku_linux ();
-
-#if GDB_SELF_TEST && !defined IN_PROCESS_AGENT
-  selftests::register_test (selftests::tdesc::i386_tdesc_test);
-#endif
-#endif
-}
-
 #if defined __i386__ || !defined IN_PROCESS_AGENT
 
 /* Return the target description according to XCR0.  */
-- 
1.9.1

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

* Re: [PATCH 02/22] Use i386_target_description to get tdesc_i386
  2017-08-21 15:31 ` [PATCH 02/22] Use i386_target_description to get tdesc_i386 Yao Qi
@ 2017-08-21 16:23   ` John Baldwin
  0 siblings, 0 replies; 28+ messages in thread
From: John Baldwin @ 2017-08-21 16:23 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches

On Monday, August 21, 2017 04:28:47 PM Yao Qi wrote:
> GDB can call function i386_target_description to get the right target
> description rather than tdesc_i386.
> 
> gdb:
> 
> 2017-08-18  Yao Qi  <yao.qi@linaro.org>
> 
> 	* amd64-fbsd-nat.c (amd64fbsd_read_description): Call
> 	i386_target_description.
> 	* i386-fbsd-nat.c (i386fbsd_read_description): Call
> 	i386_target_description.
> 	* i386-tdep.c (i386_gdbarch_init): Likewise.
> ---
>  gdb/amd64-fbsd-nat.c |  2 +-
>  gdb/i386-fbsd-nat.c  | 10 ++++------
>  gdb/i386-tdep.c      |  2 +-
>  3 files changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/gdb/amd64-fbsd-nat.c b/gdb/amd64-fbsd-nat.c
> index f3ddbdd..a22b82b 100644
> --- a/gdb/amd64-fbsd-nat.c
> +++ b/gdb/amd64-fbsd-nat.c
> @@ -181,7 +181,7 @@ amd64fbsd_read_description (struct target_ops *ops)
>    if (is64)
>      return amd64_target_description (X86_XSTATE_SSE_MASK);
>    else
> -    return tdesc_i386;
> +    return i386_target_description (X86_XSTATE_SSE_MASK);
>  }

Hmm, I think we can further simplify amd64fbsd_read_description by always
using amd64/i386_target_description and just setting xcr0 to
X86_XSTATE_SSE_MASK in the #else case and if xsave_len is 0.

-- 
John Baldwin

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

* Re: [PATCH 03/22] Return X86_XSTATE_SSE_MASK instead of 0 in i386fbsd_core_read_xcr0
  2017-08-21 15:29 ` [PATCH 03/22] Return X86_XSTATE_SSE_MASK instead of 0 in i386fbsd_core_read_xcr0 Yao Qi
@ 2017-08-21 16:23   ` John Baldwin
  2017-08-21 16:46     ` Yao Qi
  0 siblings, 1 reply; 28+ messages in thread
From: John Baldwin @ 2017-08-21 16:23 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches

On Monday, August 21, 2017 04:28:48 PM Yao Qi wrote:
> i386fbsd_core_read_xcr0 reads the value of xcr0 from the corefile.  If
> it fails, returns 0.  This makes its caller {i386,amd64}_target_description
> has to handle this special value.  IMO, i386fbsd_core_read_xcr0 should
> return the default xcr0 in case of error.
> 
> gdb:
> 
> 2017-08-21  Yao Qi  <yao.qi@linaro.org>
> 
> 	* i386-fbsd-tdep.c (i386fbsd_core_read_xcr0): Return
> 	X86_XSTATE_SSE_MASK instead of 0.
> ---
>  gdb/i386-fbsd-tdep.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/gdb/i386-fbsd-tdep.c b/gdb/i386-fbsd-tdep.c
> index 594b8f6..baca978 100644
> --- a/gdb/i386-fbsd-tdep.c
> +++ b/gdb/i386-fbsd-tdep.c
> @@ -248,14 +248,14 @@ i386fbsd_core_read_xcr0 (bfd *abfd)
>  	    {
>  	      warning (_("Couldn't read `xcr0' bytes from "
>  			 "`.reg-xstate' section in core file."));
> -	      return 0;
> +	      return X86_XSTATE_SSE_MASK;
>  	    }
>  
>  	  xcr0 = bfd_get_64 (abfd, contents);
>  	}
>      }
>    else
> -    xcr0 = 0;
> +    xcr0 = X86_XSTATE_SSE_MASK;
>  
>    return xcr0;
>  }

I think this should actually be X86_XSTATE_MMX_MASK.  Core dumps on FreeBSD/i386
only include the original 387 FPU state in .reg2, they do not write out SSE state
in a separate note as Linux does.

For i386 native FreeBSD (and probably other *BSD) targets the logic needs to
similarly be a bit more complicated, though I can help.  In particular, the
'static int have_ptrace_xmmregs' in i386-bsd-nat.c probably needs to be made
non-static with an extern in 'i386-bsd-nat.h', and i386fbsd_read_description
should try to use PT_GETXMMREGS once to probe it if it isn't set (it can just
fetch the gdb process' registers to test the flag) and then select
X86_XSTATE_SSE_MASK if there is no XSAVE support for PT_GETXMMREGS works,
else use X86_XSTATE_MMX_MASK.  Other BSD's don't have a target read description
target method, so only i386-fbsd-nat.c would need to have its method updated.
I could always work on this as a followup.

-- 
John Baldwin

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

* Re: [PATCH 03/22] Return X86_XSTATE_SSE_MASK instead of 0 in i386fbsd_core_read_xcr0
  2017-08-21 16:23   ` John Baldwin
@ 2017-08-21 16:46     ` Yao Qi
  2017-08-21 17:00       ` John Baldwin
  0 siblings, 1 reply; 28+ messages in thread
From: Yao Qi @ 2017-08-21 16:46 UTC (permalink / raw)
  To: John Baldwin; +Cc: gdb-patches

John Baldwin <jhb@freebsd.org> writes:

> I think this should actually be X86_XSTATE_MMX_MASK.  Core dumps on FreeBSD/i386

s/X86_XSTATE_MMX_MASK/X86_XSTATE_X87_MASK/  ?

> only include the original 387 FPU state in .reg2, they do not write
> out SSE state
> in a separate note as Linux does.
>

FAOD, the existing code (without my patches) get SSE target description
tdesc_i386 in default.  If we should use MMX target description
tdesc_i386_mmx in this case, we can change it after my patch #4, in
which i386_target_description returns tdesc_i386_mmx for X86_XSTATE_X87_MASK.

> For i386 native FreeBSD (and probably other *BSD) targets the logic needs to
> similarly be a bit more complicated, though I can help.  In particular, the
> 'static int have_ptrace_xmmregs' in i386-bsd-nat.c probably needs to be made
> non-static with an extern in 'i386-bsd-nat.h', and i386fbsd_read_description
> should try to use PT_GETXMMREGS once to probe it if it isn't set (it can just
> fetch the gdb process' registers to test the flag) and then select
> X86_XSTATE_SSE_MASK if there is no XSAVE support for PT_GETXMMREGS works,
> else use X86_XSTATE_MMX_MASK.  Other BSD's don't have a target read description
> target method, so only i386-fbsd-nat.c would need to have its method updated.
> I could always work on this as a followup.

To be clear, can I commit this patch as-is?

-- 
Yao (齐尧)

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

* Re: [PATCH 03/22] Return X86_XSTATE_SSE_MASK instead of 0 in i386fbsd_core_read_xcr0
  2017-08-21 16:46     ` Yao Qi
@ 2017-08-21 17:00       ` John Baldwin
  0 siblings, 0 replies; 28+ messages in thread
From: John Baldwin @ 2017-08-21 17:00 UTC (permalink / raw)
  To: Yao Qi; +Cc: gdb-patches

On Monday, August 21, 2017 05:45:50 PM Yao Qi wrote:
> John Baldwin <jhb@freebsd.org> writes:
> 
> > I think this should actually be X86_XSTATE_MMX_MASK.  Core dumps on FreeBSD/i386
> 
> s/X86_XSTATE_MMX_MASK/X86_XSTATE_X87_MASK/  ?

Yes.

> > only include the original 387 FPU state in .reg2, they do not write
> > out SSE state
> > in a separate note as Linux does.
> >
> 
> FAOD, the existing code (without my patches) get SSE target description
> tdesc_i386 in default.  If we should use MMX target description
> tdesc_i386_mmx in this case, we can change it after my patch #4, in
> which i386_target_description returns tdesc_i386_mmx for X86_XSTATE_X87_MASK.

Yes, this is an old bug.  I think it is fine to just reorder this after patch 4
so that returning X87_MASK will do the right thing.

> > For i386 native FreeBSD (and probably other *BSD) targets the logic needs to
> > similarly be a bit more complicated, though I can help.  In particular, the
> > 'static int have_ptrace_xmmregs' in i386-bsd-nat.c probably needs to be made
> > non-static with an extern in 'i386-bsd-nat.h', and i386fbsd_read_description
> > should try to use PT_GETXMMREGS once to probe it if it isn't set (it can just
> > fetch the gdb process' registers to test the flag) and then select
> > X86_XSTATE_SSE_MASK if there is no XSAVE support for PT_GETXMMREGS works,
> > else use X86_XSTATE_MMX_MASK.  Other BSD's don't have a target read description
> > target method, so only i386-fbsd-nat.c would need to have its method updated.
> > I could always work on this as a followup.
> 
> To be clear, can I commit this patch as-is?

Yes.

-- 
John Baldwin

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

* Re: [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible
  2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
                   ` (21 preceding siblings ...)
  2017-08-21 15:31 ` [PATCH 22/22] Convert the rest x86 target descriptions Yao Qi
@ 2017-09-05  9:04 ` Yao Qi
  22 siblings, 0 replies; 28+ messages in thread
From: Yao Qi @ 2017-09-05  9:04 UTC (permalink / raw)
  To: gdb-patches

Yao Qi <qiyaoltc@gmail.com> writes:

> This patch series is to change GDB and GDBserver builtin target
> descriptions more flexible, by removing pre-generated ones.  Nowadays,
> GDB builtin target descriptions are created from initialize_tdesc_*
> functions in features/*.c files, while GDBserver builtin target
> descriptions are generated from regformats/*.dat files.  Instead,
> with these patches applied, these builtin target descriptions can be
> got lazily and dynamically.

I regression tested them again yesterday and pushed them in.  I'll start
to convert other target descriptions.

-- 
Yao (齐尧)

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

end of thread, other threads:[~2017-09-05  9:04 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-08-21 15:29 [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible Yao Qi
2017-08-21 15:29 ` [PATCH 15/22] Update comments in amd64_linux_core_read_description Yao Qi
2017-08-21 15:29 ` [PATCH 03/22] Return X86_XSTATE_SSE_MASK instead of 0 in i386fbsd_core_read_xcr0 Yao Qi
2017-08-21 16:23   ` John Baldwin
2017-08-21 16:46     ` Yao Qi
2017-08-21 17:00       ` John Baldwin
2017-08-21 15:29 ` [PATCH 04/22] Let i386_target_description return tdesc_i386_mmx Yao Qi
2017-08-21 15:29 ` [PATCH 20/22] [GDBserver] Shorten srv_amd64_linux_xmlfiles Yao Qi
2017-08-21 15:29 ` [PATCH 01/22] Use amd64_target_description to get tdesc_amd64 Yao Qi
2017-08-21 15:29 ` [PATCH 11/22] Share i386-linux target description between GDB and GDBserver Yao Qi
2017-08-21 15:29 ` [PATCH 16/22] Centralize amd64-linux target descriptions Yao Qi
2017-08-21 15:29 ` [PATCH 09/22] [GDBserver] unit test to i386_tdesc Yao Qi
2017-08-21 15:29 ` [PATCH 19/22] [GDBserver] Use pre-generated amd64-linux tdesc as test Yao Qi
2017-08-21 15:29 ` [PATCH 08/22] [GDBserver] Centralize tdesc for i386-linux Yao Qi
2017-08-21 15:29 ` [PATCH 05/22] Adjust code generated by regformats/regdat.sh Yao Qi
2017-08-21 15:30 ` [PATCH 18/22] Convert amd64-linux target descriptions Yao Qi
2017-08-21 15:31 ` [PATCH 10/22] Dynamically composite xml in reply to GDB Yao Qi
2017-08-21 15:31 ` [PATCH 07/22] Return X86_TDESC_MMX in x86_get_ipa_tdesc_idx Yao Qi
2017-08-21 15:31 ` [PATCH 17/22] Lazily and dynamically create amd64-linux target descriptions Yao Qi
2017-08-21 15:31 ` [PATCH 02/22] Use i386_target_description to get tdesc_i386 Yao Qi
2017-08-21 16:23   ` John Baldwin
2017-08-21 15:31 ` [PATCH 21/22] Remove features/i386/amd64-*linux.c and features/i386/x32-*linux.c Yao Qi
2017-08-21 15:31 ` [PATCH 06/22] Use VEC for target_desc.reg_defs Yao Qi
2017-08-21 15:31 ` [PATCH 12/22] Remove features/i386/i386-*linux.c Yao Qi
2017-08-21 15:31 ` [PATCH 13/22] [GDBserver] Use pre-generated tdesc as test Yao Qi
2017-08-21 15:31 ` [PATCH 14/22] [GDBserver] Shorten srv_i386_linux_xmlfiles Yao Qi
2017-08-21 15:31 ` [PATCH 22/22] Convert the rest x86 target descriptions Yao Qi
2017-09-05  9:04 ` [PATCH 00/22 v4] Make GDB builtin target descriptions more flexible 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).