1 /* xdr_rdb.c  - xdr routines for Remote Debug interface to VxWorks  */
2 
3 /* Copyright 1992, 1993 Free Software Foundation, Inc.
4 
5    This code was donated by Wind River Systems, Inc. */
6 
7 /*
8 modification history
9 --------------------
10 01a,21mar90,llk  created using modification 01d of xdr_dbx.c.
11 */
12 
13 /*
14 DESCRIPTION
15 This module contains the eXternal Data Representation (XDR) routines
16 for the RDB interface for VxWorks.
17 */
18 
19 #include "defs.h"
20 #include "vxWorks.h"
21 #include <rpc/rpc.h>
22 #include "xdr_rdb.h"
23 
24 /* forward declarations */
25 
26 bool_t
xdr_arg_type(xdrs,objp)27 xdr_arg_type(xdrs, objp)
28         XDR *xdrs;
29         arg_type *objp;
30 {
31         if (!xdr_enum(xdrs, (enum_t *)objp)) {
32                 return (FALSE);
33         }
34         return (TRUE);
35 }
36 
37 bool_t
xdr_arg_value(xdrs,objp)38 xdr_arg_value(xdrs, objp)
39         XDR *xdrs;
40         arg_value *objp;
41 {
42         if (!xdr_arg_type(xdrs, &objp->type)) {
43                 return (FALSE);
44         }
45         switch (objp->type) {
46         case T_BYTE:
47                 if (!xdr_char(xdrs, &objp->arg_value_u.v_byte)) {
48                         return (FALSE);
49                 }
50                 break;
51         case T_WORD:
52                 if (!xdr_short(xdrs, &objp->arg_value_u.v_word)) {
53                         return (FALSE);
54                 }
55                 break;
56         case T_INT:
57                 if (!xdr_int(xdrs, &objp->arg_value_u.v_int)) {
58                         return (FALSE);
59                 }
60                 break;
61         case T_FLOAT:
62                 if (!xdr_float(xdrs, &objp->arg_value_u.v_fp)) {
63                         return (FALSE);
64                 }
65                 break;
66         case T_DOUBLE:
67                 if (!xdr_double(xdrs, &objp->arg_value_u.v_dp)) {
68                         return (FALSE);
69                 }
70                 break;
71         case T_UNKNOWN:
72                 break;
73         }
74         return (TRUE);
75 }
76 
77 bool_t
xdr_func_call(xdrs,objp)78 xdr_func_call(xdrs, objp)
79         XDR *xdrs;
80         func_call *objp;
81 {
82         if (!xdr_int(xdrs, &objp->func_addr)) {
83                 return (FALSE);
84         }
85         if (!xdr_array(xdrs, (char **)&objp->args.args_val, (u_int *)&objp->args.args_len, MAX_FUNC_ARGS, sizeof(arg_value), xdr_arg_value)) {
86                 return (FALSE);
87         }
88         return (TRUE);
89 }
90 
91 bool_t
xdr_arg_one(xdrs,objp)92 xdr_arg_one(xdrs, objp)
93         XDR *xdrs;
94         arg_one *objp;
95 {
96         if (!xdr_string(xdrs, objp, MAX_ARG_LEN)) {
97                 return (FALSE);
98         }
99         return (TRUE);
100 }
101 
102 
103 
104 
105 bool_t
xdr_arg_array(xdrs,objp)106 xdr_arg_array(xdrs, objp)
107         XDR *xdrs;
108         arg_array *objp;
109 {
110         if (!xdr_array(xdrs, (char **)&objp->arg_array_val, (u_int *)&objp->arg_array_len, MAX_ARG_CNT, sizeof(arg_one), xdr_arg_one)) {
111                 return (FALSE);
112         }
113         return (TRUE);
114 }
115 
116 /*********************************************************************
117 *
118 * xdr_EVENT_TYPE -
119 *
120 */
121 
xdr_EVENT_TYPE(xdrs,objp)122 bool_t xdr_EVENT_TYPE(xdrs, objp)
123     XDR *xdrs;
124     EVENT_TYPE *objp;
125 
126     {
127     if (!xdr_enum (xdrs, (enum_t *) objp))
128 	return (FALSE);
129     return (TRUE);
130     }
131 
132 /*********************************************************************
133 *
134 * xdr_RDB_EVENT -
135 *
136 */
137 
xdr_RDB_EVENT(xdrs,objp)138 bool_t xdr_RDB_EVENT (xdrs, objp)
139     XDR *xdrs;
140     RDB_EVENT *objp;
141 
142     {
143     if (!xdr_int (xdrs, &objp->status))
144 	return (FALSE);
145     if (!xdr_int (xdrs, &objp->taskId))
146 	return (FALSE);
147     if (!xdr_EVENT_TYPE (xdrs, &objp->eventType))
148 	return (FALSE);
149     if (!xdr_int (xdrs, &objp->sigType))
150 	return (FALSE);
151     return (TRUE);
152     }
153 
154 /*********************************************************************
155 *
156 * xdr_TASK_START -
157 *
158 */
159 
160 bool_t
xdr_TASK_START(xdrs,objp)161 xdr_TASK_START (xdrs, objp)
162     XDR *xdrs;
163     TASK_START *objp;
164 
165     {
166     if (!xdr_int (xdrs, &objp->status))
167 	return (FALSE);
168     if (!xdr_int (xdrs, &objp->pid))
169 	return (FALSE);
170     return (TRUE);
171     }
172 
173 
174 /*********************************************************************
175 *
176 * xdr_SYMBOL_ADDR -
177 *
178 */
179 
180 bool_t
xdr_SYMBOL_ADDR(xdrs,objp)181 xdr_SYMBOL_ADDR (xdrs, objp)
182     XDR *xdrs;
183     SYMBOL_ADDR *objp;
184 
185     {
186     if (!xdr_int (xdrs, &objp->status))
187 	return (FALSE);
188     if (!xdr_u_int (xdrs, &objp->addr))
189 	return (FALSE);
190     return (TRUE);
191     }
192 
193 /*********************************************************************
194 *
195 * xdr_SOURCE_STEP -
196 *
197 */
198 
199 bool_t
xdr_SOURCE_STEP(xdrs,objp)200 xdr_SOURCE_STEP (xdrs, objp)
201     XDR *xdrs;
202     SOURCE_STEP *objp;
203 
204     {
205     if (!xdr_int (xdrs, &objp->taskId))
206 	return (FALSE);
207     if (!xdr_u_int (xdrs, &objp->startAddr))
208 	return (FALSE);
209     if (!xdr_u_int (xdrs, &objp->endAddr))
210 	return (FALSE);
211     return (TRUE);
212     }
213