Index: sys/arm/arm/vfp.c =================================================================== --- sys/arm/arm/vfp.c +++ sys/arm/arm/vfp.c @@ -33,9 +33,11 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -115,6 +117,7 @@ vfp_exists = 1; is_d32 = 0; PCPU_SET(vfpsid, fpsid); /* save the fpsid */ + elf32_hwcap |= HWCAP_ARM_VFP; vfp_arch = (fpsid & VFPSID_SUBVERSION2_MASK) >> VFPSID_SUBVERSION_OFF; @@ -122,9 +125,13 @@ if (vfp_arch >= VFP_ARCH3) { tmp = fmrx(mvfr0); PCPU_SET(vfpmvfr0, tmp); + elf32_hwcap |= HWCAP_ARM_VFPv3; - if ((tmp & VMVFR0_RB_MASK) == 2) + if ((tmp & VMVFR0_RB_MASK) == 2) { + elf32_hwcap |= HWCAP_ARM_VFPD32; is_d32 = 1; + } else + elf32_hwcap |= HWCAP_ARM_VFPv3D16; tmp = fmrx(mvfr1); PCPU_SET(vfpmvfr1, tmp); Index: sys/arm/include/elf.h =================================================================== --- sys/arm/include/elf.h +++ sys/arm/include/elf.h @@ -115,4 +115,10 @@ #define ET_DYN_LOAD_ADDR 0x12000 +/* Flags passed in AT_HWCAP. */ +#define HWCAP_ARM_VFP 0x00000040 +#define HWCAP_ARM_VFPv3 0x00000200 +#define HWCAP_ARM_VFPv3D16 0x00000400 +#define HWCAP_ARM_VFPD32 0x00080000 + #endif /* !_MACHINE_ELF_H_ */