[1/2] Include the fs_base and gs_base registers in amd64 target descriptions.

Message ID 20170627224948.99138-2-jhb@FreeBSD.org
State New, archived
Headers

Commit Message

John Baldwin June 27, 2017, 10:49 p.m. UTC
  This permits these registers to be used with non-Linux targets.

gdb/ChangeLog:

	* features/Makefile (amd64.dat, amd64-avx.dat, amd64-mpx.dat)
	(amd64-avx-mpx.dat, amd64-avx-avx512.dat)
	(amd64-avx-mpx-avx512-pku.dat): Add i386/64bit-segments.xml in
	those rules.
	* features/i386/amd64-avx-avx512.xml: Add 64bit-segments.xml.
        * features/i386/amd64-avx-mpx-avx512-pku.xml: Add 64bit-segments.xml.
	* features/i386/amd64-avx-mpx.xml: Add 64bit-segments.xml.
	* features/i386/amd64-avx.xml: Add 64bit-segments.xml.
	* features/i386/amd64-mpx.xml: Add 64bit-segments.xml.
	* features/i386/amd64.xml: Add 64bit-segments.xml.
	* features/i386/amd64-avx-avx512.c: Regenerated.
	* features/i386/amd64-avx-mpx-avx512-pku.c: Regenerated.
	* features/i386/amd64-avx-mpx.c: Regenerated.
	* features/i386/amd64-avx.c: Regenerated.
	* features/i386/amd64-mpx.c: Regenerated.
	* features/i386/amd64.c: Regenerated.
	* regformats/i386/amd64-avx-avx512.dat: Regenerated.
	* regformats/i386/amd64-avx-mpx-avx512-pku.dat: Regenerated.
	* regformats/i386/amd64-avx-mpx.dat: Regenerated.
	* regformats/i386/amd64-avx.dat: Regenerated.
	* regformats/i386/amd64-mpx.dat: Regenerated.
	* regformats/i386/amd64.dat: Regenerated.
---
 gdb/ChangeLog                                    |  25 +++
 gdb/features/Makefile                            |  14 +-
 gdb/features/i386/amd64-avx-avx512.c             | 180 +++++++++++----------
 gdb/features/i386/amd64-avx-avx512.xml           |   1 +
 gdb/features/i386/amd64-avx-mpx-avx512-pku.c     | 194 ++++++++++++-----------
 gdb/features/i386/amd64-avx-mpx-avx512-pku.xml   |   1 +
 gdb/features/i386/amd64-avx-mpx.c                |  48 +++---
 gdb/features/i386/amd64-avx-mpx.xml              |   1 +
 gdb/features/i386/amd64-avx.c                    |  36 +++--
 gdb/features/i386/amd64-avx.xml                  |   1 +
 gdb/features/i386/amd64-mpx.c                    |  16 +-
 gdb/features/i386/amd64-mpx.xml                  |   1 +
 gdb/features/i386/amd64.c                        |   4 +
 gdb/features/i386/amd64.xml                      |   1 +
 gdb/regformats/i386/amd64-avx-avx512.dat         |   2 +
 gdb/regformats/i386/amd64-avx-mpx-avx512-pku.dat |   1 -
 gdb/regformats/i386/amd64-avx-mpx.dat            |   2 +
 gdb/regformats/i386/amd64-avx.dat                |   2 +
 gdb/regformats/i386/amd64-mpx.dat                |   2 +
 gdb/regformats/i386/amd64.dat                    |   2 +
 20 files changed, 300 insertions(+), 234 deletions(-)
  

Comments

Yao Qi July 11, 2017, 8:01 a.m. UTC | #1
John Baldwin <jhb@FreeBSD.org> writes:

> This permits these registers to be used with non-Linux targets.

Some GDBserver uses these target description files, like
x86_64-*-mingw*, after this change, GDBserver will reply GDB the target
description including "64bit-segments.xml".  Then, GDB will request the
contents of 64bit-segments.xml from GDBserver, looks 64bit-segments.xml
is already builtin in GDBserver, so there isn't an issue here.

The patch is good to me.

P.S.  this is a good example to show the inflexibility in current target
description.  After we change it to my new approach of target
description, this change will be just two or three lines :)
  
