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