@ -26,6 +26,7 @@
# include "defs.h"
# include "inferior.h"
# include "gdbcore.h"
# include "ppc-tdep.h"
# define RF(dst, src) \
memcpy ( & registers [ REGISTER_BYTE ( dst ) ] , & src , sizeof ( src ) )
@ -37,23 +38,27 @@ void
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 ( LR_REGNUM , inferior_registers . lr ) ;
RF ( CR_REGNUM , inferior_registers . cr ) ;
RF ( XER_REGNUM , inferior_registers . xer ) ;
RF ( CTR_REGNUM , inferior_registers . ctr ) ;
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 ) ;
( PTRACE_ARG3_TYPE ) & inferior_fp_registers , 0 ) ;
for ( i = 0 ; i < 32 ; i + + )
RF ( FP0_REGNUM + i , inferior_fp_registers . r_regs [ i ] ) ;
# endif
registers_fetched ( ) ;
}
@ -62,30 +67,36 @@ void
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 ( LR_REGNUM , inferior_registers . lr ) ;
RS ( CR_REGNUM , inferior_registers . cr ) ;
RS ( XER_REGNUM , inferior_registers . xer ) ;
RS ( CTR_REGNUM , inferior_registers . ctr ) ;
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
}
struct md_core
{
struct reg intreg ;
# ifdef PT_GETFPREGS
struct fpreg freg ;
# endif
} ;
void
@ -98,15 +109,17 @@ fetch_core_registers (char *core_reg_sect, unsigned core_reg_size, int which,
/* Integer registers */
for ( i = 0 ; i < 32 ; i + + )
RF ( i , core_reg - > intreg . fixreg [ i ] ) ;
RF ( LR_REGNUM , core_reg - > intreg . lr ) ;
RF ( CR_REGNUM , core_reg - > intreg . cr ) ;
RF ( XER_REGNUM , core_reg - > intreg . xer ) ;
RF ( CTR_REGNUM , core_reg - > intreg . ctr ) ;
RF ( PPC_ LR_REGNUM, core_reg - > intreg . lr ) ;
RF ( PPC_ CR_REGNUM, core_reg - > intreg . cr ) ;
RF ( PPC_ XER_REGNUM, core_reg - > intreg . xer ) ;
RF ( PPC_ CTR_REGNUM, core_reg - > intreg . ctr ) ;
RF ( PC_REGNUM , core_reg - > intreg . pc ) ;
# ifdef PT_FPGETREGS
/* Floating point registers */
for ( i = 0 ; i < 32 ; i + + )
RF ( FP0_REGNUM + i , core_reg - > freg . r_regs [ i ] ) ;
# endif
registers_fetched ( ) ;
}