* arm-linux-tdep.c: Include "auxv.h".

(AT_HWCAP): Define.
	(ARM_LINUX_SIZEOF_VFP): Define.
	(arm_linux_supply_vfp): New function.
	(arm_linux_collect_vfp): Likewise.
	(arm_linux_regset_from_core_section): Handle .reg-arm-vfp sections.
	(arm_linux_fpa_regset_sections): New variable.
	(arm_linux_vfp_regset_sections): Likewise.
	(arm_linux_core_read_description): New function.
	(arm_linux_init_abi): Install arm_linux_core_read_description and
	arm_linux_fpa_regset_sections or arm_linux_vfp_regset_sections as
	appropriate for the architecture.
	* arm-tdep.h (struct gdbarch_tdep): Add member "vfpregset".
	(tdesc_arm_with_m): Declare.
	(tdesc_arm_with_iwmmxt): Likewise.
	(tdesc_arm_with_vfpv2): Likewise.
	(tdesc_arm_with_vfpv3): Likewise.
	(tdesc_arm_with_neon): Likewise.
	* arm-linux-nat.c: Move features/*.c includes ...
	* arm-tdep.c: ... here.
	* arm-linux-nat.c (arm_linux_read_description): Move initializing
	target description data structures ...
	* arm-tdep.c (_initialize_arm_tdep): ... here.
	* arm-linux-nat.c (HWCAP_VFP, HWCAP_IWMMXT, HWCAP_NEON, HWCAP_VFPv3,
	HWCAP_VFPv3D16): Move definitions ...
	* arm-linux-tdep.h: ... here.
This commit is contained in:
Ulrich Weigand
2011-06-15 16:39:28 +00:00
parent faa9a424ea
commit ef7e8358ec
6 changed files with 155 additions and 21 deletions

View File

@ -44,11 +44,6 @@
/* Defines ps_err_e, struct ps_prochandle. */
#include "gdb_proc_service.h"
#include "features/arm-with-iwmmxt.c"
#include "features/arm-with-vfpv2.c"
#include "features/arm-with-vfpv3.c"
#include "features/arm-with-neon.c"
#ifndef PTRACE_GET_THREAD_AREA
#define PTRACE_GET_THREAD_AREA 22
#endif
@ -68,13 +63,6 @@
#define PTRACE_SETHBPREGS 30
#endif
/* These are in <asm/elf.h> in current kernels. */
#define HWCAP_VFP 64
#define HWCAP_IWMMXT 512
#define HWCAP_NEON 4096
#define HWCAP_VFPv3 8192
#define HWCAP_VFPv3D16 16384
/* A flag for whether the WMMX registers are available. */
static int arm_linux_has_wmmx_registers;
@ -696,8 +684,6 @@ arm_linux_read_description (struct target_ops *ops)
if (arm_hwcap & HWCAP_IWMMXT)
{
arm_linux_has_wmmx_registers = 1;
if (tdesc_arm_with_iwmmxt == NULL)
initialize_tdesc_arm_with_iwmmxt ();
return tdesc_arm_with_iwmmxt;
}
@ -712,22 +698,16 @@ arm_linux_read_description (struct target_ops *ops)
if (arm_hwcap & HWCAP_NEON)
{
arm_linux_vfp_register_count = 32;
if (tdesc_arm_with_neon == NULL)
initialize_tdesc_arm_with_neon ();
result = tdesc_arm_with_neon;
}
else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
{
arm_linux_vfp_register_count = 32;
if (tdesc_arm_with_vfpv3 == NULL)
initialize_tdesc_arm_with_vfpv3 ();
result = tdesc_arm_with_vfpv3;
}
else
{
arm_linux_vfp_register_count = 16;
if (tdesc_arm_with_vfpv2 == NULL)
initialize_tdesc_arm_with_vfpv2 ();
result = tdesc_arm_with_vfpv2;
}