2002-02-01 Eric Valette <valette@crf.canon.fr>

* So many patches have been posted recently on the mailing list and 
	because we were unable to find correct solution to compile on various 
	linux distros (due to rpcgen incompatibilities), and because the coding 
	style of rdbg was rather inconsistant among various pieces of code, I 
	decided to:
	    1) make some cleaning regarding global coding style (using
	       indent + manual edits),
	    2) incorporate/review the paches send by various people
	       (S. Holford, T. Strauman),
	    3) Fix the bug due to varying rpcgen code generation
	       in remdeb_svc.c,
	    4) Remove some dead code,
	    5) Apply a patches enabling to call enterRdbg imediately
	       after rdbg initialization is done,

	NB : the paches is huge but it is mainly due to coding styke chnages. 
	Only few lines of codes have been really changed and they do not impact 
	rdbg functionnality (AFAIKT).

	* include/rdbg/servrpc.h, include/rdbg/i386/rdbg_f.h,
	include/rdbg/m68k/rdbg_f.h, include/rdbg/powerpc/rdbg_f.h,
	src/_servtgt.c, src/awk.svc, src/excep.c, src/ptrace.c, src/rdbg.c,
	src/remdeb.x, src/servbkpt.c, src/servcon.c, src/servrpc.c,
	src/servtgt.c, src/servtsp.c, src/servutil.c, src/i386/excep_f.c,
	src/i386/rdbg_f.c, src/i386/any/Makefile.am, src/i386/any/remdeb.h,
	src/i386/any/remdeb_svc.c, src/i386/any/remdeb_xdr.c,
	src/m68k/excep_f.c, src/m68k/rdbg_f.c, src/m68k/any/Makefile.am,
	src/m68k/any/remdeb.h, src/m68k/any/remdeb_svc.c,
	src/m68k/any/remdeb_xdr.c, src/powerpc/excep_f.c, src/powerpc/rdbg_f.c,
	src/powerpc/new_exception_processing/Makefile.am,
	src/powerpc/new_exception_processing/remdeb.h,
	src/powerpc/new_exception_processing/remdeb_svc.c,
	src/powerpc/new_exception_processing/remdeb_xdr.c: Modified.
This commit is contained in:
Joel Sherrill
2002-02-01 19:33:15 +00:00
parent bdb86b4efe
commit 97f6256fd2
10 changed files with 2343 additions and 3119 deletions

View File

