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