Arm: Add read_description read funcs and use in GDB

Switch the Arm target to get target descriptions via arm_read_description
and aarch32_read_description, in the same style as other feature targets.
Add an enum to specify the different types - this will also be of use to
gdbserver in a later patch.

Under the hood return the same existing pre-feature target descriptions.

gdb/ChangeLog:

	* Makefile.in: Add new files.
	* aarch32-tdep.c: New file.
	* aarch32-tdep.h: New file.
	* aarch64-linux-nat.c (aarch64_linux_nat_target::read_description):
	Call aarch32_read_description.
	* arch/aarch32.c: New file.
	* arch/aarch32.h: New file.
	* arch/arm.c (arm_create_target_description)
	(arm_create_mprofile_target_description): New function.
	* arch/arm.h (arm_fp_type, arm_m_profile_type): New enum.
	(arm_create_target_description)
	(arm_create_mprofile_target_description): New declaration.
	* arm-fbsd-tdep.c (arm_fbsd_read_description_auxv): Call
	read_description functions.
	* arm-linux-nat.c (arm_linux_nat_target::read_description):
	Likewise.
	* arm-linux-tdep.c (arm_linux_core_read_description): Likewise.
	* arm-tdep.c (tdesc_arm_list): New variable.
	(arm_register_g_packet_guesses): Call create description functions.
	(arm_read_description) (arm_read_mprofile_description): New
	function.
	* arm-tdep.h (arm_read_description)
	(arm_read_mprofile_description): Add declaration.
	* configure.tgt: Add new files.
This commit is contained in:
Alan Hayward
2019-07-19 14:59:10 +01:00
parent 231097b03a
commit d105cce5dd
15 changed files with 309 additions and 31 deletions

View File

@@ -21,6 +21,17 @@
#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
/* See arm.h. */
int
@@ -372,3 +383,52 @@ shifted_reg_val (struct regcache *regcache, unsigned long inst,
return res & 0xffffffff;
}
/* See arch/arm.h. */
target_desc *
arm_create_target_description (arm_fp_type fp_type)
{
switch (fp_type)
{
case ARM_FP_TYPE_NONE:
return nullptr;
/* Temporary ifdef. Will be removed when target descriptions are switched. */
#ifndef GDBSERVER
case ARM_FP_TYPE_VFPV2:
return tdesc_arm_with_vfpv2;
case ARM_FP_TYPE_VFPV3:
return tdesc_arm_with_vfpv3;
case ARM_FP_TYPE_IWMMXT:
return tdesc_arm_with_iwmmxt;
#endif
default:
error (_("Invalid Arm FP type: %d"), fp_type);
}
}
/* See arch/arm.h. */
target_desc *
arm_create_mprofile_target_description (arm_m_profile_type m_type)
{
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;
case ARM_M_TYPE_VFP_D16:
return tdesc_arm_with_m_fpa_layout;
case ARM_M_TYPE_WITH_FPA:
return tdesc_arm_with_m_vfp_d16;
#endif
default:
error (_("Invalid Arm M type: %d"), m_type);
}
}