/* xdr_regs.c - xdr routines for 68k registers */ /* Copyright 1984,1985,1986,1987,1988,1989 Wind River Systems, Inc. */ /* DESCRIPTION This module contains the eXternal Data Representation (XDR) routines for the GDB interface for VxWorks. */ #include "vxWorks.h" #include #include "reg.h" #include "xdr_regs.h" #ifdef I80960 /******************************************************************************* * * xdr_regs - xdr routine for i960 registers */ bool_t xdr_regs (xdrs, objp) XDR *xdrs; struct regs *objp; { if (! xdr_opaque(xdrs, (char *) objp->r_lreg, 16 * sizeof(int))) return(FALSE); if (! xdr_opaque(xdrs, (char *) objp->r_greg, 16 * sizeof(int))) return(FALSE); if (! xdr_opaque(xdrs, (char *) &objp->r_pcw, sizeof(int))) return(FALSE); if (! xdr_opaque(xdrs, (char *) &objp->r_acw, sizeof(int))) return(FALSE); if (! xdr_opaque(xdrs, (char *) &objp->r_tcw, sizeof(int))) return(FALSE); return(TRUE); } /******************************************************************************* * * xdr_fp_status - xdr routine for i960 floating point registers */ bool_t xdr_fp_status (xdrs, objp) XDR *xdrs; struct fp_status *objp; { unsigned int size = 4 * FP_REG_SIZE; /* We use xdr_bytes to indicate how many bytes of FP regs there are! */ if (! xdr_bytes (xdrs, (char *) objp->fps_regs, &size, 4 * FP_REG_SIZE)) return (FALSE); return (TRUE); } /******************************************************************************* * * xdr_ext_fp - xdr for a single fp register */ bool_t xdr_ext_fp (xdrs, objp) XDR *xdrs; char *objp; { unsigned int size = FP_REG_SIZE; if (! xdr_bytes (xdrs, objp, &size, FP_REG_SIZE)) return(FALSE); return(TRUE); } #else /* Must be 68K if it isn't i960 -- for now. FIXME! */ /******************************************************************************* * * xdr_regs - xdr routine for 68k registers */ bool_t xdr_regs (xdrs, objp) XDR *xdrs; struct regs *objp; { if (! xdr_opaque(xdrs, (char *) objp->r_dreg, 8 * sizeof(int))) return(FALSE); if (! xdr_opaque(xdrs, (char *) objp->r_areg, 8 * sizeof(int))) return(FALSE); if (! xdr_opaque(xdrs, (char *) &objp->r_sr, sizeof(int))) return(FALSE); if (! xdr_opaque(xdrs, (char *) &objp->r_pc, sizeof(int))) return(FALSE); return(TRUE); } /******************************************************************************* * * xdr_ext_fp - xdr for a single fp register */ bool_t xdr_ext_fp (xdrs, objp) XDR *xdrs; ext_fp *objp; { if (! xdr_vector(xdrs, (char *) objp->fp, 3, sizeof(int), xdr_int)) return(FALSE); return(TRUE); } /******************************************************************************* * * xdr_fp_status - xdr routine for floating point registers */ bool_t xdr_fp_status (xdrs, objp) XDR *xdrs; struct fp_status *objp; { if (! xdr_vector (xdrs, (char *) objp->fps_regs, 8, sizeof(ext_fp), xdr_ext_fp)) return (FALSE); if (! xdr_int (xdrs, &objp->fps_control)) return (FALSE); if (! xdr_int (xdrs, &objp->fps_status)) return (FALSE); if (! xdr_int (xdrs, &objp->fps_iaddr)) return (FALSE); if (! xdr_int (xdrs, &objp->fps_code)) return (FALSE); if (! xdr_int (xdrs, &objp->fps_flags)) return (FALSE); return (TRUE); } /******************************************************************************* * * xdr_fpa_status - xdr for fpa status */ bool_t xdr_fpa_status (xdrs, objp) XDR *xdrs; struct fpa_status *objp; { if (! xdr_u_int (xdrs, &objp->fpas_state)) return (FALSE); if (! xdr_u_int (xdrs, &objp->fpas_imask)) return (FALSE); if (! xdr_u_int (xdrs, &objp->fpas_load_ptr)) return (FALSE); if (! xdr_u_int (xdrs, &objp->fpas_ierr)) return (FALSE); if (! xdr_u_int (xdrs, &objp->fpas_act_instr)) return (FALSE); if (! xdr_u_int (xdrs, &objp->fpas_nxt_instr)) return (FALSE); if (! xdr_u_int (xdrs, &objp->fpas_act_d1half)) return (FALSE); if (! xdr_u_int (xdrs, &objp->fpas_act_d2half)) return (FALSE); if (! xdr_u_int (xdrs, &objp->fpas_nxt_d1half)) return (FALSE); if (! xdr_u_int (xdrs, &objp->fpas_nxt_d2half)) return (FALSE); if (! xdr_u_int (xdrs, &objp->fpas_mode3_0)) return (FALSE); if (! xdr_u_int (xdrs, &objp->fpas_wstatus)) return (FALSE); return (TRUE); } /******************************************************************************* * * xdr_fpa_long - xdr for fpa data register */ bool_t xdr_fpa_long (xdrs,objp) XDR *xdrs; fpa_long *objp; { if (! xdr_vector (xdrs, (char *) objp->fpl_data, 2, sizeof(int), xdr_int)) return (FALSE); return (TRUE); } /******************************************************************************* * * xdr_fpa_regs - xdr for fpa_regs */ bool_t xdr_fpa_regs (xdrs, objp) XDR *xdrs; struct fpa_regs *objp; { if (! xdr_u_int (xdrs, &objp->fpar_flags)) return (FALSE); if (! xdr_fpa_status (xdrs, &objp->fpar_status)) return (FALSE); if (! xdr_vector (xdrs, (char *) objp->fpar_data, FPA_NDATA_REGS, sizeof(fpa_long), xdr_fpa_long)) return (FALSE); return (TRUE); } #endif /* I80960 */