[GDBserver] Use pre-generated tdesc as test
[deliverable/binutils-gdb.git] / gdb / gdbserver / linux-x86-tdesc.c
index 1f3dbaf9e21386f2cc2744a9828b65978798b096..d1e262c480595d1890f048d578c2b93e0090ae0f 100644 (file)
 #include "server.h"
 #include "tdesc.h"
 #include "linux-x86-tdesc.h"
-#include "x86-xstate.h"
-#include <inttypes.h>
-
-#if defined __i386__ || !defined IN_PROCESS_AGENT
-#include "../features/i386/32bit-core.c"
-#include "../features/i386/32bit-linux.c"
-#include "../features/i386/32bit-sse.c"
-#include "../features/i386/32bit-avx.c"
-#include "../features/i386/32bit-avx512.c"
-#include "../features/i386/32bit-mpx.c"
-#include "../features/i386/32bit-pkeys.c"
-
-/* Defined in auto-generated file i386-linux.c.  */
-void init_registers_i386_linux (void);
-extern const struct target_desc *tdesc_i386_linux;
-
-/* Defined in auto-generated file i386-mmx-linux.c.  */
-void init_registers_i386_mmx_linux (void);
-extern const struct target_desc *tdesc_i386_mmx_linux;
-
-/* Defined in auto-generated file i386-avx-linux.c.  */
-void init_registers_i386_avx_linux (void);
-extern const struct target_desc *tdesc_i386_avx_linux;
-
-/* Defined in auto-generated file i386-avx-mpx-linux.c.  */
-void init_registers_i386_avx_mpx_linux (void);
-extern const struct target_desc *tdesc_i386_avx_mpx_linux;
-
-/* Defined in auto-generated file i386-avx-avx512-linux.c.  */
-void init_registers_i386_avx_avx512_linux (void);
-extern const struct target_desc *tdesc_i386_avx_avx512_linux;
-
-/* Defined in auto-generated file i386-avx-mpx-avx512-linux.c.  */
-void init_registers_i386_avx_mpx_avx512_pku_linux (void);
-extern const struct target_desc *tdesc_i386_avx_mpx_avx512_pku_linux;
-
-/* Defined in auto-generated file i386-mpx-linux.c.  */
-void init_registers_i386_mpx_linux (void);
-extern const struct target_desc *tdesc_i386_mpx_linux;
-#endif
+#include "arch/i386.h"
+#include "common/x86-xstate.h"
 
 static struct target_desc *i386_tdescs[X86_TDESC_LAST] = { };
 
-#if defined GDB_SELF_TEST && !defined IN_PROCESS_AGENT
-#include "selftest.h"
-
-namespace selftests {
-namespace tdesc {
-static void
-i386_tdesc_test ()
-{
-  struct
-  {
-    unsigned int mask;
-    const target_desc *tdesc;
-  } tdesc_tests[] = {
-    { X86_XSTATE_X87, tdesc_i386_mmx_linux },
-    { X86_XSTATE_SSE_MASK, tdesc_i386_linux },
-    { X86_XSTATE_AVX_MASK, tdesc_i386_avx_linux },
-    { X86_XSTATE_MPX_MASK, tdesc_i386_mpx_linux },
-    { X86_XSTATE_AVX_MPX_MASK, tdesc_i386_avx_mpx_linux },
-    { X86_XSTATE_AVX_AVX512_MASK, tdesc_i386_avx_avx512_linux },
-    { X86_XSTATE_AVX_MPX_AVX512_PKU_MASK, tdesc_i386_avx_mpx_avx512_pku_linux }
-  };
-
-  for (auto &elem : tdesc_tests)
-    {
-      const target_desc *tdesc = i386_linux_read_description (elem.mask);
-
-      SELF_CHECK (*tdesc == *elem.tdesc);
-    }
-}
-}
-} // namespace selftests
-#endif /* GDB_SELF_TEST */
-
-void
-initialize_low_tdesc ()
-{
-#if defined __i386__ || !defined IN_PROCESS_AGENT
-  init_registers_i386_linux ();
-  init_registers_i386_mmx_linux ();
-  init_registers_i386_avx_linux ();
-  init_registers_i386_mpx_linux ();
-  init_registers_i386_avx_mpx_linux ();
-  init_registers_i386_avx_avx512_linux ();
-  init_registers_i386_avx_mpx_avx512_pku_linux ();
-
-#if GDB_SELF_TEST && !defined IN_PROCESS_AGENT
-  selftests::register_test (selftests::tdesc::i386_tdesc_test);
-#endif
-#endif
-}
-
 #if defined __i386__ || !defined IN_PROCESS_AGENT
 
 /* Return the target description according to XCR0.  */
@@ -143,53 +54,13 @@ i386_linux_read_description (uint64_t xcr0)
 
   if (*tdesc == NULL)
     {
-      *tdesc = new target_desc ();
-
-      long regnum = 0;
-
-      if (xcr0 & X86_XSTATE_X87)
-       regnum = create_feature_i386_32bit_core (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_SSE)
-       regnum = create_feature_i386_32bit_sse (*tdesc, regnum);
-
-      regnum = create_feature_i386_32bit_linux (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_AVX)
-       regnum = create_feature_i386_32bit_avx (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_MPX)
-       regnum = create_feature_i386_32bit_mpx (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_AVX512)
-       regnum = create_feature_i386_32bit_avx512 (*tdesc, regnum);
-
-      if (xcr0 & X86_XSTATE_PKRU)
-       regnum = create_feature_i386_32bit_pkeys (*tdesc, regnum);
+      *tdesc = i386_create_target_description (xcr0);
 
       init_target_desc (*tdesc);
 
 #ifndef IN_PROCESS_AGENT
       static const char *expedite_regs_i386[] = { "ebp", "esp", "eip", NULL };
       (*tdesc)->expedite_regs = expedite_regs_i386;
-
-      if (xcr0 & X86_XSTATE_PKRU)
-       (*tdesc)->xmltarget = "i386-avx-mpx-avx512-pku-linux.xml";
-      else if (xcr0 & X86_XSTATE_AVX512)
-       (*tdesc)->xmltarget = "i386-avx-avx512-linux.xml";
-      else if ((xcr0 & X86_XSTATE_AVX_MPX_MASK) == X86_XSTATE_AVX_MPX_MASK)
-       (*tdesc)->xmltarget = "i386-avx-mpx-linux.xml";
-      else if (xcr0 & X86_XSTATE_MPX)
-       (*tdesc)->xmltarget = "i386-mpx-linux.xml";
-      else if (xcr0 & X86_XSTATE_AVX)
-       (*tdesc)->xmltarget = "i386-avx-linux.xml";
-      else if (xcr0 & X86_XSTATE_SSE)
-       (*tdesc)->xmltarget = "i386-linux.xml";
-      else if (xcr0 & X86_XSTATE_X87)
-       (*tdesc)->xmltarget = "i386-mmx-linux.xml";
-      else
-       internal_error (__FILE__, __LINE__,
-                       "unknown xcr0: %" PRIu64, xcr0);
 #endif
     }
 
This page took 0.026835 seconds and 4 git commands to generate.