forked from Imagelibrary/rtems
2001-05-15 Joel Sherrill <joel@OARcorp.com>
* 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.
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
2001-05-15 Joel Sherrill <joel@OARcorp.com>
|
||||||
|
|
||||||
|
* 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.
|
||||||
2002-05-14 Thomas Doerfler <Thomas.Doerfler@imd-systems.de>
|
2002-05-14 Thomas Doerfler <Thomas.Doerfler@imd-systems.de>
|
||||||
|
|
||||||
* src/m68k/rdbg_cpu_asm.S: Per PR163, Fix incorrect assumption that
|
* src/m68k/rdbg_cpu_asm.S: Per PR163, Fix incorrect assumption that
|
||||||
|
|||||||
120
c/src/librdbg/src/i386/any/remdeb_svc.c
Normal file
120
c/src/librdbg/src/i386/any/remdeb_svc.c
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
#include <rpc/types.h>
|
||||||
|
#include <rpc/rpc.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <bsp.h>
|
||||||
|
#include <rdbg/servrpc.h>
|
||||||
|
#include <rdbg/remdeb.h>
|
||||||
|
#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;
|
||||||
|
}
|
||||||
120
c/src/librdbg/src/m68k/any/remdeb_svc.c
Normal file
120
c/src/librdbg/src/m68k/any/remdeb_svc.c
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
#include <rpc/types.h>
|
||||||
|
#include <rpc/rpc.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <bsp.h>
|
||||||
|
#include <rdbg/servrpc.h>
|
||||||
|
#include <rdbg/remdeb.h>
|
||||||
|
#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;
|
||||||
|
}
|
||||||
120
c/src/librdbg/src/powerpc/new_exception_processing/remdeb_svc.c
Normal file
120
c/src/librdbg/src/powerpc/new_exception_processing/remdeb_svc.c
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
#include <rpc/types.h>
|
||||||
|
#include <rpc/rpc.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <bsp.h>
|
||||||
|
#include <rdbg/servrpc.h>
|
||||||
|
#include <rdbg/remdeb.h>
|
||||||
|
#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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user