Page MenuHomeFreeBSD

D12291.id.diff
No OneTemporary

D12291.id.diff

Index: head/sys/arm/arm/elf_machdep.c
===================================================================
--- head/sys/arm/arm/elf_machdep.c
+++ head/sys/arm/arm/elf_machdep.c
@@ -48,6 +48,8 @@
static boolean_t elf32_arm_abi_supported(struct image_params *);
+u_long elf_hwcap;
+
struct sysentvec elf32_freebsd_sysvec = {
.sv_size = SYS_MAXSYSCALL,
.sv_table = sysent,
@@ -86,6 +88,7 @@
.sv_schedtail = NULL,
.sv_thread_detach = NULL,
.sv_trap = NULL,
+ .sv_hwcap = &elf_hwcap,
};
INIT_SYSENTVEC(elf32_sysvec, &elf32_freebsd_sysvec);
Index: head/sys/arm/arm/vfp.c
===================================================================
--- head/sys/arm/arm/vfp.c
+++ head/sys/arm/arm/vfp.c
@@ -33,9 +33,11 @@
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/proc.h>
+#include <sys/imgact_elf.h>
#include <sys/kernel.h>
#include <machine/armreg.h>
+#include <machine/elf.h>
#include <machine/frame.h>
#include <machine/md_var.h>
#include <machine/pcb.h>
@@ -115,6 +117,7 @@
vfp_exists = 1;
is_d32 = 0;
PCPU_SET(vfpsid, fpsid); /* save the fpsid */
+ elf_hwcap |= HWCAP_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);
+ elf_hwcap |= HWCAP_VFPv3;
- if ((tmp & VMVFR0_RB_MASK) == 2)
+ if ((tmp & VMVFR0_RB_MASK) == 2) {
+ elf_hwcap |= HWCAP_VFPD32;
is_d32 = 1;
+ } else
+ elf_hwcap |= HWCAP_VFPv3D16;
tmp = fmrx(mvfr1);
PCPU_SET(vfpmvfr1, tmp);
Index: head/sys/arm/include/elf.h
===================================================================
--- head/sys/arm/include/elf.h
+++ head/sys/arm/include/elf.h
@@ -115,4 +115,10 @@
#define ET_DYN_LOAD_ADDR 0x12000
+/* Flags passed in AT_HWCAP. */
+#define HWCAP_VFP 0x00000040
+#define HWCAP_VFPv3 0x00000200
+#define HWCAP_VFPv3D16 0x00000400
+#define HWCAP_VFPD32 0x00080000
+
#endif /* !_MACHINE_ELF_H_ */
Index: head/sys/arm/include/md_var.h
===================================================================
--- head/sys/arm/include/md_var.h
+++ head/sys/arm/include/md_var.h
@@ -38,6 +38,7 @@
extern int szsigcode;
extern uint32_t *vm_page_dump;
extern int vm_page_dump_size;
+extern u_long elf_hwcap;
extern int (*_arm_memcpy)(void *, void *, int, int);
extern int (*_arm_bzero)(void *, int, int);

File Metadata

Mime Type
text/plain
Expires
Sat, Feb 7, 1:26 AM (39 m, 14 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28451937
Default Alt Text
D12291.id.diff (2 KB)

Event Timeline