This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[PATCH]: some gdbserver changes for NetBSD/powerpc


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]