Arm: Use feature target descriptions
authorAlan Hayward <alan.hayward@arm.com>
Fri, 19 Jul 2019 14:01:11 +0000 (15:01 +0100)
committerAlan Hayward <alan.hayward@arm.com>
Fri, 19 Jul 2019 14:01:11 +0000 (15:01 +0100)
In arm arm_create_target_description and
aarch32_create_target_description create feature based target descriptions
instead of returning the old style descriptions.

Ensure the descriptions are created in exactly the same way as the old xml
files.

Remove the old initialize calls.

gdb/ChangeLog:

* arch/aarch32.c (aarch32_create_target_description): Create
target descriptions using features.
* arch/arm.c (arm_create_target_description)
(arm_create_mprofile_target_description): Likewise.
* arm-tdep.c (_initialize_arm_tdep): Remove tdesc init calls.

gdb/ChangeLog
gdb/arch/aarch32.c
gdb/arch/arm.c
gdb/arm-tdep.c

index d5012b7e09dbbec49e2dcd9779a0939b680bd474..994e0eff6825122bc323a24ea42f52d55f801e6a 100644 (file)
@@ -1,3 +1,11 @@
+2019-07-19  Alan Hayward  <alan.hayward@arm.com>
+
+       * arch/aarch32.c (aarch32_create_target_description): Create
+       target descriptions using features.
+       * arch/arm.c (arm_create_target_description)
+       (arm_create_mprofile_target_description): Likewise.
+       * arm-tdep.c (_initialize_arm_tdep): Remove tdesc init calls.
+
 2019-07-19  Alan Hayward  <alan.hayward@arm.com>
 
        * Makefile.in: Add new files.
index 14d6987d3f05b32a99a7b7f276e12f14ee2e284d..1e21d5ac3a29d307be7a375c3ddb249c56c3d30c 100644 (file)
 #include "gdbsupport/common-defs.h"
 #include "aarch32.h"
 
-extern struct target_desc *tdesc_arm_with_neon;
+#include "../features/arm/arm-core.c"
+#include "../features/arm/arm-vfpv3.c"
 
 /* See aarch32.h.  */
 
 target_desc *
 aarch32_create_target_description ()
 {
-  return tdesc_arm_with_neon;
+  target_desc *tdesc = allocate_target_description ();
+
+#ifndef IN_PROCESS_AGENT
+  set_tdesc_architecture (tdesc, "arm");
+#endif
+
+  long regnum = 0;
+
+  regnum = create_feature_arm_arm_core (tdesc, regnum);
+  /* Create a vfpv3 feature, then a blank NEON feature.  */
+  regnum = create_feature_arm_arm_vfpv3 (tdesc, regnum);
+  tdesc_create_feature (tdesc, "org.gnu.gdb.arm.neon");
+
+  return tdesc;
 }
index 7a0f36e4c490705880d29e9fb541662cddf1782a..ea03dd1685a7674bc6361e849680ea2109015cfb 100644 (file)
 #include "gdbsupport/common-regcache.h"
 #include "arm.h"
 
-extern struct target_desc *tdesc_arm_with_vfpv2;
-extern struct target_desc *tdesc_arm_with_vfpv3;
-extern struct target_desc *tdesc_arm_with_iwmmxt;
-
-/* Temporary ifdef.  Will be removed when target descriptions are switched.  */
-#ifndef GDBSERVER
-extern struct target_desc *tdesc_arm_with_m;
-extern struct target_desc *tdesc_arm_with_m_vfp_d16;
-extern struct target_desc *tdesc_arm_with_m_fpa_layout;
-#endif
+#include "../features/arm/arm-core.c"
+#include "../features/arm/arm-vfpv2.c"
+#include "../features/arm/arm-vfpv3.c"
+#include "../features/arm/xscale-iwmmxt.c"
+#include "../features/arm/arm-m-profile.c"
+#include "../features/arm/arm-m-profile-with-fpa.c"
 
 /* See arm.h.  */
 