John Baldwin July 11, 2017, 4:11 p.m. UTC | #2
On Tuesday, July 11, 2017 09:01:25 AM Yao Qi wrote:
> John Baldwin <jhb@FreeBSD.org> writes:
> 
> > This permits these registers to be used with non-Linux targets.
> 
> Some GDBserver uses these target description files, like
> x86_64-*-mingw*, after this change, GDBserver will reply GDB the target
> description including "64bit-segments.xml".  Then, GDB will request the
> contents of 64bit-segments.xml from GDBserver, looks 64bit-segments.xml
> is already builtin in GDBserver, so there isn't an issue here.
> 
> The patch is good to me.
> 
> P.S.  this is a good example to show the inflexibility in current target
> description.  After we change it to my new approach of target
> description, this change will be just two or three lines :)

Agreed. :)  The combinatorics with XSAVE on x86 is especially bad.
  
Phil Muldoon July 12, 2017, 12:16 p.m. UTC | #3
On 11/07/17 09:01, Yao Qi wrote:
> John Baldwin <jhb@FreeBSD.org> writes:
> 
>> This permits these registers to be used with non-Linux targets.
> 
> Some GDBserver uses these target description files, like
> x86_64-*-mingw*, after this change, GDBserver will reply GDB the target
> description including "64bit-segments.xml".  Then, GDB will request the
> contents of 64bit-segments.xml from GDBserver, looks 64bit-segments.xml
> is already builtin in GDBserver, so there isn't an issue here.
> 
> The patch is good to me.
> 
> P.S.  this is a good example to show the inflexibility in current target
> description.  After we change it to my new approach of target
> description, this change will be just two or three lines :)
> 

This commit: 48aeef91c248291dd03583798904612426b1f40a along with
related commit: 0aa37b654c0f31e446ab47826f0bcbec15d0112f seems to
cause substantial testsuite failures for me on x8664/Fedora/Linux.

Backtrace of a trivial: file helloworld

(gdb) bt
#0  0x0000000000937b51 in htab_remove_elt_with_hash (htab=0x133f5d0, element=0xf0a180, hash=2401929989)
    at ../../binutils-gdb/libiberty/hashtab.c:728
#1  0x0000000000937b1b in htab_remove_elt (htab=0x133f5d0, element=0xf0a180) at ../../binutils-gdb/libiberty/hashtab.c:714
#2  0x00000000007b7c02 in tdesc_use_registers (gdbarch=0x1346ac0, target_desc=0xf2f540, early_data=0x133f5a0)
    at ../../binutils-gdb/gdb/target-descriptions.c:1328
#3  0x000000000045079c in i386_gdbarch_init (info=..., arches=0x0) at ../../binutils-gdb/gdb/i386-tdep.c:8634
#4  0x00000000006be323 in gdbarch_find_by_info (info=...) at ../../binutils-gdb/gdb/gdbarch.c:5394
#5  0x00000000005bddd9 in set_gdbarch_from_file (abfd=0x133d1d0) at ../../binutils-gdb/gdb/arch-utils.c:618
#6  0x000000000069777d in exec_file_attach (filename=0x13301d0 "/home/pmuldoon/td", from_tty=1) at ../../binutils-gdb/gdb/exec.c:380

Does anyone else see this?

Cheers

Phil
  
Yao Qi July 12, 2017, 1:02 p.m. UTC | #4
On Wed, Jul 12, 2017 at 1:16 PM, Phil Muldoon <pmuldoon@redhat.com> wrote:
>
> Does anyone else see this?
>

I don't see the issue you posted here, but there are
some regressions shown in buildbot.
https://sourceware.org/ml/gdb-testers/2017-q3/msg00370.html

John, could you take a look?
  
Simon Marchi July 12, 2017, 1:50 p.m. UTC | #5
On 2017-07-12 15:02, Yao Qi wrote:
> On Wed, Jul 12, 2017 at 1:16 PM, Phil Muldoon <pmuldoon@redhat.com> 
> wrote:
>> 
>> Does anyone else see this?
>> 
> 
> I don't see the issue you posted here, but there are
> some regressions shown in buildbot.
> https://sourceware.org/ml/gdb-testers/2017-q3/msg00370.html
> 
> John, could you take a look?

