172 lines
3.7 KiB
C
172 lines
3.7 KiB
C
/* xdr_ptrace.c - xdr routines for remote ptrace calls */
|
|
|
|
/* Copyright 1984,1985,1986,1987,1988,1989 Wind River Systems, Inc. */
|
|
/* extern char copyright_wind_river[]; static char *copyright=copyright_wind_river;*/
|
|
|
|
/*
|
|
modification history
|
|
--------------------
|
|
01a,05jun90,llk extracted from xdr_ptrace.h, version 01c.
|
|
*/
|
|
|
|
#include <vxWorks.h>
|
|
#include <rpc/rpc.h>
|
|
#include <xdr_ptrace.h>
|
|
|
|
#define MAX_LEN 32000
|
|
|
|
/********************************************************************
|
|
*
|
|
* xdr_regs_ptr -
|
|
*
|
|
* xdr routine to get regs* branch of discriminated union ptrace_info
|
|
*
|
|
*/
|
|
|
|
LOCAL bool_t xdr_regs_ptr(xdrs,objp)
|
|
XDR *xdrs;
|
|
struct regs **objp;
|
|
{
|
|
return (xdr_pointer(xdrs, (char **) objp, sizeof(struct regs), xdr_regs));
|
|
} /* xdr_regs_ptr */
|
|
|
|
/********************************************************************
|
|
*
|
|
* xdr_fp_status_ptr -
|
|
*
|
|
* xdr routine for fp_status * branch of discrimanated union
|
|
*
|
|
*/
|
|
|
|
LOCAL bool_t xdr_fp_status_ptr(xdrs,objp)
|
|
XDR *xdrs;
|
|
struct fp_status **objp;
|
|
{
|
|
return(xdr_pointer(xdrs, (char **) objp, sizeof(struct fp_status),
|
|
xdr_fp_status));
|
|
} /* xdr_fp_status_ptr */
|
|
|
|
#ifndef I80960
|
|
/********************************************************************
|
|
*
|
|
* xdr_fpa_regs_ptr -
|
|
*
|
|
* xdr routine for fpa_regs* branch of ptrace_info
|
|
*
|
|
*/
|
|
|
|
LOCAL bool_t xdr_fpa_regs_ptr(xdrs,objp)
|
|
XDR *xdrs;
|
|
struct fpa_regs **objp;
|
|
{
|
|
if (! xdr_pointer(xdrs, (char **) objp, sizeof(struct fpa_regs),
|
|
xdr_fpa_regs))
|
|
return(FALSE);
|
|
else
|
|
return(TRUE);
|
|
} /* xdr_fpa_regs_ptr */
|
|
#endif
|
|
|
|
/********************************************************************
|
|
*
|
|
* xdr_c_bytes_ptr -
|
|
*
|
|
* xdr routine for counted bytes branch of ptrace_info
|
|
*
|
|
*/
|
|
|
|
LOCAL bool_t xdr_c_bytes_ptr(xdrs,objp)
|
|
XDR *xdrs;
|
|
C_bytes **objp;
|
|
{
|
|
return(xdr_pointer(xdrs, (char **) objp, sizeof(C_bytes), xdr_c_bytes));
|
|
} /* xdr_c_bytes_ptr */
|
|
|
|
/********************************************************************
|
|
*
|
|
* xdr_ptrace_info -
|
|
*
|
|
* xdr routine for discriminated union ptrace_info
|
|
*
|
|
*/
|
|
|
|
bool_t xdr_ptrace_info(xdrs,objp)
|
|
XDR *xdrs;
|
|
Ptrace_info *objp;
|
|
{
|
|
static struct xdr_discrim choices[] =
|
|
{
|
|
{ (int) REGS, xdr_regs_ptr },
|
|
{ (int) FPREGS, xdr_fp_status_ptr },
|
|
#ifndef I80960
|
|
{ (int) FPAREGS, xdr_fpa_regs_ptr },
|
|
#endif
|
|
{ (int) DATA, xdr_c_bytes_ptr },
|
|
{ __dontcare__, NULL }
|
|
};
|
|
|
|
return(xdr_union(xdrs, (enum_t *) &objp->ttype,
|
|
(char *) &objp->more_data, choices, xdr_void));
|
|
} /* xdr_ptrace_info */
|
|
|
|
/********************************************************************
|
|
*
|
|
* xdr_rptrace -
|
|
*
|
|
* xdr routine for remote ptrace data into server
|
|
*
|
|
*/
|
|
|
|
bool_t xdr_rptrace(xdrs,objp)
|
|
XDR *xdrs;
|
|
Rptrace *objp;
|
|
{
|
|
if (! xdr_int(xdrs, &objp->pid))
|
|
return(FALSE);
|
|
if (! xdr_int(xdrs, &objp->data))
|
|
return(FALSE);
|
|
if (! xdr_int(xdrs, &objp->addr))
|
|
return(FALSE);
|
|
if (! xdr_ptrace_info(xdrs, &objp->info))
|
|
return(FALSE);
|
|
|
|
return(TRUE);
|
|
} /* xdr_rptrace */
|
|
|
|
/********************************************************************
|
|
*
|
|
* xdr_ptrace_return -
|
|
*
|
|
* xdr routine for remote ptrace data returned by server
|
|
*
|
|
*/
|
|
|
|
bool_t xdr_ptrace_return(xdrs, objp)
|
|
XDR *xdrs;
|
|
Ptrace_return *objp;
|
|
{
|
|
if (! xdr_int(xdrs, &objp->status))
|
|
return(FALSE);
|
|
if (! xdr_int(xdrs, &objp->errno))
|
|
return(FALSE);
|
|
if (! xdr_ptrace_info(xdrs, &objp->info))
|
|
return(FALSE);
|
|
|
|
return(TRUE);
|
|
} /* xdr_ptrace_return */
|
|
|
|
/********************************************************************
|
|
*
|
|
* xdr_c_bytes -
|
|
*
|
|
* xdr routine for counted bytes
|
|
*
|
|
*/
|
|
bool_t xdr_c_bytes(xdrs,objp)
|
|
XDR *xdrs;
|
|
C_bytes *objp;
|
|
{
|
|
return(xdr_bytes(xdrs, &objp->bytes, (u_int *) &objp->len, MAX_LEN));
|
|
} /* xdr_c_bytes */
|
|
|