Arm: Minor style cleanups
*When reading a target description, do the ptrace check before picking the target description. *In wmmxregset functions, declare the counter inside the for. *Call arm_linux_init_hwbp_cap from in arm_arch_setup - it doesn't belong in arm_read_description. gdb/ChangeLog: * arm-linux-nat.c (arm_linux_nat_target::read_description): Check ptrace earlier, gdb/gdbserver/ChangeLog: * linux-arm-low.c (arm_fill_wmmxregset, arm_store_wmmxregset): Move counter inside for. (arm_read_description): Check ptrace earlier. (arm_arch_setup): Call arm_linux_init_hwbp_cap here.
This commit is contained in:
parent
9fb4c7e9f0
commit
166a82be89
@ -1,3 +1,8 @@
|
||||
2019-07-10 Alan Hayward <alan.hayward@arm.com>
|
||||
|
||||
* arm-linux-nat.c (arm_linux_nat_target::read_description): Check
|
||||
ptrace earlier.
|
||||
|
||||
2019-07-10 Alan Hayward <alan.hayward@arm.com>
|
||||
|
||||
* features/aarch64-pauth.c: Regenerate.
|
||||
|
@ -555,29 +555,22 @@ arm_linux_nat_target::read_description ()
|
||||
|
||||
if (arm_hwcap & HWCAP_VFP)
|
||||
{
|
||||
int pid;
|
||||
char *buf;
|
||||
const struct target_desc * result = NULL;
|
||||
/* Make sure that the kernel supports reading VFP registers. Support was
|
||||
added in 2.6.30. */
|
||||
int pid = inferior_ptid.lwp ();
|
||||
errno = 0;
|
||||
char *buf = (char *) alloca (ARM_VFP3_REGS_SIZE);
|
||||
if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0 && errno == EIO)
|
||||
return nullptr;
|
||||
|
||||
/* NEON implies VFPv3-D32 or no-VFP unit. Say that we only support
|
||||
Neon with VFPv3-D32. */
|
||||
if (arm_hwcap & HWCAP_NEON)
|
||||
result = tdesc_arm_with_neon;
|
||||
return tdesc_arm_with_neon;
|
||||
else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
|
||||
result = tdesc_arm_with_vfpv3;
|
||||
return tdesc_arm_with_vfpv3;
|
||||
else
|
||||
result = tdesc_arm_with_vfpv2;
|
||||
|
||||
/* Now make sure that the kernel supports reading these
|
||||
registers. Support was added in 2.6.30. */
|
||||
pid = inferior_ptid.lwp ();
|
||||
errno = 0;
|
||||
buf = (char *) alloca (ARM_VFP3_REGS_SIZE);
|
||||
if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0
|
||||
&& errno == EIO)
|
||||
result = NULL;
|
||||
|
||||
return result;
|
||||
return tdesc_arm_with_vfpv2;
|
||||
}
|
||||
|
||||
return this->beneath ()->read_description ();
|
||||
|
@ -1,3 +1,10 @@
|
||||
2019-07-10 Alan Hayward <alan.hayward@arm.com>
|
||||
|
||||
* linux-arm-low.c (arm_fill_wmmxregset, arm_store_wmmxregset):
|
||||
Move counter inside for.
|
||||
(arm_read_description): Check ptrace earlier.
|
||||
(arm_arch_setup): Call arm_linux_init_hwbp_cap here.
|
||||
|
||||
2019-07-09 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* configure: Rebuild.
|
||||
|
@ -175,16 +175,14 @@ arm_cannot_fetch_register (int regno)
|
||||
static void
|
||||
arm_fill_wmmxregset (struct regcache *regcache, void *buf)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (regcache->tdesc != tdesc_arm_with_iwmmxt)
|
||||
return;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
for (int i = 0; i < 16; i++)
|
||||
collect_register (regcache, arm_num_regs + i, (char *) buf + i * 8);
|
||||
|
||||
/* We only have access to wcssf, wcasf, and wcgr0-wcgr3. */
|
||||
for (i = 0; i < 6; i++)
|
||||
for (int i = 0; i < 6; i++)
|
||||
collect_register (regcache, arm_num_regs + i + 16,
|
||||
(char *) buf + 16 * 8 + i * 4);
|
||||
}
|
||||
@ -192,16 +190,14 @@ arm_fill_wmmxregset (struct regcache *regcache, void *buf)
|
||||
static void
|
||||
arm_store_wmmxregset (struct regcache *regcache, const void *buf)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (regcache->tdesc != tdesc_arm_with_iwmmxt)
|
||||
return;
|
||||
|
||||
for (i = 0; i < 16; i++)
|
||||
for (int i = 0; i < 16; i++)
|
||||
supply_register (regcache, arm_num_regs + i, (char *) buf + i * 8);
|
||||
|
||||
/* We only have access to wcssf, wcasf, and wcgr0-wcgr3. */
|
||||
for (i = 0; i < 6; i++)
|
||||
for (int i = 0; i < 6; i++)
|
||||
supply_register (regcache, arm_num_regs + i + 16,
|
||||
(char *) buf + 16 * 8 + i * 4);
|
||||
}
|
||||
@ -850,40 +846,29 @@ get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
|
||||
static const struct target_desc *
|
||||
arm_read_description (void)
|
||||
{
|
||||
int pid = lwpid_of (current_thread);
|
||||
unsigned long arm_hwcap = linux_get_hwcap (4);
|
||||
|
||||
/* Query hardware watchpoint/breakpoint capabilities. */
|
||||
arm_linux_init_hwbp_cap (pid);
|
||||
|
||||
if (arm_hwcap & HWCAP_IWMMXT)
|
||||
return tdesc_arm_with_iwmmxt;
|
||||
|
||||
if (arm_hwcap & HWCAP_VFP)
|
||||
{
|
||||
const struct target_desc *result;
|
||||
char *buf;
|
||||
/* Make sure that the kernel supports reading VFP registers. Support was
|
||||
added in 2.6.30. */
|
||||
int pid = lwpid_of (current_thread);
|
||||
errno = 0;
|
||||
char *buf = (char *) alloca (ARM_VFP3_REGS_SIZE);
|
||||
if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0 && errno == EIO)
|
||||
return tdesc_arm;
|
||||
|
||||
/* NEON implies either no VFP, or VFPv3-D32. We only support
|
||||
it with VFP. */
|
||||
if (arm_hwcap & HWCAP_NEON)
|
||||
result = tdesc_arm_with_neon;
|
||||
return tdesc_arm_with_neon;
|
||||
else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
|
||||
result = tdesc_arm_with_vfpv3;
|
||||
return tdesc_arm_with_vfpv3;
|
||||
else
|
||||
result = tdesc_arm_with_vfpv2;
|
||||
|
||||
/* Now make sure that the kernel supports reading these
|
||||
registers. Support was added in 2.6.30. */
|
||||
errno = 0;
|
||||
buf = (char *) xmalloc (ARM_VFP3_REGS_SIZE);
|
||||
if (ptrace (PTRACE_GETVFPREGS, pid, 0, buf) < 0
|
||||
&& errno == EIO)
|
||||
result = tdesc_arm;
|
||||
|
||||
free (buf);
|
||||
|
||||
return result;
|
||||
return tdesc_arm_with_vfpv2;
|
||||
}
|
||||
|
||||
/* The default configuration uses legacy FPA registers, probably
|
||||
@ -898,6 +883,9 @@ arm_arch_setup (void)
|
||||
int gpregs[18];
|
||||
struct iovec iov;
|
||||
|
||||
/* Query hardware watchpoint/breakpoint capabilities. */
|
||||
arm_linux_init_hwbp_cap (tid);
|
||||
|
||||
current_process ()->tdesc = arm_read_description ();
|
||||
|
||||
iov.iov_base = gpregs;
|
||||
|
Loading…
Reference in New Issue
Block a user