I looked around, I don't know exactly what's wrong but I might have some 
pointers.

 From what I understand, tdesc_use_registers adds the registers listed in 
the target description to a hash table, and then removes some of those 
same registers that are also specified by the architecture, so it's left 
with the registers for which we need to assign a number.  The hash table 
hash the pointer itself, it does not look at what it points to.

I added some prints where we add and remove the registers from the htab. 
  For rax, it looks good:

ADDING 0x237a510 rax
REMOVING 0x237a510 rax

We add and remov the same pointer.  For fs_base, the pointers are 
different:

ADDING 0x237d840 fs_base
REMOVING 0x23a5d70 fs_base

It suggests that something is wrong here, I would expect those two 
pointers to be equal.  I don't know enough about how the reg objects are 
created to know why it this happens.

Despite that, a segfault happens when we are calling htab_remove_elt 
with an element that does not exist in the hash table.  This case should 
be handled correctly, since this function allows that:

707 /* This function deletes an element with the given value from hash
708    table (the hash is computed from the element).  If there is no 
matching
709    element in the hash table, this function does nothing.  */
710
711 void
712 htab_remove_elt (htab_t htab, PTR element)

The problem seems to be in htab_remove_elt_with_hash:

727   slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT);
728   if (*slot == HTAB_EMPTY_ENTRY)
729     return;

htab_find_slot_with_hash can return NULL if you pass NO_INSERT and the 
element is non-existent.  So it looks like it's missing a slot != NULL 
on line 728.

Hope that helps.

Simon
  
Keith Seitz July 12, 2017, 4:23 p.m. UTC | #6
On 07/12/2017 06:02 AM, Yao Qi wrote:
> On Wed, Jul 12, 2017 at 1:16 PM, Phil Muldoon <pmuldoon@redhat.com> wrote:
>>
>> Does anyone else see this?
>>

Yes, I do, too -- I ran into it yesterday while rebasing patches for posting. FWIW, buildbot sees it, too (snippet from x86_64/-m32 linux):

set architecture i386:x64-32
ERROR: Process no longer exists
UNRESOLVED: gdb.base/all-architectures-2.exp: tests: osabi=GNU/Linux: arch=i386:x64-32: endian=auto: set architecture i386:x64-32
ERROR: Couldn't send set endian auto to GDB.
UNRESOLVED: gdb.base/all-architectures-2.exp: tests: osabi=GNU/Linux: arch=i386:x64-32:intel: endian=auto: set endian
ERROR: Couldn't send set architecture i386:x64-32:intel to GDB.
UNRESOLVED: gdb.base/all-architectures-2.exp: tests: osabi=GNU/Linux: arch=i386:x64-32:intel: endian=auto: set architecture i386:x64-32:intel
ERROR: Couldn't send show endian to GDB.
UNRESOLVED: gdb.base/all-architectures-2.exp: tests: osabi=GNU/Linux: arch=i386:x64-32:intel: endian=auto: show endian
ERROR: Couldn't send ptype 1.0L to GDB.
...

In fact right now, HEAD is unusable:

$ ./gdb gdb
Segmentation fault
$ ./gdb --version | head -1
GNU gdb (GDB) 8.0.50.20170711-git

> I don't see the issue you posted here, but there are
> some regressions shown in buildbot.
> https://sourceware.org/ml/gdb-testers/2017-q3/msg00370.html
> 
> John, could you take a look?

I'm not normally one to suggest this, but I think this is an exceptional case. Please consider reverting this patch until this issue is resolved.

Keith
  

