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 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 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 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 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 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 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 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 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 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 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