@@ -34,123 +34,3 @@
src/powerpc/new_exception_processing/remdeb_svc.c, src/powerpc/new_exception_processing/remdeb_svc.c,
src/powerpc/new_exception_processing/remdeb_xdr.c: Modified. src/powerpc/new_exception_processing/remdeb_xdr.c: Modified.
2002-01-18 Till Straumann <strauman@slac.stanford.edu>
* src/powerpc/excep_f.c: This patch addresses the following issues:
- exception handler needs to enable MSR_FP if the interrupted
thread is FP enabled.
- printk message for MSR fixed and added stacktrace
NOTE: this requires the stacktrace patch to
lib/libbsp/powerpc/shared/vectors/vector_init.c
(#ifdef DDEBUG only, however)
2001-01-18 Joel Sherrill <joel@OARcorp.com>
* src/powerpc/new_exception_processing/remdeb_svc.c: Corrected
macro using variable arguments.
2001-01-18 Joel Sherrill <joel@OARcorp.com>
* src/powerpc/new_exception_processing/remdeb.h,
src/powerpc/new_exception_processing/remdeb_xdr.c: Regenerated since
I updated the main RTEMS development machine to RedHat 7.2 and
apparently got a new version of rpcgen.
2001-10-30 Victor V. Vengerov <vvv@oktet.ru>
* src/m68k/rdbg_cpu_asm.S: Now compiles on ColdFire.
2001-10-17 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Fix latent bug exposed by removal of config.cache's
which prevented powerpc targets librdbg from building.
2001-10-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* .cvsignore: Add autom4te.cache for autoconf > 2.52.
* configure.in: Remove.
* configure.ac: New file, generated from configure.in by autoupdate.
2001-09-23 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* include/rdbg/i386/Makefile.am: Use 'PREINSTALL_FILES ='.
* include/rdbg/m68k/Makefile.am: Use 'PREINSTALL_FILES ='.
* include/rdbg/powerpc/Makefile.am: Use 'PREINSTALL_FILES ='.
* include/rdbg/Makefile.am: Use 'PREINSTALL_FILES ='.
* src/i386/any/Makefile.am: Use 'PREINSTALL_FILES ='.
* src/m68k/any/Makefile.am: Use 'PREINSTALL_FILES ='.
* src/powerpc/new_exception_processing/Makefile.am: Use 'PREINSTALL_FILES ='.
2001-09-22 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* src/i386/any/Makefile.am: Move MAINTAINERCLEANFILES before the
includes and use MAINTAINERCLEANFILES = to make automake-1.5 happy.
* src/m68k/any/Makefile.am: Ditto.
* src/powerpc/new_exception_processing/Makefile.am: Ditto.
2001-09-14 Eric Norum <eric.norum@usask.ca>
* include/rdbg/rdbg.h, src/ptrace.c: Modifications to make gcc 3.x happy.
2001-04-20 Eric Valette <valette@crf.canon.fr>
* mcp750 directory renamed new_exception processing as it
supports many more CPU models.
* configure.in, src/powerpc/Makefile.am,
src/powerpc/new_exception_processing/Makefile.am,
src/powerpc/new_exception_processing/remdeb_f.x: New files
formerly in mcp750 plus modifications.
* src/powerpc/mcp750/.cvsignore, src/powerpc/mcp750/Makefile.am,
src/powerpc/mcp750/remdeb.h, src/powerpc/mcp750/remdeb_f.x,
src/powerpc/mcp750/remdeb_svc.c, src/powerpc/mcp750/remdeb_xdr.c:
Removed when moved to new_exception_processing.
* configure.in, src/powerpc/Makefile.am,
src/powerpc/new_exception_processing/Makefile.am,
src/powerpc/new_exception_processing/remdeb_f.x: Modified as
part of this effort to add support for the MPC8xx.
2001-02-04 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* include/rdbg/Makefile.am, include/rdbg/i386/Makefile.am,
include/rdbg/m68k/Makefile.am, include/rdbg/powerpc/Makefile.am:
Cleanup including more proper style on include files.
2000-11-09 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Use ... instead of RTEMS_TOPdir in ACLOCAL_AMFLAGS.
2000-11-02 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Switch to ACLOCAL_AMFLAGS = -I $(RTEMS_TOPdir)/aclocal.
2000-10-25 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: ACLOCAL_AMFLAGS= -I $(RTEMS_TOPdir)/macros.
Switch to GNU canonicalization.
2000-10-19 Antti P Miettinen <anmietti@trshp.ntc.nokia.com>
* src/m68k/any/remdeb.h, src/m68k/any/remdeb_xdr.c,
src/m68k/any/remdeb_svc.c: New files missed in merger.
2000-10-19 Antti P Miettinen <anmietti@trshp.ntc.nokia.com>
* configure.in: Add m68k support.
* include/rdbg/m68k, src/m68k, src/m68k/any: New subdirectory.
* src/_servtgt.c: add status text to prinf upon task creation failure.
* src/rdbg.c: reconnect rdbg exception handlers upon RPC calls.
* src/m68k/Makefile.am, src/m68k/any/Makefile.am,
src/m68k/any/remdeb_f.x, src/m68k/any/.cvsignore,
src/m68k/any/remdeb.h, src/m68k/any/remdeb_xdr.c,
src/m68k/any/remdeb_svc.c, src/m68k/excep_f.c, src/m68k/rdbg_cpu_asm.S,
src/m68k/rdbg_f.c, src/m68k/.cvsignore: New files.
2000-09-04 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* src/i386/any/Makefile.am, src/powerpc/mcp750/Makefile.am: Include
compile.am
2000-08-10 Joel Sherrill <joel@OARcorp.com>
* ChangeLog: New file.

View File

@@ -8,6 +8,7 @@
#include <rpc/rpc.h> #include <rpc/rpc.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@@ -36,6 +37,7 @@ extern "C" {
* Sun request values for the remote ptrace system call * Sun request values for the remote ptrace system call
*/ */
enum ptracereq { enum ptracereq {
RPT_TRACEME = 0, RPT_TRACEME = 0,
RPT_CHILDDONE = 0, RPT_CHILDDONE = 0,
@@ -226,42 +228,9 @@ extern "C" {
u_int CHAR_DATA_len; u_int CHAR_DATA_len;
char *CHAR_DATA_val; char *CHAR_DATA_val;
} CHAR_DATA; } CHAR_DATA;
#define XRY_MAX_INST_BUFF 128
#define XRY_MAX_INSTANCES 16
#ifndef XRY_MAX_CMD_STR
#define XRY_MAX_CMD_STR 320
#endif /* REMDEB_H */
struct xry_inst {
u_char flags;
u_char type;
u_char sub_type;
u_char res_type;
u_long value;
u_long value2;
};
typedef struct xry_inst xry_inst;
struct instance {
struct xry_inst instances[XRY_MAX_INSTANCES];
u_char buffer[XRY_MAX_INST_BUFF];
};
typedef struct instance instance;
struct instance_union {
bool_t instances;
union {
instance inst;
char *buffer;
} instance_union_u;
};
typedef struct instance_union instance_union;
typedef char *one_arg; typedef char *one_arg;
#define XRY_MAX_OBJ_NAME 32 /* now open_connex() routine which establishes a connection to server */
/*
* now open_connex() routine which establishes a connection to server
*/
enum debug_type { enum debug_type {
DEBTYP_PROCESS = 0, DEBTYP_PROCESS = 0,
@@ -290,9 +259,7 @@ extern "C" {
u_short server_vers; u_short server_vers;
}; };
typedef struct open_out open_out; typedef struct open_out open_out;
/* /* now close_connex() routine which detaches from server */
* now close_connex() routine which detaches from server
*/
enum close_control { enum close_control {
CLOSE_IGNORE = 0, CLOSE_IGNORE = 0,
@@ -305,9 +272,7 @@ extern "C" {
close_control control; close_control control;
}; };
typedef struct close_in close_in; typedef struct close_in close_in;
/* /* now send_signal() routine which sends signals to processes like kill(2) */
* now send_signal() routine which sends signals to processes like kill(2)
*/
struct signal_in { struct signal_in {
int pid; int pid;
@@ -320,10 +285,8 @@ extern "C" {
int errNo; int errNo;
}; };
typedef struct signal_out signal_out; typedef struct signal_out signal_out;
/* /* now wait_info() routine which returns results of polling the wait status
* 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 */
* of a process/actor. It may return 0 if running, else pid or -1
*/
enum stop_code { enum stop_code {
STOP_ERROR = 0, STOP_ERROR = 0,
@@ -357,10 +320,8 @@ extern "C" {
u_long thread; u_long thread;
}; };
typedef struct wait_out wait_out; typedef struct wait_out wait_out;
/* /* now ptrace() routine. This matches the Sun UNIX ptrace as well as
* now ptrace() routine. This matches the Sun UNIX ptrace as well as some additions */
* some additions
*/
#define PTRFLG_FORCE 1 #define PTRFLG_FORCE 1
#define PTRFLG_NON_OWNER 2 #define PTRFLG_NON_OWNER 2
#define PTRFLG_FREE 4 #define PTRFLG_FREE 4
@@ -428,9 +389,7 @@ extern "C" {
all_signals signals; all_signals signals;
}; };
typedef struct get_signal_names_out get_signal_names_out; typedef struct get_signal_names_out get_signal_names_out;
/* /* now define the actual calls we support */
* now define the actual calls we support
*/
#define REMDEB_H #define REMDEB_H
#endif #endif
@@ -455,8 +414,7 @@ extern "C" {
extern wait_out * wait_info_2_svc(wait_in *, struct svc_req *); extern wait_out * wait_info_2_svc(wait_in *, struct svc_req *);
#define GET_SIGNAL_NAMES 17 #define GET_SIGNAL_NAMES 17
extern get_signal_names_out * get_signal_names_2(void *, CLIENT *); extern get_signal_names_out * get_signal_names_2(void *, CLIENT *);
extern get_signal_names_out *get_signal_names_2_svc (void *, extern get_signal_names_out * get_signal_names_2_svc(void *, struct svc_req *);
struct svc_req *);
extern int remotedeb_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t); extern int remotedeb_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
#else /* K&R C */ #else /* K&R C */
@@ -497,9 +455,6 @@ extern "C" {
extern bool_t xdr_ptrace_addr_data_in (XDR *, ptrace_addr_data_in*); extern bool_t xdr_ptrace_addr_data_in (XDR *, ptrace_addr_data_in*);
extern bool_t xdr_ptrace_addr_data_out (XDR *, ptrace_addr_data_out*); extern bool_t xdr_ptrace_addr_data_out (XDR *, ptrace_addr_data_out*);
extern bool_t xdr_CHAR_DATA (XDR *, CHAR_DATA*); extern bool_t xdr_CHAR_DATA (XDR *, CHAR_DATA*);
extern bool_t xdr_xry_inst (XDR *, xry_inst *);
extern bool_t xdr_instance (XDR *, instance *);
extern bool_t xdr_instance_union (XDR *, instance_union *);
extern bool_t xdr_one_arg (XDR *, one_arg*); extern bool_t xdr_one_arg (XDR *, one_arg*);
extern bool_t xdr_debug_type (XDR *, debug_type*); extern bool_t xdr_debug_type (XDR *, debug_type*);
extern bool_t xdr_open_in (XDR *, open_in*); extern bool_t xdr_open_in (XDR *, open_in*);
@@ -536,9 +491,6 @@ extern "C" {
extern bool_t xdr_ptrace_addr_data_in (); extern bool_t xdr_ptrace_addr_data_in ();
extern bool_t xdr_ptrace_addr_data_out (); extern bool_t xdr_ptrace_addr_data_out ();
extern bool_t xdr_CHAR_DATA (); extern bool_t xdr_CHAR_DATA ();
extern bool_t xdr_xry_inst ();
extern bool_t xdr_instance ();
extern bool_t xdr_instance_union ();
extern bool_t xdr_one_arg (); extern bool_t xdr_one_arg ();
extern bool_t xdr_debug_type (); extern bool_t xdr_debug_type ();
extern bool_t xdr_open_in (); extern bool_t xdr_open_in ();
@@ -566,4 +518,5 @@ extern "C" {
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* !_REMDEB_H_RPCGEN */ #endif /* !_REMDEB_H_RPCGEN */

View File

@@ -1,133 +0,0 @@
#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 fprintf(a,b) printf(b)
/*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.
*/
#ifndef XRY_MAX_CMD_STR
#endif /* REMDEB_H */
/*
* 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)) {
fprintf (stderr, "unable to free arguments");
exit (1);
}
return;
}

View File

@@ -34,11 +34,11 @@ xdr_UDP_MSG (XDR * xdrs, UDP_MSG * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* /*
* Sun request values for the remote ptrace system call * Sun request values for the remote ptrace system call
*/ */
bool_t bool_t
xdr_ptracereq (XDR *xdrs, ptracereq *objp) xdr_ptracereq (XDR *xdrs, ptracereq *objp)
{ {
@@ -57,7 +57,7 @@ xdr_xdr_regs (XDR * xdrs, xdr_regs * objp)
int i; int i;
if (xdrs->x_op == XDR_ENCODE) { if (xdrs->x_op == XDR_ENCODE) {
buf = XDR_INLINE (xdrs, 19 * BYTES_PER_XDR_UNIT); buf = XDR_INLINE (xdrs, ( 19 ) * BYTES_PER_XDR_UNIT);
if (buf == NULL) { if (buf == NULL) {
if (!xdr_vector (xdrs, (char *)objp->tabreg, 19, if (!xdr_vector (xdrs, (char *)objp->tabreg, 19,
sizeof (u_int), (xdrproc_t) xdr_u_int)) sizeof (u_int), (xdrproc_t) xdr_u_int))
@@ -66,14 +66,15 @@ xdr_xdr_regs (XDR * xdrs, xdr_regs * objp)
{ {
register u_int *genp; register u_int *genp;
for (i = 0, genp = objp->tabreg; i < 19; ++i) { for (i = 0, genp = objp->tabreg;
i < 19; ++i) {
IXDR_PUT_U_LONG(buf, *genp++); IXDR_PUT_U_LONG(buf, *genp++);
} }
} }
} }
return TRUE; return TRUE;
} else if (xdrs->x_op == XDR_DECODE) { } else if (xdrs->x_op == XDR_DECODE) {
buf = XDR_INLINE (xdrs, 19 * BYTES_PER_XDR_UNIT); buf = XDR_INLINE (xdrs, ( 19 ) * BYTES_PER_XDR_UNIT);
if (buf == NULL) { if (buf == NULL) {
if (!xdr_vector (xdrs, (char *)objp->tabreg, 19, if (!xdr_vector (xdrs, (char *)objp->tabreg, 19,
sizeof (u_int), (xdrproc_t) xdr_u_int)) sizeof (u_int), (xdrproc_t) xdr_u_int))
@@ -82,7 +83,8 @@ xdr_xdr_regs (XDR * xdrs, xdr_regs * objp)
{ {
register u_int *genp; register u_int *genp;
for (i = 0, genp = objp->tabreg; i < 19; ++i) { for (i = 0, genp = objp->tabreg;
i < 19; ++i) {
*genp++ = IXDR_GET_U_LONG(buf); *genp++ = IXDR_GET_U_LONG(buf);
} }
} }
@@ -95,7 +97,6 @@ xdr_xdr_regs (XDR * xdrs, xdr_regs * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* /*
* Memory data for read/write text or data. The size is in data. The target * Memory data for read/write text or data. The size is in data. The target
* addr is in the addr field. * addr is in the addr field.
@@ -103,8 +104,7 @@ xdr_xdr_regs (XDR * xdrs, xdr_regs * objp)
* pipes and is allocated on stack too. Pipes and/or the stack could * pipes and is allocated on stack too. Pipes and/or the stack could
* become too small if this value gets incremented. * become too small if this value gets incremented.
*/ */
bool_t bool_t xdr_xdr_mem(xdrs, objp)
xdr_xdr_mem (xdrs, objp)
XDR *xdrs; XDR *xdrs;
struct xdr_mem *objp; struct xdr_mem *objp;
{ {
@@ -160,7 +160,7 @@ xdr_xdr_break (XDR * xdrs, xdr_break * objp)
return FALSE; return FALSE;
if (!xdr_u_char (xdrs, &objp->curr_pass)) if (!xdr_u_char (xdrs, &objp->curr_pass))
return FALSE; return FALSE;
buf = XDR_INLINE (xdrs, MAX_THRD_BRK * BYTES_PER_XDR_UNIT); buf = XDR_INLINE (xdrs, ( MAX_THRD_BRK ) * BYTES_PER_XDR_UNIT);
if (buf == NULL) { if (buf == NULL) {
if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK, if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK,
sizeof (u_long), (xdrproc_t) xdr_u_long)) sizeof (u_long), (xdrproc_t) xdr_u_long))
@@ -169,7 +169,8 @@ xdr_xdr_break (XDR * xdrs, xdr_break * objp)
{ {
register u_long *genp; register u_long *genp;
for (i = 0, genp = objp->thread_list; i < MAX_THRD_BRK; ++i) { for (i = 0, genp = objp->thread_list;
i < MAX_THRD_BRK; ++i) {
IXDR_PUT_U_LONG(buf, *genp++); IXDR_PUT_U_LONG(buf, *genp++);
} }
} }
@@ -201,7 +202,7 @@ xdr_xdr_break (XDR * xdrs, xdr_break * objp)
return FALSE; return FALSE;
if (!xdr_u_char (xdrs, &objp->curr_pass)) if (!xdr_u_char (xdrs, &objp->curr_pass))
return FALSE; return FALSE;
buf = XDR_INLINE (xdrs, MAX_THRD_BRK * BYTES_PER_XDR_UNIT); buf = XDR_INLINE (xdrs, ( MAX_THRD_BRK ) * BYTES_PER_XDR_UNIT);
if (buf == NULL) { if (buf == NULL) {
if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK, if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK,
sizeof (u_long), (xdrproc_t) xdr_u_long)) sizeof (u_long), (xdrproc_t) xdr_u_long))
@@ -210,7 +211,8 @@ xdr_xdr_break (XDR * xdrs, xdr_break * objp)
{ {
register u_long *genp; register u_long *genp;
for (i = 0, genp = objp->thread_list; i < MAX_THRD_BRK; ++i) { for (i = 0, genp = objp->thread_list;
i < MAX_THRD_BRK; ++i) {
*genp++ = IXDR_GET_U_LONG(buf); *genp++ = IXDR_GET_U_LONG(buf);
} }
} }
@@ -259,9 +261,7 @@ xdr_KernThread (XDR * xdrs, KernThread * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
bool_t xdr_thread_list(xdrs, objp)
bool_t
xdr_thread_list (xdrs, objp)
XDR *xdrs; XDR *xdrs;
struct thread_list *objp; struct thread_list *objp;
{ {
@@ -286,16 +286,12 @@ xdr_ptrace_addr_data_in (XDR * xdrs, ptrace_addr_data_in * objp)
return FALSE; return FALSE;
break; break;
case RPT_PSETTHREADREGS: case RPT_PSETTHREADREGS:
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->ptrace_addr_data_in_u.pregs.pregs_val, (u_int *) &objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0,
(xdrs, (char **) &objp->ptrace_addr_data_in_u.pregs.pregs_val,
(u_int *) & objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0,
sizeof (u_int), (xdrproc_t) xdr_u_int)) sizeof (u_int), (xdrproc_t) xdr_u_int))
return FALSE; return FALSE;
break; break;
case RPT_PSETREGS: case RPT_PSETREGS:
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->ptrace_addr_data_in_u.pregs.pregs_val, (u_int *) &objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0,
(xdrs, (char **) &objp->ptrace_addr_data_in_u.pregs.pregs_val,
(u_int *) & objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0,
sizeof (u_int), (xdrproc_t) xdr_u_int)) sizeof (u_int), (xdrproc_t) xdr_u_int))
return FALSE; return FALSE;
break; break;
@@ -340,16 +336,12 @@ xdr_ptrace_addr_data_out (XDR * xdrs, ptrace_addr_data_out * objp)
return FALSE; return FALSE;
break; break;
case RPT_PGETREGS: case RPT_PGETREGS:
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->ptrace_addr_data_out_u.pregs.pregs_val, (u_int *) &objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0,
(xdrs, (char **) &objp->ptrace_addr_data_out_u.pregs.pregs_val,
(u_int *) & objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0,
sizeof (u_int), (xdrproc_t) xdr_u_int)) sizeof (u_int), (xdrproc_t) xdr_u_int))
return FALSE; return FALSE;
break; break;
case RPT_PGETTHREADREGS: case RPT_PGETTHREADREGS:
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->ptrace_addr_data_out_u.pregs.pregs_val, (u_int *) &objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0,
(xdrs, (char **) &objp->ptrace_addr_data_out_u.pregs.pregs_val,
(u_int *) & objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0,
sizeof (u_int), (xdrproc_t) xdr_u_int)) sizeof (u_int), (xdrproc_t) xdr_u_int))
return FALSE; return FALSE;
break; break;
@@ -390,73 +382,11 @@ xdr_CHAR_DATA (XDR * xdrs, CHAR_DATA * objp)
{ {
register int32_t *buf; register int32_t *buf;
if (!xdr_bytes if (!xdr_bytes (xdrs, (char **)&objp->CHAR_DATA_val, (u_int *) &objp->CHAR_DATA_len, NET_SAFE))
(xdrs, (char **) &objp->CHAR_DATA_val, (u_int *) & objp->CHAR_DATA_len,
NET_SAFE))
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
#ifndef XRY_MAX_CMD_STR
#endif /* REMDEB_H */
bool_t
xdr_xry_inst (XDR * xdrs, xry_inst * objp)
{
register int32_t *buf;
if (!xdr_u_char (xdrs, &objp->flags))
return FALSE;
if (!xdr_u_char (xdrs, &objp->type))
return FALSE;
if (!xdr_u_char (xdrs, &objp->sub_type))
return FALSE;
if (!xdr_u_char (xdrs, &objp->res_type))
return FALSE;
if (!xdr_u_long (xdrs, &objp->value))
return FALSE;
if (!xdr_u_long (xdrs, &objp->value2))
return FALSE;
return TRUE;
}
bool_t
xdr_instance (XDR * xdrs, instance * objp)
{
register int32_t *buf;
int i;
if (!xdr_vector (xdrs, (char *) objp->instances, XRY_MAX_INSTANCES,
sizeof (xry_inst), (xdrproc_t) xdr_xry_inst))
return FALSE;
if (!xdr_vector (xdrs, (char *) objp->buffer, XRY_MAX_INST_BUFF,
sizeof (u_char), (xdrproc_t) xdr_u_char))
return FALSE;
return TRUE;
}
bool_t
xdr_instance_union (XDR * xdrs, instance_union * objp)
{
register int32_t *buf;
if (!xdr_bool (xdrs, &objp->instances))
return FALSE;
switch (objp->instances) {
case TRUE:
if (!xdr_instance (xdrs, &objp->instance_union_u.inst))
return FALSE;
break;
case FALSE:
if (!xdr_string (xdrs, &objp->instance_union_u.buffer, XRY_MAX_CMD_STR))
return FALSE;
break;
default:
return FALSE;
}
return TRUE;
}
bool_t bool_t
xdr_one_arg (XDR *xdrs, one_arg *objp) xdr_one_arg (XDR *xdrs, one_arg *objp)
{ {
@@ -466,10 +396,7 @@ xdr_one_arg (XDR * xdrs, one_arg * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* now open_connex() routine which establishes a connection to server */
/*
* now open_connex() routine which establishes a connection to server
*/
bool_t bool_t
xdr_debug_type (XDR *xdrs, debug_type *objp) xdr_debug_type (XDR *xdrs, debug_type *objp)
@@ -480,7 +407,6 @@ xdr_debug_type (XDR * xdrs, debug_type * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
#define DEBUGGER_IS_GDB 0x2 /* */ #define DEBUGGER_IS_GDB 0x2 /* */
bool_t bool_t
@@ -527,7 +453,8 @@ xdr_open_out (XDR * xdrs, open_out * objp)
{ {
register u_int *genp; register u_int *genp;
for (i = 0, genp = objp->pad; i < 4; ++i) { for (i = 0, genp = objp->pad;
i < 4; ++i) {
IXDR_PUT_U_LONG(buf, *genp++); IXDR_PUT_U_LONG(buf, *genp++);
} }
} }
@@ -556,7 +483,8 @@ xdr_open_out (XDR * xdrs, open_out * objp)
{ {
register u_int *genp; register u_int *genp;
for (i = 0, genp = objp->pad; i < 4; ++i) { for (i = 0, genp = objp->pad;
i < 4; ++i) {
*genp++ = IXDR_GET_U_LONG(buf); *genp++ = IXDR_GET_U_LONG(buf);
} }
} }
@@ -586,10 +514,7 @@ xdr_open_out (XDR * xdrs, open_out * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* now close_connex() routine which detaches from server */
/*
* now close_connex() routine which detaches from server
*/
bool_t bool_t
xdr_close_control (XDR *xdrs, close_control *objp) xdr_close_control (XDR *xdrs, close_control *objp)
@@ -610,10 +535,7 @@ xdr_close_in (XDR * xdrs, close_in * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* now send_signal() routine which sends signals to processes like kill(2) */
/*
* now send_signal() routine which sends signals to processes like kill(2)
*/
bool_t bool_t
xdr_signal_in (XDR *xdrs, signal_in *objp) xdr_signal_in (XDR *xdrs, signal_in *objp)
@@ -638,11 +560,8 @@ xdr_signal_out (XDR * xdrs, signal_out * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* 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 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
*/
bool_t bool_t
xdr_stop_code (XDR *xdrs, stop_code *objp) xdr_stop_code (XDR *xdrs, stop_code *objp)
@@ -669,6 +588,7 @@ xdr_wait_out (XDR * xdrs, wait_out * objp)
{ {
register int32_t *buf; register int32_t *buf;
if (xdrs->x_op == XDR_ENCODE) { if (xdrs->x_op == XDR_ENCODE) {
buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT);
if (buf == NULL) { if (buf == NULL) {
@@ -765,11 +685,8 @@ xdr_wait_out (XDR * xdrs, wait_out * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* now ptrace() routine. This matches the Sun UNIX ptrace as well as
/* some additions */
* now ptrace() routine. This matches the Sun UNIX ptrace as well as
* some additions
*/
bool_t bool_t
xdr_ptrace_in (XDR *xdrs, ptrace_in *objp) xdr_ptrace_in (XDR *xdrs, ptrace_in *objp)
@@ -818,10 +735,8 @@ xdr_all_symbols (XDR * xdrs, all_symbols * objp)
{ {
register int32_t *buf; register int32_t *buf;
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->all_symbols_val, (u_int *) &objp->all_symbols_len, ~0,
(xdrs, (char **) &objp->all_symbols_val, sizeof (one_symbol), (xdrproc_t) xdr_one_symbol))
(u_int *) & objp->all_symbols_len, ~0, sizeof (one_symbol),
(xdrproc_t) xdr_one_symbol))
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
@@ -853,6 +768,7 @@ xdr_get_text_data_out (XDR * xdrs, get_text_data_out * objp)
{ {
register int32_t *buf; register int32_t *buf;
if (xdrs->x_op == XDR_ENCODE) { if (xdrs->x_op == XDR_ENCODE) {
buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT); buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
if (buf == NULL) { if (buf == NULL) {
@@ -935,10 +851,8 @@ xdr_all_signals (XDR * xdrs, all_signals * objp)
{ {
register int32_t *buf; register int32_t *buf;
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->all_signals_val, (u_int *) &objp->all_signals_len, ~0,
(xdrs, (char **) &objp->all_signals_val, sizeof (one_signal), (xdrproc_t) xdr_one_signal))
(u_int *) & objp->all_signals_len, ~0, sizeof (one_signal),
(xdrproc_t) xdr_one_signal))
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
@@ -952,7 +866,4 @@ xdr_get_signal_names_out (XDR * xdrs, get_signal_names_out * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* now define the actual calls we support */
/*
* now define the actual calls we support
*/

View File

@@ -8,6 +8,7 @@
#include <rpc/rpc.h> #include <rpc/rpc.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@@ -36,6 +37,7 @@ extern "C" {
* Sun request values for the remote ptrace system call * Sun request values for the remote ptrace system call
*/ */
enum ptracereq { enum ptracereq {
RPT_TRACEME = 0, RPT_TRACEME = 0,
RPT_CHILDDONE = 0, RPT_CHILDDONE = 0,
@@ -213,42 +215,9 @@ extern "C" {
u_int CHAR_DATA_len; u_int CHAR_DATA_len;
char *CHAR_DATA_val; char *CHAR_DATA_val;
} CHAR_DATA; } CHAR_DATA;
#define XRY_MAX_INST_BUFF 128
#define XRY_MAX_INSTANCES 16
#ifndef XRY_MAX_CMD_STR
#define XRY_MAX_CMD_STR 320
#endif /* REMDEB_H */
struct xry_inst {
u_char flags;
u_char type;
u_char sub_type;
u_char res_type;
u_long value;
u_long value2;
};
typedef struct xry_inst xry_inst;
struct instance {
struct xry_inst instances[XRY_MAX_INSTANCES];
u_char buffer[XRY_MAX_INST_BUFF];
};
typedef struct instance instance;
struct instance_union {
bool_t instances;
union {
instance inst;
char *buffer;
} instance_union_u;
};
typedef struct instance_union instance_union;
typedef char *one_arg; typedef char *one_arg;
#define XRY_MAX_OBJ_NAME 32 /* now open_connex() routine which establishes a connection to server */
/*
* now open_connex() routine which establishes a connection to server
*/
enum debug_type { enum debug_type {
DEBTYP_PROCESS = 0, DEBTYP_PROCESS = 0,
@@ -277,9 +246,7 @@ extern "C" {
u_short server_vers; u_short server_vers;
}; };
typedef struct open_out open_out; typedef struct open_out open_out;
/* /* now close_connex() routine which detaches from server */
* now close_connex() routine which detaches from server
*/
enum close_control { enum close_control {
CLOSE_IGNORE = 0, CLOSE_IGNORE = 0,
@@ -292,9 +259,7 @@ extern "C" {
close_control control; close_control control;
}; };
typedef struct close_in close_in; typedef struct close_in close_in;
/* /* now send_signal() routine which sends signals to processes like kill(2) */
* now send_signal() routine which sends signals to processes like kill(2)
*/
struct signal_in { struct signal_in {
int pid; int pid;
@@ -307,10 +272,8 @@ extern "C" {
int errNo; int errNo;
}; };
typedef struct signal_out signal_out; typedef struct signal_out signal_out;
/* /* now wait_info() routine which returns results of polling the wait status
* 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 */
* of a process/actor. It may return 0 if running, else pid or -1
*/
enum stop_code { enum stop_code {
STOP_ERROR = 0, STOP_ERROR = 0,
@@ -344,10 +307,8 @@ extern "C" {
u_long thread; u_long thread;
}; };
typedef struct wait_out wait_out; typedef struct wait_out wait_out;
/* /* now ptrace() routine. This matches the Sun UNIX ptrace as well as
* now ptrace() routine. This matches the Sun UNIX ptrace as well as some additions */
* some additions
*/
#define PTRFLG_FORCE 1 #define PTRFLG_FORCE 1
#define PTRFLG_NON_OWNER 2 #define PTRFLG_NON_OWNER 2
#define PTRFLG_FREE 4 #define PTRFLG_FREE 4
@@ -415,9 +376,7 @@ extern "C" {
all_signals signals; all_signals signals;
}; };
typedef struct get_signal_names_out get_signal_names_out; typedef struct get_signal_names_out get_signal_names_out;
/* /* now define the actual calls we support */
* now define the actual calls we support
*/
#define REMDEB_H #define REMDEB_H
#endif #endif
@@ -442,8 +401,7 @@ extern "C" {
extern wait_out * wait_info_2_svc(wait_in *, struct svc_req *); extern wait_out * wait_info_2_svc(wait_in *, struct svc_req *);
#define GET_SIGNAL_NAMES 17 #define GET_SIGNAL_NAMES 17
extern get_signal_names_out * get_signal_names_2(void *, CLIENT *); extern get_signal_names_out * get_signal_names_2(void *, CLIENT *);
extern get_signal_names_out *get_signal_names_2_svc (void *, extern get_signal_names_out * get_signal_names_2_svc(void *, struct svc_req *);
struct svc_req *);
extern int remotedeb_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t); extern int remotedeb_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
#else /* K&R C */ #else /* K&R C */
@@ -484,9 +442,6 @@ extern "C" {
extern bool_t xdr_ptrace_addr_data_in (XDR *, ptrace_addr_data_in*); extern bool_t xdr_ptrace_addr_data_in (XDR *, ptrace_addr_data_in*);
extern bool_t xdr_ptrace_addr_data_out (XDR *, ptrace_addr_data_out*); extern bool_t xdr_ptrace_addr_data_out (XDR *, ptrace_addr_data_out*);
extern bool_t xdr_CHAR_DATA (XDR *, CHAR_DATA*); extern bool_t xdr_CHAR_DATA (XDR *, CHAR_DATA*);
extern bool_t xdr_xry_inst (XDR *, xry_inst *);
extern bool_t xdr_instance (XDR *, instance *);
extern bool_t xdr_instance_union (XDR *, instance_union *);
extern bool_t xdr_one_arg (XDR *, one_arg*); extern bool_t xdr_one_arg (XDR *, one_arg*);
extern bool_t xdr_debug_type (XDR *, debug_type*); extern bool_t xdr_debug_type (XDR *, debug_type*);
extern bool_t xdr_open_in (XDR *, open_in*); extern bool_t xdr_open_in (XDR *, open_in*);
@@ -523,9 +478,6 @@ extern "C" {
extern bool_t xdr_ptrace_addr_data_in (); extern bool_t xdr_ptrace_addr_data_in ();
extern bool_t xdr_ptrace_addr_data_out (); extern bool_t xdr_ptrace_addr_data_out ();
extern bool_t xdr_CHAR_DATA (); extern bool_t xdr_CHAR_DATA ();
extern bool_t xdr_xry_inst ();
extern bool_t xdr_instance ();
extern bool_t xdr_instance_union ();
extern bool_t xdr_one_arg (); extern bool_t xdr_one_arg ();
extern bool_t xdr_debug_type (); extern bool_t xdr_debug_type ();
extern bool_t xdr_open_in (); extern bool_t xdr_open_in ();
@@ -553,4 +505,5 @@ extern "C" {
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* !_REMDEB_H_RPCGEN */ #endif /* !_REMDEB_H_RPCGEN */

View File

@@ -1,133 +0,0 @@
#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 fprintf(a,b) printf(b)
/*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.
*/
#ifndef XRY_MAX_CMD_STR
#endif /* REMDEB_H */
/*
* 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)) {
fprintf (stderr, "unable to free arguments");
exit (1);
}
return;
}

View File

@@ -34,11 +34,11 @@ xdr_UDP_MSG (XDR * xdrs, UDP_MSG * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* /*
* Sun request values for the remote ptrace system call * Sun request values for the remote ptrace system call
*/ */
bool_t bool_t
xdr_ptracereq (XDR *xdrs, ptracereq *objp) xdr_ptracereq (XDR *xdrs, ptracereq *objp)
{ {
@@ -75,14 +75,16 @@ xdr_xdr_regs (XDR * xdrs, xdr_regs * objp)
{ {
register int *genp; register int *genp;
for (i = 0, genp = objp->r_dreg; i < 8; ++i) { for (i = 0, genp = objp->r_dreg;
i < 8; ++i) {
IXDR_PUT_LONG(buf, *genp++); IXDR_PUT_LONG(buf, *genp++);
} }
} }
{ {
register int *genp; register int *genp;
for (i = 0, genp = objp->r_areg; i < 8; ++i) { for (i = 0, genp = objp->r_areg;
i < 8; ++i) {
IXDR_PUT_LONG(buf, *genp++); IXDR_PUT_LONG(buf, *genp++);
} }
} }
@@ -110,14 +112,16 @@ xdr_xdr_regs (XDR * xdrs, xdr_regs * objp)
{ {
register int *genp; register int *genp;
for (i = 0, genp = objp->r_dreg; i < 8; ++i) { for (i = 0, genp = objp->r_dreg;
i < 8; ++i) {
*genp++ = IXDR_GET_LONG(buf); *genp++ = IXDR_GET_LONG(buf);
} }
} }
{ {
register int *genp; register int *genp;
for (i = 0, genp = objp->r_areg; i < 8; ++i) { for (i = 0, genp = objp->r_areg;
i < 8; ++i) {
*genp++ = IXDR_GET_LONG(buf); *genp++ = IXDR_GET_LONG(buf);
} }
} }
@@ -142,7 +146,6 @@ xdr_xdr_regs (XDR * xdrs, xdr_regs * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* /*
* Memory data for read/write text or data. The size is in data. The target * Memory data for read/write text or data. The size is in data. The target
* addr is in the addr field. * addr is in the addr field.
@@ -150,8 +153,7 @@ xdr_xdr_regs (XDR * xdrs, xdr_regs * objp)
* pipes and is allocated on stack too. Pipes and/or the stack could * pipes and is allocated on stack too. Pipes and/or the stack could
* become too small if this value gets incremented. * become too small if this value gets incremented.
*/ */
bool_t bool_t xdr_xdr_mem(xdrs, objp)
xdr_xdr_mem (xdrs, objp)
XDR *xdrs; XDR *xdrs;
struct xdr_mem *objp; struct xdr_mem *objp;
{ {
@@ -207,7 +209,7 @@ xdr_xdr_break (XDR * xdrs, xdr_break * objp)
return FALSE; return FALSE;
if (!xdr_u_char (xdrs, &objp->curr_pass)) if (!xdr_u_char (xdrs, &objp->curr_pass))
return FALSE; return FALSE;
buf = XDR_INLINE (xdrs, MAX_THRD_BRK * BYTES_PER_XDR_UNIT); buf = XDR_INLINE (xdrs, ( MAX_THRD_BRK ) * BYTES_PER_XDR_UNIT);
if (buf == NULL) { if (buf == NULL) {
if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK, if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK,
sizeof (u_long), (xdrproc_t) xdr_u_long)) sizeof (u_long), (xdrproc_t) xdr_u_long))
@@ -216,7 +218,8 @@ xdr_xdr_break (XDR * xdrs, xdr_break * objp)
{ {
register u_long *genp; register u_long *genp;
for (i = 0, genp = objp->thread_list; i < MAX_THRD_BRK; ++i) { for (i = 0, genp = objp->thread_list;
i < MAX_THRD_BRK; ++i) {
IXDR_PUT_U_LONG(buf, *genp++); IXDR_PUT_U_LONG(buf, *genp++);
} }
} }
@@ -248,7 +251,7 @@ xdr_xdr_break (XDR * xdrs, xdr_break * objp)
return FALSE; return FALSE;
if (!xdr_u_char (xdrs, &objp->curr_pass)) if (!xdr_u_char (xdrs, &objp->curr_pass))
return FALSE; return FALSE;
buf = XDR_INLINE (xdrs, MAX_THRD_BRK * BYTES_PER_XDR_UNIT); buf = XDR_INLINE (xdrs, ( MAX_THRD_BRK ) * BYTES_PER_XDR_UNIT);
if (buf == NULL) { if (buf == NULL) {
if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK, if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK,
sizeof (u_long), (xdrproc_t) xdr_u_long)) sizeof (u_long), (xdrproc_t) xdr_u_long))
@@ -257,7 +260,8 @@ xdr_xdr_break (XDR * xdrs, xdr_break * objp)
{ {
register u_long *genp; register u_long *genp;
for (i = 0, genp = objp->thread_list; i < MAX_THRD_BRK; ++i) { for (i = 0, genp = objp->thread_list;
i < MAX_THRD_BRK; ++i) {
*genp++ = IXDR_GET_U_LONG(buf); *genp++ = IXDR_GET_U_LONG(buf);
} }
} }
@@ -306,9 +310,7 @@ xdr_KernThread (XDR * xdrs, KernThread * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
bool_t xdr_thread_list(xdrs, objp)
bool_t
xdr_thread_list (xdrs, objp)
XDR *xdrs; XDR *xdrs;
struct thread_list *objp; struct thread_list *objp;
{ {
@@ -333,16 +335,12 @@ xdr_ptrace_addr_data_in (XDR * xdrs, ptrace_addr_data_in * objp)
return FALSE; return FALSE;
break; break;
case RPT_PSETTHREADREGS: case RPT_PSETTHREADREGS:
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->ptrace_addr_data_in_u.pregs.pregs_val, (u_int *) &objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0,
(xdrs, (char **) &objp->ptrace_addr_data_in_u.pregs.pregs_val,
(u_int *) & objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0,
sizeof (u_int), (xdrproc_t) xdr_u_int)) sizeof (u_int), (xdrproc_t) xdr_u_int))
return FALSE; return FALSE;
break; break;
case RPT_PSETREGS: case RPT_PSETREGS:
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->ptrace_addr_data_in_u.pregs.pregs_val, (u_int *) &objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0,
(xdrs, (char **) &objp->ptrace_addr_data_in_u.pregs.pregs_val,
(u_int *) & objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0,
sizeof (u_int), (xdrproc_t) xdr_u_int)) sizeof (u_int), (xdrproc_t) xdr_u_int))
return FALSE; return FALSE;
break; break;
@@ -387,16 +385,12 @@ xdr_ptrace_addr_data_out (XDR * xdrs, ptrace_addr_data_out * objp)
return FALSE; return FALSE;
break; break;
case RPT_PGETREGS: case RPT_PGETREGS:
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->ptrace_addr_data_out_u.pregs.pregs_val, (u_int *) &objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0,
(xdrs, (char **) &objp->ptrace_addr_data_out_u.pregs.pregs_val,
(u_int *) & objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0,
sizeof (u_int), (xdrproc_t) xdr_u_int)) sizeof (u_int), (xdrproc_t) xdr_u_int))
return FALSE; return FALSE;
break; break;
case RPT_PGETTHREADREGS: case RPT_PGETTHREADREGS:
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->ptrace_addr_data_out_u.pregs.pregs_val, (u_int *) &objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0,
(xdrs, (char **) &objp->ptrace_addr_data_out_u.pregs.pregs_val,
(u_int *) & objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0,
sizeof (u_int), (xdrproc_t) xdr_u_int)) sizeof (u_int), (xdrproc_t) xdr_u_int))
return FALSE; return FALSE;
break; break;
@@ -437,73 +431,11 @@ xdr_CHAR_DATA (XDR * xdrs, CHAR_DATA * objp)
{ {
register int32_t *buf; register int32_t *buf;
if (!xdr_bytes if (!xdr_bytes (xdrs, (char **)&objp->CHAR_DATA_val, (u_int *) &objp->CHAR_DATA_len, NET_SAFE))
(xdrs, (char **) &objp->CHAR_DATA_val, (u_int *) & objp->CHAR_DATA_len,
NET_SAFE))
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
#ifndef XRY_MAX_CMD_STR
#endif /* REMDEB_H */
bool_t
xdr_xry_inst (XDR * xdrs, xry_inst * objp)
{
register int32_t *buf;
if (!xdr_u_char (xdrs, &objp->flags))
return FALSE;
if (!xdr_u_char (xdrs, &objp->type))
return FALSE;
if (!xdr_u_char (xdrs, &objp->sub_type))
return FALSE;
if (!xdr_u_char (xdrs, &objp->res_type))
return FALSE;
if (!xdr_u_long (xdrs, &objp->value))
return FALSE;
if (!xdr_u_long (xdrs, &objp->value2))
return FALSE;
return TRUE;
}
bool_t
xdr_instance (XDR * xdrs, instance * objp)
{
register int32_t *buf;
int i;
if (!xdr_vector (xdrs, (char *) objp->instances, XRY_MAX_INSTANCES,
sizeof (xry_inst), (xdrproc_t) xdr_xry_inst))
return FALSE;
if (!xdr_vector (xdrs, (char *) objp->buffer, XRY_MAX_INST_BUFF,
sizeof (u_char), (xdrproc_t) xdr_u_char))
return FALSE;
return TRUE;
}
bool_t
xdr_instance_union (XDR * xdrs, instance_union * objp)
{
register int32_t *buf;
if (!xdr_bool (xdrs, &objp->instances))
return FALSE;
switch (objp->instances) {
case TRUE:
if (!xdr_instance (xdrs, &objp->instance_union_u.inst))
return FALSE;
break;
case FALSE:
if (!xdr_string (xdrs, &objp->instance_union_u.buffer, XRY_MAX_CMD_STR))
return FALSE;
break;
default:
return FALSE;
}
return TRUE;
}
bool_t bool_t
xdr_one_arg (XDR *xdrs, one_arg *objp) xdr_one_arg (XDR *xdrs, one_arg *objp)
{ {
@@ -513,10 +445,7 @@ xdr_one_arg (XDR * xdrs, one_arg * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* now open_connex() routine which establishes a connection to server */
/*
* now open_connex() routine which establishes a connection to server
*/
bool_t bool_t
xdr_debug_type (XDR *xdrs, debug_type *objp) xdr_debug_type (XDR *xdrs, debug_type *objp)
@@ -527,7 +456,6 @@ xdr_debug_type (XDR * xdrs, debug_type * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
#define DEBUGGER_IS_GDB 0x2 /* */ #define DEBUGGER_IS_GDB 0x2 /* */
bool_t bool_t
@@ -574,7 +502,8 @@ xdr_open_out (XDR * xdrs, open_out * objp)
{ {
register u_int *genp; register u_int *genp;
for (i = 0, genp = objp->pad; i < 4; ++i) { for (i = 0, genp = objp->pad;
i < 4; ++i) {
IXDR_PUT_U_LONG(buf, *genp++); IXDR_PUT_U_LONG(buf, *genp++);
} }
} }
@@ -603,7 +532,8 @@ xdr_open_out (XDR * xdrs, open_out * objp)
{ {
register u_int *genp; register u_int *genp;
for (i = 0, genp = objp->pad; i < 4; ++i) { for (i = 0, genp = objp->pad;
i < 4; ++i) {
*genp++ = IXDR_GET_U_LONG(buf); *genp++ = IXDR_GET_U_LONG(buf);
} }
} }
@@ -633,10 +563,7 @@ xdr_open_out (XDR * xdrs, open_out * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* now close_connex() routine which detaches from server */
/*
* now close_connex() routine which detaches from server
*/
bool_t bool_t
xdr_close_control (XDR *xdrs, close_control *objp) xdr_close_control (XDR *xdrs, close_control *objp)
@@ -657,10 +584,7 @@ xdr_close_in (XDR * xdrs, close_in * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* now send_signal() routine which sends signals to processes like kill(2) */
/*
* now send_signal() routine which sends signals to processes like kill(2)
*/
bool_t bool_t
xdr_signal_in (XDR *xdrs, signal_in *objp) xdr_signal_in (XDR *xdrs, signal_in *objp)
@@ -685,11 +609,8 @@ xdr_signal_out (XDR * xdrs, signal_out * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* 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 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
*/
bool_t bool_t
xdr_stop_code (XDR *xdrs, stop_code *objp) xdr_stop_code (XDR *xdrs, stop_code *objp)
@@ -716,6 +637,7 @@ xdr_wait_out (XDR * xdrs, wait_out * objp)
{ {
register int32_t *buf; register int32_t *buf;
if (xdrs->x_op == XDR_ENCODE) { if (xdrs->x_op == XDR_ENCODE) {
buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT);
if (buf == NULL) { if (buf == NULL) {
@@ -812,11 +734,8 @@ xdr_wait_out (XDR * xdrs, wait_out * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* now ptrace() routine. This matches the Sun UNIX ptrace as well as
/* some additions */
* now ptrace() routine. This matches the Sun UNIX ptrace as well as
* some additions
*/
bool_t bool_t
xdr_ptrace_in (XDR *xdrs, ptrace_in *objp) xdr_ptrace_in (XDR *xdrs, ptrace_in *objp)
@@ -865,10 +784,8 @@ xdr_all_symbols (XDR * xdrs, all_symbols * objp)
{ {
register int32_t *buf; register int32_t *buf;
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->all_symbols_val, (u_int *) &objp->all_symbols_len, ~0,
(xdrs, (char **) &objp->all_symbols_val, sizeof (one_symbol), (xdrproc_t) xdr_one_symbol))
(u_int *) & objp->all_symbols_len, ~0, sizeof (one_symbol),
(xdrproc_t) xdr_one_symbol))
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
@@ -900,6 +817,7 @@ xdr_get_text_data_out (XDR * xdrs, get_text_data_out * objp)
{ {
register int32_t *buf; register int32_t *buf;
if (xdrs->x_op == XDR_ENCODE) { if (xdrs->x_op == XDR_ENCODE) {
buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT); buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT);
if (buf == NULL) { if (buf == NULL) {
@@ -982,10 +900,8 @@ xdr_all_signals (XDR * xdrs, all_signals * objp)
{ {
register int32_t *buf; register int32_t *buf;
if (!xdr_array if (!xdr_array (xdrs, (char **)&objp->all_signals_val, (u_int *) &objp->all_signals_len, ~0,
(xdrs, (char **) &objp->all_signals_val, sizeof (one_signal), (xdrproc_t) xdr_one_signal))
(u_int *) & objp->all_signals_len, ~0, sizeof (one_signal),
(xdrproc_t) xdr_one_signal))
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
@@ -999,7 +915,4 @@ xdr_get_signal_names_out (XDR * xdrs, get_signal_names_out * objp)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
/* now define the actual calls we support */
/*
* now define the actual calls we support
*/

View File

@@ -1,120 +0,0 @@
#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;
}