Patch

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4e091d7e40..2196419fa3 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,28 @@ 
+2017-06-26  John Baldwin  <jhb@FreeBSD.org>
+
+	* features/Makefile (amd64.dat, amd64-avx.dat, amd64-mpx.dat)
+	(amd64-avx-mpx.dat, amd64-avx-avx512.dat)
+	(amd64-avx-mpx-avx512-pku.dat): Add i386/64bit-segments.xml in
+	those rules.
+	* features/i386/amd64-avx-avx512.xml: Add 64bit-segments.xml.
+        * features/i386/amd64-avx-mpx-avx512-pku.xml: Add 64bit-segments.xml.
+	* features/i386/amd64-avx-mpx.xml: Add 64bit-segments.xml.
+	* features/i386/amd64-avx.xml: Add 64bit-segments.xml.
+	* features/i386/amd64-mpx.xml: Add 64bit-segments.xml.
+	* features/i386/amd64.xml: Add 64bit-segments.xml.
+	* features/i386/amd64-avx-avx512.c: Regenerated.
+	* features/i386/amd64-avx-mpx-avx512-pku.c: Regenerated.
+	* features/i386/amd64-avx-mpx.c: Regenerated.
+	* features/i386/amd64-avx.c: Regenerated.
+	* features/i386/amd64-mpx.c: Regenerated.
+	* features/i386/amd64.c: Regenerated.
+	* regformats/i386/amd64-avx-avx512.dat: Regenerated.
+	* regformats/i386/amd64-avx-mpx-avx512-pku.dat: Regenerated.
+	* regformats/i386/amd64-avx-mpx.dat: Regenerated.
+	* regformats/i386/amd64-avx.dat: Regenerated.
+	* regformats/i386/amd64-mpx.dat: Regenerated.
+	* regformats/i386/amd64.dat: Regenerated.
+
 2017-06-19  John Baldwin  <jhb@FreeBSD.org>
 
 	* mips-tdep.c (print_gp_register_row): Don't error for unavailable
diff --git a/gdb/features/Makefile b/gdb/features/Makefile
index 3bc8b5ae85..199a315379 100644
--- a/gdb/features/Makefile
+++ b/gdb/features/Makefile
@@ -263,7 +263,8 @@  $(outdir)/arm/arm-with-iwmmxt.dat: arm/arm-core.xml arm/xscale-iwmmxt.xml
 $(outdir)/i386/i386.dat: i386/32bit-core.xml i386/32bit-sse.xml
 $(outdir)/i386/i386-linux.dat: i386/32bit-core.xml i386/32bit-sse.xml \
 			       i386/32bit-linux.xml
-$(outdir)/i386/amd64.dat: i386/64bit-core.xml i386/64bit-sse.xml
+$(outdir)/i386/amd64.dat: i386/64bit-core.xml i386/64bit-sse.xml \
+			       i386/64bit-segments.xml
 $(outdir)/i386/amd64-linux.dat: i386/64bit-core.xml i386/64bit-sse.xml \
 			       i386/64bit-linux.xml i386/64bit-segments.xml
 $(outdir)/i386/i386-avx.dat: i386/32bit-core.xml i386/32bit-avx.xml
@@ -289,7 +290,8 @@  $(outdir)/i386/i386-avx-mpx-avx512-pku-linux.dat: i386/32bit-core.xml \
 			       i386/32bit-pkeys.xml i386/32bit-linux.xml
 $(outdir)/i386/i386-mmx.dat: i386/32bit-core.xml 
 $(outdir)/i386/i386-mmx-linux.dat: i386/32bit-core.xml i386/32bit-linux.xml
-$(outdir)/i386/amd64-avx.dat: i386/64bit-core.xml i386/64bit-avx.xml
+$(outdir)/i386/amd64-avx.dat: i386/64bit-core.xml i386/64bit-avx.xml \
+			       i386/64bit-segments.xml
 $(outdir)/i386/amd64-avx-linux.dat: i386/64bit-core.xml i386/64bit-avx.xml \
 			       i386/64bit-linux.xml i386/64bit-segments.xml
 $(outdir)/i386/amd64-mpx-linux.dat: i386/64bit-core.xml i386/64bit-avx.xml \
@@ -297,16 +299,16 @@  $(outdir)/i386/amd64-mpx-linux.dat: i386/64bit-core.xml i386/64bit-avx.xml \
 $(outdir)/i386/amd64-avx-mpx-linux.dat: i386/64bit-core.xml \
 			       i386/64bit-linux.xml i386/64bit-segments.xml i386/64bit-mpx.xml
 $(outdir)/i386/amd64-mpx.dat: i386/64bit-core.xml i386/64bit-avx.xml \
