aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/arch/aarch32.c18
-rw-r--r--gdb/arch/arm.c72
-rw-r--r--gdb/arm-tdep.c17
4 files changed, 72 insertions, 43 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index d5012b7..994e0ef 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
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.
* aarch32-tdep.c: New file.
* aarch32-tdep.h: New file.
diff --git a/gdb/arch/aarch32.c b/gdb/arch/aarch32.c
index 14d6987..1e21d5a 100644
--- a/gdb/arch/aarch32.c
+++ b/gdb/arch/aarch32.c
@@ -18,12 +18,26 @@
#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;
}
diff --git a/gdb/arch/arm.c b/gdb/arch/arm.c
index 7a0f36e..ea03dd1 100644
--- a/gdb/arch/arm.c
+++ b/gdb/arch/arm.c
@@ -21,16 +21,12 @@
#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;
+}
diff --git a/gdb/arm-tdep.c b/gdb/arm-tdep.c
index 1b19b72..1d655ea 100644
--- a/gdb/arm-tdep.c
+++ b/gdb/arm-tdep.c
@@ -61,14 +61,6 @@
#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."),