From fe36c017398e893e52598f42ca9dab0cffec01c8 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Wed, 15 May 2002 15:10:16 +0000 Subject: 2001-05-15 Joel Sherrill * src/i386/any/remdeb_svc.c, src/m68k/any/remdeb_svc.c, src/powerpc/new_exception_processing/remdeb_svc.c: Readding as I accidentally deleted the incorrectly empty versions. --- c/src/librdbg/src/i386/any/remdeb_svc.c | 120 ++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 c/src/librdbg/src/i386/any/remdeb_svc.c (limited to 'c/src/librdbg/src/i386/any/remdeb_svc.c') diff --git a/c/src/librdbg/src/i386/any/remdeb_svc.c b/c/src/librdbg/src/i386/any/remdeb_svc.c new file mode 100644 index 0000000000..c76159ea26 --- /dev/null +++ b/c/src/librdbg/src/i386/any/remdeb_svc.c @@ -0,0 +1,120 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#define printf(c) +/*HEADER_START*/ +#define RTEMS_PORT 2071 +#define RTEMS_BACK_PORT 2073 +/* + * Sun request values for the remote ptrace system call + */ + + /* + * Memory data for read/write text or data. The size is in data. The target + * addr is in the addr field. + * Be careful before modifying because this value goes into internal + * pipes and is allocated on stack too. Pipes and/or the stack could + * become too small if this value gets incremented. + */ + /* now open_connex() routine which establishes a connection to server */ +#define DEBUGGER_IS_GDB 0x2 /* */ + /* now close_connex() routine which detaches from server */ + /* now send_signal() routine which sends signals to processes like kill(2) */ + /* now wait_info() routine which returns results of polling the wait status + of a process/actor. It may return 0 if running, else pid or -1 */ + /* now ptrace() routine. This matches the Sun UNIX ptrace as well as + some additions */ + /* now define the actual calls we support */ +const char* names [] = { + "NULLPROC", "OPEN_CONNEX", "SEND_SIGNAL", "name3", + "name4", "name5", "name6", "name7", + "name8", "name9", "CLOSE_CONNEX", "PTRACE", + "name12", "WAIT_INFO", "name14", "name15", + "name16", "GET_SIGNAL_NAMES", "name18" +}; + +void +remotedeb_2(struct svc_req *rqstp, register SVCXPRT *transp) +{ + union { + open_in open_connex_2_arg; + signal_in send_signal_2_arg; + close_in close_connex_2_arg; + ptrace_in ptrace_2_arg; + wait_in wait_info_2_arg; + } argument; + char *result; + xdrproc_t _xdr_argument, _xdr_result; + char *(*local)(char *, struct svc_req *); + + DPRINTF (("remotedeb_2: %s (%d)\n", + (unsigned) rqstp->rq_proc < + (unsigned) (sizeof names / sizeof names[0]) ? + names [rqstp->rq_proc] : "???", + (int) rqstp->rq_proc)); + + switch (rqstp->rq_proc) { + case NULLPROC: + (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL); + return; + + case OPEN_CONNEX: + _xdr_argument = (xdrproc_t) xdr_open_in; + _xdr_result = (xdrproc_t) xdr_open_out; + local = (char *(*)(char *, struct svc_req *)) open_connex_2_svc; + break; + + case SEND_SIGNAL: + _xdr_argument = (xdrproc_t) xdr_signal_in; + _xdr_result = (xdrproc_t) xdr_signal_out; + local = (char *(*)(char *, struct svc_req *)) send_signal_2_svc; + break; + + case CLOSE_CONNEX: + _xdr_argument = (xdrproc_t) xdr_close_in; + _xdr_result = (xdrproc_t) xdr_void; + local = (char *(*)(char *, struct svc_req *)) close_connex_2_svc; + break; + + case PTRACE: + _xdr_argument = (xdrproc_t) xdr_ptrace_in; + _xdr_result = (xdrproc_t) xdr_ptrace_out; + local = (char *(*)(char *, struct svc_req *)) ptrace_2_svc; + break; + + case WAIT_INFO: + _xdr_argument = (xdrproc_t) xdr_wait_in; + _xdr_result = (xdrproc_t) xdr_wait_out; + local = (char *(*)(char *, struct svc_req *)) wait_info_2_svc; + break; + + case GET_SIGNAL_NAMES: + _xdr_argument = (xdrproc_t) xdr_void; + _xdr_result = (xdrproc_t) xdr_get_signal_names_out; + local = (char *(*)(char *, struct svc_req *)) get_signal_names_2_svc; + break; + + default: + svcerr_noproc (transp); + return; + } + memset ((char *)&argument, 0, sizeof (argument)); + if (!svc_getargs (transp, _xdr_argument, (caddr_t) &argument)) { + svcerr_decode (transp); + return; + } + result = (*local)((char *)&argument, rqstp); + if (result != NULL && !svc_sendreply(transp, _xdr_result, result)) { + svcerr_systemerr (transp); + } + if (!svc_freeargs (transp, _xdr_argument, (caddr_t) &argument)) { + printf( "unable to free arguments"); + exit (1); + } + return; +} -- cgit v1.2.3