-			       i386/64bit-mpx.xml
+			       i386/64bit-segments.xml i386/64bit-mpx.xml
 $(outdir)/i386/amd64-avx-mpx.dat: i386/64bit-core.xml \
-			       i386/64bit-mpx.xml
+			       i386/64bit-segments.xml i386/64bit-mpx.xml
 $(outdir)/i386/amd64-avx-avx512.dat: i386/64bit-core.xml i386/64bit-avx.xml \
-			       i386/64bit-avx512.xml
+			       i386/64bit-avx512.xml i386/64bit-segments.xml
 $(outdir)/i386/amd64-avx-avx512-linux.dat: i386/64bit-core.xml i386/64bit-avx.xml \
 			       i386/64bit-avx512.xml i386/64bit-linux.xml
 $(outdir)/i386/amd64-avx-mpx-avx512-pku.dat: i386/64bit-core.xml \
 			       i386/64bit-avx.xml i386/64bit-mpx.xml i386/64bit-avx512.xml \
-			       i386/64bit-pkeys.xml
+			       i386/64bit-pkeys.xml i386/64bit-segments.xml 
 $(outdir)/i386/amd64-avx-mpx-avx512-pku-linux.dat: i386/64bit-core.xml \
 			       i386/64bit-avx.xml i386/64bit-mpx.xml i386/64bit-avx512.xml \
 			       i386/64bit-linux.xml i386/64bit-segments.xml \
diff --git a/gdb/features/i386/amd64-avx-avx512.c b/gdb/features/i386/amd64-avx-avx512.c
index 8a185c108d..f1ebde1071 100644
--- a/gdb/features/i386/amd64-avx-avx512.c
+++ b/gdb/features/i386/amd64-avx-avx512.c
@@ -146,23 +146,27 @@  initialize_tdesc_amd64_avx_avx512 (void)
   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", 57, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 58, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 59, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 72, 1, NULL, 128, "uint128");
+  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");
@@ -202,78 +206,78 @@  initialize_tdesc_amd64_avx_avx512 (void)
   field_type = tdesc_named_type (feature, "uint128");
   tdesc_create_vector (feature, "v2ui128", field_type, 2);
 
-  tdesc_create_reg (feature, "xmm16", 73, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm17", 74, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm18", 75, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm19", 76, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm20", 77, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm21", 78, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm22", 79, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm23", 80, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm24", 81, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm25", 82, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm26", 83, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm27", 84, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm28", 85, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm29", 86, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm30", 87, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm31", 88, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "ymm16h", 89, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm17h", 90, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm18h", 91, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm19h", 92, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm20h", 93, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm21h", 94, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm22h", 95, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm23h", 96, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm24h", 97, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm25h", 98, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm26h", 99, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm27h", 100, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm28h", 101, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm29h", 102, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm30h", 103, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm31h", 104, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "k0", 105, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k1", 106, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k2", 107, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k3", 108, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k4", 109, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k5", 110, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k6", 111, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k7", 112, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "zmm0h", 113, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm1h", 114, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm2h", 115, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm3h", 116, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm4h", 117, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm5h", 118, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm6h", 119, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm7h", 120, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm8h", 121, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm9h", 122, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm10h", 123, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm11h", 124, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm12h", 125, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm13h", 126, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm14h", 127, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm15h", 128, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm16h", 129, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm17h", 130, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm18h", 131, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm19h", 132, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm20h", 133, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm21h", 134, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm22h", 135, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm23h", 136, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm24h", 137, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm25h", 138, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm26h", 139, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm27h", 140, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm28h", 141, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm29h", 142, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm30h", 143, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm31h", 144, 1, NULL, 256, "v2ui128");
+  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-avx512.xml b/gdb/features/i386/amd64-avx-avx512.xml
index a4587433c8..fdf8136f74 100644
--- a/gdb/features/i386/amd64-avx-avx512.xml
+++ b/gdb/features/i386/amd64-avx-avx512.xml
@@ -12,6 +12,7 @@ 
   <architecture>i386:x86-64</architecture>
   <xi:include href="64bit-core.xml"/>
   <xi:include href="64bit-sse.xml"/>
