[2/7] New regs_info for aarch32
Commit Message
Hi Yao,
> 2015-08-04 Yao Qi <yao.qi@linaro.org>
>
> * configure.srv (srv_tgtobj): Add linux-aarch32-low.o.
> * linux-aarch32-low.c: New file.
> * linux-aarch32-low.h: New file.
> * linux-arm-low.c (arm_fill_gregset): Move it to
> linux-aarch32-low.c.
> (arm_store_gregset): Likewise.
> (arm_fill_vfpregset): Call arm_fill_vfpregset_num
> (arm_store_vfpregset): Call arm_store_vfpregset_num.
> (arm_arch_setup): Check if PTRACE_GETREGSET works.
> (regs_info): Rename to regs_info_arm.
> (arm_regs_info): Return regs_info_aarch32 if
> have_ptrace_getregset is 1 and target description is
> arm_with_neon or arm_with_vfpv3.
> (initialize_low_arch): Don't call init_registers_arm_with_neon.
> Call initialize_low_arch_aarch32 instead.
This patch is causing a GDBserver build failure on some versions
of GNU/Linux (the version we support is fairly old), but also on
relatively recent versions of Android as well.
The problem is that NT_ARM_VFP is not always defined. I tried
the attached patch, which I was a bit dubious about, but seems
to work ("info float" does not error out, and print a series of zeros),
but I'm not sure whether I'm exercising the code at all. The other
alternative I was thinking of was perhaps to just #ifndef out
the entry in aarch32_regsets that needs NT_ARM_VFP. It might be
cleaner, but I haven't tried it.
gdb/gdbserver/ChangeLog:
* linux-aarch32-low.c (NT_ARM_VFP): Define if not already defined.
WDYT?
Thanks!
Comments
On 11/08/15 20:40, Joel Brobecker wrote:
> This patch is causing a GDBserver build failure on some versions
> of GNU/Linux (the version we support is fairly old), but also on
> relatively recent versions of Android as well.
>
> The problem is that NT_ARM_VFP is not always defined. I tried
> the attached patch, which I was a bit dubious about, but seems
> to work ("info float" does not error out, and print a series of zeros),
> but I'm not sure whether I'm exercising the code at all. The other
> alternative I was thinking of was perhaps to just #ifndef out
> the entry in aarch32_regsets that needs NT_ARM_VFP. It might be
> cleaner, but I haven't tried it.
If kernel doesn't support NT_ARM_VFP, GDBserver
(linux-low.c:regsets_fetch_inferior_registers) can disable this
regset_info. On the other hand, if kernel is too old to support
PTRACE_GETREGSET, aarch32_regsets won't be used at all.
>
> gdb/gdbserver/ChangeLog:
>
> * linux-aarch32-low.c (NT_ARM_VFP): Define if not already defined.
>
Patch looks right to me.
> If kernel doesn't support NT_ARM_VFP, GDBserver
> (linux-low.c:regsets_fetch_inferior_registers) can disable this
> regset_info. On the other hand, if kernel is too old to support
> PTRACE_GETREGSET, aarch32_regsets won't be used at all.
>
> >
> >gdb/gdbserver/ChangeLog:
> >
> > * linux-aarch32-low.c (NT_ARM_VFP): Define if not already defined.
> >
>
> Patch looks right to me.
Thank you, Yao. Patch pushed!
From 6c3cc336283db01c11a89bdbfdb70cc90a7b5d3e Mon Sep 17 00:00:00 2001
From: Joel Brobecker <brobecker@adacore.com>
Date: Tue, 11 Aug 2015 15:28:19 -0400
Subject: [PATCH] gdbserver/linux-aarch32-low: build failure when NT_ARM_VFP
not defined
On some older versions of GNU/Linux, gdbserver now fails to build
due to an undefined reference to NT_ARM_VFP. Same issue on Android,
where this macros is undefined until Android API level 21 (Android
5.0 "Lollipop").
This patch modifies linux-aarch32-low.c to define that macros when
not already defined.
gdb/gdbserver/ChangeLog:
* linux-aarch32-low.c (NT_ARM_VFP): Define if not already defined.
---
gdb/gdbserver/linux-aarch32-low.c | 6 ++++++
1 file changed, 6 insertions(+)
@@ -27,6 +27,12 @@
#include <elf.h>
#endif
+/* Some older versions of GNU/Linux and Android do not define
+ the following macros. */
+#ifndef NT_ARM_VFP
+#define NT_ARM_VFP 0x400
+#endif
+
/* Collect GP registers from REGCACHE to buffer BUF. */
void
--
2.1.4