@@ -389,24 +385,41 @@ shifted_reg_val (struct regcache *regcache, unsigned long inst,
 target_desc *
 arm_create_target_description (arm_fp_type fp_type)
 {
+  target_desc *tdesc = allocate_target_description ();
+
+#ifndef IN_PROCESS_AGENT
+  if (fp_type == ARM_FP_TYPE_IWMMXT)
+    set_tdesc_architecture (tdesc, "iwmmxt");
+  else
+    set_tdesc_architecture (tdesc, "arm");
+#endif
+
+  long regnum = 0;
+
+  regnum = create_feature_arm_arm_core (tdesc, regnum);
+
   switch (fp_type)
     {
     case ARM_FP_TYPE_NONE:
-      return nullptr;
-/* Temporary ifdef.  Will be removed when target descriptions are switched.  */
-#ifndef GDBSERVER
+      break;
+
     case ARM_FP_TYPE_VFPV2:
-      return tdesc_arm_with_vfpv2;
+      regnum = create_feature_arm_arm_vfpv2 (tdesc, regnum);
+      break;
 
     case ARM_FP_TYPE_VFPV3:
-      return tdesc_arm_with_vfpv3;
+      regnum = create_feature_arm_arm_vfpv3 (tdesc, regnum);
+      break;
 
     case ARM_FP_TYPE_IWMMXT:
-      return tdesc_arm_with_iwmmxt;
-#endif
+      regnum = create_feature_arm_xscale_iwmmxt (tdesc, regnum);
+      break;
+
     default:
       error (_("Invalid Arm FP type: %d"), fp_type);
     }
+
+  return tdesc;
 }
 
 /* See arch/arm.h.  */
@@ -414,21 +427,32 @@ arm_create_target_description (arm_fp_type fp_type)
 target_desc *
 arm_create_mprofile_target_description (arm_m_profile_type m_type)
 {
+  target_desc *tdesc = allocate_target_description ();
+
+#ifndef IN_PROCESS_AGENT
+  set_tdesc_architecture (tdesc, "arm");
+#endif
+
+  long regnum = 0;
+
   switch (m_type)
     {
-/* Temporary ifdef.  Will be removed when target descriptions are switched.  */
-#ifndef GDBSERVER
     case ARM_M_TYPE_M_PROFILE:
-      return tdesc_arm_with_m;
+      regnum = create_feature_arm_arm_m_profile (tdesc, regnum);
+      break;
 
     case ARM_M_TYPE_VFP_D16:
-      return tdesc_arm_with_m_fpa_layout;
+      regnum = create_feature_arm_arm_m_profile (tdesc, regnum);
+      regnum = create_feature_arm_arm_vfpv2 (tdesc, regnum);
+      break;
 
     case ARM_M_TYPE_WITH_FPA:
-      return tdesc_arm_with_m_vfp_d16;
-#endif
+      regnum = create_feature_arm_arm_m_profile_with_fpa (tdesc, regnum);
+      break;
+
     default:
       error (_("Invalid Arm M type: %d"), m_type);
     }
-}
 
+  return tdesc;
+}
index 1b19b72ca1f5233aa2f8af6d8b64b26e45c09a82..1d655eab5ce62921a8e9e7799d8c0dea30bf7c64 100644 (file)
 #include "record-full.h"
 #include <algorithm>
 
-#include "features/arm/arm-with-m.c"
-#include "features/arm/arm-with-m-fpa-layout.c"
-#include "features/arm/arm-with-m-vfp-d16.c"
-#include "features/arm/arm-with-iwmmxt.c"
-#include "features/arm/arm-with-vfpv2.c"
-#include "features/arm/arm-with-vfpv3.c"
-#include "features/arm/arm-with-neon.c"
-
 #if GDB_SELF_TEST
 #include "gdbsupport/selftest.h"
 #endif
@@ -9451,15 +9443,6 @@ _initialize_arm_tdep (void)
                                  bfd_target_elf_flavour,
                                  arm_elf_osabi_sniffer);
 
-  /* Initialize the standard target descriptions.  */
-  initialize_tdesc_arm_with_m ();
-  initialize_tdesc_arm_with_m_fpa_layout ();
-  initialize_tdesc_arm_with_m_vfp_d16 ();
-  initialize_tdesc_arm_with_iwmmxt ();
-  initialize_tdesc_arm_with_vfpv2 ();
-  initialize_tdesc_arm_with_vfpv3 ();
-  initialize_tdesc_arm_with_neon ();
-
   /* Add root prefix command for all "set arm"/"show arm" commands.  */
   add_prefix_cmd ("arm", no_class, set_arm_command,
                  _("Various ARM-specific commands."),