+  <xi:include href="64bit-segments.xml"/>
   <xi:include href="64bit-avx.xml"/>
   <xi:include href="64bit-avx512.xml"/>
 </target>
diff --git a/gdb/features/i386/amd64-avx-mpx-avx512-pku.c b/gdb/features/i386/amd64-avx-mpx-avx512-pku.c
index dfe7d7778a..f119e52f5d 100644
--- a/gdb/features/i386/amd64-avx-mpx-avx512-pku.c
+++ b/gdb/features/i386/amd64-avx-mpx-avx512-pku.c
@@ -146,23 +146,27 @@  initialize_tdesc_amd64_avx_mpx_avx512_pku (void)
   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", 57, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 58, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 59, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 72, 1, NULL, 128, "uint128");
+  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");
@@ -195,12 +199,12 @@  initialize_tdesc_amd64_avx_mpx_avx512_pku (void)
   field_type = tdesc_named_type (feature, "_bndcfgu");
   tdesc_add_field (type, "config", field_type);
 
-  tdesc_create_reg (feature, "bnd0raw", 73, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 74, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 75, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 76, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 77, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 78, 1, NULL, 64, "status");
+  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");
@@ -240,81 +244,81 @@  initialize_tdesc_amd64_avx_mpx_avx512_pku (void)
   field_type = tdesc_named_type (feature, "uint128");
   tdesc_create_vector (feature, "v2ui128", field_type, 2);
 
