source: rtems/c/src/lib/librpc/xdr_mem.c @ eb299afc

4.104.114.84.95
Last change on this file since eb299afc was 4721cf1, checked in by Joel Sherrill <joel.sherrill@…>, on 12/03/98 at 23:54:14

Patch from Emmanuel Raguet <raguet@…> to add remote debug server
and RPC support to RTEMS. Thanks. :) Email follows:

Hello,

For Xmas, here is the Remote Debugger on RTEMS !

Here are 2 patches for the Remote Debugger on RTEMS for pc386 from Linux
host :

  • one for RTEMS it self,
  • one for GDB-4.17.

1/ RTEMS patch
--------------

This patch adds 2 libraries :

  • a simplified SUN RPC library
  • the Remote Debugger library

The configuration command is the following :
../rtems4/configure --target=i386-rtemself --enable-rtemsbsp=pc386
--enable-rdbg

The SUN RPC library is built only if networking is set.
The RDBG library is built if networking and enable-rdbg are set.

The function used to initialize the debugger is :

rtems_rdbg_initialize ();

A special function has been created to force a task to be
in a "debug" state : enterRdbg().
The use of this function is not mandatory.

2/ GDB-4.17 patch
-----------------

This patch create a new RTEMS target for GDB-4.17.

The configuration command is the following :
./configure --enable-shared --target=i386RTEMS

To connect to a target, use :

target rtems [your_site_address]

Then, attach the target using : attach 1

And... Debug ;)

You can obtain the original GDB-4.17 on
ftp://ftp.debian.org/debian/dists/stable/main/source/devel/gdb_4.17.orig.tar.gz

This has been tested from a Debian 2.0.1 linux host.

  • Property mode set to 100644
File size: 4.2 KB
Line 
1/* @(#)xdr_mem.c        2.1 88/07/29 4.0 RPCSRC */
2/*
3 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
4 * unrestricted use provided that this legend is included on all tape
5 * media and as a part of the software program in whole or part.  Users
6 * may copy or modify Sun RPC without charge, but are not authorized
7 * to license or distribute it to anyone else except as part of a product or
8 * program developed by the user.
9 *
10 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
11 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
12 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
13 *
14 * Sun RPC is provided with no support and without any obligation on the
15 * part of Sun Microsystems, Inc. to assist in its use, correction,
16 * modification or enhancement.
17 *
18 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
19 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
20 * OR ANY PART THEREOF.
21 *
22 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
23 * or profits or other special, indirect and consequential damages, even if
24 * Sun has been advised of the possibility of such damages.
25 *
26 * Sun Microsystems, Inc.
27 * 2550 Garcia Avenue
28 * Mountain View, California  94043
29 */
30#if !defined(lint) && defined(SCCSIDS)
31static char sccsid[] = "@(#)xdr_mem.c 1.19 87/08/11 Copyr 1984 Sun Micro";
32#endif
33
34/*
35 * xdr_mem.h, XDR implementation using memory buffers.
36 *
37 * Copyright (C) 1984, Sun Microsystems, Inc.
38 *
39 * If you have some data to be interpreted as external data representation
40 * or to be converted to external data representation in a memory buffer,
41 * then this is the package for you.
42 *
43 */
44
45
46#include <string.h>     /* bcopy */
47#include <rpc/types.h>
48#include <rpc/xdr.h>
49#include <netinet/in.h>
50
51static bool_t   xdrmem_getlong();
52static bool_t   xdrmem_putlong();
53static bool_t   xdrmem_getbytes();
54static bool_t   xdrmem_putbytes();
55static u_int    xdrmem_getpos();
56static bool_t   xdrmem_setpos();
57static long *   xdrmem_inline();
58static void     xdrmem_destroy();
59
60static struct   xdr_ops xdrmem_ops = {
61        xdrmem_getlong,
62        xdrmem_putlong,
63        xdrmem_getbytes,
64        xdrmem_putbytes,
65        xdrmem_getpos,
66        xdrmem_setpos,
67        xdrmem_inline,
68        xdrmem_destroy
69};
70
71/*
72 * The procedure xdrmem_create initializes a stream descriptor for a
73 * memory buffer. 
74 */
75void
76xdrmem_create(xdrs, addr, size, op)
77        register XDR *xdrs;
78        caddr_t addr;
79        u_int size;
80        enum xdr_op op;
81{
82
83        xdrs->x_op = op;
84        xdrs->x_ops = &xdrmem_ops;
85        xdrs->x_private = xdrs->x_base = addr;
86        xdrs->x_handy = size;
87}
88
89static void
90xdrmem_destroy(/*xdrs*/)
91        /*XDR *xdrs;*/
92{
93}
94
95static bool_t
96xdrmem_getlong(xdrs, lp)
97        register XDR *xdrs;
98        long *lp;
99{
100
101        if ((xdrs->x_handy -= sizeof(long)) < 0)
102                return (FALSE);
103        *lp = (long)ntohl((u_long)(*((long *)(xdrs->x_private))));
104        xdrs->x_private += sizeof(long);
105        return (TRUE);
106}
107
108static bool_t
109xdrmem_putlong(xdrs, lp)
110        register XDR *xdrs;
111        long *lp;
112{
113
114        if ((xdrs->x_handy -= sizeof(long)) < 0)
115                return (FALSE);
116        *(long *)xdrs->x_private = (long)htonl((u_long)(*lp));
117        xdrs->x_private += sizeof(long);
118        return (TRUE);
119}
120
121static bool_t
122xdrmem_getbytes(xdrs, addr, len)
123        register XDR *xdrs;
124        caddr_t addr;
125        register u_int len;
126{
127
128        if ((xdrs->x_handy -= len) < 0)
129                return (FALSE);
130        bcopy(xdrs->x_private, addr, len);
131        xdrs->x_private += len;
132        return (TRUE);
133}
134
135static bool_t
136xdrmem_putbytes(xdrs, addr, len)
137        register XDR *xdrs;
138        caddr_t addr;
139        register u_int len;
140{
141
142        if ((xdrs->x_handy -= len) < 0)
143                return (FALSE);
144        bcopy(addr, xdrs->x_private, len);
145        xdrs->x_private += len;
146        return (TRUE);
147}
148
149static u_int
150xdrmem_getpos(xdrs)
151        register XDR *xdrs;
152{
153
154        return ((u_int)xdrs->x_private - (u_int)xdrs->x_base);
155}
156
157static bool_t
158xdrmem_setpos(xdrs, pos)
159        register XDR *xdrs;
160        u_int pos;
161{
162        register caddr_t newaddr = xdrs->x_base + pos;
163        register caddr_t lastaddr = xdrs->x_private + xdrs->x_handy;
164
165        if ((long)newaddr > (long)lastaddr)
166                return (FALSE);
167        xdrs->x_private = newaddr;
168        xdrs->x_handy = (int)lastaddr - (int)newaddr;
169        return (TRUE);
170}
171
172static long *
173xdrmem_inline(xdrs, len)
174        register XDR *xdrs;
175        int len;
176{
177        long *buf = 0;
178
179        if (xdrs->x_handy >= len) {
180                xdrs->x_handy -= len;
181                buf = (long *) xdrs->x_private;
182                xdrs->x_private += len;
183        }
184        return (buf);
185}
Note: See TracBrowser for help on using the repository browser.