This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[PATCH]: some gdbserver changes for NetBSD/powerpc
- To: gdb-patches at sourceware dot cygnus dot com
- Subject: [PATCH]: some gdbserver changes for NetBSD/powerpc
- From: jtc at redback dot com (J.T. Conklin)
- Date: 20 Nov 2000 16:30:06 -0800
- Reply-To: jtc at redback dot com
I have committed the enclosed patch. It fixes support for FP registers
on older NetBSD/powerpc systems as has already been done in GDB proper.
It also makes some attempt to adapt to the multi-arching of the powerpc
target. This is incomplete, so gdbserver doesn't really work on this
target yet.
Does anyone have an example of a multi-arched gdbserver? For gnu/linux
ppc perhaps?
--jtc
2000-11-20 J.T. Conklin <jtc@redback.com>
* gdbserver/low-nbsd.c (fetch_inferior_registers,
store_inferior_registers): Support older NetBSD/powerpc systems
from before fp reg support was added. Adapt to register number
changes caused when powerpc target was multi-arched.
Index: low-nbsd.c
===================================================================
RCS file: /cvs/src/src/gdb/gdbserver/low-nbsd.c,v
retrieving revision 1.4
diff -c -r1.4 low-nbsd.c
*** low-nbsd.c 2000/11/20 19:30:29 1.4
--- low-nbsd.c 2000/11/21 00:24:33
***************
*** 107,112 ****
--- 107,114 ----
#endif /* !__i386__ */
#ifdef __powerpc__
+ #include "ppc-tdep.h"
+
static void
initialize_arch (void)
{
***************
*** 320,343 ****
fetch_inferior_registers (int regno)
{
struct reg inferior_registers;
struct fpreg inferior_fp_registers;
int i;
ptrace (PT_GETREGS, inferior_pid,
(PTRACE_ARG3_TYPE) & inferior_registers, 0);
- ptrace (PT_GETFPREGS, inferior_pid,
- (PTRACE_ARG3_TYPE) & inferior_fp_registers, 0);
-
for (i = 0; i < 32; i++)
RF (i, inferior_registers.fixreg[i]);
! RF (LR_REGNUM, inferior_registers.lr);
! RF (CR_REGNUM, inferior_registers.cr);
! RF (XER_REGNUM, inferior_registers.xer);
! RF (CTR_REGNUM, inferior_registers.ctr);
RF (PC_REGNUM, inferior_registers.pc);
for (i = 0; i < 32; i++)
RF (FP0_REGNUM + i, inferior_fp_registers.r_regs[i]);
}
/* Store our register values back into the inferior.
--- 322,348 ----
fetch_inferior_registers (int regno)
{
struct reg inferior_registers;
+ #ifdef PT_GETFPREGS
struct fpreg inferior_fp_registers;
+ #endif
int i;
ptrace (PT_GETREGS, inferior_pid,
(PTRACE_ARG3_TYPE) & inferior_registers, 0);
for (i = 0; i < 32; i++)
RF (i, inferior_registers.fixreg[i]);
! RF (PPC_LR_REGNUM, inferior_registers.lr);
! RF (PPC_CR_REGNUM, inferior_registers.cr);
! RF (PPC_XER_REGNUM, inferior_registers.xer);
! RF (PPC_CTR_REGNUM, inferior_registers.ctr);
RF (PC_REGNUM, inferior_registers.pc);
+ #ifdef PT_GETFPREGS
+ ptrace (PT_GETFPREGS, inferior_pid,
+ (PTRACE_ARG3_TYPE) & inferior_fp_registers, 0);
for (i = 0; i < 32; i++)
RF (FP0_REGNUM + i, inferior_fp_registers.r_regs[i]);
+ #endif
}
/* Store our register values back into the inferior.
***************
*** 348,371 ****
store_inferior_registers (int regno)
{
struct reg inferior_registers;
struct fpreg inferior_fp_registers;
int i;
for (i = 0; i < 32; i++)
RS (i, inferior_registers.fixreg[i]);
! RS (LR_REGNUM, inferior_registers.lr);
! RS (CR_REGNUM, inferior_registers.cr);
! RS (XER_REGNUM, inferior_registers.xer);
! RS (CTR_REGNUM, inferior_registers.ctr);
RS (PC_REGNUM, inferior_registers.pc);
for (i = 0; i < 32; i++)
RS (FP0_REGNUM + i, inferior_fp_registers.r_regs[i]);
-
- ptrace (PT_SETREGS, inferior_pid,
- (PTRACE_ARG3_TYPE) & inferior_registers, 0);
ptrace (PT_SETFPREGS, inferior_pid,
(PTRACE_ARG3_TYPE) & inferior_fp_registers, 0);
}
#endif /* !__powerpc__ */
--- 353,379 ----
store_inferior_registers (int regno)
{
struct reg inferior_registers;
+ #ifdef PT_SETFPREGS
struct fpreg inferior_fp_registers;
+ #endif
int i;
for (i = 0; i < 32; i++)
RS (i, inferior_registers.fixreg[i]);
! RS (PPC_LR_REGNUM, inferior_registers.lr);
! RS (PPC_CR_REGNUM, inferior_registers.cr);
! RS (PPC_XER_REGNUM, inferior_registers.xer);
! RS (PPC_CTR_REGNUM, inferior_registers.ctr);
RS (PC_REGNUM, inferior_registers.pc);
+ ptrace (PT_SETREGS, inferior_pid,
+ (PTRACE_ARG3_TYPE) & inferior_registers, 0);
+ #ifdef PT_SETFPREGS
for (i = 0; i < 32; i++)
RS (FP0_REGNUM + i, inferior_fp_registers.r_regs[i]);
ptrace (PT_SETFPREGS, inferior_pid,
(PTRACE_ARG3_TYPE) & inferior_fp_registers, 0);
+ #endif
}
#endif /* !__powerpc__ */
--
J.T. Conklin
RedBack Networks