aboutsummaryrefslogtreecommitdiff
path: root/gdb/vx-share/xdr_regs.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/vx-share/xdr_regs.c')
-rw-r--r--gdb/vx-share/xdr_regs.c216
1 files changed, 216 insertions, 0 deletions
diff --git a/gdb/vx-share/xdr_regs.c b/gdb/vx-share/xdr_regs.c
new file mode 100644
index 0000000..9152423
--- /dev/null
+++ b/gdb/vx-share/xdr_regs.c
@@ -0,0 +1,216 @@
+/* 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 <rpc/rpc.h>
+#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 */
+