X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbserver%2Flinux-i386-ipa.c;h=39afcaf2cfd6d852b7e4f356968702803c957d1a;hb=de6242d3075700ec4b73bdee583dc216f3a0b046;hp=cc09ef8d78909783ceca4d04b740987990abe87b;hpb=22049425ce40324139be82d9a6ec518c46b65815;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbserver/linux-i386-ipa.c b/gdb/gdbserver/linux-i386-ipa.c index cc09ef8d78..39afcaf2cf 100644 --- a/gdb/gdbserver/linux-i386-ipa.c +++ b/gdb/gdbserver/linux-i386-ipa.c @@ -1,7 +1,7 @@ /* GNU/Linux/x86 specific low level interface, for the in-process agent library for GDB. - Copyright (C) 2010-2017 Free Software Foundation, Inc. + Copyright (C) 2010-2018 Free Software Foundation, Inc. This file is part of GDB. @@ -22,6 +22,7 @@ #include #include "tracepoint.h" #include "linux-x86-tdesc.h" +#include "common/x86-xstate.h" /* GDB register numbers. */ @@ -244,31 +245,29 @@ initialize_fast_tracepoint_trampoline_buffer (void) } } +/* Map the tdesc index to xcr0 mask. */ +static uint64_t idx2mask[X86_TDESC_LAST] = { + X86_XSTATE_X87_MASK, + X86_XSTATE_SSE_MASK, + X86_XSTATE_AVX_MASK, + X86_XSTATE_MPX_MASK, + X86_XSTATE_AVX_MPX_MASK, + X86_XSTATE_AVX_AVX512_MASK, + X86_XSTATE_AVX_MPX_AVX512_PKU_MASK, +}; + /* Return target_desc to use for IPA, given the tdesc index passed by gdbserver. */ const struct target_desc * get_ipa_tdesc (int idx) { - switch (idx) + if (idx >= X86_TDESC_LAST) { - case X86_TDESC_MMX: - return tdesc_i386_mmx_linux; - case X86_TDESC_SSE: - return tdesc_i386_linux; - case X86_TDESC_AVX: - return tdesc_i386_avx_linux; - case X86_TDESC_MPX: - return tdesc_i386_mpx_linux; - case X86_TDESC_AVX_MPX: - return tdesc_i386_avx_mpx_linux; - case X86_TDESC_AVX_MPX_AVX512: - return tdesc_i386_avx_mpx_avx512_linux; - default: internal_error (__FILE__, __LINE__, "unknown ipa tdesc index: %d", idx); - return tdesc_i386_linux; } + return i386_linux_read_description (idx2mask[idx]); } /* Allocate buffer for the jump pads. On i386, we can reach an arbitrary @@ -289,10 +288,7 @@ alloc_jump_pad_buffer (size_t size) void initialize_low_tracepoint (void) { - init_registers_i386_mmx_linux (); - init_registers_i386_linux (); - init_registers_i386_avx_linux (); - init_registers_i386_mpx_linux (); - init_registers_i386_avx_mpx_avx512_linux (); initialize_fast_tracepoint_trampoline_buffer (); + for (auto i = 0; i < X86_TDESC_LAST; i++) + i386_linux_read_description (idx2mask[i]); }