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:
Alan Hayward 2019-06-25 11:04:59 +01:00
parent 9fb4c7e9f0
commit 166a82be89
4 changed files with 39 additions and 46 deletions

View File

@ -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.

View File

@ -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 ();

View File

@ -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.

View File

@ -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;