📄 xdrwtx.c
字号:
/* xdrwtx.c - xdr routines for Wind River Tool eXchange protocol *//* Copyright 1984-1997 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------03b,03apr02,c_c Changed xdr_wrapstring to xdr_string to workaround a xdr limitation on the target (SPR #74773).03a,15jun01,pch Add new WTX_TS_INFO_GET_V2 service to handle WTX_RT_INFO change (from BOOL32 hasFpp to UINT32 hasCoprocessor) without breaking existing clients.02z,10may01,dtr Changing coprocessor flags into one word.02y,06feb01,dtr Adding probe for Altivec registers.02x,18aug98,pcn Re-use WTX_MSG_EVTPT_LIST_2.02w,20jul98,pcn Added evtptNum and toolId in the wtxEventpointListGet return list.02v,19jun98,pcn Changed xdr_WTX_MSG_FILE_LOAD_DESC to accept new fields.02u,26may98,pcn Changed WTX_MSG_EVTPT_LIST_2 in WTX_MSG_EVTPT_LIST_GET.02t,26mar98,pcn Updated history.02s,23mar98,pcn WTX 2: added test in xdr_WTX_MSG_FILE_LOAD_DESC to take care of different behaviors of wtxObjModuleLoad_2.02r,02mar98,pcn WTX 2: added xdr_MEM_WIDTH_COPY_ALLOC, xdr_WTX_MSG_MEM_WIDTH_READ_DESC, xdr_WTX_MSG_MEM_WIDTH_COPY_DESC, xdr_WTX_EVENT_NODE, xdr_MSG_EVENT_LIST, xdr_WTX_MSG_FILE_LOAD_DESC, xdr_WTX_LD_M_FILE_DESC, xdr_WTX_EVENT_2, xdr_WTX_EVTPT_2, xdr_WTX_MSG_EVTPT_DESC_2, xdr_WTX_MSG_EVTPT_LIST_2. Changed xdr_WTX_MSG_EVTPT_LIST, xdr_WTX_EVENT_DESC.02q,13feb98,c_c Fixed a memory leak in xdr_WTX_MSG_CONTEXT_DESC02p,29aug97,fle Adding the WTX_MEM_DISASSEMBLE service02o,30sep96,elp put in share, adapted to be compiled on target side (SPR# 6775).02n,28jun96,c_s subvert prototypes in AIX's <rpc/xdr.h> to temporarily work around problems with XDR arguments that change signedness.02m,17jun96,p_m changed flags type in xdr_WTX_MSG_OPEN_DESC() (SPR# 4941).02l,10jun96,elp re-installed 02j (fix SPR# 6502 without protocol change).02k,20may96,elp updated xdr_WTX_MSG_SYM_TBL_INFO to new WTX_MSG_SYM_TBL_INFO type (SPR# 6205).02j,31aug95,p_m added free() in xdr_WTX_MSG_VIO_COPY_DESC() (SPR# 4804).02i,06jun95,p_m took care of WTX_MSG_SYM_MATCH_DESC changes in xdr_WTX_MSG_SYM_MATCH_DESC().02h,01jun95,p_m removed WTX_MSG_CALL_PARAM and modified WTX_MSG_CONTEXT_DESC.02g,30may95,p_m completed WTX_MEM_SCAN and WTX_MEM_MOVE implementation.02f,26may95,p_m added match field in WTX_MSG_MEM_SCAN_DESC.02e,23may95,p_m made missing name changes.02d,22may95,jcf name revision.02c,19may95,p_m got rid of DETECTION related stuff.02b,16may95,p_m added xdr_WTX_MSG_KILL_DESC.02a,14may95,c_s fixed memory leak in xdr_WTX_MEM_XFER; fixed free-memory fault in xdr_WTX_SYM_LIST.01z,10may95,pad modified xdr_WTX_MSG_SYM_LIST and xdr_WTX_MSG_SYM_MATCH_DESC.01y,09may95,p_m re-implemented wtxregd related XDR procedures. Added Target Server version in WTX_MSG_TS_INFO.01x,05may95,p_m added protVersion in xdr_WTX_CORE.01w,02may95,pad xdr_WTX_MSG_MODULE_INFO now handles format field as char *01v,30mar95,p_m changed xdr_CONTEXT_ID_T() to xdr_WTX_CONTEXT_ID_T().01u,20mar95,c_s updated GOPHER structure filters.01t,16mar95,p_m added xdr_WTX_MSG_VIO_FILE_LIST().01s,10mar95,p_m changed endian field to u_long.01r,03mar95,p_m merged with wtxxdr.c. added gopher routines.01q,27feb95,p_m cleanup up xdr_WTX_MSG_MEM_SCAN_DESC. added symTblId to xdr_WTX_MSG_SYM_TBL_INFO. simplified WTX_WDB_SERVICE_DESC.01p,25feb95,jcf extended xdr_WTX_TS_INFO.01o,21feb95,pad added xdr_WTX_WTX_SERVICE_DESC() and modified xdr_WTX_MSG_SERVICE_DESC().01n,08feb95,p_m added loadFlag in WTX_MODULE_INFO. changed to xdr_WTX_MSG... for more coherency. added many filters now that WTX and WDB are separated.01m,30jan95,p_m added additional routines objects and name to xdr_SERVICE_DESC(). added xdr_WTX_MEM_XFER(), xdr_WTX_REG_WRITE() and xdr_WTX_MEM_SET_DESC().01l,23jan95,p_m updated xdr_TOOL_DESC and xdr_WTX_TS_INFO. replaced #include "wdb/xdrwdb.h" with #include "xdrwdb.h". replace rtnName by initRtnName in xdr_SERVICE_DESC().01k,21jan95,jcf updated include files.01j,13dec94,p_m updated to use files generated from wtx.x. added xdr_WTX_MEM_INFO(). added WTX_SYM_LIST to LD_M_FILE to return undefined symbols. changed xdr_WTX_WRAP_STRING() to xdr_WRAPSTRING(). added addlDataLen and addData fields to WTX_EVENT.01i,17nov94,p_m added symFlag to xdr_LD_M_FILE(). changed all routine pointers to routine names in SERVICE_DESC.01h,14nov94,p_m renamed VIO_OPEN_DESC to OPEN_DESC and added channel to OPEN_DESC.01g,11nov94,p_m removed xdr_WTX_GOPHER_TAPE.01f,28oct94,p_m added returnType field in WTX_CALL_PARAMS. added pEvtpt field management in EVTPT_LIST. added xdr_SYM_TAB_INFO() and xdr_SYM_TAB_LIST(). changed xdr_SYM_TAB_PARAM() to xdr_SYM_TBL_PARAM(). added xdr object file names in xdr_SERVICE_DESC. added display in xdr_CONSOLE_DESC.01e,27oct94,p_m added exactName field in WTX_SYMBOL.01d,24oct94,p_m added xdr_WTX_WRAP_STRING() and xdr_SYM_MATCH_DESC. changed xdr_WTX_CALL_PARAMS(). added moduleId handling in xdr_LD_M_FILE(). added xdr_WTX_SYM_LIST().01c,20oct94,p_m added xdr_MEM_COPY_ALLOC() and xdr_WTX_SYMBOL(). Added moduleId handling in xdr_WTX_MODULE_INFO. Added null pointer handling in xdr_MOD_NAME_OR_ID.01b,19oct94,p_m added xdr_pointers in xdr_WTX_TS_INFO.01a,04oct94,p_m written.*//*DESCRIPTIONThis module contains the eXternal Data Representation (XDR) routinesfor the WTX protocol.*/#if defined (RS6000_AIX4)/* AIX is extremely picky about the signedness of arguments passed to stock xdr rouintes. This hack ends that debate. */#define _NO_PROTO#endif /* !RS6000_AIX4 */#include <stdlib.h>#include "rpc/rpc.h"#include "wtx.h"#include "wtxmsg.h"#include "wtxxdr.h"#define LASTUNSIGNED ((u_int) 0-1) /* taken from SUN xdr.c file *//********************************************************************************* xdr_WRAPSTRING - possibly NULL string pointer**/bool_t xdr_WRAPSTRING ( XDR * xdrs, char ** string ) { BOOL moreData; moreData = (*string != NULL); /* string is a NULL pointer ?*/ if (!xdr_bool(xdrs, &moreData)) /* code/decode test result */ return (FALSE); if (!moreData) *string = NULL; /* YES: string is NULL */ else /* NO: code/decode the string */ { if (xdrs->x_op == XDR_DECODE) *string = NULL; if (!xdr_string (xdrs, string, LASTUNSIGNED)) return (FALSE); } return (TRUE); }#ifdef HOST/********************************************************************************* xdr_TGT_ADDR_T - WTX**/bool_t xdr_TGT_ADDR_T ( XDR * xdrs, TGT_ADDR_T * objp ) { if (!xdr_u_long (xdrs, objp)) return (FALSE); return (TRUE); }#endif/********************************************************************************* xdr_TGT_ARG_T - WTX**/bool_t xdr_TGT_ARG_T ( XDR * xdrs, TGT_ARG_T * objp ) { if (!xdr_u_long (xdrs, objp)) return (FALSE); return (TRUE); }/********************************************************************************* xdr_WTX_CONTEXT_ID_T - WTX**/bool_t xdr_WTX_CONTEXT_ID_T ( XDR * xdrs, WTX_CONTEXT_ID_T * objp ) { if (!xdr_u_long (xdrs, (u_long *)objp)) return (FALSE); return (TRUE); }/********************************************************************************* xdr_WTX_VALUE - WTX**/bool_t xdr_WTX_VALUE ( XDR *xdrs, WTX_VALUE *objp ) { if (!xdr_enum(xdrs, (enum_t *)&objp->valueType)) { return (FALSE); } switch (objp->valueType) { case 0: if (!xdr_char(xdrs, &objp->value_u.v_int8)) { return (FALSE); } break; case 1: if (!xdr_short(xdrs, &objp->value_u.v_int16)) { return (FALSE); } break; case 2: if (!xdr_long(xdrs, (long *)&objp->value_u.v_int32)) { return (FALSE); } break; case 3: if (!xdr_u_char(xdrs, &objp->value_u.v_uint8)) { return (FALSE); } break; case 4: if (!xdr_u_short(xdrs, &objp->value_u.v_uint16)) { return (FALSE); } break; case 5: if (!xdr_u_long(xdrs, (u_long *)&objp->value_u.v_uint32)) { return (FALSE); } break; case 6: if (!xdr_double(xdrs, &objp->value_u.v_double)) { return (FALSE); } break; case 7: if (!xdr_long(xdrs, (long *)&objp->value_u.v_bool32)) { return (FALSE); } break; case 8: if (!xdr_WRAPSTRING(xdrs, &objp->value_u.v_pchar)) { return (FALSE); } break; /* XXX p_m treat void * as a long for now */ case 9: if (!xdr_long(xdrs, (long *)&objp->value_u.v_pvoid)) { return (FALSE); } break; case 10: if (!xdr_TGT_ADDR_T(xdrs, &objp->value_u.v_tgt_addr)) { return (FALSE); } break; case 11: if (!xdr_TGT_ARG_T(xdrs, &objp->value_u.v_tgt_arg)) { return (FALSE); } break; } return (TRUE); }/********************************************************************************* xdr_WTX_MSG_RESULT - WTX**/bool_t xdr_WTX_MSG_RESULT ( XDR * xdrs, WTX_MSG_RESULT * objp ) { if (!xdr_WTX_CORE (xdrs, &objp->wtxCore)) return (FALSE); if (!xdr_WTX_VALUE (xdrs, &objp->val)) return (FALSE); return (TRUE); }/********************************************************************************* xdr_WTX_MSG_PARAM - WTX**/bool_t xdr_WTX_MSG_PARAM ( XDR * xdrs, WTX_MSG_PARAM * objp ) { if (!xdr_WTX_CORE (xdrs, &objp->wtxCore)) return (FALSE); if (!xdr_WTX_VALUE (xdrs, &objp->param)) return (FALSE); return (TRUE); }/********************************************************************************* xdr_WTX_MEM_REGION - WTX**/bool_t xdr_WTX_MEM_REGION ( XDR * xdrs, WTX_MEM_REGION * objp ) { if (!xdr_TGT_ADDR_T (xdrs, &objp->baseAddr)) return (FALSE); if (!xdr_u_long (xdrs, (u_long *)&objp->size)) return (FALSE); if (!xdr_u_long (xdrs, (u_long *)&objp->attribute)) return (FALSE); return (TRUE); }/********************************************************************************* xdr_WTX_TGT_LINK_DESC - target link descriptor**/bool_t xdr_WTX_TGT_LINK_DESC ( XDR * xdrs, WTX_TGT_LINK_DESC * objp ) { if (!xdr_WRAPSTRING (xdrs, &objp->name)) return (FALSE); if (!xdr_u_long (xdrs, (u_long *)&objp->type)) return (FALSE); if (!xdr_u_long (xdrs, (u_long *)&objp->speed)) return (FALSE); return (TRUE); }/********************************************************************************* xdr_WTX_RT_INFO - **/LOCAL bool_t xdr_WTX_RT_INFO ( XDR * xdrs, WTX_RT_INFO * objp, int msgVersion ) { if (!xdr_u_long(xdrs, (u_long *)&objp->rtType)) { return (FALSE); } if (!xdr_WRAPSTRING(xdrs, &objp->rtVersion)) { return (FALSE); } if (!xdr_u_long(xdrs, (u_long *)&objp->cpuType)) { return (FALSE); } if (msgVersion == 1) { /* * The BOOL32 field named hasFpp has been replaced by a * bit-significant UINT32 named hasCoprocessor. For a * v1 inquiry, report only the FPP bit (as a BOOL32). */ BOOL32 bTemp = objp->hasCoprocessor & WTX_FPP_MASK; if (!xdr_bool(xdrs, (bool_t *)&bTemp)) { return (FALSE); } } else { if (!xdr_u_long(xdrs, (u_long *)&objp->hasCoprocessor)) { return (FALSE); } } if (!xdr_bool(xdrs, (bool_t *)&objp->hasWriteProtect)) { return (FALSE); } if (!xdr_u_long(xdrs, (u_long *)&objp->pageSize)) { return (FALSE); } if (!xdr_u_long(xdrs, (u_long *)&objp->endian)) { return (FALSE); } if (!xdr_WRAPSTRING(xdrs, &objp->bspName)) { return (FALSE); } if (!xdr_WRAPSTRING(xdrs, &objp->bootline)) { return (FALSE); } if (!xdr_TGT_ADDR_T(xdrs, &objp->memBase)) { return (FALSE); } if (!xdr_u_long(xdrs, (u_long *)&objp->memSize)) { return (FALSE); } if (!xdr_u_long(xdrs, (u_long *)&objp->numRegions)) { return (FALSE); } if (!xdr_pointer(xdrs, (char **)&objp->memRegion, sizeof(WTX_MEM_REGION), xdr_WTX_MEM_REGION)) { return (FALSE); } if (!xdr_TGT_ADDR_T(xdrs, &objp->hostPoolBase)) { return (FALSE); } if (!xdr_u_long(xdrs, (u_long *)&objp->hostPoolSize)) { return (FALSE); } return (TRUE); }/********************************************************************************* xdr_WTX_AGENT_INFO - **/bool_t xdr_WTX_AGENT_INFO ( XDR * xdrs, WTX_AGENT_INFO * objp ) { if (!xdr_WRAPSTRING(xdrs, &objp->agentVersion)) { return (FALSE); } if (!xdr_u_long(xdrs, (u_long *)&objp->mtu)) { return (FALSE); } if (!xdr_u_long(xdrs, (u_long *)&objp->mode)) { return (FALSE); } return (TRUE); }/********************************************************************************* xdr_WTX_TGT_INFO - WTX**/LOCAL bool_t xdr_WTX_TGT_INFO ( XDR * xdrs, WTX_TGT_INFO * objp, int msgVersion ) { if (!xdr_WTX_AGENT_INFO (xdrs, &objp->agentInfo)) return (FALSE); if (!xdr_WTX_RT_INFO (xdrs, &objp->rtInfo, msgVersion)) return (FALSE); return (TRUE); }/********************************************************************************* xdr_WTX_TOOL_DESC - host tool descriptor**/bool_t xdr_WTX_TOOL_DESC ( XDR * xdrs, WTX_TOOL_DESC * objp ) { if (!xdr_u_long (xdrs, (u_long *)&objp->id)) return (FALSE); if (!xdr_WRAPSTRING (xdrs, &objp->toolName)) return (FALSE); if (!xdr_WRAPSTRING (xdrs, &objp->toolArgv)) return (FALSE); if (!xdr_WRAPSTRING (xdrs, &objp->toolArgv)) return (FALSE); if (!xdr_WRAPSTRING (xdrs, &objp->userName)) return (FALSE); if (!xdr_pointer (xdrs, (char **) &objp->next, sizeof(WTX_TOOL_DESC), xdr_WTX_TOOL_DESC)) return (FALSE); return (TRUE); }/********************************************************************************* xdr_WTX_MSG_TOOL_DESC - WTX host tool descriptor**/bool_t xdr_WTX_MSG_TOOL_DESC ( XDR * xdrs, WTX_MSG_TOOL_DESC * objp ) { if (!xdr_WTX_CORE (xdrs, &objp->wtxCore))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -