static void arm_arch_setup (void) { arm_hwcap = 0; if (arm_get_hwcap (&arm_hwcap) == 0) { init_registers_arm (); return; } /* gdbserver assumes that only one of VFP or IWMMXT is available, which may not be true. In that case, gdbserver fails at run-time with "Unknown register d0 requested". For now, pretend IWMMXT is missing when both are available. */ if ((arm_hwcap & HWCAP_VFP) && (arm_hwcap & HWCAP_IWMMXT)) arm_hwcap &= ~HWCAP_IWMMXT; if (arm_hwcap & HWCAP_IWMMXT) { init_registers_arm_with_iwmmxt (); return; } if (arm_hwcap & HWCAP_VFP) { int pid; char *buf; /* NEON implies either no VFP, or VFPv3-D32. We only support it with VFP. */ if (arm_hwcap & HWCAP_NEON) init_registers_arm_with_neon (); else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3) init_registers_arm_with_vfpv3 (); else init_registers_arm_with_vfpv2 (); /* Now make sure that the kernel supports reading these registers. Support was added in 2.6.30. */ pid = lwpid_of (get_thread_lwp (current_inferior)); errno = 0; buf = malloc (32 * 8 + 4); if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0 && errno == EIO) { arm_hwcap = 0; init_registers_arm (); } free (buf); return; } /* The default configuration uses legacy FPA registers, probably simulated. */ init_registers_arm (); }
void initialize_low_arch (void) { /* Initialize the Linux target descriptions. */ init_registers_arm (); init_registers_arm_with_iwmmxt (); init_registers_arm_with_vfpv2 (); init_registers_arm_with_vfpv3 (); init_registers_arm_with_neon (); initialize_regsets_info (&arm_regsets_info); }
static void arm_arch_setup (void) { arm_hwcap = 0; if (arm_get_hwcap (&arm_hwcap) == 0) { init_registers_arm (); return; } if (arm_hwcap & HWCAP_IWMMXT) { init_registers_arm_with_iwmmxt (); return; } if (arm_hwcap & HWCAP_VFP) { int pid; char *buf; /* NEON implies either no VFP, or VFPv3-D32. We only support it with VFP. */ if (arm_hwcap & HWCAP_NEON) init_registers_arm_with_neon (); else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3) init_registers_arm_with_vfpv3 (); else init_registers_arm_with_vfpv2 (); /* Now make sure that the kernel supports reading these registers. Support was added in 2.6.30. */ pid = lwpid_of (get_thread_lwp (current_inferior)); errno = 0; buf = malloc (32 * 8 + 4); if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0 && errno == EIO) { arm_hwcap = 0; init_registers_arm (); } free (buf); return; } /* The default configuration uses legacy FPA registers, probably simulated. */ init_registers_arm (); }