summaryrefslogtreecommitdiff
path: root/gdb/arch
diff options
context:
space:
mode:
authorAlan Hayward <alan.hayward@arm.com>2019-07-19 15:01:11 +0100
committerAlan Hayward <alan.hayward@arm.com>2019-07-19 15:01:11 +0100
commitf29ec966436f98e761f7a2a7183ad8ebab68c2ea (patch)
tree90b0a56047a91f0a50e378c2c21db2f33f8c3aa6 /gdb/arch
parentd105cce5dd8d6a5218b044fc161ce89c6b245432 (diff)
downloadbinutils-gdb-f29ec966436f98e761f7a2a7183ad8ebab68c2ea.tar.gz
Arm: Use feature target descriptions
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.
Diffstat (limited to 'gdb/arch')
-rw-r--r--gdb/arch/aarch32.c18
-rw-r--r--gdb/arch/arm.c72
2 files changed, 64 insertions, 26 deletions
diff --git a/gdb/arch/aarch32.c b/gdb/arch/aarch32.c
index 14d6987d3f0..1e21d5ac3a2 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 7a0f36e4c49..ea03dd1685a 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;
+}