2b863f512d
The current MPX target descriptions assume that MPX is always combined with AVX, however that's not correct. We can have machines with MPX and without AVX; or machines with AVX and without MPX. This patch adds new target descriptions for machines that support both MPX and AVX, as duplicates of the existing MPX descriptions. The following commit will remove AVX from the MPX-only descriptions. 2016-04-16 Walfred Tedeschi <walfred.tedeschi@intel.com> gdb/ChangeLog: * amd64-linux-tdep.c (features/i386/amd64-avx-mpx-linux.c): New include. (amd64_linux_core_read_description): Add case for X86_XSTATE_AVX_MPX_MASK. (_initialize_amd64_linux_tdep): Call initialize_tdesc_amd64_avx_mpx_linux. * amd64-linux-tdep.h (tdesc_amd64_avx_mpx_linux): New definition. * amd64-tdep.c (features/i386/amd64-avx-mpx.c): New include. (amd64_target_description): Add case for X86_XSTATE_AVX_MPX_MASK. (_initialize_amd64_tdep): Call initialize_tdesc_amd64_avx_mpx. * common/x86-xstate.h (X86_XSTATE_MPX_MASK): Remove AVX bits. (X86_XSTATE_AVX_MPX_MASK): New case. * features/Makefile (i386/i386-avx-mpx, i386/i386-avx-mpx-linux) (i386/amd64-avx-mpx, i386/amd64-avx-mpx-linux): New rules. (i386/i386-avx-mpx-expedite, i386/i386-avx-mpx-linux-expedite) (i386/amd64-avx-mpx-expedite, i386/amd64-avx-mpx-linux-expedite): New expedites. * i386-linux-tdep.c (features/i386/i386-avx-mpx-linux.c): New include. (i386_linux_core_read_description): Add case X86_XSTATE_AVX_MPX_MASK. (_initialize_i386_linux_tdep): Call initialize_tdesc_i386_avx_mpx_linux. * i386-linux-tdep.h (tdesc_i386_avx_mpx_linux): New include. * i386-tdep.c (features/i386/i386-avx-mpx.c): New include. (i386_target_description): Add case for X86_XSTATE_AVX_MPX_MASK. * x86-linux-nat.c (x86_linux_read_description): Add case for X86_XSTATE_AVX_MPX_MASK. * features/i386/amd64-avx-mpx-linux.xml: New file. * features/i386/i386-avx-mpx-linux.xml: New file. * features/i386/i386-avx-mpx.xml: New file. * features/i386/amd64-avx-mpx.xml: New file. * features/i386/amd64-avx-mpx-linux.c: Generated. * features/i386/amd64-avx-mpx.c: Generated. * features/i386/i386-avx-mpx-linux.c: Generated. * features/i386/i386-avx-mpx.c: Generated. * regformats/i386/amd64-avx-mpx-linux.dat: Generated. * regformats/i386/amd64-avx-mpx.dat: Generated. * regformats/i386/i386-avx-mpx-linux.dat: Generated. * regformats/i386/i386-avx-mpx.dat: Generated. gdb/gdbserver/ChangeLog: * Makefile.in (clean): Add removal for i386-avx-mpx.c, i386-avx-mpx-linux.c, amd64-avx-mpx.c and amd64-avx-mpx-linux.c. (i386-avx-mpx.c, i386-avx-mpx-linux.c, amd64-avx-mpx.c) (amd64-avx-mpx-linux.c): New rules. (amd64-avx-mpx-linux-ipa.o, i386-avx-mpx-linux-ipa.o): New rule. * configure.srv (srv_i386_regobj): Add i386-avx-mpx.o. (srv_i386_linux_regobj): Add i386-avx-mpx-linux.o. (srv_amd64_regobj): Add amd64-avx-mpx.o. (srv_amd64_linux_regobj): Add amd64-avx-mpx-linux.o. (srv_i386_xmlfiles): Add i386/i386-avx-mpx.xml. (srv_amd64_xmlfiles): Add i386/amd64-avx-mpx.xml. (srv_i386_linux_xmlfiles): Add i386/i386-avx-mpx-linux.xml. (srv_amd64_linux_xmlfiles): Add i386/amd64-avx-mpx-linux.xml. (ipa_i386_linux_regobj): Add i386-avx-mpx-linux-ipa.o. (ipa_amd64_linux_regobj): Add amd64-avx-mpx-linux-ipa.o. * linux-x86-low.c (x86_linux_read_description): Add case for X86_XSTATE_AVX_MPX_MASK. (x86_get_ipa_tdesc_idx): Add cases for avx_mpx. (initialize_low_arch): Call init_registers_amd64_avx_mpx_linux and init_registers_i386_avx_mpx_linux. * linux-i386-ipa.c (get_ipa_tdesc): Add case for avx_mpx. (initialize_low_tracepoint): Call init_registers_i386_avx_mpx_linux. * linux-amd64-ipa.c (get_ipa_tdesc): Add case for avx_mpx. (initialize_low_tracepoint): Call init_registers_amd64_avx_mpx_linux. * linux-x86-tdesc.h (X86_TDESC_AVX_MPX): New enum value. (init_registers_amd64_avx_mpx_linux, tdesc_amd64_avx_mpx_linux) (init_registers_i386_avx_mpx_linux, tdesc_i386_avx_mpx_linux): New declarations.
98 lines
3.5 KiB
C
98 lines
3.5 KiB
C
/* Low level support for x86 (i386 and x86-64), shared between gdbserver
|
|
and IPA.
|
|
|
|
Copyright (C) 2016 Free Software Foundation, Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
/* Note: since IPA obviously knows what ABI it's running on (i386 vs x86_64
|
|
vs x32), it's sufficient to pass only the register set here. This,
|
|
together with the ABI known at IPA compile time, maps to a tdesc. */
|
|
|
|
enum x86_linux_tdesc {
|
|
X86_TDESC_MMX = 0,
|
|
X86_TDESC_SSE = 1,
|
|
X86_TDESC_AVX = 2,
|
|
X86_TDESC_MPX = 3,
|
|
X86_TDESC_AVX_MPX = 4,
|
|
X86_TDESC_AVX512 = 5,
|
|
};
|
|
|
|
#ifdef __x86_64__
|
|
|
|
#if defined __LP64__ || !defined IN_PROCESS_AGENT
|
|
/* Defined in auto-generated file amd64-linux.c. */
|
|
void init_registers_amd64_linux (void);
|
|
extern const struct target_desc *tdesc_amd64_linux;
|
|
|
|
/* Defined in auto-generated file amd64-avx-linux.c. */
|
|
void init_registers_amd64_avx_linux (void);
|
|
extern const struct target_desc *tdesc_amd64_avx_linux;
|
|
|
|
/* Defined in auto-generated file amd64-avx512-linux.c. */
|
|
void init_registers_amd64_avx512_linux (void);
|
|
extern const struct target_desc *tdesc_amd64_avx512_linux;
|
|
|
|
/* Defined in auto-generated file amd64-avx-mpx-linux.c. */
|
|
void init_registers_amd64_avx_mpx_linux (void);
|
|
extern const struct target_desc *tdesc_amd64_avx_mpx_linux;
|
|
|
|
/* Defined in auto-generated file amd64-mpx-linux.c. */
|
|
void init_registers_amd64_mpx_linux (void);
|
|
extern const struct target_desc *tdesc_amd64_mpx_linux;
|
|
#endif
|
|
|
|
#if defined __ILP32__ || !defined IN_PROCESS_AGENT
|
|
/* Defined in auto-generated file x32-linux.c. */
|
|
void init_registers_x32_linux (void);
|
|
extern const struct target_desc *tdesc_x32_linux;
|
|
|
|
/* Defined in auto-generated file x32-avx-linux.c. */
|
|
void init_registers_x32_avx_linux (void);
|
|
extern const struct target_desc *tdesc_x32_avx_linux;
|
|
|
|
/* Defined in auto-generated file x32-avx512-linux.c. */
|
|
void init_registers_x32_avx512_linux (void);
|
|
extern const struct target_desc *tdesc_x32_avx512_linux;
|
|
#endif
|
|
|
|
#endif
|
|
|
|
#if defined __i386__ || !defined IN_PROCESS_AGENT
|
|
/* Defined in auto-generated file i386-linux.c. */
|
|
void init_registers_i386_linux (void);
|
|
extern const struct target_desc *tdesc_i386_linux;
|
|
|
|
/* Defined in auto-generated file i386-mmx-linux.c. */
|
|
void init_registers_i386_mmx_linux (void);
|
|
extern const struct target_desc *tdesc_i386_mmx_linux;
|
|
|
|
/* Defined in auto-generated file i386-avx-linux.c. */
|
|
void init_registers_i386_avx_linux (void);
|
|
extern const struct target_desc *tdesc_i386_avx_linux;
|
|
|
|
/* Defined in auto-generated file i386-avx-mpx-linux.c. */
|
|
void init_registers_i386_avx_mpx_linux (void);
|
|
extern const struct target_desc *tdesc_i386_avx_mpx_linux;
|
|
|
|
/* Defined in auto-generated file i386-avx512-linux.c. */
|
|
void init_registers_i386_avx512_linux (void);
|
|
extern const struct target_desc *tdesc_i386_avx512_linux;
|
|
|
|
/* Defined in auto-generated file i386-mpx-linux.c. */
|
|
void init_registers_i386_mpx_linux (void);
|
|
extern const struct target_desc *tdesc_i386_mpx_linux;
|
|
#endif
|