1e93f7393Sniklas /* xdr_ptrace.c - xdr routines for remote ptrace calls */
2e93f7393Sniklas
3*b725ae77Skettenis /* Copyright 1984, 1985, 1986, 1987, 1988, 1989, 1991, 1992, 1993, 1998
4*b725ae77Skettenis Free Software Foundation, Inc.
5e93f7393Sniklas
6e93f7393Sniklas This code was donated by Wind River Systems, Inc. */
7e93f7393Sniklas
8e93f7393Sniklas /*
9e93f7393Sniklas modification history
10e93f7393Sniklas --------------------
11e93f7393Sniklas 01b,25may91,maf now uses counted bytes struct to transfer registers.
12e93f7393Sniklas removed xdr_regs_ptr (), xdr_fp_status_ptr (), and
13e93f7393Sniklas xdr_fpa_regs_ptr ().
14e93f7393Sniklas 01a,05jun90,llk extracted from xdr_ptrace.h, version 01c.
15e93f7393Sniklas */
16e93f7393Sniklas
17e93f7393Sniklas #include "defs.h"
18e93f7393Sniklas #include "vxWorks.h"
19e93f7393Sniklas #include <rpc/rpc.h>
20e93f7393Sniklas #include "xdr_ptrace.h"
21e93f7393Sniklas
22e93f7393Sniklas #define MAX_LEN 32000
23e93f7393Sniklas
24e93f7393Sniklas /********************************************************************
25e93f7393Sniklas *
26e93f7393Sniklas * xdr_c_bytes -
27e93f7393Sniklas *
28e93f7393Sniklas * xdr routine for counted bytes
29e93f7393Sniklas *
30e93f7393Sniklas */
xdr_c_bytes(xdrs,objp)31e93f7393Sniklas bool_t xdr_c_bytes(xdrs,objp)
32e93f7393Sniklas XDR *xdrs;
33e93f7393Sniklas C_bytes *objp;
34e93f7393Sniklas {
35e93f7393Sniklas return(xdr_bytes(xdrs, &objp->bytes, (u_int *) &objp->len, MAX_LEN));
36e93f7393Sniklas } /* xdr_c_bytes */
37e93f7393Sniklas
38e93f7393Sniklas /********************************************************************
39e93f7393Sniklas *
40e93f7393Sniklas * xdr_c_bytes_ptr -
41e93f7393Sniklas *
42e93f7393Sniklas * xdr routine for counted bytes branch of ptrace_info
43e93f7393Sniklas *
44e93f7393Sniklas */
45e93f7393Sniklas
xdr_c_bytes_ptr(xdrs,objp)46e93f7393Sniklas LOCAL bool_t xdr_c_bytes_ptr(xdrs,objp)
47e93f7393Sniklas XDR *xdrs;
48e93f7393Sniklas C_bytes **objp;
49e93f7393Sniklas {
50e93f7393Sniklas return(xdr_pointer(xdrs, (char **) objp, sizeof(C_bytes), xdr_c_bytes));
51e93f7393Sniklas } /* xdr_c_bytes_ptr */
52e93f7393Sniklas
53e93f7393Sniklas /********************************************************************
54e93f7393Sniklas *
55e93f7393Sniklas * xdr_ptrace_info -
56e93f7393Sniklas *
57e93f7393Sniklas * xdr routine for discriminated union ptrace_info
58e93f7393Sniklas *
59e93f7393Sniklas */
60e93f7393Sniklas
xdr_ptrace_info(xdrs,objp)61e93f7393Sniklas bool_t xdr_ptrace_info(xdrs,objp)
62e93f7393Sniklas XDR *xdrs;
63e93f7393Sniklas Ptrace_info *objp;
64e93f7393Sniklas {
65e93f7393Sniklas static struct xdr_discrim choices[] =
66e93f7393Sniklas {
67e93f7393Sniklas { (int) DATA, xdr_c_bytes_ptr },
68e93f7393Sniklas { __dontcare__, NULL }
69e93f7393Sniklas };
70e93f7393Sniklas
71e93f7393Sniklas return(xdr_union(xdrs, (enum_t *) &objp->ttype,
72e93f7393Sniklas (char *) &objp->more_data, choices, xdr_void));
73e93f7393Sniklas } /* xdr_ptrace_info */
74e93f7393Sniklas
75e93f7393Sniklas /********************************************************************
76e93f7393Sniklas *
77e93f7393Sniklas * xdr_rptrace -
78e93f7393Sniklas *
79e93f7393Sniklas * xdr routine for remote ptrace data into server
80e93f7393Sniklas *
81e93f7393Sniklas */
82e93f7393Sniklas
xdr_rptrace(xdrs,objp)83e93f7393Sniklas bool_t xdr_rptrace(xdrs,objp)
84e93f7393Sniklas XDR *xdrs;
85e93f7393Sniklas Rptrace *objp;
86e93f7393Sniklas {
87e93f7393Sniklas if (! xdr_int(xdrs, &objp->pid))
88e93f7393Sniklas return(FALSE);
89e93f7393Sniklas if (! xdr_int(xdrs, &objp->data))
90e93f7393Sniklas return(FALSE);
91e93f7393Sniklas if (! xdr_int(xdrs, &objp->addr))
92e93f7393Sniklas return(FALSE);
93e93f7393Sniklas if (! xdr_ptrace_info(xdrs, &objp->info))
94e93f7393Sniklas return(FALSE);
95e93f7393Sniklas
96e93f7393Sniklas return(TRUE);
97e93f7393Sniklas } /* xdr_rptrace */
98e93f7393Sniklas
99e93f7393Sniklas /********************************************************************
100e93f7393Sniklas *
101e93f7393Sniklas * xdr_ptrace_return -
102e93f7393Sniklas *
103e93f7393Sniklas * xdr routine for remote ptrace data returned by server
104e93f7393Sniklas *
105e93f7393Sniklas */
106e93f7393Sniklas
xdr_ptrace_return(xdrs,objp)107e93f7393Sniklas bool_t xdr_ptrace_return(xdrs, objp)
108e93f7393Sniklas XDR *xdrs;
109e93f7393Sniklas Ptrace_return *objp;
110e93f7393Sniklas {
111e93f7393Sniklas if (! xdr_int(xdrs, &objp->status))
112e93f7393Sniklas return(FALSE);
113*b725ae77Skettenis if (! xdr_int(xdrs, &objp->errno_num))
114e93f7393Sniklas return(FALSE);
115e93f7393Sniklas if (! xdr_ptrace_info(xdrs, &objp->info))
116e93f7393Sniklas return(FALSE);
117e93f7393Sniklas
118e93f7393Sniklas return(TRUE);
119e93f7393Sniklas } /* xdr_ptrace_return */
120