[2/7] New regs_info for aarch32

Message ID 20150811194012.GA19956@adacore.com
State New, archived
Headers

Commit Message

Joel Brobecker Aug. 11, 2015, 7:40 p.m. UTC
  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

Yao Qi Aug. 18, 2015, 3:21 p.m. UTC | #1
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.
  
Joel Brobecker Aug. 18, 2015, 10:42 p.m. UTC | #2
> 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!
  

Patch

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(+)

diff --git a/gdb/gdbserver/linux-aarch32-low.c b/gdb/gdbserver/linux-aarch32-low.c
index 7f3b985..5876b13 100644
--- a/gdb/gdbserver/linux-aarch32-low.c
+++ b/gdb/gdbserver/linux-aarch32-low.c
@@ -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