forked from Imagelibrary/rtems
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:
@@ -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.
|
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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
|
|
||||||
*/
|
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -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
|
|
||||||
*/
|
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user