-  tdesc_create_reg (feature, "xmm16", 79, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm17", 80, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm18", 81, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm19", 82, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm20", 83, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm21", 84, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm22", 85, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm23", 86, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm24", 87, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm25", 88, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm26", 89, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm27", 90, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm28", 91, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm29", 92, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm30", 93, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "xmm31", 94, 1, NULL, 128, "vec128");
-  tdesc_create_reg (feature, "ymm16h", 95, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm17h", 96, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm18h", 97, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm19h", 98, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm20h", 99, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm21h", 100, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm22h", 101, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm23h", 102, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm24h", 103, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm25h", 104, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm26h", 105, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm27h", 106, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm28h", 107, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm29h", 108, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm30h", 109, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm31h", 110, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "k0", 111, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k1", 112, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k2", 113, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k3", 114, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k4", 115, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k5", 116, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k6", 117, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "k7", 118, 1, NULL, 64, "uint64");
-  tdesc_create_reg (feature, "zmm0h", 119, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm1h", 120, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm2h", 121, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm3h", 122, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm4h", 123, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm5h", 124, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm6h", 125, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm7h", 126, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm8h", 127, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm9h", 128, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm10h", 129, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm11h", 130, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm12h", 131, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm13h", 132, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm14h", 133, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm15h", 134, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm16h", 135, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm17h", 136, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm18h", 137, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm19h", 138, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm20h", 139, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm21h", 140, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm22h", 141, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm23h", 142, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm24h", 143, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm25h", 144, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm26h", 145, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm27h", 146, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm28h", 147, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm29h", 148, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm30h", 149, 1, NULL, 256, "v2ui128");
-  tdesc_create_reg (feature, "zmm31h", 150, 1, NULL, 256, "v2ui128");
+  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", 151, 1, NULL, 32, "uint32");
+  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-avx512-pku.xml b/gdb/features/i386/amd64-avx-mpx-avx512-pku.xml
index e769108873..d8203e3400 100644
--- a/gdb/features/i386/amd64-avx-mpx-avx512-pku.xml
+++ b/gdb/features/i386/amd64-avx-mpx-avx512-pku.xml
@@ -12,6 +12,7 @@ 
   <architecture>i386:x86-64</architecture>
   <xi:include href="64bit-core.xml"/>
   <xi:include href="64bit-sse.xml"/>
+  <xi:include href="64bit-segments.xml"/>
   <xi:include href="64bit-avx.xml"/>
   <xi:include href="64bit-mpx.xml"/>
   <xi:include href="64bit-avx512.xml"/>
diff --git a/gdb/features/i386/amd64-avx-mpx.c b/gdb/features/i386/amd64-avx-mpx.c
index ab56f42f13..0c5161fe8d 100644
--- a/gdb/features/i386/amd64-avx-mpx.c
+++ b/gdb/features/i386/amd64-avx-mpx.c
@@ -146,23 +146,27 @@  initialize_tdesc_amd64_avx_mpx (void)
   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", 57, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 58, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 59, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 72, 1, NULL, 128, "uint128");
+  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");
@@ -195,12 +199,12 @@  initialize_tdesc_amd64_avx_mpx (void)
   field_type = tdesc_named_type (feature, "_bndcfgu");
   tdesc_add_field (type, "config", field_type);
 
-  tdesc_create_reg (feature, "bnd0raw", 73, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 74, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 75, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 76, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 77, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 78, 1, NULL, 64, "status");
+  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-mpx.xml b/gdb/features/i386/amd64-avx-mpx.xml
index 0001dc8413..001cc58fa6 100644
--- a/gdb/features/i386/amd64-avx-mpx.xml
+++ b/gdb/features/i386/amd64-avx-mpx.xml
@@ -12,6 +12,7 @@ 
   <architecture>i386:x86-64</architecture>
   <xi:include href="64bit-core.xml"/>
   <xi:include href="64bit-sse.xml"/>
+  <xi:include href="64bit-segments.xml"/>
   <xi:include href="64bit-avx.xml"/>
   <xi:include href="64bit-mpx.xml"/>
 </target>
diff --git a/gdb/features/i386/amd64-avx.c b/gdb/features/i386/amd64-avx.c
index 42bd69ab97..61d3ff56a4 100644
--- a/gdb/features/i386/amd64-avx.c
+++ b/gdb/features/i386/amd64-avx.c
@@ -146,23 +146,27 @@  initialize_tdesc_amd64_avx (void)
   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", 57, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm1h", 58, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm2h", 59, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm3h", 60, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm4h", 61, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm5h", 62, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm6h", 63, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm7h", 64, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm8h", 65, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm9h", 66, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm10h", 67, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm11h", 68, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm12h", 69, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm13h", 70, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm14h", 71, 1, NULL, 128, "uint128");
-  tdesc_create_reg (feature, "ymm15h", 72, 1, NULL, 128, "uint128");
+  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-avx.xml b/gdb/features/i386/amd64-avx.xml
index d3b63b8132..a0fec551d9 100644
--- a/gdb/features/i386/amd64-avx.xml
+++ b/gdb/features/i386/amd64-avx.xml
@@ -12,5 +12,6 @@ 
   <architecture>i386:x86-64</architecture>
   <xi:include href="64bit-core.xml"/>
   <xi:include href="64bit-sse.xml"/>
+  <xi:include href="64bit-segments.xml"/>
   <xi:include href="64bit-avx.xml"/>
 </target>
diff --git a/gdb/features/i386/amd64-mpx.c b/gdb/features/i386/amd64-mpx.c
index 41f0e7834b..026fdb8625 100644
--- a/gdb/features/i386/amd64-mpx.c
+++ b/gdb/features/i386/amd64-mpx.c
@@ -146,6 +146,10 @@  initialize_tdesc_amd64_mpx (void)
   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");
@@ -177,12 +181,12 @@  initialize_tdesc_amd64_mpx (void)
   field_type = tdesc_named_type (feature, "_bndcfgu");
   tdesc_add_field (type, "config", field_type);
 
-  tdesc_create_reg (feature, "bnd0raw", 57, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd1raw", 58, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd2raw", 59, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bnd3raw", 60, 1, NULL, 128, "br128");
-  tdesc_create_reg (feature, "bndcfgu", 61, 1, NULL, 64, "cfgu");
-  tdesc_create_reg (feature, "bndstatus", 62, 1, NULL, 64, "status");
+  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-mpx.xml b/gdb/features/i386/amd64-mpx.xml
index 7692006e9c..7e0253d661 100644
--- a/gdb/features/i386/amd64-mpx.xml
+++ b/gdb/features/i386/amd64-mpx.xml
@@ -12,5 +12,6 @@ 
   <architecture>i386:x86-64</architecture>
   <xi:include href="64bit-core.xml"/>
   <xi:include href="64bit-sse.xml"/>
+  <xi:include href="64bit-segments.xml"/>
   <xi:include href="64bit-mpx.xml"/>
 </target>
diff --git a/gdb/features/i386/amd64.c b/gdb/features/i386/amd64.c
index b875a9b322..31ab6ccfba 100644
--- a/gdb/features/i386/amd64.c
+++ b/gdb/features/i386/amd64.c
@@ -146,5 +146,9 @@  initialize_tdesc_amd64 (void)
   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/amd64.xml b/gdb/features/i386/amd64.xml
index d11c07e234..1962a2af37 100644
--- a/gdb/features/i386/amd64.xml
+++ b/gdb/features/i386/amd64.xml
@@ -12,4 +12,5 @@ 
   <architecture>i386:x86-64</architecture>
   <xi:include href="64bit-core.xml"/>
   <xi:include href="64bit-sse.xml"/>
+  <xi:include href="64bit-segments.xml"/>
 </target>
diff --git a/gdb/regformats/i386/amd64-avx-avx512.dat b/gdb/regformats/i386/amd64-avx-avx512.dat
index b7938e6919..1fbe4733f5 100644
--- a/gdb/regformats/i386/amd64-avx-avx512.dat
+++ b/gdb/regformats/i386/amd64-avx-avx512.dat
@@ -60,6 +60,8 @@  expedite:rbp,rsp,rip
 128:xmm14
 128:xmm15
 32:mxcsr
+64:fs_base
+64:gs_base
 128:ymm0h
 128:ymm1h
 128:ymm2h
diff --git a/gdb/regformats/i386/amd64-avx-mpx-avx512-pku.dat b/gdb/regformats/i386/amd64-avx-mpx-avx512-pku.dat
index 88185fd8c3..23c3a4062e 100644
--- a/gdb/regformats/i386/amd64-avx-mpx-avx512-pku.dat
+++ b/gdb/regformats/i386/amd64-avx-mpx-avx512-pku.dat
@@ -60,7 +60,6 @@  expedite:rbp,rsp,rip
 128:xmm14
 128:xmm15
 32:mxcsr
-64:orig_rax
 64:fs_base
 64:gs_base
 128:ymm0h
diff --git a/gdb/regformats/i386/amd64-avx-mpx.dat b/gdb/regformats/i386/amd64-avx-mpx.dat
index d985641b01..655775b0f9 100644
--- a/gdb/regformats/i386/amd64-avx-mpx.dat
+++ b/gdb/regformats/i386/amd64-avx-mpx.dat
@@ -60,6 +60,8 @@  expedite:rbp,rsp,rip
 128:xmm14
 128:xmm15
 32:mxcsr
+64:fs_base
+64:gs_base
 128:ymm0h
 128:ymm1h
 128:ymm2h
diff --git a/gdb/regformats/i386/amd64-avx.dat b/gdb/regformats/i386/amd64-avx.dat
index 223233667a..8b9d81e743 100644
--- a/gdb/regformats/i386/amd64-avx.dat
+++ b/gdb/regformats/i386/amd64-avx.dat
@@ -60,6 +60,8 @@  expedite:rbp,rsp,rip
 128:xmm14
 128:xmm15
 32:mxcsr
+64:fs_base
+64:gs_base
 128:ymm0h
 128:ymm1h
 128:ymm2h
diff --git a/gdb/regformats/i386/amd64-mpx.dat b/gdb/regformats/i386/amd64-mpx.dat
index 43b87769c2..d5e60babd8 100644
--- a/gdb/regformats/i386/amd64-mpx.dat
+++ b/gdb/regformats/i386/amd64-mpx.dat
@@ -60,6 +60,8 @@  expedite:rbp,rsp,rip
 128:xmm14
 128:xmm15
 32:mxcsr
+64:fs_base
+64:gs_base
 128:bnd0raw
 128:bnd1raw
 128:bnd2raw
diff --git a/gdb/regformats/i386/amd64.dat b/gdb/regformats/i386/amd64.dat
index 0ff917019d..66f26ad094 100644
--- a/gdb/regformats/i386/amd64.dat
+++ b/gdb/regformats/i386/amd64.dat
@@ -60,3 +60,5 @@  expedite:rbp,rsp,rip
 128:xmm14
 128:xmm15
 32:mxcsr
+64:fs_base
+64:gs_base