* Re: [PATCH] Make ARM/Linux build on current glibc
2001-10-31 10:18 ` Mark Kettenis
@ 2001-10-31 10:57 ` Daniel Jacobowitz
2001-11-07 8:22 ` Daniel Jacobowitz
1 sibling, 0 replies; 6+ messages in thread
From: Daniel Jacobowitz @ 2001-10-31 10:57 UTC (permalink / raw)
To: Mark Kettenis; +Cc: gdb-patches
On Wed, Oct 31, 2001 at 07:18:27PM +0100, Mark Kettenis wrote:
> Date: Wed, 31 Oct 2001 11:20:35 -0500
> From: Daniel Jacobowitz <drow@mvista.com>
>
> On Wed, Oct 31, 2001 at 05:12:40PM +0100, Mark Kettenis wrote:
> > Daniel Jacobowitz <drow@mvista.com> writes:
> >
> > > On Wed, Oct 31, 2001 at 10:57:47AM -0500, Daniel Jacobowitz wrote:
> > > > <sys/user.h> no longer includes <asm/ptrace.h>. If we want it, we've got to
> > > > get it ourselves.
> > >
> > > Right... include the patch..
> > >
> > > Committed as obvious.
> >
> > In principle we shouldn't include any <asm/*> on Linux. Why do you
> > need to include <asm/ptrace.h>?
>
> Because <sys/user.h> used to and no longer does. If you prefer I can
> define the structure (pt_regs) in the file itself.
>
> Ah, I missed `struct pt_regs'. Hmm. On the i386 ptrace(PTRACE_GETREGS,...)
> doesn't return a `struct pt_regs'.
>
> <sys/user.h> now uses a "struct user_regs" instead, but we can't use
> that without requiring glibc 2.2.x.
>
> I'd use elf_gregset_t instead. Should work with all versions of glibc
> as long as you include <sys/procfs.h>. Looks like there's quite a bit
> of redundant code in arm-linux-nat.c. Feel free to clean it up a bit :-).
I guess an elf_gregset_t should work in all cases. I'll try that and
commit later today. It looks as if it's always the right size.
Cleaning it up is buried somewhere on my todo list, since I'm not
especially fond of ARM :)
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] Make ARM/Linux build on current glibc
2001-10-31 10:18 ` Mark Kettenis
2001-10-31 10:57 ` Daniel Jacobowitz
@ 2001-11-07 8:22 ` Daniel Jacobowitz
1 sibling, 0 replies; 6+ messages in thread
From: Daniel Jacobowitz @ 2001-11-07 8:22 UTC (permalink / raw)
To: Mark Kettenis; +Cc: gdb-patches
On Wed, Oct 31, 2001 at 07:18:27PM +0100, Mark Kettenis wrote:
> Ah, I missed `struct pt_regs'. Hmm. On the i386 ptrace(PTRACE_GETREGS,...)
> doesn't return a `struct pt_regs'.
>
> <sys/user.h> now uses a "struct user_regs" instead, but we can't use
> that without requiring glibc 2.2.x.
>
> I'd use elf_gregset_t instead. Should work with all versions of glibc
> as long as you include <sys/procfs.h>. Looks like there's quite a bit
> of redundant code in arm-linux-nat.c. Feel free to clean it up a bit :-).
Committed the attached. My testsuite runs are abysmal, because I crash
in one of the floatformat functions, but I think that may be an issue
with my tools - this machine has no hardware floating point, and yet
the compiler generated an FP move for ldexp()'s return value.
--
Daniel Jacobowitz Carnegie Mellon University
MontaVista Software Debian GNU/Linux Developer
2001-11-17 Daniel Jacobowitz <drow@mvista.com>
* arm-linux-nat.c: Don't include <asm/ptrace.h>.
(fetch_register): Use elf_gregset_t instead of struct pt_regs.
(fetch_regs): Likewise.
(store_register): Likewise.
(store_regs): Likewise.
Index: gdb/arm-linux-nat.c
===================================================================
RCS file: /cvs/src/src/gdb/arm-linux-nat.c,v
retrieving revision 1.13
diff -u -p -r1.13 arm-linux-nat.c
--- arm-linux-nat.c 2001/10/31 15:56:33 1.13
+++ arm-linux-nat.c 2001/11/17 16:33:00
@@ -29,8 +29,6 @@
#include <sys/utsname.h>
#include <sys/procfs.h>
-#include <asm/ptrace.h>
-
/* Prototypes for supply_gregset etc. */
#include "gregset.h"
@@ -397,7 +395,7 @@ static void
fetch_register (int regno)
{
int ret, tid;
- struct pt_regs regs;
+ elf_gregset_t regs;
/* Get the thread id for the ptrace call. */
tid = GET_THREAD_ID (inferior_ptid);
@@ -410,20 +408,20 @@ fetch_register (int regno)
}
if (regno >= A1_REGNUM && regno < PC_REGNUM)
- supply_register (regno, (char *) ®s.uregs[regno]);
+ supply_register (regno, (char *) ®s[regno]);
if (PS_REGNUM == regno)
{
if (arm_apcs_32)
- supply_register (PS_REGNUM, (char *) ®s.uregs[CPSR_REGNUM]);
+ supply_register (PS_REGNUM, (char *) ®s[CPSR_REGNUM]);
else
- supply_register (PS_REGNUM, (char *) ®s.uregs[PC_REGNUM]);
+ supply_register (PS_REGNUM, (char *) ®s[PC_REGNUM]);
}
if (PC_REGNUM == regno)
{
- regs.uregs[PC_REGNUM] = ADDR_BITS_REMOVE (regs.uregs[PC_REGNUM]);
- supply_register (PC_REGNUM, (char *) ®s.uregs[PC_REGNUM]);
+ regs[PC_REGNUM] = ADDR_BITS_REMOVE (regs[PC_REGNUM]);
+ supply_register (PC_REGNUM, (char *) ®s[PC_REGNUM]);
}
}
@@ -434,7 +432,7 @@ static void
fetch_regs (void)
{
int ret, regno, tid;
- struct pt_regs regs;
+ elf_gregset_t regs;
/* Get the thread id for the ptrace call. */
tid = GET_THREAD_ID (inferior_ptid);
@@ -447,15 +445,15 @@ fetch_regs (void)
}
for (regno = A1_REGNUM; regno < PC_REGNUM; regno++)
- supply_register (regno, (char *) ®s.uregs[regno]);
+ supply_register (regno, (char *) ®s[regno]);
if (arm_apcs_32)
- supply_register (PS_REGNUM, (char *) ®s.uregs[CPSR_REGNUM]);
+ supply_register (PS_REGNUM, (char *) ®s[CPSR_REGNUM]);
else
- supply_register (PS_REGNUM, (char *) ®s.uregs[PC_REGNUM]);
+ supply_register (PS_REGNUM, (char *) ®s[PC_REGNUM]);
- regs.uregs[PC_REGNUM] = ADDR_BITS_REMOVE (regs.uregs[PC_REGNUM]);
- supply_register (PC_REGNUM, (char *) ®s.uregs[PC_REGNUM]);
+ regs[PC_REGNUM] = ADDR_BITS_REMOVE (regs[PC_REGNUM]);
+ supply_register (PC_REGNUM, (char *) ®s[PC_REGNUM]);
}
/* Store all general registers of the process from the values in
@@ -465,7 +463,7 @@ static void
store_register (int regno)
{
int ret, tid;
- struct pt_regs regs;
+ elf_gregset_t regs;
if (!register_valid[regno])
return;
@@ -482,7 +480,7 @@ store_register (int regno)
}
if (regno >= A1_REGNUM && regno <= PC_REGNUM)
- read_register_gen (regno, (char *) ®s.uregs[regno]);
+ read_register_gen (regno, (char *) ®s[regno]);
ret = ptrace (PTRACE_SETREGS, tid, 0, ®s);
if (ret < 0)
@@ -496,7 +494,7 @@ static void
store_regs (void)
{
int ret, regno, tid;
- struct pt_regs regs;
+ elf_gregset_t regs;
/* Get the thread id for the ptrace call. */
tid = GET_THREAD_ID (inferior_ptid);
@@ -512,7 +510,7 @@ store_regs (void)
for (regno = A1_REGNUM; regno <= PC_REGNUM; regno++)
{
if (register_valid[regno])
- read_register_gen (regno, (char *) ®s.uregs[regno]);
+ read_register_gen (regno, (char *) ®s[regno]);
}
ret = ptrace (PTRACE_SETREGS, tid, 0, ®s);
^ permalink raw reply [flat|nested] 6+ messages in thread