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