From: Michael Sturm Date: Wed, 1 Feb 2017 11:22:27 +0000 (+0100) Subject: Add support for Intel PKRU register to GDB and GDBserver. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=51547df62c155231530ca502c485659f3d2b66cb;p=binutils-gdb.git Add support for Intel PKRU register to GDB and GDBserver. This patch adds support for the registers added by the Memory Protection Keys for Userspace (PKU aka PKEYs) feature. Native and remote debugging are covered by this patch. The XSAVE area is extended with a new state containing the 32-bit wide PKRU register. The new register is added to amd64-avx-mpx_avx512-* tdesc, thus it is renamed accordingly. Also, respective xstate mask X86_XSTATE_AVX_MPX_AVX512_MASK is renamed to X86_XSTATE_AVX_MPX_AVX512_PKU_MASK to reflect the new feature set it supports. For more information, please refer to the Intel(R) 64 and IA-32 Architectures Software Developer's Manual - Septemper 2015 http://www.intel.com/content/dam/www/public/us/en/documents/ manuals/64-ia-32-architectures-software-developer-manual-325462.pdf gdb/Changelog: 2015-12-08 Michael Sturm * NEWS: Mention addition of PKU feature. * amd64-linux-nat.c (amd64_linux_gregset32_reg_offset): Add PKRU register. * amd64-linux-tdep.c (features/i386/amd64-avx-mpx-avx512-linux.c): Rename to... (features/i386/amd64-avx-mpx-avx512-pku-linux.c): ...this. (amd64_linux_gregset_reg_offset): Add PKRU register. (amd64_linux_core_read_description): Rename X86_XSTATE_AVX_MPX_AVX512_MASK, rename tdesc_amd64_avx_mpx_avx512_pku_linux. (_initialize_amd64_linux_tdep): Rename initialize_tdesc_amd64_avx_mpx_avx512_linux. * amd64-linux-tdep.h (AMD64_LINUX_ORIG_RAX_REGNUM): Adjust regnum calculation. (tdesc_amd64_avx_mpx_avx512_linux): Rename to... (tdesc_amd64_avx_mpx_avx512_pku_linux): ...this. * amd64-tdep.c (features/i386/amd64-avx-mpx-avx512-pku.c): Rename to... (features/i386/amd64-avx-mpx-avx512-pku.c): ...this. (amd64_pkeys_names): New register name for raw register PKRU. (amd64_init_abi): Add code to initialize PKRU tdep variables if feature is present. (amd64_target_description): Rename X86_XSTATE_AVX_MPX_AVX512_MASK, rename tdesc_amd64_avx_mpx_avx512. (_initialize_amd64_tdep): Rename initialize_tdesc_amd64_avx_mpx_avx512. * amd64-tdep.h (enum amd64_regnum): Add PKRU register. (AMD64_NUM_REGS): Adjust regnum calculation. * i386-linux.nat.c (GETXSTATEREGS_SUPPLIES): Extend range of registers supplied via XSTATE by PKRU register. * common/x86-xstate.h (X86_XSTATE_PKRU): New macro. (X86_XSTATE_AVX_MPX_AVX512_MASK): Add PKRU and renamed mask. (X86_XSTATE_ALL_MASK): Rename X86_XSTATE_AVX_MPX_AVX512_MASK. (X86_XSTATE_PKRU_SIZE): New macro. (X86_XSTATE_MAX_SIZE): Adjust size. (HAS_PKRU(XCR0)): New macro. (X86_XSTATE_SIZE): Add checkfor PKRU. * features/Makefile (WHICH): Rename i386/i386-avx-mpx-avx512, i386/i386-avx-mpx-avx512-linux, i386/amd64-avx-mpx-avx512, i386/amd64-avx-mpx-avx512-linux. (i386/i386-avx-mpx-avx512-expedite): Rename expedite. (i386/i386-avx-mpx-avx512-linux-expedite): Likewise. (i386/amd64-avx-mpx-avx512-expedite): Likewise. (i386/amd64-avx-mpx-avx512-linux-expedite): Likewise. (XMLTOC): Rename i386/amd64-avx-mpx-avx512-linux.xml, i386/amd64-avx-mpx-avx512.xml, i386/i386-avx-mpx-avx512-linux.xml, i386/i386-avx-mpx-avx512.xml. ((outdir)/i386/i386-avx-mpx-avx512.dat): Rename rule, add i386/32bit-pkeys.xml. ((outdir)/i386/i386-avx-mpx-avx512-pku-linux.dat): Likewise. ((outdir)/i386/amd64-avx-mpx-avx512.dat): Rename rule, add i386/64bit-pkeys.xml. ((outdir)/i386/amd64-avx-mpx-avx512-linux.dat): Likewise. * features/i386/32bit-pkeys.xml: New file. * features/i386/64bit-pkeys.xml: Likewise. * features/i386/amd64-avx-mpx-avx512-linux-pku.c: Regenerate from renamed XML file. * features/i386/amd64-avx-mpx-avx512-linux.xml: Rename to amd64-avx-mpx-avx512-pku-linux.xml, add 64bit-pkeys.xml * features/i386/amd64-avx-mpx-avx512.c: Regenerate from renamed XML file. * features/i386/amd64-avx-mpx-avx512.xml: Rename to amd64-avx-mpx-avx512-pku.xml, add 64bit-pkeys.xml. * features/i386/i386-avx-mpx-avx512-linux.c: Regenerate from renamed XML file. * features/i386/i386-avx-mpx-avx512-linux.xml: Rename to i386-avx-mpx-avx512-pku-linux.xml, add 32bit-pkeys.xml. * features/i386/i386-avx-mpx-avx512.c: Regenerate from renamed XML file. * features/i386/i386-avx-mpx-avx512.xml: Rename to i386-avx-mpx-avx512-pku.xml, add 32bit-pkeys.xml. * i386-linux-nat.c (GETXSTATEREGS_SUPPLIES): Change to use I386_PKEYS_NUM_REGS. * i386-linux-tdep.c (features/i386/i386-avx-mpx-avx512-linux.c): Rename include. (i386_linux_gregset_reg_offset): Add PKRU register. (i386_linux_core_read_description): Rename xstate mask and returned tdesc for X86_XSTATE_AVX_MPX_AVX512_PKU_MASK. (_initialize_i386_linux_tdep): Rename initialize_tdesc_i386_avx_mpx_avx512_linux. * i386-linux-tdep.h (I386_LINUX_ORIG_EAX_REGNUM): Adjuste regnum calculation. (tdesc_i386_avx_mpx_avx512_linux): Rename prototype. (/* Format of XSAVE...): Add pkru register. * i386-tdep.c (i386-avx-mpx-avx512.c): Rename include. (i386_pkeys_names): New register name for raw register PKRU. (i386_pkru_regnum_p): Add function to look up register number of PKRU raw register. (i386_register_reggroup_p): Add code to exclude PKRU from general register group. (i386_validate_tdesc_p): Add code to handle PKRU feature, add PKRU registers if feature is present in xcr0. (i386_gdbarch_init): Adjust number of registers in architecture. Add code to initialize PKRU feature variables in tdep structure. (i386_target_description): Rename xstate mask and returned tdesc for X86_XSTATE_AVX_MPX_AVX512_PKU_MASK. (_initialize_i386_tdep): Rename initialize_tdesc_i386_avx_mpx_avx512. * i386-tdep.h (struct gdbarch_tdep): Add feature variables to tdep structure. (enum i386_regnum): Add PKRU register. (I386_PKEYS_NUM_REGS): New define for number of registers in PKRU feature. (i386_pkru_regnum_p): New prototype. * i387-tdep.c (xsave_pkeys_offset): New table for PKRU offsets in XSAVE buffer. (XSAVE_PKEYS_ADDR): New macro. (i387_supply_xsave): Add code to handle PKRU register. (i387_collect_xsave): Likewise. * i387-tdep.h (I387_NUM_PKEYS_REGS): New define for number of registers in PKRU feature. (I387_PKRU_REGNUM): New macro. (I387_PKEYSEND_REGNUM): Likewise. * regformats/i386/amd64_avx_mpx_avx512_pku_linux.dat: Regenerate from renamed XML file. * regformats/i386/amd64_avx_mpx_avx512_pku.dat: Likewise. * regformats/i386/i386/amd64-avx-mpx-avx512-pku.dat: Likewise. * regformats/i386/i386_avx_mpx_avx512_pku_linux.dat: Likewise. testsuite/Changelog: 2016-04-18 Michael Sturm * gdb.arch/i386-pkru.c: New file. * gdb.arch/i386-pkru.exp: Likewise. gdbserver/Changelog: 2016-04-18 Michael Sturm * Makefile.in (clean): Rename i386-avx-mpx-avx512.c, i386-avx-mpx-avx512-linux.c, amd64-avx-mpx-avx512.c, amd64-avx-mpx-avx512-linux.c. (i386-avx-mpx-avx512-linux-ipa.o:): Rename rule and source file. (amd64-avx-mpx-avx512-linux-ipa.o:): Likewise. (i386-avx-mpx-avx512.c :): Rename rule, source files and dat files. (i386-avx-mpx-avx512-linux.c :): Likewise. (amd64-avx-mpx-avx512.c :): Likewise. (amd64-avx-mpx-avx512-linux.c :): Likewise. * configure.srv (srv_i386_regobj): Rename i386-avx-mpx-avx512.o. (srv_i386_linux_regobj): Rename i386-avx-mpx-avx512-linux.o. (srv_amd64_regobj): Rename amd64-avx-mpx-avx512.o. (srv_amd64_linux_regobj): Rename amd64-avx-mpx-avx512-linux.o. (ipa_i386_linux_regobj): Rename i386-avx-mpx-avx512-linux-ipa.o. (ipa_amd64_linux_regobj): Rename amd64-avx-mpx-avx512-pku-linux-ipa.o. (srv_i386_32bit_xmlfiles): Add 32bit-pkeys.xml. (srv_i386_64bit_xmlfiles): Add 64bit-pkeys.xml. (srv_i386_xmlfiles): Rename i386/i386-avx-mpx-avx512.xml. (srv_amd64_xmlfiles): Rename i386/amd64-avx-mpx-avx512.xml. (srv_i386_linux_xmlfiles): Rename i386/i386-avx-mpx-avx512-linux.xml. (srv_amd64_linux_xmlfiles): Rename di386/amd64-avx-mpx-avx512-linux.xml. * i387-fp.c (num_pkeys_registers): New variable. (struct i387_xsave): Add space for pkru values. (i387_cache_to_fsave): Add code to handle PKRU register. (i387_xsave_to_cache): Likewise. * linux-amd64-ipa.c (get_ipa_tdesc): Rename tdesc_amd64_avx_mpx_avx512_linux. (initialize_low_tracepoint): Rename init_registers_amd64_avx_mpx_avx512_linux. * linux-i386-ipa.c (get_ipa_desc): Rename tdesc_i386_avx_mpx_avx512_linux. (initialize_low_tracepoint): Rename init_registers_i386_avx_mpx_avx512_linux. * linux-x86-low.c (x86_64_regmap[]): Add PKRU register. (x86_linux_read_description): Rename X86_XSTATE_AVX_MPX_AVX512_MASK, rename tdesc_amd64_avx_mpx_avx512_linux, rename tdesc_i386_avx_mpx_avx512_linux. (x86_get_ipa_tdesc_idx): Rename tdesc_amd64_avx_mpx_avx512_linux, rename tdesc_i386_avx_mpx_avx512_linux. (initialize_low_arch): Rename init_registers_amd64_avx_mpx_avx512_linux, rename init_registers_i386_avx_mpx_avx512_linux. * linux-x86-tdesc.h (init_registers_amd64_avx_mpx_avx512_linux): Renamed prototype. (tdesc_amd64_avx_mpx_avx512_linux): Likewise. (init_registers_i386_avx_mpx_avx512_linux): Likewise. (tdesc_i386_avx_mpx_avx512_linux): Likewise. doc/Changelog: 2016-04-18 Michael Sturm * gdb.texinfo (i386 Features): Add description of PKRU register. Change-Id: If75ce5aba7dfd33fdbe3d8b47f04ef3f550c52be Signed-off-by: Michael Sturm --- diff --git a/gdb/NEWS b/gdb/NEWS index f4128874c99..d6adc32cd17 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -3,6 +3,10 @@ *** Changes since GDB 7.12 +* GDB now supports access to the PKU register on GNU/Linux. The register is + added by the Memory Protection Keys for Userspace feature which will be + available in future Intel CPUs. + * Python Scripting ** New functions to start, stop and access a running btrace recording. diff --git a/gdb/amd64-linux-nat.c b/gdb/amd64-linux-nat.c index 528984cb4db..4a429ec2a16 100644 --- a/gdb/amd64-linux-nat.c +++ b/gdb/amd64-linux-nat.c @@ -73,6 +73,7 @@ static int amd64_linux_gregset32_reg_offset[] = -1, -1, /* MPX registers BNDCFGU, BNDSTATUS. */ -1, -1, -1, -1, -1, -1, -1, -1, /* k0 ... k7 (AVX512) */ -1, -1, -1, -1, -1, -1, -1, -1, /* zmm0 ... zmm7 (AVX512) */ + -1, /* PKEYS register PKRU */ ORIG_RAX * 8 /* "orig_eax" */ }; diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c index 21aa3bc6fbf..0e2f285d2fd 100644 --- a/gdb/amd64-linux-tdep.c +++ b/gdb/amd64-linux-tdep.c @@ -45,7 +45,7 @@ #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-linux.c" +#include "features/i386/amd64-avx-mpx-avx512-pku-linux.c" #include "features/i386/x32-linux.c" #include "features/i386/x32-avx-linux.c" @@ -104,6 +104,7 @@ int amd64_linux_gregset_reg_offset[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, /* PKEYS register pkru */ /* End of hardware registers */ 21 * 8, 22 * 8, /* fs_base and gs_base. */ @@ -1586,12 +1587,12 @@ amd64_linux_core_read_description (struct gdbarch *gdbarch, switch (xcr0 & X86_XSTATE_ALL_MASK) { - case X86_XSTATE_AVX_MPX_AVX512_MASK: + case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK: if (gdbarch_ptr_bit (gdbarch) == 32) /* No MPX on x32, fallback to AVX-AVX512. */ return tdesc_x32_avx_avx512_linux; else - return tdesc_amd64_avx_mpx_avx512_linux; + return tdesc_amd64_avx_mpx_avx512_pku_linux; case X86_XSTATE_AVX_AVX512_MASK: if (gdbarch_ptr_bit (gdbarch) == 32) return tdesc_x32_avx_avx512_linux; @@ -2305,7 +2306,7 @@ _initialize_amd64_linux_tdep (void) initialize_tdesc_amd64_mpx_linux (); initialize_tdesc_amd64_avx_mpx_linux (); initialize_tdesc_amd64_avx_avx512_linux (); - initialize_tdesc_amd64_avx_mpx_avx512_linux (); + initialize_tdesc_amd64_avx_mpx_avx512_pku_linux (); initialize_tdesc_x32_linux (); initialize_tdesc_x32_avx_linux (); diff --git a/gdb/amd64-linux-tdep.h b/gdb/amd64-linux-tdep.h index 0d4ddac4952..74534085a0b 100644 --- a/gdb/amd64-linux-tdep.h +++ b/gdb/amd64-linux-tdep.h @@ -26,7 +26,7 @@ /* Register number for the "orig_rax" register. If this register contains a value >= 0 it is interpreted as the system call number that the kernel is supposed to restart. */ -#define AMD64_LINUX_ORIG_RAX_REGNUM AMD64_NUM_REGS +#define AMD64_LINUX_ORIG_RAX_REGNUM (AMD64_GSBASE_REGNUM + 1) /* Total number of registers for GNU/Linux. */ #define AMD64_LINUX_NUM_REGS (AMD64_LINUX_ORIG_RAX_REGNUM + 1) @@ -37,7 +37,7 @@ extern struct target_desc *tdesc_amd64_avx_linux; extern struct target_desc *tdesc_amd64_mpx_linux; extern struct target_desc *tdesc_amd64_avx_mpx_linux; extern struct target_desc *tdesc_amd64_avx_avx512_linux; -extern struct target_desc *tdesc_amd64_avx_mpx_avx512_linux; +extern struct target_desc *tdesc_amd64_avx_mpx_avx512_pku_linux; extern struct target_desc *tdesc_x32_linux; extern struct target_desc *tdesc_x32_avx_linux; diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c index c2a1074a57b..4da71e5d68c 100644 --- a/gdb/amd64-tdep.c +++ b/gdb/amd64-tdep.c @@ -47,7 +47,7 @@ #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.c" +#include "features/i386/amd64-avx-mpx-avx512-pku.c" #include "features/i386/x32.c" #include "features/i386/x32-avx.c" @@ -157,6 +157,10 @@ static const char *amd64_xmm_avx512_names[] = { "xmm28", "xmm29", "xmm30", "xmm31" }; +static const char *amd64_pkeys_names[] = { + "pkru" +}; + /* DWARF Register Number Mapping as defined in the System V psABI, section 3.6. */ @@ -3061,6 +3065,13 @@ amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) AMD64_GSBASE_REGNUM, "gs_base"); } + if (tdesc_find_feature (tdesc, "org.gnu.gdb.i386.pkeys") != NULL) + { + tdep->pkeys_register_names = amd64_pkeys_names; + tdep->pkru_regnum = AMD64_PKRU_REGNUM; + tdep->num_pkeys_regs = 1; + } + tdep->num_byte_regs = 20; tdep->num_word_regs = 16; tdep->num_dword_regs = 16; @@ -3203,8 +3214,8 @@ amd64_target_description (uint64_t xcr0) { switch (xcr0 & X86_XSTATE_ALL_MASK) { - case X86_XSTATE_AVX_MPX_AVX512_MASK: - return tdesc_amd64_avx_mpx_avx512; + 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: @@ -3229,7 +3240,7 @@ _initialize_amd64_tdep (void) initialize_tdesc_amd64_mpx (); initialize_tdesc_amd64_avx_mpx (); initialize_tdesc_amd64_avx_avx512 (); - initialize_tdesc_amd64_avx_mpx_avx512 (); + initialize_tdesc_amd64_avx_mpx_avx512_pku (); initialize_tdesc_x32 (); initialize_tdesc_x32_avx (); diff --git a/gdb/amd64-tdep.h b/gdb/amd64-tdep.h index 8ccf03111ca..87f0ba30738 100644 --- a/gdb/amd64-tdep.h +++ b/gdb/amd64-tdep.h @@ -77,6 +77,7 @@ enum amd64_regnum AMD64_K7_REGNUM = AMD64_K0_REGNUM + 7, AMD64_ZMM0H_REGNUM, AMD64_ZMM31H_REGNUM = AMD64_ZMM0H_REGNUM + 31, + AMD64_PKRU_REGNUM, AMD64_FSBASE_REGNUM, AMD64_GSBASE_REGNUM }; diff --git a/gdb/common/x86-xstate.h b/gdb/common/x86-xstate.h index 4680bd68eaf..b89928a4277 100644 --- a/gdb/common/x86-xstate.h +++ b/gdb/common/x86-xstate.h @@ -35,6 +35,8 @@ #define X86_XSTATE_AVX512 (X86_XSTATE_K | X86_XSTATE_ZMM_H \ | X86_XSTATE_ZMM) +#define X86_XSTATE_PKRU (1ULL << 9) + /* Supported mask and size of the extended state. */ #define X86_XSTATE_X87_MASK X86_XSTATE_X87 #define X86_XSTATE_SSE_MASK (X86_XSTATE_X87 | X86_XSTATE_SSE) @@ -42,27 +44,32 @@ #define X86_XSTATE_MPX_MASK (X86_XSTATE_SSE_MASK | X86_XSTATE_MPX) #define X86_XSTATE_AVX_MPX_MASK (X86_XSTATE_AVX_MASK | X86_XSTATE_MPX) #define X86_XSTATE_AVX_AVX512_MASK (X86_XSTATE_AVX_MASK | X86_XSTATE_AVX512) -#define X86_XSTATE_AVX_MPX_AVX512_MASK (X86_XSTATE_AVX_MPX_MASK | X86_XSTATE_AVX512) +#define X86_XSTATE_AVX_MPX_AVX512_PKU_MASK (X86_XSTATE_AVX_MPX_MASK\ + | X86_XSTATE_AVX512 | X86_XSTATE_PKRU) + +#define X86_XSTATE_ALL_MASK (X86_XSTATE_AVX_MPX_AVX512_PKU_MASK) -#define X86_XSTATE_ALL_MASK (X86_XSTATE_AVX_MPX_AVX512_MASK) #define X86_XSTATE_SSE_SIZE 576 #define X86_XSTATE_AVX_SIZE 832 #define X86_XSTATE_BNDREGS_SIZE 1024 #define X86_XSTATE_BNDCFG_SIZE 1088 #define X86_XSTATE_AVX512_SIZE 2688 -#define X86_XSTATE_MAX_SIZE 2688 +#define X86_XSTATE_PKRU_SIZE 2696 +#define X86_XSTATE_MAX_SIZE 2696 /* In case one of the MPX XCR0 bits is set we consider we have MPX. */ #define HAS_MPX(XCR0) (((XCR0) & X86_XSTATE_MPX) != 0) #define HAS_AVX(XCR0) (((XCR0) & X86_XSTATE_AVX) != 0) #define HAS_AVX512(XCR0) (((XCR0) & X86_XSTATE_AVX512) != 0) +#define HAS_PKRU(XCR0) (((XCR0) & X86_XSTATE_PKRU) != 0) /* Get I386 XSAVE extended state size. */ #define X86_XSTATE_SIZE(XCR0) \ - (HAS_AVX512 (XCR0) ? X86_XSTATE_AVX512_SIZE : \ - (HAS_MPX (XCR0) ? X86_XSTATE_BNDCFG_SIZE : \ - (HAS_AVX (XCR0) ? X86_XSTATE_AVX_SIZE : X86_XSTATE_SSE_SIZE))) + (HAS_PKRU (XCR0) ? X86_XSTATE_PKRU_SIZE : \ + (HAS_AVX512 (XCR0) ? X86_XSTATE_AVX512_SIZE : \ + (HAS_MPX (XCR0) ? X86_XSTATE_BNDCFG_SIZE : \ + (HAS_AVX (XCR0) ? X86_XSTATE_AVX_SIZE : X86_XSTATE_SSE_SIZE)))) #endif /* X86_XSTATE_H */ diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index f619470e964..c465dc2f9ff 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -41226,6 +41226,10 @@ describe the additional @sc{zmm} registers: @samp{zmm16h} through @samp{zmm31h}, only valid for amd64. @end itemize +The @samp{org.gnu.gdb.i386.pkeys} feature is optional. It should +describe a single register, @samp{pkru}. It is a 32-bit register +valid for i386 and amd64. + @node MicroBlaze Features @subsection MicroBlaze Features @cindex target descriptions, MicroBlaze features diff --git a/gdb/features/Makefile b/gdb/features/Makefile index f25c8844428..3bc8b5ae858 100644 --- a/gdb/features/Makefile +++ b/gdb/features/Makefile @@ -53,12 +53,12 @@ WHICH = aarch64 \ i386/i386-mpx i386/i386-mpx-linux \ i386/i386-avx-mpx i386/i386-avx-mpx-linux \ i386/i386-avx-avx512 i386/i386-avx-avx512-linux \ - i386/i386-avx-mpx-avx512 i386/i386-avx-mpx-avx512-linux \ + i386/i386-avx-mpx-avx512-pku i386/i386-avx-mpx-avx512-pku-linux \ i386/amd64-avx i386/amd64-avx-linux \ i386/amd64-mpx i386/amd64-mpx-linux \ i386/amd64-avx-mpx i386/amd64-avx-mpx-linux \ i386/amd64-avx-avx512 i386/amd64-avx-avx512-linux \ - i386/amd64-avx-mpx-avx512 i386/amd64-avx-mpx-avx512-linux \ + i386/amd64-avx-mpx-avx512-pku i386/amd64-avx-mpx-avx512-pku-linux \ i386/x32 i386/x32-linux \ i386/x32-avx i386/x32-avx-linux \ i386/x32-avx-avx512 i386/x32-avx-avx512-linux \ @@ -142,8 +142,8 @@ XMLTOC = \ i386/amd64-avx.xml \ i386/amd64-avx-avx512-linux.xml \ i386/amd64-avx-avx512.xml \ - i386/amd64-avx-mpx-avx512-linux.xml \ - i386/amd64-avx-mpx-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 \ @@ -154,8 +154,8 @@ XMLTOC = \ i386/i386-avx.xml \ i386/i386-avx-avx512-linux.xml \ i386/i386-avx-avx512.xml \ - i386/i386-avx-mpx-avx512-linux.xml \ - i386/i386-avx-mpx-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 \ @@ -281,10 +281,12 @@ $(outdir)/i386/i386-avx-avx512.dat: i386/32bit-core.xml i386/32bit-avx.xml \ i386/32bit-avx512.xml $(outdir)/i386/i386-avx-avx512-linux.dat: i386/32bit-core.xml i386/32bit-avx.xml \ i386/32bit-linux.xml i386/32bit-avx512.xml -$(outdir)/i386/i386-avx-mpx-avx512.dat: i386/32bit-core.xml i386/32bit-avx.xml \ - i386/32bit-mpx.xml i386/32bit-avx512.xml -$(outdir)/i386/i386-avx-mpx-avx512-linux.dat: i386/32bit-core.xml i386/32bit-avx.xml \ - i386/32bit-linux.xml i386/32bit-mpx.xml i386/32bit-avx512.xml +$(outdir)/i386/i386-avx-mpx-avx512-pku.dat: i386/32bit-core.xml + i386/32bit-avx.xml i386/32bit-mpx.xml i386/32bit-avx512.xml \ + i386/32bit-pkeys.xml +$(outdir)/i386/i386-avx-mpx-avx512-pku-linux.dat: i386/32bit-core.xml \ + i386/32bit-avx.xml i386/32bit-mpx.xml i386/32bit-avx512.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 @@ -302,11 +304,13 @@ $(outdir)/i386/amd64-avx-avx512.dat: i386/64bit-core.xml i386/64bit-avx.xml \ i386/64bit-avx512.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.dat: i386/64bit-core.xml i386/64bit-avx.xml \ - i386/64bit-mpx.xml i386/64bit-avx512.xml -$(outdir)/i386/amd64-avx-mpx-avx512-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 +$(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 +$(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 \ + i386/64bit-pkeys.xml $(outdir)/i386/x32.dat: i386/x32-core.xml i386/64bit-sse.xml $(outdir)/i386/x32-linux.dat: i386/x32-core.xml i386/64bit-sse.xml \ i386/64bit-linux.xml i386/64bit-segments.xml diff --git a/gdb/features/i386/32bit-pkeys.xml b/gdb/features/i386/32bit-pkeys.xml new file mode 100644 index 00000000000..7ae5cc5204e --- /dev/null +++ b/gdb/features/i386/32bit-pkeys.xml @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/gdb/features/i386/64bit-pkeys.xml b/gdb/features/i386/64bit-pkeys.xml new file mode 100644 index 00000000000..7ae5cc5204e --- /dev/null +++ b/gdb/features/i386/64bit-pkeys.xml @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/gdb/features/i386/amd64-avx-mpx-avx512-linux.c b/gdb/features/i386/amd64-avx-mpx-avx512-linux.c deleted file mode 100644 index dd1f10050fe..00000000000 --- a/gdb/features/i386/amd64-avx-mpx-avx512-linux.c +++ /dev/null @@ -1,326 +0,0 @@ -/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: amd64-avx-mpx-avx512-linux.xml */ - -#include "defs.h" -#include "osabi.h" -#include "target-descriptions.h" - -struct target_desc *tdesc_amd64_avx_mpx_avx512_linux; -static void -initialize_tdesc_amd64_avx_mpx_avx512_linux (void) -{ - struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); - - set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); - - feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); - 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"); - - tdesc_amd64_avx_mpx_avx512_linux = result; -} diff --git a/gdb/features/i386/amd64-avx-mpx-avx512-linux.xml b/gdb/features/i386/amd64-avx-mpx-avx512-linux.xml deleted file mode 100644 index 21d06642ea4..00000000000 --- a/gdb/features/i386/amd64-avx-mpx-avx512-linux.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - i386:x86-64 - GNU/Linux - - - - - - - - diff --git a/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c b/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c new file mode 100644 index 00000000000..248eff7944f --- /dev/null +++ b/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.c @@ -0,0 +1,329 @@ +/* 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 (); + struct tdesc_feature *feature; + struct tdesc_type *field_type; + struct tdesc_type *type; + + set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); + + set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + 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", 152, 1, NULL, 32, "uint32"); + + tdesc_amd64_avx_mpx_avx512_pku_linux = result; +} diff --git a/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.xml b/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.xml new file mode 100644 index 00000000000..9585606aa7b --- /dev/null +++ b/gdb/features/i386/amd64-avx-mpx-avx512-pku-linux.xml @@ -0,0 +1,23 @@ + + + + + + + + i386:x86-64 + GNU/Linux + + + + + + + + + diff --git a/gdb/features/i386/amd64-avx-mpx-avx512-pku.c b/gdb/features/i386/amd64-avx-mpx-avx512-pku.c new file mode 100644 index 00000000000..dfe7d7778a5 --- /dev/null +++ b/gdb/features/i386/amd64-avx-mpx-avx512-pku.c @@ -0,0 +1,320 @@ +/* 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 (); + struct tdesc_feature *feature; + struct tdesc_type *field_type; + struct tdesc_type *type; + + set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); + + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + 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.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"); + + 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", 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"); + + 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", 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"); + + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.pkeys"); + tdesc_create_reg (feature, "pkru", 151, 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 new file mode 100644 index 00000000000..e769108873f --- /dev/null +++ b/gdb/features/i386/amd64-avx-mpx-avx512-pku.xml @@ -0,0 +1,19 @@ + + + + + + + + i386:x86-64 + + + + + + + diff --git a/gdb/features/i386/amd64-avx-mpx-avx512.c b/gdb/features/i386/amd64-avx-mpx-avx512.c deleted file mode 100644 index 486931f5ea2..00000000000 --- a/gdb/features/i386/amd64-avx-mpx-avx512.c +++ /dev/null @@ -1,317 +0,0 @@ -/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: amd64-avx-mpx-avx512.xml */ - -#include "defs.h" -#include "osabi.h" -#include "target-descriptions.h" - -struct target_desc *tdesc_amd64_avx_mpx_avx512; -static void -initialize_tdesc_amd64_avx_mpx_avx512 (void) -{ - struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - - set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64")); - - feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); - 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.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"); - - 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", 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"); - - 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", 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_amd64_avx_mpx_avx512 = result; -} diff --git a/gdb/features/i386/amd64-avx-mpx-avx512.xml b/gdb/features/i386/amd64-avx-mpx-avx512.xml deleted file mode 100644 index 482111e9ede..00000000000 --- a/gdb/features/i386/amd64-avx-mpx-avx512.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - i386:x86-64 - - - - - - diff --git a/gdb/features/i386/i386-avx-mpx-avx512-linux.c b/gdb/features/i386/i386-avx-mpx-avx512-linux.c deleted file mode 100644 index 0fa35526d98..00000000000 --- a/gdb/features/i386/i386-avx-mpx-avx512-linux.c +++ /dev/null @@ -1,208 +0,0 @@ -/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: i386-avx-mpx-avx512-linux.xml */ - -#include "defs.h" -#include "osabi.h" -#include "target-descriptions.h" - -struct target_desc *tdesc_i386_avx_mpx_avx512_linux; -static void -initialize_tdesc_i386_avx_mpx_avx512_linux (void) -{ - struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - - set_tdesc_architecture (result, bfd_scan_arch ("i386")); - - set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); - - feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); - 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"); - - tdesc_i386_avx_mpx_avx512_linux = result; -} diff --git a/gdb/features/i386/i386-avx-mpx-avx512-linux.xml b/gdb/features/i386/i386-avx-mpx-avx512-linux.xml deleted file mode 100644 index 2617eab7b44..00000000000 --- a/gdb/features/i386/i386-avx-mpx-avx512-linux.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - i386 - GNU/Linux - - - - - - - diff --git a/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c b/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c new file mode 100644 index 00000000000..f90c834037e --- /dev/null +++ b/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.c @@ -0,0 +1,211 @@ +/* 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 (); + struct tdesc_feature *feature; + struct tdesc_type *field_type; + struct tdesc_type *type; + + set_tdesc_architecture (result, bfd_scan_arch ("i386")); + + set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux")); + + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + 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-avx512-pku-linux.xml b/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.xml new file mode 100644 index 00000000000..1ef709ab87a --- /dev/null +++ b/gdb/features/i386/i386-avx-mpx-avx512-pku-linux.xml @@ -0,0 +1,22 @@ + + + + + + + + i386 + GNU/Linux + + + + + + + + diff --git a/gdb/features/i386/i386-avx-mpx-avx512-pku.c b/gdb/features/i386/i386-avx-mpx-avx512-pku.c new file mode 100644 index 00000000000..08d9b4b579d --- /dev/null +++ b/gdb/features/i386/i386-avx-mpx-avx512-pku.c @@ -0,0 +1,206 @@ +/* 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 (); + struct tdesc_feature *feature; + struct tdesc_type *field_type; + struct tdesc_type *type; + + set_tdesc_architecture (result, bfd_scan_arch ("i386")); + + feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); + 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-avx512-pku.xml b/gdb/features/i386/i386-avx-mpx-avx512-pku.xml new file mode 100644 index 00000000000..cbf78e1853a --- /dev/null +++ b/gdb/features/i386/i386-avx-mpx-avx512-pku.xml @@ -0,0 +1,19 @@ + + + + + + + + i386 + + + + + + + diff --git a/gdb/features/i386/i386-avx-mpx-avx512.c b/gdb/features/i386/i386-avx-mpx-avx512.c deleted file mode 100644 index ad5ac3bce60..00000000000 --- a/gdb/features/i386/i386-avx-mpx-avx512.c +++ /dev/null @@ -1,203 +0,0 @@ -/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: - Original: i386-avx-mpx-avx512.xml */ - -#include "defs.h" -#include "osabi.h" -#include "target-descriptions.h" - -struct target_desc *tdesc_i386_avx_mpx_avx512; -static void -initialize_tdesc_i386_avx_mpx_avx512 (void) -{ - struct target_desc *result = allocate_target_description (); - struct tdesc_feature *feature; - struct tdesc_type *field_type; - struct tdesc_type *type; - - set_tdesc_architecture (result, bfd_scan_arch ("i386")); - - feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core"); - 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"); - - tdesc_i386_avx_mpx_avx512 = result; -} diff --git a/gdb/features/i386/i386-avx-mpx-avx512.xml b/gdb/features/i386/i386-avx-mpx-avx512.xml deleted file mode 100644 index 392cc1b0f63..00000000000 --- a/gdb/features/i386/i386-avx-mpx-avx512.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - i386 - - - - - - diff --git a/gdb/gdbserver/Makefile.in b/gdb/gdbserver/Makefile.in index 37a9514a3bb..c2354d26b84 100644 --- a/gdb/gdbserver/Makefile.in +++ b/gdb/gdbserver/Makefile.in @@ -446,12 +446,12 @@ clean: rm -f i386-mpx.c i386-mpx-linux.c rm -f i386-avx-mpx.c i386-avx-mpx-linux.c rm -f i386-avx-avx512.c i386-avx-avx512-linux.c - rm -f i386-avx-mpx-avx512.c i386-avx-mpx-avx512-linux.c + rm -f i386-avx-mpx-avx512-pku.c i386-avx-mpx-avx512-pku-linux.c rm -f amd64-avx.c amd64-avx-linux.c rm -f amd64-mpx.c amd64-mpx-linux.c rm -f amd64-avx-mpx.c amd64-avx-mpx-linux.c rm -f amd64-avx-avx512.c amd64-avx-avx512-linux.c - rm -f amd64-avx-mpx-avx512.c amd64-avx-mpx-avx512-linux.c + rm -f amd64-avx-mpx-avx512-pku.c amd64-avx-mpx-avx512-pku-linux.c rm -f i386-mmx.c i386-mmx-linux.c rm -f x32.c x32-linux.c rm -f x32-avx.c x32-avx-linux.c @@ -582,7 +582,7 @@ i386-avx-mpx-linux-ipa.o: i386-avx-mpx-linux.c i386-avx-avx512-linux-ipa.o: i386-avx-avx512-linux.c $(IPAGENT_COMPILE) $< $(POSTCOMPILE) -i386-avx-mpx-avx512-linux-ipa.o: i386-avx-mpx-avx512-linux.c +i386-avx-mpx-avx512-pku-linux-ipa.o: i386-avx-mpx-avx512-pku-linux.c $(IPAGENT_COMPILE) $< $(POSTCOMPILE) linux-i386-ipa.o: linux-i386-ipa.c @@ -606,7 +606,7 @@ amd64-avx-mpx-linux-ipa.o: amd64-avx-mpx-linux.c amd64-avx-avx512-linux-ipa.o: amd64-avx-avx512-linux.c $(IPAGENT_COMPILE) $< $(POSTCOMPILE) -amd64-avx-mpx-avx512-linux-ipa.o: amd64-avx-mpx-avx512-linux.c +amd64-avx-mpx-avx512-pku-linux-ipa.o: amd64-avx-mpx-avx512-pku-linux.c $(IPAGENT_COMPILE) $< $(POSTCOMPILE) linux-aarch64-ipa.o: linux-aarch64-ipa.c @@ -906,14 +906,14 @@ i386-avx-avx512.c : $(srcdir)/../regformats/i386/i386-avx-avx512.dat $(regdat_sh $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-avx-avx512.dat i386-avx-avx512.c i386-avx-avx512-linux.c : $(srcdir)/../regformats/i386/i386-avx-avx512-linux.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-avx-avx512-linux.dat i386-avx-avx512-linux.c -i386-avx-mpx-avx512.c : $(srcdir)/../regformats/i386/i386-avx-mpx-avx512.dat $(regdat_sh) - $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-avx-mpx-avx512.dat i386-avx-mpx-avx512.c -i386-avx-mpx-avx512-linux.c : $(srcdir)/../regformats/i386/i386-avx-mpx-avx512-linux.dat $(regdat_sh) - $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-avx-mpx-avx512-linux.dat i386-avx-mpx-avx512-linux.c i386-mpx.c : $(srcdir)/../regformats/i386/i386-mpx.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-mpx.dat i386-mpx.c i386-mpx-linux.c : $(srcdir)/../regformats/i386/i386-mpx-linux.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-mpx-linux.dat i386-mpx-linux.c +i386-avx-mpx-avx512-pku.c : $(srcdir)/../regformats/i386/i386-avx-mpx-avx512-pku.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-avx-mpx-avx512-pku.dat i386-avx-mpx-avx512-pku.c +i386-avx-mpx-avx512-pku-linux.c : $(srcdir)/../regformats/i386/i386-avx-mpx-avx512-pku-linux.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-avx-mpx-avx512-pku-linux.dat i386-avx-mpx-avx512-pku-linux.c i386-avx-mpx.c : $(srcdir)/../regformats/i386/i386-avx-mpx.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/i386-avx-mpx.dat i386-avx-mpx.c i386-avx-mpx-linux.c : $(srcdir)/../regformats/i386/i386-avx-mpx-linux.dat $(regdat_sh) @@ -1028,14 +1028,14 @@ amd64-avx-avx512.c : $(srcdir)/../regformats/i386/amd64-avx-avx512.dat $(regdat_ $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-avx-avx512.dat amd64-avx-avx512.c amd64-avx-avx512-linux.c : $(srcdir)/../regformats/i386/amd64-avx-avx512-linux.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-avx-avx512-linux.dat amd64-avx-avx512-linux.c -amd64-avx-mpx-avx512.c : $(srcdir)/../regformats/i386/amd64-avx-mpx-avx512.dat $(regdat_sh) - $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-avx-mpx-avx512.dat amd64-avx-mpx-avx512.c -amd64-avx-mpx-avx512-linux.c : $(srcdir)/../regformats/i386/amd64-avx-mpx-avx512-linux.dat $(regdat_sh) - $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-avx-mpx-avx512-linux.dat amd64-avx-mpx-avx512-linux.c amd64-mpx.c : $(srcdir)/../regformats/i386/amd64-mpx.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-mpx.dat amd64-mpx.c amd64-mpx-linux.c : $(srcdir)/../regformats/i386/amd64-mpx-linux.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-mpx-linux.dat amd64-mpx-linux.c +amd64-avx-mpx-avx512-pku.c : $(srcdir)/../regformats/i386/amd64-avx-mpx-avx512-pku.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-avx-mpx-avx512-pku.dat amd64-avx-mpx-avx512-pku.c +amd64-avx-mpx-avx512-pku-linux.c : $(srcdir)/../regformats/i386/amd64-avx-mpx-avx512-pku-linux.dat $(regdat_sh) + $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-avx-mpx-avx512-pku-linux.dat amd64-avx-mpx-avx512-pku-linux.c amd64-avx-mpx.c : $(srcdir)/../regformats/i386/amd64-avx-mpx.dat $(regdat_sh) $(SHELL) $(regdat_sh) $(srcdir)/../regformats/i386/amd64-avx-mpx.dat amd64-avx-mpx.c amd64-avx-mpx-linux.c : $(srcdir)/../regformats/i386/amd64-avx-mpx-linux.dat $(regdat_sh) diff --git a/gdb/gdbserver/configure.srv b/gdb/gdbserver/configure.srv index 9390cb1cb2c..d00d9e2c572 100644 --- a/gdb/gdbserver/configure.srv +++ b/gdb/gdbserver/configure.srv @@ -24,21 +24,21 @@ # Default hostio_last_error implementation srv_hostio_err_objs="hostio-errno.o" -srv_i386_regobj="i386.o i386-avx.o i386-avx-avx512.o i386-avx-mpx-avx512.o i386-mpx.o i386-avx-mpx.o i386-mmx.o" -srv_i386_linux_regobj="i386-linux.o i386-avx-linux.o i386-avx-avx512-linux.o i386-avx-mpx-avx512-linux.o i386-mpx-linux.o i386-avx-mpx-linux.o i386-mmx-linux.o" -srv_amd64_regobj="amd64.o amd64-avx.o amd64-avx-avx512.o amd64-avx-mpx-avx512.o amd64-mpx.o amd64-avx-mpx.o x32.o x32-avx.o x32-avx-avx512.o" -srv_amd64_linux_regobj="amd64-linux.o amd64-avx-linux.o amd64-avx-avx512-linux.o amd64-avx-mpx-avx512-linux.o amd64-mpx-linux.o amd64-avx-mpx-linux.o x32-linux.o x32-avx-linux.o x32-avx-avx512-linux.o" +srv_i386_regobj="i386.o i386-avx.o i386-avx-avx512.o i386-avx-mpx-avx512-pku.o i386-mpx.o i386-avx-mpx.o i386-mmx.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" +srv_amd64_regobj="amd64.o amd64-avx.o amd64-avx-avx512.o amd64-avx-mpx-avx512-pku.o amd64-mpx.o amd64-avx-mpx.o x32.o x32-avx.o x32-avx-avx512.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-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-linux-ipa.o amd64-mpx-linux-ipa.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_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" -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" -srv_i386_xmlfiles="i386/i386.xml i386/i386-avx.xml i386/i386-avx-avx512.xml i386/i386-avx-mpx-avx512.xml i386/i386-mpx.xml i386/i386-avx-mpx.xml i386/i386-mmx.xml $srv_i386_32bit_xmlfiles" -srv_amd64_xmlfiles="i386/amd64.xml i386/amd64-avx.xml i386/amd64-avx-avx512.xml i386/amd64-avx-mpx-avx512.xml i386/x32.xml i386/x32-avx.xml i386/x32-avx-avx512.xml i386/amd64-mpx.xml i386/amd64-avx-mpx.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-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_amd64_linux_xmlfiles="i386/amd64-linux.xml i386/amd64-avx-linux.xml i386/amd64-avx-avx512.xml i386/amd64-avx-mpx-avx512-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_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" +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 i386/i386-avx.xml i386/i386-avx-avx512.xml i386/i386-avx-mpx-avx512-pku.xml i386/i386-mpx.xml i386/i386-avx-mpx.xml i386/i386-mmx.xml $srv_i386_32bit_xmlfiles" +srv_amd64_xmlfiles="i386/amd64.xml i386/amd64-avx.xml i386/amd64-avx-avx512.xml i386/amd64-avx-mpx-avx512-pku.xml i386/x32.xml i386/x32-avx.xml i386/x32-avx-avx512.xml i386/amd64-mpx.xml i386/amd64-avx-mpx.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_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" # Linux object files. This is so we don't have to repeat diff --git a/gdb/gdbserver/i387-fp.c b/gdb/gdbserver/i387-fp.c index 8267045a5c4..5f5cbdabe13 100644 --- a/gdb/gdbserver/i387-fp.c +++ b/gdb/gdbserver/i387-fp.c @@ -27,6 +27,7 @@ static const int num_avx512_zmmh_low_registers = 16; static const int num_avx512_zmmh_high_registers = 16; static const int num_avx512_ymmh_registers = 16; static const int num_avx512_xmm_registers = 16; +static const int num_pkeys_registers = 1; /* Note: These functions preserve the reserved bits in control registers. However, gdbserver promptly throws away that information. */ @@ -136,6 +137,10 @@ struct i387_xsave { /* Space for 16 512-bit zmm16-31 values. */ unsigned char zmmh_high_space[1024]; + + /* Space for 1 32-bit PKRU register. The HW XSTATE size for this feature is + actually 64 bits, but WRPKRU/RDPKRU instructions ignore upper 32 bits. */ + unsigned char pkru_space[8]; }; void @@ -325,6 +330,10 @@ i387_cache_to_xsave (struct regcache *regcache, void *buf) for (i = 0; i < num_avx512_ymmh_registers; i++) memset (((char *) &fp->zmmh_high_space[0]) + 16 + i * 64, 0, 16); } + + if ((clear_bv & X86_XSTATE_PKRU)) + for (i = 0; i < num_pkeys_registers; i++) + memset (((char *) &fp->pkru_space[0]) + i * 4, 0, 4); } /* Check if any x87 registers are changed. */ @@ -497,6 +506,23 @@ i387_cache_to_xsave (struct regcache *regcache, void *buf) } } + /* Check if any PKEYS registers are changed. */ + if ((x86_xcr0 & X86_XSTATE_PKRU)) + { + int pkru_regnum = find_regno (regcache->tdesc, "pkru"); + + for (i = 0; i < num_pkeys_registers; i++) + { + collect_register (regcache, i + pkru_regnum, raw); + p = ((char *) &fp->pkru_space[0]) + i * 4; + if (memcmp (raw, p, 4) != 0) + { + xstate_bv |= X86_XSTATE_PKRU; + memcpy (p, raw, 4); + } + } + } + /* Update the corresponding bits in xstate_bv if any SSE/AVX registers are changed. */ fp->xstate_bv |= xstate_bv; @@ -801,6 +827,23 @@ i387_xsave_to_cache (struct regcache *regcache, const void *buf) } } + if ((x86_xcr0 & X86_XSTATE_PKRU) != 0) + { + int pkru_regnum = find_regno (regcache->tdesc, "pkru"); + + if ((clear_bv & X86_XSTATE_PKRU) != 0) + { + for (i = 0; i < num_pkeys_registers; i++) + supply_register_zeroed (regcache, i + pkru_regnum); + } + else + { + p = (gdb_byte *) &fp->pkru_space[0]; + for (i = 0; i < num_pkeys_registers; i++) + supply_register (regcache, i + pkru_regnum, p + i * 4); + } + } + supply_register_by_name (regcache, "fioff", &fp->fioff); supply_register_by_name (regcache, "fooff", &fp->fooff); supply_register_by_name (regcache, "mxcsr", &fp->mxcsr); diff --git a/gdb/gdbserver/linux-amd64-ipa.c b/gdb/gdbserver/linux-amd64-ipa.c index c00b77ab021..67f36c2e177 100644 --- a/gdb/gdbserver/linux-amd64-ipa.c +++ b/gdb/gdbserver/linux-amd64-ipa.c @@ -197,8 +197,8 @@ get_ipa_tdesc (int idx) return tdesc_amd64_mpx_linux; case X86_TDESC_AVX_MPX: return tdesc_amd64_avx_mpx_linux; - case X86_TDESC_AVX_MPX_AVX512: - return tdesc_amd64_avx_mpx_avx512_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: @@ -286,5 +286,6 @@ initialize_low_tracepoint (void) 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-i386-ipa.c b/gdb/gdbserver/linux-i386-ipa.c index aa16f8520ff..e9ac78b06a5 100644 --- a/gdb/gdbserver/linux-i386-ipa.c +++ b/gdb/gdbserver/linux-i386-ipa.c @@ -264,8 +264,8 @@ get_ipa_tdesc (int idx) return tdesc_i386_avx_mpx_linux; case X86_TDESC_AVX_AVX512: return tdesc_i386_avx_avx512_linux; - case X86_TDESC_AVX_MPX_AVX512: - return tdesc_i386_avx_mpx_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); @@ -296,7 +296,7 @@ initialize_low_tracepoint (void) init_registers_i386_avx_linux (); init_registers_i386_mpx_linux (); init_registers_i386_avx_avx512_linux (); - init_registers_i386_avx_mpx_avx512_linux (); + init_registers_i386_avx_mpx_avx512_pku_linux (); initialize_fast_tracepoint_trampoline_buffer (); } diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c index f946cf47be7..6df1d5169f0 100644 --- a/gdb/gdbserver/linux-x86-low.c +++ b/gdb/gdbserver/linux-x86-low.c @@ -148,7 +148,8 @@ static const int x86_64_regmap[] = -1, -1, -1, -1, -1, -1, -1, -1, /* zmm0 ... zmm31 (AVX512) */ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1 + -1, -1, -1, -1, -1, -1, -1, -1, + -1 /* pkru */ }; #define X86_64_NUM_REGS (sizeof (x86_64_regmap) / sizeof (x86_64_regmap[0])) @@ -822,8 +823,8 @@ x86_linux_read_description (void) { switch (xcr0 & X86_XSTATE_ALL_MASK) { - case X86_XSTATE_AVX_MPX_AVX512_MASK: - return tdesc_amd64_avx_mpx_avx512_linux; + 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; @@ -850,7 +851,10 @@ x86_linux_read_description (void) { switch (xcr0 & X86_XSTATE_ALL_MASK) { - case X86_XSTATE_AVX_MPX_AVX512_MASK: /* No MPX on x32. */ + 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; @@ -873,8 +877,8 @@ x86_linux_read_description (void) { switch (xcr0 & X86_XSTATE_ALL_MASK) { - case (X86_XSTATE_AVX_MPX_AVX512_MASK): - return tdesc_i386_avx_mpx_avx512_linux; + 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; @@ -2902,8 +2906,8 @@ x86_get_ipa_tdesc_idx (void) return X86_TDESC_MPX; if (tdesc == tdesc_amd64_avx_mpx_linux) return X86_TDESC_AVX_MPX; - if (tdesc == tdesc_amd64_avx_mpx_avx512_linux || tdesc == tdesc_x32_avx_avx512_linux) - return X86_TDESC_AVX_MPX_AVX512; + 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; #endif @@ -2918,8 +2922,8 @@ x86_get_ipa_tdesc_idx (void) return X86_TDESC_MPX; if (tdesc == tdesc_i386_avx_mpx_linux) return X86_TDESC_AVX_MPX; - if (tdesc == tdesc_i386_avx_mpx_avx512_linux) - return X86_TDESC_AVX_MPX_AVX512; + 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; @@ -2982,7 +2986,7 @@ initialize_low_arch (void) init_registers_amd64_mpx_linux (); init_registers_amd64_avx_mpx_linux (); init_registers_amd64_avx_avx512_linux (); - init_registers_amd64_avx_mpx_avx512_linux (); + init_registers_amd64_avx_mpx_avx512_pku_linux (); init_registers_x32_linux (); init_registers_x32_avx_linux (); @@ -2998,7 +3002,7 @@ initialize_low_arch (void) init_registers_i386_mpx_linux (); init_registers_i386_avx_mpx_linux (); init_registers_i386_avx_avx512_linux (); - init_registers_i386_avx_mpx_avx512_linux (); + init_registers_i386_avx_mpx_avx512_pku_linux (); tdesc_i386_linux_no_xml = XNEW (struct target_desc); copy_target_description (tdesc_i386_linux_no_xml, tdesc_i386_linux); diff --git a/gdb/gdbserver/linux-x86-tdesc.h b/gdb/gdbserver/linux-x86-tdesc.h index 96966c377fa..bbe4078e1b1 100644 --- a/gdb/gdbserver/linux-x86-tdesc.h +++ b/gdb/gdbserver/linux-x86-tdesc.h @@ -29,7 +29,7 @@ enum x86_linux_tdesc { X86_TDESC_MPX = 3, X86_TDESC_AVX_MPX = 4, X86_TDESC_AVX_AVX512 = 5, - X86_TDESC_AVX_MPX_AVX512 = 6, + X86_TDESC_AVX_MPX_AVX512_PKU = 6, }; #ifdef __x86_64__ @@ -47,9 +47,9 @@ extern const struct target_desc *tdesc_amd64_avx_linux; 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-linux.c. */ -void init_registers_amd64_avx_mpx_avx512_linux (void); -extern const struct target_desc *tdesc_amd64_avx_mpx_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); @@ -98,8 +98,8 @@ 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_linux (void); -extern const struct target_desc *tdesc_i386_avx_mpx_avx512_linux; +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); diff --git a/gdb/i386-linux-nat.c b/gdb/i386-linux-nat.c index f86fac30223..2c4963b5f40 100644 --- a/gdb/i386-linux-nat.c +++ b/gdb/i386-linux-nat.c @@ -59,7 +59,7 @@ (I386_ST0_REGNUM <= (regno) && (regno) < I386_SSE_NUM_REGS) #define GETXSTATEREGS_SUPPLIES(regno) \ - (I386_ST0_REGNUM <= (regno) && (regno) < I386_AVX512_NUM_REGS) + (I386_ST0_REGNUM <= (regno) && (regno) < I386_PKEYS_NUM_REGS) /* Does the current host support the GETREGS request? */ int have_ptrace_getregs = diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c index 66828f515e2..1909d6122b4 100644 --- a/gdb/i386-linux-tdep.c +++ b/gdb/i386-linux-tdep.c @@ -51,7 +51,7 @@ #include "features/i386/i386-avx-mpx-linux.c" #include "features/i386/i386-avx-linux.c" #include "features/i386/i386-avx-avx512-linux.c" -#include "features/i386/i386-avx-mpx-avx512-linux.c" +#include "features/i386/i386-avx-mpx-avx512-pku-linux.c" /* Return non-zero, when the register is in the corresponding register group. Put the LINUX_ORIG_EAX register in the system group. */ @@ -613,6 +613,7 @@ int i386_linux_gregset_reg_offset[] = -1, -1, /* MPX registers BNDCFGU, BNDSTATUS. */ -1, -1, -1, -1, -1, -1, -1, -1, /* k0 ... k7 (AVX512) */ -1, -1, -1, -1, -1, -1, -1, -1, /* zmm0 ... zmm7 (AVX512) */ + -1, /* PKRU register */ 11 * 4, /* "orig_eax" */ }; @@ -689,8 +690,8 @@ i386_linux_core_read_description (struct gdbarch *gdbarch, switch ((xcr0 & X86_XSTATE_ALL_MASK)) { - case X86_XSTATE_AVX_MPX_AVX512_MASK: - return tdesc_i386_avx_mpx_avx512_linux; + 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; case X86_XSTATE_MPX_MASK: @@ -1089,5 +1090,5 @@ _initialize_i386_linux_tdep (void) initialize_tdesc_i386_mpx_linux (); initialize_tdesc_i386_avx_mpx_linux (); initialize_tdesc_i386_avx_avx512_linux (); - initialize_tdesc_i386_avx_mpx_avx512_linux (); + initialize_tdesc_i386_avx_mpx_avx512_pku_linux (); } diff --git a/gdb/i386-linux-tdep.h b/gdb/i386-linux-tdep.h index 06190fa51d2..8d4c7caa5a3 100644 --- a/gdb/i386-linux-tdep.h +++ b/gdb/i386-linux-tdep.h @@ -29,7 +29,7 @@ /* Register number for the "orig_eax" pseudo-register. If this pseudo-register contains a value >= 0 it is interpreted as the system call number that the kernel is supposed to restart. */ -#define I386_LINUX_ORIG_EAX_REGNUM (I386_ZMM7H_REGNUM + 1) +#define I386_LINUX_ORIG_EAX_REGNUM (I386_PKRU_REGNUM + 1) /* Total number of registers for GNU/Linux. */ #define I386_LINUX_NUM_REGS (I386_LINUX_ORIG_EAX_REGNUM + 1) @@ -49,7 +49,7 @@ extern struct target_desc *tdesc_i386_avx_linux; extern struct target_desc *tdesc_i386_mpx_linux; extern struct target_desc *tdesc_i386_avx_mpx_linux; extern struct target_desc *tdesc_i386_avx_avx512_linux; -extern struct target_desc *tdesc_i386_avx_mpx_avx512_linux; +extern struct target_desc *tdesc_i386_avx_mpx_avx512_pku_linux; /* Format of XSAVE extended state is: struct @@ -63,6 +63,7 @@ extern struct target_desc *tdesc_i386_avx_mpx_avx512_linux; avx512_zmmh_regs0-7[1153..1407] avx512_zmmh_regs8-15[1408..1663] avx512_zmm_regs16-31[1664..2687] + pkru[2688..2752] future_state etc }; diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index ff215496490..f2917dbaed4 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -55,7 +55,7 @@ #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.c" +#include "features/i386/i386-avx-mpx-avx512-pku.c" #include "features/i386/i386-mmx.c" #include "ax.h" @@ -121,6 +121,11 @@ static const char *i386_mpx_names[] = "bnd0raw", "bnd1raw", "bnd2raw", "bnd3raw", "bndcfgu", "bndstatus" }; +static const char* i386_pkeys_names[] = +{ + "pkru" +}; + /* Register names for MPX pseudo-registers. */ static const char *i386_bnd_names[] = @@ -415,6 +420,21 @@ i386_mpx_ctrl_regnum_p (struct gdbarch *gdbarch, int regnum) return regnum >= 0 && regnum < I387_NUM_MPX_CTRL_REGS; } +/* PKRU register? */ + +bool +i386_pkru_regnum_p (struct gdbarch *gdbarch, int regnum) +{ + struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + int pkru_regnum = tdep->pkru_regnum; + + if (pkru_regnum < 0) + return false; + + regnum -= pkru_regnum; + return regnum >= 0 && regnum < I387_NUM_PKEYS_REGS; +} + /* Return the name of register REGNUM, or the empty string if it is an anonymous register. */ @@ -4529,7 +4549,7 @@ i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum, ymm_regnum_p, ymmh_regnum_p, ymm_avx512_regnum_p, ymmh_avx512_regnum_p, bndr_regnum_p, bnd_regnum_p, k_regnum_p, zmm_regnum_p, zmmh_regnum_p, zmm_avx512_regnum_p, mpx_ctrl_regnum_p, xmm_avx512_regnum_p, - avx512_p, avx_p, sse_p; + avx512_p, avx_p, sse_p, pkru_regnum_p; /* Don't include pseudo registers, except for MMX, in any register groups. */ @@ -4546,6 +4566,7 @@ i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum, if (group == i386_mmx_reggroup) return mmx_regnum_p; + pkru_regnum_p = i386_pkru_regnum_p(gdbarch, regnum); xmm_regnum_p = i386_xmm_regnum_p (gdbarch, regnum); xmm_avx512_regnum_p = i386_xmm_avx512_regnum_p (gdbarch, regnum); mxcsr_regnum_p = i386_mxcsr_regnum_p (gdbarch, regnum); @@ -4617,7 +4638,8 @@ i386_register_reggroup_p (struct gdbarch *gdbarch, int regnum, && !bnd_regnum_p && !mpx_ctrl_regnum_p && !zmm_regnum_p - && !zmmh_regnum_p); + && !zmmh_regnum_p + && !pkru_regnum_p); return default_register_reggroup_p (gdbarch, regnum, group); } @@ -8201,7 +8223,7 @@ i386_validate_tdesc_p (struct gdbarch_tdep *tdep, const struct tdesc_feature *feature_core; const struct tdesc_feature *feature_sse, *feature_avx, *feature_mpx, - *feature_avx512; + *feature_avx512, *feature_pkeys; int i, num_regs, valid_p; if (! tdesc_has_registers (tdesc)) @@ -8224,6 +8246,9 @@ i386_validate_tdesc_p (struct gdbarch_tdep *tdep, /* Try AVX512 registers. */ feature_avx512 = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.avx512"); + /* Try PKEYS */ + feature_pkeys = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.pkeys"); + valid_p = 1; /* The XCR0 bits. */ @@ -8330,6 +8355,22 @@ i386_validate_tdesc_p (struct gdbarch_tdep *tdep, tdep->mpx_register_names[i]); } + if (feature_pkeys) + { + tdep->xcr0 |= X86_XSTATE_PKRU; + if (tdep->pkru_regnum < 0) + { + tdep->pkeys_register_names = i386_pkeys_names; + tdep->pkru_regnum = I386_PKRU_REGNUM; + tdep->num_pkeys_regs = 1; + } + + for (i = 0; i < I387_NUM_PKEYS_REGS; i++) + valid_p &= tdesc_numbered_register (feature_pkeys, tdesc_data, + I387_PKRU_REGNUM (tdep) + i, + tdep->pkeys_register_names[i]); + } + return valid_p; } @@ -8525,7 +8566,7 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* Even though the default ABI only includes general-purpose registers, floating-point registers and the SSE registers, we have to leave a gap for the upper AVX, MPX and AVX512 registers. */ - set_gdbarch_num_regs (gdbarch, I386_AVX512_NUM_REGS); + set_gdbarch_num_regs (gdbarch, I386_PKEYS_NUM_REGS); set_gdbarch_gnu_triplet_regexp (gdbarch, i386_gnu_triplet_regexp); @@ -8570,6 +8611,10 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) tdep->num_ymm_avx512_regs = 0; tdep->num_xmm_avx512_regs = 0; + /* No PKEYS registers */ + tdep->pkru_regnum = -1; + tdep->num_pkeys_regs = 0; + tdesc_data = tdesc_data_alloc (); set_gdbarch_relocate_instruction (gdbarch, i386_relocate_instruction); @@ -8708,8 +8753,8 @@ i386_target_description (uint64_t xcr0) { switch (xcr0 & X86_XSTATE_ALL_MASK) { - case X86_XSTATE_AVX_MPX_AVX512_MASK: - return tdesc_i386_avx_mpx_avx512; + 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: @@ -9054,7 +9099,7 @@ Show Intel Memory Protection Extensions specific variables."), initialize_tdesc_i386_mpx (); initialize_tdesc_i386_avx_mpx (); initialize_tdesc_i386_avx_avx512 (); - initialize_tdesc_i386_avx_mpx_avx512 (); + initialize_tdesc_i386_avx_mpx_avx512_pku (); /* Tell remote stub that we support XML target description. */ register_remote_support_xml ("i386"); diff --git a/gdb/i386-tdep.h b/gdb/i386-tdep.h index d4ff7e49c5a..2b117670394 100644 --- a/gdb/i386-tdep.h +++ b/gdb/i386-tdep.h @@ -189,6 +189,15 @@ struct gdbarch_tdep /* YMM16-31 register names. Only used for tdesc_numbered_register. */ const char **ymm_avx512_register_names; + /* Number of PKEYS registers. */ + int num_pkeys_regs; + + /* Register number for PKRU register. */ + int pkru_regnum; + + /* PKEYS register names. */ + const char **pkeys_register_names; + /* Target description. */ const struct target_desc *tdesc; @@ -284,7 +293,8 @@ enum i386_regnum I386_K0_REGNUM, /* %k0 */ I386_K7_REGNUM = I386_K0_REGNUM + 7, I386_ZMM0H_REGNUM, /* %zmm0h */ - I386_ZMM7H_REGNUM = I386_ZMM0H_REGNUM + 7 + I386_ZMM7H_REGNUM = I386_ZMM0H_REGNUM + 7, + I386_PKRU_REGNUM }; /* Register numbers of RECORD_REGMAP. */ @@ -324,6 +334,7 @@ enum record_i386_regnum #define I386_AVX_NUM_REGS (I386_YMM7H_REGNUM + 1) #define I386_MPX_NUM_REGS (I386_BNDSTATUS_REGNUM + 1) #define I386_AVX512_NUM_REGS (I386_ZMM7H_REGNUM + 1) +#define I386_PKEYS_NUM_REGS (I386_PKRU_REGNUM + 1) /* Size of the largest register. */ #define I386_MAX_REGISTER_SIZE 64 @@ -345,6 +356,7 @@ extern int i386_bnd_regnum_p (struct gdbarch *gdbarch, int regnum); extern int i386_k_regnum_p (struct gdbarch *gdbarch, int regnum); extern int i386_zmm_regnum_p (struct gdbarch *gdbarch, int regnum); extern int i386_zmmh_regnum_p (struct gdbarch *gdbarch, int regnum); +extern bool i386_pkru_regnum_p (struct gdbarch *gdbarch, int regnum); extern const char *i386_pseudo_register_name (struct gdbarch *gdbarch, int regnum); diff --git a/gdb/i387-tdep.c b/gdb/i387-tdep.c index e3418d76273..b0c48e4423b 100644 --- a/gdb/i387-tdep.c +++ b/gdb/i387-tdep.c @@ -888,6 +888,19 @@ static int xsave_avx512_zmm_h_offset[] = #define XSAVE_AVX512_ZMM_H_ADDR(tdep, xsave, regnum) \ (xsave + xsave_avx512_zmm_h_offset[regnum - I387_ZMM0H_REGNUM (tdep)]) +/* At xsave_pkeys_offset[REGNUM] you find the offset to the location + of the PKRU register data structure used by the "xsave" + instruction where GDB register REGNUM is stored. */ + +static int xsave_pkeys_offset[] = +{ +2688 + 0 * 8 /* %pkru (64 bits in XSTATE, 32-bit actually used by + instructions and applications). */ +}; + +#define XSAVE_PKEYS_ADDR(tdep, xsave, regnum) \ + (xsave + xsave_pkeys_offset[regnum - I387_PKRU_REGNUM (tdep)]) + /* Similar to i387_supply_fxsave, but use XSAVE extended state. */ void @@ -911,8 +924,9 @@ i387_supply_xsave (struct regcache *regcache, int regnum, avx512_zmm_h = 0x20, avx512_ymmh_avx512 = 0x40, avx512_xmm_avx512 = 0x80, + pkeys = 0x100, all = x87 | sse | avxh | mpx | avx512_k | avx512_zmm_h - | avx512_ymmh_avx512 | avx512_xmm_avx512 + | avx512_ymmh_avx512 | avx512_xmm_avx512 | pkeys } regclass; gdb_assert (regs != NULL); @@ -921,6 +935,9 @@ i387_supply_xsave (struct regcache *regcache, int regnum, if (regnum == -1) regclass = all; + else if (regnum >= I387_PKRU_REGNUM (tdep) + && regnum < I387_PKEYSEND_REGNUM (tdep)) + regclass = pkeys; else if (regnum >= I387_ZMM0H_REGNUM (tdep) && regnum < I387_ZMMENDH_REGNUM (tdep)) regclass = avx512_zmm_h; @@ -977,6 +994,14 @@ i387_supply_xsave (struct regcache *regcache, int regnum, case none: break; + case pkeys: + if ((clear_bv & X86_XSTATE_PKRU)) + regcache_raw_supply (regcache, regnum, zero); + else + regcache_raw_supply (regcache, regnum, + XSAVE_PKEYS_ADDR (tdep, regs, regnum)); + return; + case avx512_zmm_h: if ((clear_bv & (X86_XSTATE_ZMM_H | X86_XSTATE_ZMM))) regcache_raw_supply (regcache, regnum, zero); @@ -1042,6 +1067,26 @@ i387_supply_xsave (struct regcache *regcache, int regnum, return; case all: + /* Handle PKEYS registers. */ + if ((tdep->xcr0 & X86_XSTATE_PKRU)) + { + if ((clear_bv & X86_XSTATE_PKRU)) + { + for (i = I387_PKRU_REGNUM (tdep); + i < I387_PKEYSEND_REGNUM (tdep); + i++) + regcache_raw_supply (regcache, i, zero); + } + else + { + for (i = I387_PKRU_REGNUM (tdep); + i < I387_PKEYSEND_REGNUM (tdep); + i++) + regcache_raw_supply (regcache, i, + XSAVE_PKEYS_ADDR (tdep, regs, i)); + } + } + /* Handle the upper ZMM registers. */ if ((tdep->xcr0 & (X86_XSTATE_ZMM_H | X86_XSTATE_ZMM))) { @@ -1286,8 +1331,9 @@ i387_collect_xsave (const struct regcache *regcache, int regnum, avx512_zmm_h = 0x40 | check, avx512_ymmh_avx512 = 0x80 | check, avx512_xmm_avx512 = 0x100 | check, + pkeys = 0x200 | check, all = x87 | sse | avxh | mpx | avx512_k | avx512_zmm_h - | avx512_ymmh_avx512 | avx512_xmm_avx512 + | avx512_ymmh_avx512 | avx512_xmm_avx512 | pkeys } regclass; gdb_assert (tdep->st0_regnum >= I386_ST0_REGNUM); @@ -1295,6 +1341,9 @@ i387_collect_xsave (const struct regcache *regcache, int regnum, if (regnum == -1) regclass = all; + else if (regnum >= I387_PKRU_REGNUM (tdep) + && regnum < I387_PKEYSEND_REGNUM (tdep)) + regclass = pkeys; else if (regnum >= I387_ZMM0H_REGNUM (tdep) && regnum < I387_ZMMENDH_REGNUM (tdep)) regclass = avx512_zmm_h; @@ -1348,6 +1397,11 @@ i387_collect_xsave (const struct regcache *regcache, int regnum, /* Clear register set if its bit in xstat_bv is zero. */ if (clear_bv) { + if ((clear_bv & X86_XSTATE_PKRU)) + for (i = I387_PKRU_REGNUM (tdep); + i < I387_PKEYSEND_REGNUM (tdep); i++) + memset (XSAVE_PKEYS_ADDR (tdep, regs, i), 0, 4); + if ((clear_bv & X86_XSTATE_BNDREGS)) for (i = I387_BND0R_REGNUM (tdep); i < I387_BNDCFGU_REGNUM (tdep); i++) @@ -1396,6 +1450,20 @@ i387_collect_xsave (const struct regcache *regcache, int regnum, if (regclass == all) { + /* Check if any PKEYS registers are changed. */ + if ((tdep->xcr0 & X86_XSTATE_PKRU)) + for (i = I387_PKRU_REGNUM (tdep); + i < I387_PKEYSEND_REGNUM (tdep); i++) + { + regcache_raw_collect (regcache, i, raw); + p = XSAVE_PKEYS_ADDR (tdep, regs, i); + if (memcmp (raw, p, 4) != 0) + { + xstate_bv |= X86_XSTATE_PKRU; + memcpy (p, raw, 4); + } + } + /* Check if any ZMMH registers are changed. */ if ((tdep->xcr0 & (X86_XSTATE_ZMM_H | X86_XSTATE_ZMM))) for (i = I387_ZMM0H_REGNUM (tdep); @@ -1531,6 +1599,16 @@ i387_collect_xsave (const struct regcache *regcache, int regnum, internal_error (__FILE__, __LINE__, _("invalid i387 regclass")); + case pkeys: + /* This is a PKEYS register. */ + p = XSAVE_PKEYS_ADDR (tdep, regs, regnum); + if (memcmp (raw, p, 4) != 0) + { + xstate_bv |= X86_XSTATE_PKRU; + memcpy (p, raw, 4); + } + break; + case avx512_zmm_h: /* This is a ZMM register. */ p = XSAVE_AVX512_ZMM_H_ADDR (tdep, regs, regnum); @@ -1648,6 +1726,7 @@ i387_collect_xsave (const struct regcache *regcache, int regnum, case avx512_zmm_h: case avx512_ymmh_avx512: case avx512_xmm_avx512: + case pkeys: /* Register REGNUM has been updated. Return. */ return; } diff --git a/gdb/i387-tdep.h b/gdb/i387-tdep.h index 81d45b7048c..6a97e4f57f1 100644 --- a/gdb/i387-tdep.h +++ b/gdb/i387-tdep.h @@ -44,7 +44,9 @@ struct ui_file; #define I387_NUM_BND_REGS 4 #define I387_NUM_MPX_CTRL_REGS 2 #define I387_NUM_K_REGS 8 +#define I387_NUM_PKEYS_REGS 1 +#define I387_PKRU_REGNUM(tdep) ((tdep)->pkru_regnum) #define I387_K0_REGNUM(tdep) ((tdep)->k0_regnum) #define I387_NUM_ZMMH_REGS(tdep) ((tdep)->num_zmm_regs) #define I387_ZMM0H_REGNUM(tdep) ((tdep)->zmm0h_regnum) @@ -79,6 +81,9 @@ struct ui_file; #define I387_XMM_AVX512_END_REGNUM(tdep) \ (I387_XMM16_REGNUM (tdep) + I387_NUM_XMM_AVX512_REGS (tdep)) +#define I387_PKEYSEND_REGNUM(tdep) \ + (I387_PKRU_REGNUM (tdep) + I387_NUM_PKEYS_REGS) + /* Print out the i387 floating point state. */ extern void i387_print_float_info (struct gdbarch *gdbarch, diff --git a/gdb/regformats/i386/amd64-avx-mpx-avx512-linux.dat b/gdb/regformats/i386/amd64-avx-mpx-avx512-linux.dat deleted file mode 100644 index 526bca4c4ca..00000000000 --- a/gdb/regformats/i386/amd64-avx-mpx-avx512-linux.dat +++ /dev/null @@ -1,159 +0,0 @@ -# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: -# Generated from: i386/amd64-avx-mpx-avx512-linux.xml -name:amd64_avx_mpx_avx512_linux -xmltarget:amd64-avx-mpx-avx512-linux.xml -expedite:rbp,rsp,rip -64:rax -64:rbx -64:rcx -64:rdx -64:rsi -64:rdi -64:rbp -64:rsp -64:r8 -64:r9 -64:r10 -64:r11 -64:r12 -64:r13 -64:r14 -64:r15 -64:rip -32:eflags -32:cs -32:ss -32:ds -32:es -32:fs -32:gs -80:st0 -80:st1 -80:st2 -80:st3 -80:st4 -80:st5 -80:st6 -80:st7 -32:fctrl -32:fstat -32:ftag -32:fiseg -32:fioff -32:foseg -32:fooff -32:fop -128:xmm0 -128:xmm1 -128:xmm2 -128:xmm3 -128:xmm4 -128:xmm5 -128:xmm6 -128:xmm7 -128:xmm8 -128:xmm9 -128:xmm10 -128:xmm11 -128:xmm12 -128:xmm13 -128:xmm14 -128:xmm15 -32:mxcsr -64:orig_rax -64:fs_base -64:gs_base -128:ymm0h -128:ymm1h -128:ymm2h -128:ymm3h -128:ymm4h -128:ymm5h -128:ymm6h -128:ymm7h -128:ymm8h -128:ymm9h -128:ymm10h -128:ymm11h -128:ymm12h -128:ymm13h -128:ymm14h -128:ymm15h -128:bnd0raw -128:bnd1raw -128:bnd2raw -128:bnd3raw -64:bndcfgu -64:bndstatus -128:xmm16 -128:xmm17 -128:xmm18 -128:xmm19 -128:xmm20 -128:xmm21 -128:xmm22 -128:xmm23 -128:xmm24 -128:xmm25 -128:xmm26 -128:xmm27 -128:xmm28 -128:xmm29 -128:xmm30 -128:xmm31 -128:ymm16h -128:ymm17h -128:ymm18h -128:ymm19h -128:ymm20h -128:ymm21h -128:ymm22h -128:ymm23h -128:ymm24h -128:ymm25h -128:ymm26h -128:ymm27h -128:ymm28h -128:ymm29h -128:ymm30h -128:ymm31h -64:k0 -64:k1 -64:k2 -64:k3 -64:k4 -64:k5 -64:k6 -64:k7 -256:zmm0h -256:zmm1h -256:zmm2h -256:zmm3h -256:zmm4h -256:zmm5h -256:zmm6h -256:zmm7h -256:zmm8h -256:zmm9h -256:zmm10h -256:zmm11h -256:zmm12h -256:zmm13h -256:zmm14h -256:zmm15h -256:zmm16h -256:zmm17h -256:zmm18h -256:zmm19h -256:zmm20h -256:zmm21h -256:zmm22h -256:zmm23h -256:zmm24h -256:zmm25h -256:zmm26h -256:zmm27h -256:zmm28h -256:zmm29h -256:zmm30h -256:zmm31h diff --git a/gdb/regformats/i386/amd64-avx-mpx-avx512-pku-linux.dat b/gdb/regformats/i386/amd64-avx-mpx-avx512-pku-linux.dat new file mode 100644 index 00000000000..3ae6b0e4722 --- /dev/null +++ b/gdb/regformats/i386/amd64-avx-mpx-avx512-pku-linux.dat @@ -0,0 +1,159 @@ +# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: +# Generated from: i386/amd64-avx-mpx-avx512-pku-linux.xml +name:amd64_avx_mpx_avx512_pku_linux +xmltarget:amd64-avx-mpx-avx512-pku-linux.xml +expedite:rbp,rsp,rip +64:rax +64:rbx +64:rcx +64:rdx +64:rsi +64:rdi +64:rbp +64:rsp +64:r8 +64:r9 +64:r10 +64:r11 +64:r12 +64:r13 +64:r14 +64:r15 +64:rip +32:eflags +32:cs +32:ss +32:ds +32:es +32:fs +32:gs +80:st0 +80:st1 +80:st2 +80:st3 +80:st4 +80:st5 +80:st6 +80:st7 +32:fctrl +32:fstat +32:ftag +32:fiseg +32:fioff +32:foseg +32:fooff +32:fop +128:xmm0 +128:xmm1 +128:xmm2 +128:xmm3 +128:xmm4 +128:xmm5 +128:xmm6 +128:xmm7 +128:xmm8 +128:xmm9 +128:xmm10 +128:xmm11 +128:xmm12 +128:xmm13 +128:xmm14 +128:xmm15 +32:mxcsr +64:orig_rax +64:fs_base +64:gs_base +128:ymm0h +128:ymm1h +128:ymm2h +128:ymm3h +128:ymm4h +128:ymm5h +128:ymm6h +128:ymm7h +128:ymm8h +128:ymm9h +128:ymm10h +128:ymm11h +128:ymm12h +128:ymm13h +128:ymm14h +128:ymm15h +128:bnd0raw +128:bnd1raw +128:bnd2raw +128:bnd3raw +64:bndcfgu +64:bndstatus +128:xmm16 +128:xmm17 +128:xmm18 +128:xmm19 +128:xmm20 +128:xmm21 +128:xmm22 +128:xmm23 +128:xmm24 +128:xmm25 +128:xmm26 +128:xmm27 +128:xmm28 +128:xmm29 +128:xmm30 +128:xmm31 +128:ymm16h +128:ymm17h +128:ymm18h +128:ymm19h +128:ymm20h +128:ymm21h +128:ymm22h +128:ymm23h +128:ymm24h +128:ymm25h +128:ymm26h +128:ymm27h +128:ymm28h +128:ymm29h +128:ymm30h +128:ymm31h +64:k0 +64:k1 +64:k2 +64:k3 +64:k4 +64:k5 +64:k6 +64:k7 +256:zmm0h +256:zmm1h +256:zmm2h +256:zmm3h +256:zmm4h +256:zmm5h +256:zmm6h +256:zmm7h +256:zmm8h +256:zmm9h +256:zmm10h +256:zmm11h +256:zmm12h +256:zmm13h +256:zmm14h +256:zmm15h +256:zmm16h +256:zmm17h +256:zmm18h +256:zmm19h +256:zmm20h +256:zmm21h +256:zmm22h +256:zmm23h +256:zmm24h +256:zmm25h +256:zmm26h +256:zmm27h +256:zmm28h +256:zmm29h +256:zmm30h +256:zmm31h diff --git a/gdb/regformats/i386/amd64-avx-mpx-avx512-pku.dat b/gdb/regformats/i386/amd64-avx-mpx-avx512-pku.dat new file mode 100644 index 00000000000..88185fd8c34 --- /dev/null +++ b/gdb/regformats/i386/amd64-avx-mpx-avx512-pku.dat @@ -0,0 +1,160 @@ +# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: +# Generated from: i386/amd64-avx-mpx-avx512-pku.xml +name:amd64_avx_mpx_avx512_pku +xmltarget:amd64-avx-mpx-avx512-pku.xml +expedite:rbp,rsp,rip +64:rax +64:rbx +64:rcx +64:rdx +64:rsi +64:rdi +64:rbp +64:rsp +64:r8 +64:r9 +64:r10 +64:r11 +64:r12 +64:r13 +64:r14 +64:r15 +64:rip +32:eflags +32:cs +32:ss +32:ds +32:es +32:fs +32:gs +80:st0 +80:st1 +80:st2 +80:st3 +80:st4 +80:st5 +80:st6 +80:st7 +32:fctrl +32:fstat +32:ftag +32:fiseg +32:fioff +32:foseg +32:fooff +32:fop +128:xmm0 +128:xmm1 +128:xmm2 +128:xmm3 +128:xmm4 +128:xmm5 +128:xmm6 +128:xmm7 +128:xmm8 +128:xmm9 +128:xmm10 +128:xmm11 +128:xmm12 +128:xmm13 +128:xmm14 +128:xmm15 +32:mxcsr +64:orig_rax +64:fs_base +64:gs_base +128:ymm0h +128:ymm1h +128:ymm2h +128:ymm3h +128:ymm4h +128:ymm5h +128:ymm6h +128:ymm7h +128:ymm8h +128:ymm9h +128:ymm10h +128:ymm11h +128:ymm12h +128:ymm13h +128:ymm14h +128:ymm15h +128:bnd0raw +128:bnd1raw +128:bnd2raw +128:bnd3raw +64:bndcfgu +64:bndstatus +128:xmm16 +128:xmm17 +128:xmm18 +128:xmm19 +128:xmm20 +128:xmm21 +128:xmm22 +128:xmm23 +128:xmm24 +128:xmm25 +128:xmm26 +128:xmm27 +128:xmm28 +128:xmm29 +128:xmm30 +128:xmm31 +128:ymm16h +128:ymm17h +128:ymm18h +128:ymm19h +128:ymm20h +128:ymm21h +128:ymm22h +128:ymm23h +128:ymm24h +128:ymm25h +128:ymm26h +128:ymm27h +128:ymm28h +128:ymm29h +128:ymm30h +128:ymm31h +64:k0 +64:k1 +64:k2 +64:k3 +64:k4 +64:k5 +64:k6 +64:k7 +256:zmm0h +256:zmm1h +256:zmm2h +256:zmm3h +256:zmm4h +256:zmm5h +256:zmm6h +256:zmm7h +256:zmm8h +256:zmm9h +256:zmm10h +256:zmm11h +256:zmm12h +256:zmm13h +256:zmm14h +256:zmm15h +256:zmm16h +256:zmm17h +256:zmm18h +256:zmm19h +256:zmm20h +256:zmm21h +256:zmm22h +256:zmm23h +256:zmm24h +256:zmm25h +256:zmm26h +256:zmm27h +256:zmm28h +256:zmm29h +256:zmm30h +256:zmm31h +32:pkru diff --git a/gdb/regformats/i386/amd64-avx-mpx-avx512.dat b/gdb/regformats/i386/amd64-avx-mpx-avx512.dat deleted file mode 100644 index fc4bd2d9f59..00000000000 --- a/gdb/regformats/i386/amd64-avx-mpx-avx512.dat +++ /dev/null @@ -1,159 +0,0 @@ -# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: -# Generated from: i386/amd64-avx-mpx-avx512.xml -name:amd64_avx_mpx_avx512 -xmltarget:amd64-avx-mpx-avx512.xml -expedite:rbp,rsp,rip -64:rax -64:rbx -64:rcx -64:rdx -64:rsi -64:rdi -64:rbp -64:rsp -64:r8 -64:r9 -64:r10 -64:r11 -64:r12 -64:r13 -64:r14 -64:r15 -64:rip -32:eflags -32:cs -32:ss -32:ds -32:es -32:fs -32:gs -80:st0 -80:st1 -80:st2 -80:st3 -80:st4 -80:st5 -80:st6 -80:st7 -32:fctrl -32:fstat -32:ftag -32:fiseg -32:fioff -32:foseg -32:fooff -32:fop -128:xmm0 -128:xmm1 -128:xmm2 -128:xmm3 -128:xmm4 -128:xmm5 -128:xmm6 -128:xmm7 -128:xmm8 -128:xmm9 -128:xmm10 -128:xmm11 -128:xmm12 -128:xmm13 -128:xmm14 -128:xmm15 -32:mxcsr -64:orig_rax -64:fs_base -64:gs_base -128:ymm0h -128:ymm1h -128:ymm2h -128:ymm3h -128:ymm4h -128:ymm5h -128:ymm6h -128:ymm7h -128:ymm8h -128:ymm9h -128:ymm10h -128:ymm11h -128:ymm12h -128:ymm13h -128:ymm14h -128:ymm15h -128:bnd0raw -128:bnd1raw -128:bnd2raw -128:bnd3raw -64:bndcfgu -64:bndstatus -128:xmm16 -128:xmm17 -128:xmm18 -128:xmm19 -128:xmm20 -128:xmm21 -128:xmm22 -128:xmm23 -128:xmm24 -128:xmm25 -128:xmm26 -128:xmm27 -128:xmm28 -128:xmm29 -128:xmm30 -128:xmm31 -128:ymm16h -128:ymm17h -128:ymm18h -128:ymm19h -128:ymm20h -128:ymm21h -128:ymm22h -128:ymm23h -128:ymm24h -128:ymm25h -128:ymm26h -128:ymm27h -128:ymm28h -128:ymm29h -128:ymm30h -128:ymm31h -64:k0 -64:k1 -64:k2 -64:k3 -64:k4 -64:k5 -64:k6 -64:k7 -256:zmm0h -256:zmm1h -256:zmm2h -256:zmm3h -256:zmm4h -256:zmm5h -256:zmm6h -256:zmm7h -256:zmm8h -256:zmm9h -256:zmm10h -256:zmm11h -256:zmm12h -256:zmm13h -256:zmm14h -256:zmm15h -256:zmm16h -256:zmm17h -256:zmm18h -256:zmm19h -256:zmm20h -256:zmm21h -256:zmm22h -256:zmm23h -256:zmm24h -256:zmm25h -256:zmm26h -256:zmm27h -256:zmm28h -256:zmm29h -256:zmm30h -256:zmm31h diff --git a/gdb/regformats/i386/i386-avx-mpx-avx512-linux.dat b/gdb/regformats/i386/i386-avx-mpx-avx512-linux.dat deleted file mode 100644 index 2afffa32ca7..00000000000 --- a/gdb/regformats/i386/i386-avx-mpx-avx512-linux.dat +++ /dev/null @@ -1,77 +0,0 @@ -# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: -# Generated from: i386/i386-avx-mpx-avx512-linux.xml -name:i386_avx_mpx_avx512_linux -xmltarget:i386-avx-mpx-avx512-linux.xml -expedite:ebp,esp,eip -32:eax -32:ecx -32:edx -32:ebx -32:esp -32:ebp -32:esi -32:edi -32:eip -32:eflags -32:cs -32:ss -32:ds -32:es -32:fs -32:gs -80:st0 -80:st1 -80:st2 -80:st3 -80:st4 -80:st5 -80:st6 -80:st7 -32:fctrl -32:fstat -32:ftag -32:fiseg -32:fioff -32:foseg -32:fooff -32:fop -128:xmm0 -128:xmm1 -128:xmm2 -128:xmm3 -128:xmm4 -128:xmm5 -128:xmm6 -128:xmm7 -32:mxcsr -32:orig_eax -128:ymm0h -128:ymm1h -128:ymm2h -128:ymm3h -128:ymm4h -128:ymm5h -128:ymm6h -128:ymm7h -128:bnd0raw -128:bnd1raw -128:bnd2raw -128:bnd3raw -64:bndcfgu -64:bndstatus -64:k0 -64:k1 -64:k2 -64:k3 -64:k4 -64:k5 -64:k6 -64:k7 -256:zmm0h -256:zmm1h -256:zmm2h -256:zmm3h -256:zmm4h -256:zmm5h -256:zmm6h -256:zmm7h diff --git a/gdb/regformats/i386/i386-avx-mpx-avx512-pku-linux.dat b/gdb/regformats/i386/i386-avx-mpx-avx512-pku-linux.dat new file mode 100644 index 00000000000..515ee10525b --- /dev/null +++ b/gdb/regformats/i386/i386-avx-mpx-avx512-pku-linux.dat @@ -0,0 +1,78 @@ +# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: +# Generated from: i386/i386-avx-mpx-avx512-pku-linux.xml +name:i386_avx_mpx_avx512_pku_linux +xmltarget:i386-avx-mpx-avx512-pku-linux.xml +expedite:ebp,esp,eip +32:eax +32:ecx +32:edx +32:ebx +32:esp +32:ebp +32:esi +32:edi +32:eip +32:eflags +32:cs +32:ss +32:ds +32:es +32:fs +32:gs +80:st0 +80:st1 +80:st2 +80:st3 +80:st4 +80:st5 +80:st6 +80:st7 +32:fctrl +32:fstat +32:ftag +32:fiseg +32:fioff +32:foseg +32:fooff +32:fop +128:xmm0 +128:xmm1 +128:xmm2 +128:xmm3 +128:xmm4 +128:xmm5 +128:xmm6 +128:xmm7 +32:mxcsr +32:orig_eax +128:ymm0h +128:ymm1h +128:ymm2h +128:ymm3h +128:ymm4h +128:ymm5h +128:ymm6h +128:ymm7h +128:bnd0raw +128:bnd1raw +128:bnd2raw +128:bnd3raw +64:bndcfgu +64:bndstatus +64:k0 +64:k1 +64:k2 +64:k3 +64:k4 +64:k5 +64:k6 +64:k7 +256:zmm0h +256:zmm1h +256:zmm2h +256:zmm3h +256:zmm4h +256:zmm5h +256:zmm6h +256:zmm7h +32:pkru diff --git a/gdb/regformats/i386/i386-avx-mpx-avx512-pku.dat b/gdb/regformats/i386/i386-avx-mpx-avx512-pku.dat new file mode 100644 index 00000000000..17094b40c3e --- /dev/null +++ b/gdb/regformats/i386/i386-avx-mpx-avx512-pku.dat @@ -0,0 +1,77 @@ +# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: +# Generated from: i386/i386-avx-mpx-avx512-pku.xml +name:i386_avx_mpx_avx512_pku +xmltarget:i386-avx-mpx-avx512-pku.xml +expedite:ebp,esp,eip +32:eax +32:ecx +32:edx +32:ebx +32:esp +32:ebp +32:esi +32:edi +32:eip +32:eflags +32:cs +32:ss +32:ds +32:es +32:fs +32:gs +80:st0 +80:st1 +80:st2 +80:st3 +80:st4 +80:st5 +80:st6 +80:st7 +32:fctrl +32:fstat +32:ftag +32:fiseg +32:fioff +32:foseg +32:fooff +32:fop +128:xmm0 +128:xmm1 +128:xmm2 +128:xmm3 +128:xmm4 +128:xmm5 +128:xmm6 +128:xmm7 +32:mxcsr +128:ymm0h +128:ymm1h +128:ymm2h +128:ymm3h +128:ymm4h +128:ymm5h +128:ymm6h +128:ymm7h +128:bnd0raw +128:bnd1raw +128:bnd2raw +128:bnd3raw +64:bndcfgu +64:bndstatus +64:k0 +64:k1 +64:k2 +64:k3 +64:k4 +64:k5 +64:k6 +64:k7 +256:zmm0h +256:zmm1h +256:zmm2h +256:zmm3h +256:zmm4h +256:zmm5h +256:zmm6h +256:zmm7h +32:pkru diff --git a/gdb/regformats/i386/i386-avx-mpx-avx512.dat b/gdb/regformats/i386/i386-avx-mpx-avx512.dat deleted file mode 100644 index a3c520cabe4..00000000000 --- a/gdb/regformats/i386/i386-avx-mpx-avx512.dat +++ /dev/null @@ -1,76 +0,0 @@ -# THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi :set ro: -# Generated from: i386/i386-avx-mpx-avx512.xml -name:i386_avx_mpx_avx512 -xmltarget:i386-avx-mpx-avx512.xml -expedite:ebp,esp,eip -32:eax -32:ecx -32:edx -32:ebx -32:esp -32:ebp -32:esi -32:edi -32:eip -32:eflags -32:cs -32:ss -32:ds -32:es -32:fs -32:gs -80:st0 -80:st1 -80:st2 -80:st3 -80:st4 -80:st5 -80:st6 -80:st7 -32:fctrl -32:fstat -32:ftag -32:fiseg -32:fioff -32:foseg -32:fooff -32:fop -128:xmm0 -128:xmm1 -128:xmm2 -128:xmm3 -128:xmm4 -128:xmm5 -128:xmm6 -128:xmm7 -32:mxcsr -128:ymm0h -128:ymm1h -128:ymm2h -128:ymm3h -128:ymm4h -128:ymm5h -128:ymm6h -128:ymm7h -128:bnd0raw -128:bnd1raw -128:bnd2raw -128:bnd3raw -64:bndcfgu -64:bndstatus -64:k0 -64:k1 -64:k2 -64:k3 -64:k4 -64:k5 -64:k6 -64:k7 -256:zmm0h -256:zmm1h -256:zmm2h -256:zmm3h -256:zmm4h -256:zmm5h -256:zmm6h -256:zmm7h diff --git a/gdb/testsuite/gdb.arch/i386-pkru.c b/gdb/testsuite/gdb.arch/i386-pkru.c new file mode 100644 index 00000000000..cec78f56237 --- /dev/null +++ b/gdb/testsuite/gdb.arch/i386-pkru.c @@ -0,0 +1,90 @@ +/* Test program for PKEYS registers. + + Copyright 2015-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 . */ + +#include +#include "x86-cpuid.h" + +#ifndef NOINLINE +#define NOINLINE __attribute__ ((noinline)) +#endif + +unsigned int have_pkru (void) NOINLINE; + +static inline unsigned long +rdpkru (void) +{ + unsigned int eax, edx; + unsigned int ecx = 0; + unsigned int pkru; + + asm volatile (".byte 0x0f,0x01,0xee\n\t" + : "=a" (eax), "=d" (edx) + : "c" (ecx)); + pkru = eax; + return pkru; +} + +static inline void +wrpkru (unsigned int pkru) +{ + unsigned int eax = pkru; + unsigned int ecx = 0; + unsigned int edx = 0; + + asm volatile (".byte 0x0f,0x01,0xef\n\t" + : : "a" (eax), "c" (ecx), "d" (edx)); +} + +unsigned int NOINLINE +have_pkru (void) +{ + unsigned int eax, ebx, ecx, edx; + + if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) + return 0; + + if ((ecx & bit_OSXSAVE) == bit_OSXSAVE) + { + if (__get_cpuid_max (0, NULL) < 7) + return 0; + + __cpuid_count (7, 0, eax, ebx, ecx, edx); + + if ((ecx & bit_PKU) == bit_PKU) + return 1; + } + return 0; +} + +int +main (int argc, char **argv) +{ + unsigned int wr_value = 0x12345678; + unsigned int rd_value = 0x0; + + if (have_pkru ()) + { + wrpkru (wr_value); + asm ("nop\n\t"); /* break here 1. */ + + rd_value = rdpkru (); + asm ("nop\n\t"); /* break here 2. */ + } + return 0; +} diff --git a/gdb/testsuite/gdb.arch/i386-pkru.exp b/gdb/testsuite/gdb.arch/i386-pkru.exp new file mode 100644 index 00000000000..5f243f1be5a --- /dev/null +++ b/gdb/testsuite/gdb.arch/i386-pkru.exp @@ -0,0 +1,66 @@ +# Copyright 2015-2017 Free Software Foundation, Inc. +# +# 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 . + +standard_testfile + +if { ![istarget i?86-*-*] && ![istarget x86_64-*-* ] } { + unsupported "skipping x86 PKEYS tests." + return +} + +set comp_flags "-I${srcdir}/../nat/" + +if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} \ + [list debug additional_flags=${comp_flags}]] } { + untested "failed to compile x86 PKEYS test. + return -1 +} + +if ![runto_main] { + untested "could not run to main" + return -1 +} + +set supports_pkru 0 +set test "probe PKRU support" +gdb_test_multiple "print have_pkru()" $test { + -re ".. = 1\r\n$gdb_prompt $" { + pass $test + set supports_pkru 1 + } +} + +if { !$supports_pkru } { + unsupported "processor does not support protection key feature." + return +} + +# Test pkru register at startup +# set test_string "0" + +gdb_test "print \$pkru" "= 0" "pkru register" + +# Read values from pseudo registers. +gdb_breakpoint [ gdb_get_line_number "break here 1" ] +gdb_continue_to_breakpoint "break here 1" ".*break here 1.*" + +gdb_test "info register pkru" ".*pkru.*0x12345678.*" "read pkru register" +gdb_test "print /x \$pkru = 0x44444444" "= 0x44444444" "set pkru value" +gdb_test "info register pkru" ".*pkru.*0x44444444.*" "read value after setting value" + +gdb_breakpoint [ gdb_get_line_number "break here 2" ] +gdb_continue_to_breakpoint "break here 2" ".*break here 2.*" + +gdb_test "print /x rd_value" "= 0x44444444" "variable after reading pkru" diff --git a/gdb/x86-linux-nat.c b/gdb/x86-linux-nat.c index e6adb4e8e52..40a1b621866 100644 --- a/gdb/x86-linux-nat.c +++ b/gdb/x86-linux-nat.c @@ -204,12 +204,12 @@ x86_linux_read_description (struct target_ops *ops) #ifdef __x86_64__ switch (xcr0_features_bits) { - case X86_XSTATE_AVX_MPX_AVX512_MASK: + case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK: if (is_x32) - /* No MPX on x32, fallback to AVX-AVX512. */ + /* No MPX, PKU on x32, fall back to AVX-AVX512. */ return tdesc_x32_avx_avx512_linux; else - return tdesc_amd64_avx_mpx_avx512_linux; + return tdesc_amd64_avx_mpx_avx512_pku_linux; case X86_XSTATE_AVX_AVX512_MASK: if (is_x32) return tdesc_x32_avx_avx512_linux; @@ -242,8 +242,8 @@ x86_linux_read_description (struct target_ops *ops) { switch (xcr0_features_bits) { - case X86_XSTATE_AVX_MPX_AVX512_MASK: - return tdesc_i386_avx_mpx_avx512_linux; + 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; case X86_XSTATE_MPX_MASK: