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>
|
2019-07-10 Alan Hayward <alan.hayward@arm.com>
|
||||||
|
|
||||||
* features/aarch64-pauth.c: Regenerate.
|
* features/aarch64-pauth.c: Regenerate.
|
||||||
|
@ -555,29 +555,22 @@ arm_linux_nat_target::read_description ()
|
|||||||
|
|
||||||
if (arm_hwcap & HWCAP_VFP)
|
if (arm_hwcap & HWCAP_VFP)
|
||||||
{
|
{
|
||||||
int pid;
|
/* Make sure that the kernel supports reading VFP registers. Support was
|
||||||
char *buf;
|
added in 2.6.30. */
|
||||||
const struct target_desc * result = NULL;
|
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 implies VFPv3-D32 or no-VFP unit. Say that we only support
|
||||||
Neon with VFPv3-D32. */
|
Neon with VFPv3-D32. */
|
||||||
if (arm_hwcap & HWCAP_NEON)
|
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)
|
else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
|
||||||
result = tdesc_arm_with_vfpv3;
|
return tdesc_arm_with_vfpv3;
|
||||||
else
|
else
|
||||||
result = tdesc_arm_with_vfpv2;
|
return 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 this->beneath ()->read_description ();
|
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>
|
2019-07-09 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* configure: Rebuild.
|
* configure: Rebuild.
|
||||||
|
@ -175,16 +175,14 @@ arm_cannot_fetch_register (int regno)
|
|||||||
static void
|
static void
|
||||||
arm_fill_wmmxregset (struct regcache *regcache, void *buf)
|
arm_fill_wmmxregset (struct regcache *regcache, void *buf)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
if (regcache->tdesc != tdesc_arm_with_iwmmxt)
|
if (regcache->tdesc != tdesc_arm_with_iwmmxt)
|
||||||
return;
|
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);
|
collect_register (regcache, arm_num_regs + i, (char *) buf + i * 8);
|
||||||
|
|
||||||
/* We only have access to wcssf, wcasf, and wcgr0-wcgr3. */
|
/* 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,
|
collect_register (regcache, arm_num_regs + i + 16,
|
||||||
(char *) buf + 16 * 8 + i * 4);
|
(char *) buf + 16 * 8 + i * 4);
|
||||||
}
|
}
|
||||||
@ -192,16 +190,14 @@ arm_fill_wmmxregset (struct regcache *regcache, void *buf)
|
|||||||
static void
|
static void
|
||||||
arm_store_wmmxregset (struct regcache *regcache, const void *buf)
|
arm_store_wmmxregset (struct regcache *regcache, const void *buf)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
|
|
||||||
if (regcache->tdesc != tdesc_arm_with_iwmmxt)
|
if (regcache->tdesc != tdesc_arm_with_iwmmxt)
|
||||||
return;
|
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);
|
supply_register (regcache, arm_num_regs + i, (char *) buf + i * 8);
|
||||||
|
|
||||||
/* We only have access to wcssf, wcasf, and wcgr0-wcgr3. */
|
/* 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,
|
supply_register (regcache, arm_num_regs + i + 16,
|
||||||
(char *) buf + 16 * 8 + i * 4);
|
(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 *
|
static const struct target_desc *
|
||||||
arm_read_description (void)
|
arm_read_description (void)
|
||||||
{
|
{
|
||||||
int pid = lwpid_of (current_thread);
|
|
||||||
unsigned long arm_hwcap = linux_get_hwcap (4);
|
unsigned long arm_hwcap = linux_get_hwcap (4);
|
||||||
|
|
||||||
/* Query hardware watchpoint/breakpoint capabilities. */
|
|
||||||
arm_linux_init_hwbp_cap (pid);
|
|
||||||
|
|
||||||
if (arm_hwcap & HWCAP_IWMMXT)
|
if (arm_hwcap & HWCAP_IWMMXT)
|
||||||
return tdesc_arm_with_iwmmxt;
|
return tdesc_arm_with_iwmmxt;
|
||||||
|
|
||||||
if (arm_hwcap & HWCAP_VFP)
|
if (arm_hwcap & HWCAP_VFP)
|
||||||
{
|
{
|
||||||
const struct target_desc *result;
|
/* Make sure that the kernel supports reading VFP registers. Support was
|
||||||
char *buf;
|
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
|
/* NEON implies either no VFP, or VFPv3-D32. We only support
|
||||||
it with VFP. */
|
it with VFP. */
|
||||||
if (arm_hwcap & HWCAP_NEON)
|
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)
|
else if ((arm_hwcap & (HWCAP_VFPv3 | HWCAP_VFPv3D16)) == HWCAP_VFPv3)
|
||||||
result = tdesc_arm_with_vfpv3;
|
return tdesc_arm_with_vfpv3;
|
||||||
else
|
else
|
||||||
result = tdesc_arm_with_vfpv2;
|
return 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The default configuration uses legacy FPA registers, probably
|
/* The default configuration uses legacy FPA registers, probably
|
||||||
@ -898,6 +883,9 @@ arm_arch_setup (void)
|
|||||||
int gpregs[18];
|
int gpregs[18];
|
||||||
struct iovec iov;
|
struct iovec iov;
|
||||||
|
|
||||||
|
/* Query hardware watchpoint/breakpoint capabilities. */
|
||||||
|
arm_linux_init_hwbp_cap (tid);
|
||||||
|
|
||||||
current_process ()->tdesc = arm_read_description ();
|
current_process ()->tdesc = arm_read_description ();
|
||||||
|
|
||||||
iov.iov_base = gpregs;
|
iov.iov_base = gpregs;
|
||||||
|
Loading…
Reference in New Issue
Block a user