Changeset 97f6256 in rtems
- Timestamp:
- 02/01/02 19:33:15 (22 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- 6966421
- Parents:
- bdb86b4
- Location:
- c/src/librdbg
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/librdbg/ChangeLog
rbdb86b4 r97f6256 35 35 src/powerpc/new_exception_processing/remdeb_xdr.c: Modified. 36 36 37 2002-01-18 Till Straumann <strauman@slac.stanford.edu>38 39 * src/powerpc/excep_f.c: This patch addresses the following issues:40 - exception handler needs to enable MSR_FP if the interrupted41 thread is FP enabled.42 - printk message for MSR fixed and added stacktrace43 44 NOTE: this requires the stacktrace patch to45 lib/libbsp/powerpc/shared/vectors/vector_init.c46 (#ifdef DDEBUG only, however)47 48 2001-01-18 Joel Sherrill <joel@OARcorp.com>49 50 * src/powerpc/new_exception_processing/remdeb_svc.c: Corrected51 macro using variable arguments.52 53 2001-01-18 Joel Sherrill <joel@OARcorp.com>54 55 * src/powerpc/new_exception_processing/remdeb.h,56 src/powerpc/new_exception_processing/remdeb_xdr.c: Regenerated since57 I updated the main RTEMS development machine to RedHat 7.2 and58 apparently got a new version of rpcgen.59 60 2001-10-30 Victor V. Vengerov <vvv@oktet.ru>61 62 * src/m68k/rdbg_cpu_asm.S: Now compiles on ColdFire.63 64 2001-10-17 Ralf Corsepius <corsepiu@faw.uni-ulm.de>65 66 * configure.ac: Fix latent bug exposed by removal of config.cache's67 which prevented powerpc targets librdbg from building.68 69 2001-10-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>70 71 * .cvsignore: Add autom4te.cache for autoconf > 2.52.72 * configure.in: Remove.73 * configure.ac: New file, generated from configure.in by autoupdate.74 75 2001-09-23 Ralf Corsepius <corsepiu@faw.uni-ulm.de>76 77 * include/rdbg/i386/Makefile.am: Use 'PREINSTALL_FILES ='.78 * include/rdbg/m68k/Makefile.am: Use 'PREINSTALL_FILES ='.79 * include/rdbg/powerpc/Makefile.am: Use 'PREINSTALL_FILES ='.80 * include/rdbg/Makefile.am: Use 'PREINSTALL_FILES ='.81 * src/i386/any/Makefile.am: Use 'PREINSTALL_FILES ='.82 * src/m68k/any/Makefile.am: Use 'PREINSTALL_FILES ='.83 * src/powerpc/new_exception_processing/Makefile.am: Use 'PREINSTALL_FILES ='.84 85 2001-09-22 Ralf Corsepius <corsepiu@faw.uni-ulm.de>86 87 * src/i386/any/Makefile.am: Move MAINTAINERCLEANFILES before the88 includes and use MAINTAINERCLEANFILES = to make automake-1.5 happy.89 * src/m68k/any/Makefile.am: Ditto.90 * src/powerpc/new_exception_processing/Makefile.am: Ditto.91 92 2001-09-14 Eric Norum <eric.norum@usask.ca>93 94 * include/rdbg/rdbg.h, src/ptrace.c: Modifications to make gcc 3.x happy.95 96 2001-04-20 Eric Valette <valette@crf.canon.fr>97 98 * mcp750 directory renamed new_exception processing as it99 supports many more CPU models.100 * configure.in, src/powerpc/Makefile.am,101 src/powerpc/new_exception_processing/Makefile.am,102 src/powerpc/new_exception_processing/remdeb_f.x: New files103 formerly in mcp750 plus modifications.104 * src/powerpc/mcp750/.cvsignore, src/powerpc/mcp750/Makefile.am,105 src/powerpc/mcp750/remdeb.h, src/powerpc/mcp750/remdeb_f.x,106 src/powerpc/mcp750/remdeb_svc.c, src/powerpc/mcp750/remdeb_xdr.c:107 Removed when moved to new_exception_processing.108 * configure.in, src/powerpc/Makefile.am,109 src/powerpc/new_exception_processing/Makefile.am,110 src/powerpc/new_exception_processing/remdeb_f.x: Modified as111 part of this effort to add support for the MPC8xx.112 113 2001-02-04 Ralf Corsepius <corsepiu@faw.uni-ulm.de>114 115 * include/rdbg/Makefile.am, include/rdbg/i386/Makefile.am,116 include/rdbg/m68k/Makefile.am, include/rdbg/powerpc/Makefile.am:117 Cleanup including more proper style on include files.118 119 2000-11-09 Ralf Corsepius <corsepiu@faw.uni-ulm.de>120 121 * Makefile.am: Use ... instead of RTEMS_TOPdir in ACLOCAL_AMFLAGS.122 123 2000-11-02 Ralf Corsepius <corsepiu@faw.uni-ulm.de>124 125 * Makefile.am: Switch to ACLOCAL_AMFLAGS = -I $(RTEMS_TOPdir)/aclocal.126 127 2000-10-25 Ralf Corsepius <corsepiu@faw.uni-ulm.de>128 129 * Makefile.am: ACLOCAL_AMFLAGS= -I $(RTEMS_TOPdir)/macros.130 Switch to GNU canonicalization.131 132 2000-10-19 Antti P Miettinen <anmietti@trshp.ntc.nokia.com>133 134 * src/m68k/any/remdeb.h, src/m68k/any/remdeb_xdr.c,135 src/m68k/any/remdeb_svc.c: New files missed in merger.136 137 2000-10-19 Antti P Miettinen <anmietti@trshp.ntc.nokia.com>138 139 * configure.in: Add m68k support.140 * include/rdbg/m68k, src/m68k, src/m68k/any: New subdirectory.141 * src/_servtgt.c: add status text to prinf upon task creation failure.142 * src/rdbg.c: reconnect rdbg exception handlers upon RPC calls.143 * src/m68k/Makefile.am, src/m68k/any/Makefile.am,144 src/m68k/any/remdeb_f.x, src/m68k/any/.cvsignore,145 src/m68k/any/remdeb.h, src/m68k/any/remdeb_xdr.c,146 src/m68k/any/remdeb_svc.c, src/m68k/excep_f.c, src/m68k/rdbg_cpu_asm.S,147 src/m68k/rdbg_f.c, src/m68k/.cvsignore: New files.148 149 2000-09-04 Ralf Corsepius <corsepiu@faw.uni-ulm.de>150 151 * src/i386/any/Makefile.am, src/powerpc/mcp750/Makefile.am: Include152 compile.am153 154 2000-08-10 Joel Sherrill <joel@OARcorp.com>155 156 * ChangeLog: New file. -
c/src/librdbg/src/i386/any/remdeb.h
rbdb86b4 r97f6256 9 9 #include <rpc/rpc.h> 10 10 11 11 12 #ifdef __cplusplus 12 13 extern "C" { … … 16 17 #define RTEMS_BACK_PORT 2073 17 18 #ifndef REMDEB_H 18 #define RPCGENSRVNAME(a) 19 20 21 22 23 24 19 #define RPCGENSRVNAME(a) a 20 21 enum rpc_type { 22 SUNRPC = 0, 23 BADRPCTYPE = 25, 24 }; 25 typedef enum rpc_type rpc_type; 25 26 #define NET_SAFE 1400 26 27 27 28 29 30 31 32 33 34 28 struct UDP_MSG { 29 u_char type; 30 u_char msg_num; 31 u_short spec; 32 long pid; 33 u_long context; 34 }; 35 typedef struct UDP_MSG UDP_MSG; 35 36 /* 36 37 * Sun request values for the remote ptrace system call 37 38 */ 38 39 39 enum ptracereq { 40 RPT_TRACEME = 0, 41 RPT_CHILDDONE = 0, 42 RPT_PEEKTEXT = 0 + 1, 43 RPT_PEEKDATA = 0 + 2, 44 RPT_PEEKUSER = 0 + 3, 45 RPT_POKETEXT = 0 + 4, 46 RPT_POKEDATA = 0 + 5, 47 RPT_POKEUSER = 0 + 6, 48 RPT_CONT = 0 + 7, 49 RPT_KILL = 0 + 8, 50 RPT_SINGLESTEP = 0 + 9, 51 RPT_ATTACH = 0 + 10, 52 RPT_DETACH = 0 + 11, 53 RPT_GETREGS = 0 + 12, 54 RPT_SETREGS = 0 + 13, 55 RPT_GETFPREGS = 0 + 14, 56 RPT_SETFPREGS = 0 + 15, 57 RPT_READDATA = 0 + 16, 58 RPT_WRITEDATA = 0 + 17, 59 RPT_READTEXT = 0 + 18, 60 RPT_WRITETEXT = 0 + 19, 61 RPT_GETFPAREGS = 0 + 20, 62 RPT_SETFPAREGS = 0 + 21, 63 RPT_22 = 0 + 22, 64 RPT_23 = 0 + 23, 65 RPT_SYSCALL = 0 + 24, 66 RPT_DUMPCORE = 0 + 25, 67 RPT_26 = 0 + 26, 68 RPT_27 = 0 + 27, 69 RPT_28 = 0 + 28, 70 RPT_GETUCODE = 0 + 29, 71 RPT_GETTARGETTHREAD = 50, 72 RPT_SETTARGETTHREAD = 51, 73 RPT_THREADSUSPEND = 52, 74 RPT_THREADRESUME = 53, 75 RPT_THREADLIST = 54, 76 RPT_GETTHREADNAME = 55, 77 RPT_SETTHREADNAME = 56, 78 RPT_SETTHREADREGS = 57, 79 RPT_GETTHREADREGS = 58, 80 RPT_STEPRANGE = 75, 81 RPT_CONTTO = 76, 82 RPT_SETBREAK = 77, 83 RPT_CLRBREAK = 78, 84 RPT_GETBREAK = 79, 85 RPT_GETNAME = 80, 86 RPT_STOP = 81, 87 RPT_PGETREGS = 82, 88 RPT_PSETREGS = 83, 89 RPT_PSETTHREADREGS = 84, 90 RPT_PGETTHREADREGS = 85, 91 }; 92 typedef enum ptracereq ptracereq; 93 94 struct xdr_regs { 95 u_int tabreg[19]; 96 }; 97 typedef struct xdr_regs xdr_regs; 40 41 enum ptracereq { 42 RPT_TRACEME = 0, 43 RPT_CHILDDONE = 0, 44 RPT_PEEKTEXT = 0 + 1, 45 RPT_PEEKDATA = 0 + 2, 46 RPT_PEEKUSER = 0 + 3, 47 RPT_POKETEXT = 0 + 4, 48 RPT_POKEDATA = 0 + 5, 49 RPT_POKEUSER = 0 + 6, 50 RPT_CONT = 0 + 7, 51 RPT_KILL = 0 + 8, 52 RPT_SINGLESTEP = 0 + 9, 53 RPT_ATTACH = 0 + 10, 54 RPT_DETACH = 0 + 11, 55 RPT_GETREGS = 0 + 12, 56 RPT_SETREGS = 0 + 13, 57 RPT_GETFPREGS = 0 + 14, 58 RPT_SETFPREGS = 0 + 15, 59 RPT_READDATA = 0 + 16, 60 RPT_WRITEDATA = 0 + 17, 61 RPT_READTEXT = 0 + 18, 62 RPT_WRITETEXT = 0 + 19, 63 RPT_GETFPAREGS = 0 + 20, 64 RPT_SETFPAREGS = 0 + 21, 65 RPT_22 = 0 + 22, 66 RPT_23 = 0 + 23, 67 RPT_SYSCALL = 0 + 24, 68 RPT_DUMPCORE = 0 + 25, 69 RPT_26 = 0 + 26, 70 RPT_27 = 0 + 27, 71 RPT_28 = 0 + 28, 72 RPT_GETUCODE = 0 + 29, 73 RPT_GETTARGETTHREAD = 50, 74 RPT_SETTARGETTHREAD = 51, 75 RPT_THREADSUSPEND = 52, 76 RPT_THREADRESUME = 53, 77 RPT_THREADLIST = 54, 78 RPT_GETTHREADNAME = 55, 79 RPT_SETTHREADNAME = 56, 80 RPT_SETTHREADREGS = 57, 81 RPT_GETTHREADREGS = 58, 82 RPT_STEPRANGE = 75, 83 RPT_CONTTO = 76, 84 RPT_SETBREAK = 77, 85 RPT_CLRBREAK = 78, 86 RPT_GETBREAK = 79, 87 RPT_GETNAME = 80, 88 RPT_STOP = 81, 89 RPT_PGETREGS = 82, 90 RPT_PSETREGS = 83, 91 RPT_PSETTHREADREGS = 84, 92 RPT_PGETTHREADREGS = 85, 93 }; 94 typedef enum ptracereq ptracereq; 95 96 struct xdr_regs { 97 u_int tabreg[19]; 98 }; 99 typedef struct xdr_regs xdr_regs; 98 100 /* now define register macros to apply to xdr_reg struct */ 99 101 100 #define GS 101 #define FS 102 #define ES 103 #define DS 104 #define EDI 105 #define ESI 106 #define EBP 107 #define ESP 108 #define EBX 109 #define EDX 110 #define ECX 111 #define EAX 102 #define GS 0 103 #define FS 1 104 #define ES 2 105 #define DS 3 106 #define EDI 4 107 #define ESI 5 108 #define EBP 6 109 #define ESP 7 110 #define EBX 8 111 #define EDX 9 112 #define ECX 10 113 #define EAX 11 112 114 #define TRAPNO 12 113 #define ERR 114 #define EIP 115 #define CS 116 #define EFL 117 #define UESP 118 #define SS 119 120 #define REG_PC tabreg[EIP] 121 #define REG_SP tabreg[UESP] 122 #define REG_FP tabreg[EBP] 115 #define ERR 13 116 #define EIP 14 117 #define CS 15 118 #define EFL 16 119 #define UESP 17 120 #define SS 18 121 122 #define REG_PC tabreg[EIP] /* PC (eip) register offset */ 123 #define REG_SP tabreg[UESP] /* SP (uesp) register offset */ 124 #define REG_FP tabreg[EBP] /* FP (ebp) register offset */ 123 125 /* now define the BREAKPOINT mask technique to a long word */ 124 #define SET_BREAK(l) 125 #define IS_BREAK(l) 126 #define SET_BREAK(l) ((l&0xFFFFFF00) | 0xCC) 127 #define IS_BREAK(l) (((l) & 0xFF) == 0xCC) 126 128 #define ORG_BREAK(c,p) (((c) & 0xFFFFFF00) | ((p) & 0xFF)) 127 #define IS_STEP(regs) (regs.tabreg[TRAPNO] == 1)/* was step and not break */128 #define BREAK_ADJ 1/* must subtract one from address after bp */129 #define BREAK_SIZE 1/* Breakpoint occupies one byte */130 #define TARGET_PROC_TYPE 129 #define IS_STEP(regs) (regs.tabreg[TRAPNO] == 1) /* was step and not break */ 130 #define BREAK_ADJ 1 /* must subtract one from address after bp */ 131 #define BREAK_SIZE 1 /* Breakpoint occupies one byte */ 132 #define TARGET_PROC_TYPE 0 131 133 #define MAXDEBUGGEE 150 132 134 #define NAMEMAX 17 133 135 /* 134 136 * Memory data for read/write text or data. The size is in data. The target 135 137 * addr is in the addr field. … … 140 142 #define MEM_DATA_MAX 256 141 143 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 144 struct xdr_mem { 145 u_long addr; 146 u_int dataNb; 147 u_char data[MEM_DATA_MAX]; 148 }; 149 typedef struct xdr_mem xdr_mem; 150 151 enum break_type { 152 BRKT_NONE = 0, 153 BRKT_INSTR = 1, 154 BRKT_READ = 2, 155 BRKT_WRITE = 3, 156 BRKT_ACCESS = 4, 157 BRKT_EXEC = 5, 158 BRKT_OS_CALL = 6, 159 BRKT_OS_SWITCH = 7, 160 BRKT_STEPEMUL = 8, 161 }; 162 typedef enum break_type break_type; 161 163 #define MAX_THRD_BRK 4 162 164 163 164 165 166 167 168 169 170 171 172 173 174 165 struct xdr_break { 166 u_char type; 167 u_char thread_spec; 168 u_short handle; 169 u_long ee_loc; 170 u_long ee_type; 171 u_short length; 172 u_char pass_count; 173 u_char curr_pass; 174 u_long thread_list[MAX_THRD_BRK]; 175 }; 176 typedef struct xdr_break xdr_break; 175 177 #define UTHREAD_MAX 64 176 178 #define THREADNAMEMAX 16 177 179 178 typedef char *thread_name; 179 180 struct KernThread { 181 u_int threadLi; 182 }; 183 typedef struct KernThread KernThread; 184 typedef KernThread *ptThreadList; 185 186 struct thread_list { 187 u_int nbThread; 188 ptThreadList threads; 189 }; 190 typedef struct thread_list thread_list; 191 192 struct ptrace_addr_data_in { 193 ptracereq req; 194 union { 195 xdr_regs regs; 196 struct { 197 u_int pregs_len; 198 u_int *pregs_val; 199 } pregs; 200 thread_name name; 201 xdr_mem mem; 202 xdr_break breakp; 203 u_int address; 204 } ptrace_addr_data_in_u; 205 }; 206 typedef struct ptrace_addr_data_in ptrace_addr_data_in; 207 208 struct ptrace_addr_data_out { 209 ptracereq req; 210 union { 211 xdr_regs regs; 212 struct { 213 u_int pregs_len; 214 u_int *pregs_val; 215 } pregs; 216 thread_list threads; 217 thread_name name; 218 xdr_mem mem; 219 xdr_break breakp; 220 u_int addr; 221 } ptrace_addr_data_out_u; 222 }; 223 typedef struct ptrace_addr_data_out ptrace_addr_data_out; 224 225 typedef struct { 226 u_int CHAR_DATA_len; 227 char *CHAR_DATA_val; 228 } CHAR_DATA; 229 #define XRY_MAX_INST_BUFF 128 230 #define XRY_MAX_INSTANCES 16 231 #ifndef XRY_MAX_CMD_STR 232 #define XRY_MAX_CMD_STR 320 233 #endif /* REMDEB_H */ 234 235 struct xry_inst { 236 u_char flags; 237 u_char type; 238 u_char sub_type; 239 u_char res_type; 240 u_long value; 241 u_long value2; 242 }; 243 typedef struct xry_inst xry_inst; 244 245 struct instance { 246 struct xry_inst instances[XRY_MAX_INSTANCES]; 247 u_char buffer[XRY_MAX_INST_BUFF]; 248 }; 249 typedef struct instance instance; 250 251 struct instance_union { 252 bool_t instances; 253 union { 254 instance inst; 255 char *buffer; 256 } instance_union_u; 257 }; 258 typedef struct instance_union instance_union; 259 260 typedef char *one_arg; 261 #define XRY_MAX_OBJ_NAME 32 262 /* 263 * now open_connex() routine which establishes a connection to server 264 */ 265 266 enum debug_type { 267 DEBTYP_PROCESS = 0, 268 DEBTYP_C_ACTOR = 1, 269 DEBTYP_KERNEL = 2, 270 DEBTYP_OTHER = 3, 271 }; 272 typedef enum debug_type debug_type; 273 #define DEBUGGER_IS_GDB 0x2 /* */ 274 275 struct open_in { 276 u_char back_port[16]; 277 u_short debug_type; 278 u_short flags; 279 u_char destination[16]; 280 one_arg user_name; 281 }; 282 typedef struct open_in open_in; 283 284 struct open_out { 285 u_long port; 286 u_int pad[4]; 287 u_int fp; 288 u_char cmd_table_num; 289 u_char cmd_table_vers; 290 u_short server_vers; 291 }; 292 typedef struct open_out open_out; 293 /* 294 * now close_connex() routine which detaches from server 295 */ 296 297 enum close_control { 298 CLOSE_IGNORE = 0, 299 CLOSE_KILL = 1, 300 CLOSE_DETACH = 2, 301 }; 302 typedef enum close_control close_control; 303 304 struct close_in { 305 close_control control; 306 }; 307 typedef struct close_in close_in; 308 /* 309 * now send_signal() routine which sends signals to processes like kill(2) 310 */ 311 312 struct signal_in { 313 int pid; 314 int sig; 315 }; 316 typedef struct signal_in signal_in; 317 318 struct signal_out { 319 int kill_return; 320 int errNo; 321 }; 322 typedef struct signal_out signal_out; 323 /* 324 * now wait_info() routine which returns results of polling the wait status 325 * of a process/actor. It may return 0 if running, else pid or -1 326 */ 327 328 enum stop_code { 329 STOP_ERROR = 0, 330 STOP_NONE = 1, 331 STOP_UNKNOWN = 2, 332 STOP_BREAK = 3, 333 STOP_STEP = 4, 334 STOP_SIGNAL = 5, 335 STOP_TERM_EXIT = 6, 336 STOP_TERM_SIG = 7, 337 STOP_DETACHED = 8, 338 STOP_KILLED = 9, 339 STOP_SPAWN_FAILED = 10, 340 }; 341 typedef enum stop_code stop_code; 342 343 struct wait_in { 344 int pid; 345 }; 346 typedef struct wait_in wait_in; 347 348 struct wait_out { 349 int wait_return; 350 int errNo; 351 int status; 352 stop_code reason; 353 int handle; 354 u_long PC; 355 u_long SP; 356 u_long FP; 357 u_long thread; 358 }; 359 typedef struct wait_out wait_out; 360 /* 361 * now ptrace() routine. This matches the Sun UNIX ptrace as well as 362 * some additions 363 */ 180 typedef char *thread_name; 181 182 struct KernThread { 183 u_int threadLi; 184 }; 185 typedef struct KernThread KernThread; 186 typedef KernThread *ptThreadList; 187 188 struct thread_list { 189 u_int nbThread; 190 ptThreadList threads; 191 }; 192 typedef struct thread_list thread_list; 193 194 struct ptrace_addr_data_in { 195 ptracereq req; 196 union { 197 xdr_regs regs; 198 struct { 199 u_int pregs_len; 200 u_int *pregs_val; 201 } pregs; 202 thread_name name; 203 xdr_mem mem; 204 xdr_break breakp; 205 u_int address; 206 } ptrace_addr_data_in_u; 207 }; 208 typedef struct ptrace_addr_data_in ptrace_addr_data_in; 209 210 struct ptrace_addr_data_out { 211 ptracereq req; 212 union { 213 xdr_regs regs; 214 struct { 215 u_int pregs_len; 216 u_int *pregs_val; 217 } pregs; 218 thread_list threads; 219 thread_name name; 220 xdr_mem mem; 221 xdr_break breakp; 222 u_int addr; 223 } ptrace_addr_data_out_u; 224 }; 225 typedef struct ptrace_addr_data_out ptrace_addr_data_out; 226 227 typedef struct { 228 u_int CHAR_DATA_len; 229 char *CHAR_DATA_val; 230 } CHAR_DATA; 231 232 typedef char *one_arg; 233 /* now open_connex() routine which establishes a connection to server */ 234 235 enum debug_type { 236 DEBTYP_PROCESS = 0, 237 DEBTYP_C_ACTOR = 1, 238 DEBTYP_KERNEL = 2, 239 DEBTYP_OTHER = 3, 240 }; 241 typedef enum debug_type debug_type; 242 #define DEBUGGER_IS_GDB 0x2 /* */ 243 244 struct open_in { 245 u_char back_port[16]; 246 u_short debug_type; 247 u_short flags; 248 u_char destination[16]; 249 one_arg user_name; 250 }; 251 typedef struct open_in open_in; 252 253 struct open_out { 254 u_long port; 255 u_int pad[4]; 256 u_int fp; 257 u_char cmd_table_num; 258 u_char cmd_table_vers; 259 u_short server_vers; 260 }; 261 typedef struct open_out open_out; 262 /* now close_connex() routine which detaches from server */ 263 264 enum close_control { 265 CLOSE_IGNORE = 0, 266 CLOSE_KILL = 1, 267 CLOSE_DETACH = 2, 268 }; 269 typedef enum close_control close_control; 270 271 struct close_in { 272 close_control control; 273 }; 274 typedef struct close_in close_in; 275 /* now send_signal() routine which sends signals to processes like kill(2) */ 276 277 struct signal_in { 278 int pid; 279 int sig; 280 }; 281 typedef struct signal_in signal_in; 282 283 struct signal_out { 284 int kill_return; 285 int errNo; 286 }; 287 typedef struct signal_out signal_out; 288 /* now wait_info() routine which returns results of polling the wait status 289 of a process/actor. It may return 0 if running, else pid or -1 */ 290 291 enum stop_code { 292 STOP_ERROR = 0, 293 STOP_NONE = 1, 294 STOP_UNKNOWN = 2, 295 STOP_BREAK = 3, 296 STOP_STEP = 4, 297 STOP_SIGNAL = 5, 298 STOP_TERM_EXIT = 6, 299 STOP_TERM_SIG = 7, 300 STOP_DETACHED = 8, 301 STOP_KILLED = 9, 302 STOP_SPAWN_FAILED = 10, 303 }; 304 typedef enum stop_code stop_code; 305 306 struct wait_in { 307 int pid; 308 }; 309 typedef struct wait_in wait_in; 310 311 struct wait_out { 312 int wait_return; 313 int errNo; 314 int status; 315 stop_code reason; 316 int handle; 317 u_long PC; 318 u_long SP; 319 u_long FP; 320 u_long thread; 321 }; 322 typedef struct wait_out wait_out; 323 /* now ptrace() routine. This matches the Sun UNIX ptrace as well as 324 some additions */ 364 325 #define PTRFLG_FORCE 1 365 326 #define PTRFLG_NON_OWNER 2 … … 367 328 #define PTRDET_UNOWN 0x100 368 329 369 struct ptrace_in { 370 int pid; 371 ptrace_addr_data_in addr; 372 u_int data; 373 u_int flags; 374 }; 375 typedef struct ptrace_in ptrace_in; 376 377 struct ptrace_out { 378 ptrace_addr_data_out addr; 379 int result; 380 int errNo; 381 }; 382 typedef struct ptrace_out ptrace_out; 383 384 struct one_symbol { 385 char *symbolName; 386 long symbolValue; 387 }; 388 typedef struct one_symbol one_symbol; 389 390 typedef struct { 391 u_int all_symbols_len; 392 one_symbol *all_symbols_val; 393 } all_symbols; 394 395 struct get_global_symbols_out { 396 all_symbols symbols; 397 }; 398 typedef struct get_global_symbols_out get_global_symbols_out; 399 400 struct get_text_data_in { 401 int pid; 402 char *actorName; 403 }; 404 typedef struct get_text_data_in get_text_data_in; 405 406 struct get_text_data_out { 407 int result; 408 int errNo; 409 u_long textStart; 410 u_long textSize; 411 u_long dataStart; 412 u_long dataSize; 413 }; 414 typedef struct get_text_data_out get_text_data_out; 415 416 struct one_signal { 417 u_int number; 418 char *name; 419 }; 420 typedef struct one_signal one_signal; 421 422 typedef struct { 423 u_int all_signals_len; 424 one_signal *all_signals_val; 425 } all_signals; 426 427 struct get_signal_names_out { 428 all_signals signals; 429 }; 430 typedef struct get_signal_names_out get_signal_names_out; 431 /* 432 * now define the actual calls we support 433 */ 330 struct ptrace_in { 331 int pid; 332 ptrace_addr_data_in addr; 333 u_int data; 334 u_int flags; 335 }; 336 typedef struct ptrace_in ptrace_in; 337 338 struct ptrace_out { 339 ptrace_addr_data_out addr; 340 int result; 341 int errNo; 342 }; 343 typedef struct ptrace_out ptrace_out; 344 345 struct one_symbol { 346 char *symbolName; 347 long symbolValue; 348 }; 349 typedef struct one_symbol one_symbol; 350 351 typedef struct { 352 u_int all_symbols_len; 353 one_symbol *all_symbols_val; 354 } all_symbols; 355 356 struct get_global_symbols_out { 357 all_symbols symbols; 358 }; 359 typedef struct get_global_symbols_out get_global_symbols_out; 360 361 struct get_text_data_in { 362 int pid; 363 char *actorName; 364 }; 365 typedef struct get_text_data_in get_text_data_in; 366 367 struct get_text_data_out { 368 int result; 369 int errNo; 370 u_long textStart; 371 u_long textSize; 372 u_long dataStart; 373 u_long dataSize; 374 }; 375 typedef struct get_text_data_out get_text_data_out; 376 377 struct one_signal { 378 u_int number; 379 char *name; 380 }; 381 typedef struct one_signal one_signal; 382 383 typedef struct { 384 u_int all_signals_len; 385 one_signal *all_signals_val; 386 } all_signals; 387 388 struct get_signal_names_out { 389 all_signals signals; 390 }; 391 typedef struct get_signal_names_out get_signal_names_out; 392 /* now define the actual calls we support */ 434 393 #define REMDEB_H 435 394 #endif … … 440 399 #if defined(__STDC__) || defined(__cplusplus) 441 400 #define OPEN_CONNEX 1 442 extern open_out *open_connex_2(open_in *, CLIENT *);443 extern open_out *open_connex_2_svc(open_in *, struct svc_req *);401 extern open_out * open_connex_2(open_in *, CLIENT *); 402 extern open_out * open_connex_2_svc(open_in *, struct svc_req *); 444 403 #define SEND_SIGNAL 2 445 extern signal_out *send_signal_2(signal_in *, CLIENT *);446 extern signal_out *send_signal_2_svc(signal_in *, struct svc_req *);404 extern signal_out * send_signal_2(signal_in *, CLIENT *); 405 extern signal_out * send_signal_2_svc(signal_in *, struct svc_req *); 447 406 #define CLOSE_CONNEX 10 448 extern void *close_connex_2(close_in *, CLIENT *);449 extern void *close_connex_2_svc(close_in *, struct svc_req *);407 extern void * close_connex_2(close_in *, CLIENT *); 408 extern void * close_connex_2_svc(close_in *, struct svc_req *); 450 409 #define PTRACE 11 451 extern ptrace_out *ptrace_2(ptrace_in *, CLIENT *);452 extern ptrace_out *ptrace_2_svc(ptrace_in *, struct svc_req *);410 extern ptrace_out * ptrace_2(ptrace_in *, CLIENT *); 411 extern ptrace_out * ptrace_2_svc(ptrace_in *, struct svc_req *); 453 412 #define WAIT_INFO 13 454 extern wait_out *wait_info_2(wait_in *, CLIENT *);455 extern wait_out *wait_info_2_svc(wait_in *, struct svc_req *);413 extern wait_out * wait_info_2(wait_in *, CLIENT *); 414 extern wait_out * wait_info_2_svc(wait_in *, struct svc_req *); 456 415 #define GET_SIGNAL_NAMES 17 457 extern get_signal_names_out *get_signal_names_2 (void *, CLIENT *); 458 extern get_signal_names_out *get_signal_names_2_svc (void *, 459 struct svc_req *); 460 extern int remotedeb_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t); 461 462 #else /* K&R C */ 416 extern get_signal_names_out * get_signal_names_2(void *, CLIENT *); 417 extern get_signal_names_out * get_signal_names_2_svc(void *, struct svc_req *); 418 extern int remotedeb_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t); 419 420 #else /* K&R C */ 463 421 #define OPEN_CONNEX 1 464 extern open_out *open_connex_2();465 extern open_out *open_connex_2_svc();422 extern open_out * open_connex_2(); 423 extern open_out * open_connex_2_svc(); 466 424 #define SEND_SIGNAL 2 467 extern signal_out *send_signal_2();468 extern signal_out *send_signal_2_svc();425 extern signal_out * send_signal_2(); 426 extern signal_out * send_signal_2_svc(); 469 427 #define CLOSE_CONNEX 10 470 extern void *close_connex_2();471 extern void *close_connex_2_svc();428 extern void * close_connex_2(); 429 extern void * close_connex_2_svc(); 472 430 #define PTRACE 11 473 extern ptrace_out *ptrace_2();474 extern ptrace_out *ptrace_2_svc();431 extern ptrace_out * ptrace_2(); 432 extern ptrace_out * ptrace_2_svc(); 475 433 #define WAIT_INFO 13 476 extern wait_out *wait_info_2();477 extern wait_out *wait_info_2_svc();434 extern wait_out * wait_info_2(); 435 extern wait_out * wait_info_2_svc(); 478 436 #define GET_SIGNAL_NAMES 17 479 extern get_signal_names_out *get_signal_names_2();480 extern get_signal_names_out *get_signal_names_2_svc();481 482 #endif 437 extern get_signal_names_out * get_signal_names_2(); 438 extern get_signal_names_out * get_signal_names_2_svc(); 439 extern int remotedeb_2_freeresult (); 440 #endif /* K&R C */ 483 441 484 442 /* the xdr functions */ 485 443 486 444 #if defined(__STDC__) || defined(__cplusplus) 487 extern bool_t xdr_rpc_type (XDR *, rpc_type *); 488 extern bool_t xdr_UDP_MSG (XDR *, UDP_MSG *); 489 extern bool_t xdr_ptracereq (XDR *, ptracereq *); 490 extern bool_t xdr_xdr_regs (XDR *, xdr_regs *); 491 extern bool_t xdr_xdr_mem (XDR *, xdr_mem *); 492 extern bool_t xdr_break_type (XDR *, break_type *); 493 extern bool_t xdr_xdr_break (XDR *, xdr_break *); 494 extern bool_t xdr_thread_name (XDR *, thread_name *); 495 extern bool_t xdr_KernThread (XDR *, KernThread *); 496 extern bool_t xdr_thread_list (XDR *, thread_list *); 497 extern bool_t xdr_ptrace_addr_data_in (XDR *, ptrace_addr_data_in *); 498 extern bool_t xdr_ptrace_addr_data_out (XDR *, ptrace_addr_data_out *); 499 extern bool_t xdr_CHAR_DATA (XDR *, CHAR_DATA *); 500 extern bool_t xdr_xry_inst (XDR *, xry_inst *); 501 extern bool_t xdr_instance (XDR *, instance *); 502 extern bool_t xdr_instance_union (XDR *, instance_union *); 503 extern bool_t xdr_one_arg (XDR *, one_arg *); 504 extern bool_t xdr_debug_type (XDR *, debug_type *); 505 extern bool_t xdr_open_in (XDR *, open_in *); 506 extern bool_t xdr_open_out (XDR *, open_out *); 507 extern bool_t xdr_close_control (XDR *, close_control *); 508 extern bool_t xdr_close_in (XDR *, close_in *); 509 extern bool_t xdr_signal_in (XDR *, signal_in *); 510 extern bool_t xdr_signal_out (XDR *, signal_out *); 511 extern bool_t xdr_stop_code (XDR *, stop_code *); 512 extern bool_t xdr_wait_in (XDR *, wait_in *); 513 extern bool_t xdr_wait_out (XDR *, wait_out *); 514 extern bool_t xdr_ptrace_in (XDR *, ptrace_in *); 515 extern bool_t xdr_ptrace_out (XDR *, ptrace_out *); 516 extern bool_t xdr_one_symbol (XDR *, one_symbol *); 517 extern bool_t xdr_all_symbols (XDR *, all_symbols *); 518 extern bool_t xdr_get_global_symbols_out (XDR *, get_global_symbols_out *); 519 extern bool_t xdr_get_text_data_in (XDR *, get_text_data_in *); 520 extern bool_t xdr_get_text_data_out (XDR *, get_text_data_out *); 521 extern bool_t xdr_one_signal (XDR *, one_signal *); 522 extern bool_t xdr_all_signals (XDR *, all_signals *); 523 extern bool_t xdr_get_signal_names_out (XDR *, get_signal_names_out *); 524 525 #else /* K&R C */ 526 extern bool_t xdr_rpc_type (); 527 extern bool_t xdr_UDP_MSG (); 528 extern bool_t xdr_ptracereq (); 529 extern bool_t xdr_xdr_regs (); 530 extern bool_t xdr_xdr_mem (); 531 extern bool_t xdr_break_type (); 532 extern bool_t xdr_xdr_break (); 533 extern bool_t xdr_thread_name (); 534 extern bool_t xdr_KernThread (); 535 extern bool_t xdr_thread_list (); 536 extern bool_t xdr_ptrace_addr_data_in (); 537 extern bool_t xdr_ptrace_addr_data_out (); 538 extern bool_t xdr_CHAR_DATA (); 539 extern bool_t xdr_xry_inst (); 540 extern bool_t xdr_instance (); 541 extern bool_t xdr_instance_union (); 542 extern bool_t xdr_one_arg (); 543 extern bool_t xdr_debug_type (); 544 extern bool_t xdr_open_in (); 545 extern bool_t xdr_open_out (); 546 extern bool_t xdr_close_control (); 547 extern bool_t xdr_close_in (); 548 extern bool_t xdr_signal_in (); 549 extern bool_t xdr_signal_out (); 550 extern bool_t xdr_stop_code (); 551 extern bool_t xdr_wait_in (); 552 extern bool_t xdr_wait_out (); 553 extern bool_t xdr_ptrace_in (); 554 extern bool_t xdr_ptrace_out (); 555 extern bool_t xdr_one_symbol (); 556 extern bool_t xdr_all_symbols (); 557 extern bool_t xdr_get_global_symbols_out (); 558 extern bool_t xdr_get_text_data_in (); 559 extern bool_t xdr_get_text_data_out (); 560 extern bool_t xdr_one_signal (); 561 extern bool_t xdr_all_signals (); 562 extern bool_t xdr_get_signal_names_out (); 563 564 #endif /* K&R C */ 445 extern bool_t xdr_rpc_type (XDR *, rpc_type*); 446 extern bool_t xdr_UDP_MSG (XDR *, UDP_MSG*); 447 extern bool_t xdr_ptracereq (XDR *, ptracereq*); 448 extern bool_t xdr_xdr_regs (XDR *, xdr_regs*); 449 extern bool_t xdr_xdr_mem (XDR *, xdr_mem*); 450 extern bool_t xdr_break_type (XDR *, break_type*); 451 extern bool_t xdr_xdr_break (XDR *, xdr_break*); 452 extern bool_t xdr_thread_name (XDR *, thread_name*); 453 extern bool_t xdr_KernThread (XDR *, KernThread*); 454 extern bool_t xdr_thread_list (XDR *, thread_list*); 455 extern bool_t xdr_ptrace_addr_data_in (XDR *, ptrace_addr_data_in*); 456 extern bool_t xdr_ptrace_addr_data_out (XDR *, ptrace_addr_data_out*); 457 extern bool_t xdr_CHAR_DATA (XDR *, CHAR_DATA*); 458 extern bool_t xdr_one_arg (XDR *, one_arg*); 459 extern bool_t xdr_debug_type (XDR *, debug_type*); 460 extern bool_t xdr_open_in (XDR *, open_in*); 461 extern bool_t xdr_open_out (XDR *, open_out*); 462 extern bool_t xdr_close_control (XDR *, close_control*); 463 extern bool_t xdr_close_in (XDR *, close_in*); 464 extern bool_t xdr_signal_in (XDR *, signal_in*); 465 extern bool_t xdr_signal_out (XDR *, signal_out*); 466 extern bool_t xdr_stop_code (XDR *, stop_code*); 467 extern bool_t xdr_wait_in (XDR *, wait_in*); 468 extern bool_t xdr_wait_out (XDR *, wait_out*); 469 extern bool_t xdr_ptrace_in (XDR *, ptrace_in*); 470 extern bool_t xdr_ptrace_out (XDR *, ptrace_out*); 471 extern bool_t xdr_one_symbol (XDR *, one_symbol*); 472 extern bool_t xdr_all_symbols (XDR *, all_symbols*); 473 extern bool_t xdr_get_global_symbols_out (XDR *, get_global_symbols_out*); 474 extern bool_t xdr_get_text_data_in (XDR *, get_text_data_in*); 475 extern bool_t xdr_get_text_data_out (XDR *, get_text_data_out*); 476 extern bool_t xdr_one_signal (XDR *, one_signal*); 477 extern bool_t xdr_all_signals (XDR *, all_signals*); 478 extern bool_t xdr_get_signal_names_out (XDR *, get_signal_names_out*); 479 480 #else /* K&R C */ 481 extern bool_t xdr_rpc_type (); 482 extern bool_t xdr_UDP_MSG (); 483 extern bool_t xdr_ptracereq (); 484 extern bool_t xdr_xdr_regs (); 485 extern bool_t xdr_xdr_mem (); 486 extern bool_t xdr_break_type (); 487 extern bool_t xdr_xdr_break (); 488 extern bool_t xdr_thread_name (); 489 extern bool_t xdr_KernThread (); 490 extern bool_t xdr_thread_list (); 491 extern bool_t xdr_ptrace_addr_data_in (); 492 extern bool_t xdr_ptrace_addr_data_out (); 493 extern bool_t xdr_CHAR_DATA (); 494 extern bool_t xdr_one_arg (); 495 extern bool_t xdr_debug_type (); 496 extern bool_t xdr_open_in (); 497 extern bool_t xdr_open_out (); 498 extern bool_t xdr_close_control (); 499 extern bool_t xdr_close_in (); 500 extern bool_t xdr_signal_in (); 501 extern bool_t xdr_signal_out (); 502 extern bool_t xdr_stop_code (); 503 extern bool_t xdr_wait_in (); 504 extern bool_t xdr_wait_out (); 505 extern bool_t xdr_ptrace_in (); 506 extern bool_t xdr_ptrace_out (); 507 extern bool_t xdr_one_symbol (); 508 extern bool_t xdr_all_symbols (); 509 extern bool_t xdr_get_global_symbols_out (); 510 extern bool_t xdr_get_text_data_in (); 511 extern bool_t xdr_get_text_data_out (); 512 extern bool_t xdr_one_signal (); 513 extern bool_t xdr_all_signals (); 514 extern bool_t xdr_get_signal_names_out (); 515 516 #endif /* K&R C */ 565 517 566 518 #ifdef __cplusplus 567 519 } 568 520 #endif 569 #endif /* !_REMDEB_H_RPCGEN */ 521 522 #endif /* !_REMDEB_H_RPCGEN */ -
c/src/librdbg/src/i386/any/remdeb_svc.c
rbdb86b4 r97f6256 1 #include <rpc/types.h>2 #include <rpc/rpc.h>3 #include <stdio.h>4 #include <stdlib.h>5 #include <string.h>6 #include <bsp.h>7 #include <rdbg/servrpc.h>8 #include <rdbg/remdeb.h>9 #define fprintf(a,b) printf(b)10 /*HEADER_START*/11 #define RTEMS_PORT 207112 #define RTEMS_BACK_PORT 207313 /*14 * Sun request values for the remote ptrace system call15 */16 17 /*18 * Memory data for read/write text or data. The size is in data. The target19 * addr is in the addr field.20 * Be careful before modifying because this value goes into internal21 * pipes and is allocated on stack too. Pipes and/or the stack could22 * become too small if this value gets incremented.23 */24 #ifndef XRY_MAX_CMD_STR25 #endif /* REMDEB_H */26 /*27 * now open_connex() routine which establishes a connection to server28 */29 #define DEBUGGER_IS_GDB 0x2 /* */30 /*31 * now close_connex() routine which detaches from server32 */33 /*34 * now send_signal() routine which sends signals to processes like kill(2)35 */36 /*37 * now wait_info() routine which returns results of polling the wait status38 * of a process/actor. It may return 0 if running, else pid or -139 */40 /*41 * now ptrace() routine. This matches the Sun UNIX ptrace as well as42 * some additions43 */44 /*45 * now define the actual calls we support46 */47 const char *names[] = {48 "NULLPROC", "OPEN_CONNEX", "SEND_SIGNAL", "name3",49 "name4", "name5", "name6", "name7",50 "name8", "name9", "CLOSE_CONNEX", "PTRACE",51 "name12", "WAIT_INFO", "name14", "name15",52 "name16", "GET_SIGNAL_NAMES", "name18"53 };54 55 void56 remotedeb_2 (struct svc_req *rqstp, register SVCXPRT * transp)57 {58 union {59 open_in open_connex_2_arg;60 signal_in send_signal_2_arg;61 close_in close_connex_2_arg;62 ptrace_in ptrace_2_arg;63 wait_in wait_info_2_arg;64 } argument;65 char *result;66 xdrproc_t _xdr_argument, _xdr_result;67 char *(*local) (char *, struct svc_req *);68 69 DPRINTF (("remotedeb_2: %s (%d)\n",70 (unsigned) rqstp->rq_proc <71 (unsigned) (sizeof names / sizeof names[0]) ?72 names[rqstp->rq_proc] : "???", (int) rqstp->rq_proc));73 74 switch (rqstp->rq_proc) {75 case NULLPROC:76 (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *) NULL);77 return;78 79 case OPEN_CONNEX:80 _xdr_argument = (xdrproc_t) xdr_open_in;81 _xdr_result = (xdrproc_t) xdr_open_out;82 local = (char *(*)(char *, struct svc_req *)) open_connex_2_svc;83 break;84 85 case SEND_SIGNAL:86 _xdr_argument = (xdrproc_t) xdr_signal_in;87 _xdr_result = (xdrproc_t) xdr_signal_out;88 local = (char *(*)(char *, struct svc_req *)) send_signal_2_svc;89 break;90 91 case CLOSE_CONNEX:92 _xdr_argument = (xdrproc_t) xdr_close_in;93 _xdr_result = (xdrproc_t) xdr_void;94 local = (char *(*)(char *, struct svc_req *)) close_connex_2_svc;95 break;96 97 case PTRACE:98 _xdr_argument = (xdrproc_t) xdr_ptrace_in;99 _xdr_result = (xdrproc_t) xdr_ptrace_out;100 local = (char *(*)(char *, struct svc_req *)) ptrace_2_svc;101 break;102 103 case WAIT_INFO:104 _xdr_argument = (xdrproc_t) xdr_wait_in;105 _xdr_result = (xdrproc_t) xdr_wait_out;106 local = (char *(*)(char *, struct svc_req *)) wait_info_2_svc;107 break;108 109 case GET_SIGNAL_NAMES:110 _xdr_argument = (xdrproc_t) xdr_void;111 _xdr_result = (xdrproc_t) xdr_get_signal_names_out;112 local = (char *(*)(char *, struct svc_req *)) get_signal_names_2_svc;113 break;114 115 default:116 svcerr_noproc (transp);117 return;118 }119 memset ((char *) &argument, 0, sizeof (argument));120 if (!svc_getargs (transp, _xdr_argument, (caddr_t) & argument)) {121 svcerr_decode (transp);122 return;123 }124 result = (*local) ((char *) &argument, rqstp);125 if (result != NULL && !svc_sendreply (transp, _xdr_result, result)) {126 svcerr_systemerr (transp);127 }128 if (!svc_freeargs (transp, _xdr_argument, (caddr_t) & argument)) {129 fprintf (stderr, "unable to free arguments");130 exit (1);131 }132 return;133 } -
c/src/librdbg/src/i386/any/remdeb_xdr.c
rbdb86b4 r97f6256 9 9 10 10 bool_t 11 xdr_rpc_type (XDR * xdrs, rpc_type * objp) 12 { 13 register int32_t *buf; 14 15 if (!xdr_enum (xdrs, (enum_t *) objp)) 16 return FALSE; 17 return TRUE; 18 } 19 20 bool_t 21 xdr_UDP_MSG (XDR * xdrs, UDP_MSG * objp) 22 { 23 register int32_t *buf; 24 25 if (!xdr_u_char (xdrs, &objp->type)) 26 return FALSE; 27 if (!xdr_u_char (xdrs, &objp->msg_num)) 28 return FALSE; 29 if (!xdr_u_short (xdrs, &objp->spec)) 30 return FALSE; 31 if (!xdr_long (xdrs, &objp->pid)) 32 return FALSE; 33 if (!xdr_u_long (xdrs, &objp->context)) 34 return FALSE; 35 return TRUE; 36 } 37 11 xdr_rpc_type (XDR *xdrs, rpc_type *objp) 12 { 13 register int32_t *buf; 14 15 if (!xdr_enum (xdrs, (enum_t *) objp)) 16 return FALSE; 17 return TRUE; 18 } 19 20 bool_t 21 xdr_UDP_MSG (XDR *xdrs, UDP_MSG *objp) 22 { 23 register int32_t *buf; 24 25 if (!xdr_u_char (xdrs, &objp->type)) 26 return FALSE; 27 if (!xdr_u_char (xdrs, &objp->msg_num)) 28 return FALSE; 29 if (!xdr_u_short (xdrs, &objp->spec)) 30 return FALSE; 31 if (!xdr_long (xdrs, &objp->pid)) 32 return FALSE; 33 if (!xdr_u_long (xdrs, &objp->context)) 34 return FALSE; 35 return TRUE; 36 } 38 37 /* 39 38 * Sun request values for the remote ptrace system call 40 39 */ 41 40 42 bool_t 43 xdr_ptracereq (XDR * xdrs, ptracereq * objp) 44 { 45 register int32_t *buf; 46 47 if (!xdr_enum (xdrs, (enum_t *) objp)) 48 return FALSE; 49 return TRUE; 50 } 51 52 bool_t 53 xdr_xdr_regs (XDR * xdrs, xdr_regs * objp) 54 { 55 register int32_t *buf; 56 57 int i; 58 59 if (xdrs->x_op == XDR_ENCODE) { 60 buf = XDR_INLINE (xdrs, 19 * BYTES_PER_XDR_UNIT); 61 if (buf == NULL) { 62 if (!xdr_vector (xdrs, (char *) objp->tabreg, 19, 63 sizeof (u_int), (xdrproc_t) xdr_u_int)) 64 return FALSE; 65 } else { 66 { 67 register u_int *genp; 68 69 for (i = 0, genp = objp->tabreg; i < 19; ++i) { 70 IXDR_PUT_U_LONG (buf, *genp++); 71 } 72 } 73 } 74 return TRUE; 75 } else if (xdrs->x_op == XDR_DECODE) { 76 buf = XDR_INLINE (xdrs, 19 * BYTES_PER_XDR_UNIT); 77 if (buf == NULL) { 78 if (!xdr_vector (xdrs, (char *) objp->tabreg, 19, 79 sizeof (u_int), (xdrproc_t) xdr_u_int)) 80 return FALSE; 81 } else { 82 { 83 register u_int *genp; 84 85 for (i = 0, genp = objp->tabreg; i < 19; ++i) { 86 *genp++ = IXDR_GET_U_LONG (buf); 87 } 88 } 89 } 90 return TRUE; 91 } 92 93 if (!xdr_vector (xdrs, (char *) objp->tabreg, 19, 94 sizeof (u_int), (xdrproc_t) xdr_u_int)) 95 return FALSE; 96 return TRUE; 97 } 98 99 /* 41 42 bool_t 43 xdr_ptracereq (XDR *xdrs, ptracereq *objp) 44 { 45 register int32_t *buf; 46 47 if (!xdr_enum (xdrs, (enum_t *) objp)) 48 return FALSE; 49 return TRUE; 50 } 51 52 bool_t 53 xdr_xdr_regs (XDR *xdrs, xdr_regs *objp) 54 { 55 register int32_t *buf; 56 57 int i; 58 59 if (xdrs->x_op == XDR_ENCODE) { 60 buf = XDR_INLINE (xdrs, ( 19 ) * BYTES_PER_XDR_UNIT); 61 if (buf == NULL) { 62 if (!xdr_vector (xdrs, (char *)objp->tabreg, 19, 63 sizeof (u_int), (xdrproc_t) xdr_u_int)) 64 return FALSE; 65 } else { 66 { 67 register u_int *genp; 68 69 for (i = 0, genp = objp->tabreg; 70 i < 19; ++i) { 71 IXDR_PUT_U_LONG(buf, *genp++); 72 } 73 } 74 } 75 return TRUE; 76 } else if (xdrs->x_op == XDR_DECODE) { 77 buf = XDR_INLINE (xdrs, ( 19 ) * BYTES_PER_XDR_UNIT); 78 if (buf == NULL) { 79 if (!xdr_vector (xdrs, (char *)objp->tabreg, 19, 80 sizeof (u_int), (xdrproc_t) xdr_u_int)) 81 return FALSE; 82 } else { 83 { 84 register u_int *genp; 85 86 for (i = 0, genp = objp->tabreg; 87 i < 19; ++i) { 88 *genp++ = IXDR_GET_U_LONG(buf); 89 } 90 } 91 } 92 return TRUE; 93 } 94 95 if (!xdr_vector (xdrs, (char *)objp->tabreg, 19, 96 sizeof (u_int), (xdrproc_t) xdr_u_int)) 97 return FALSE; 98 return TRUE; 99 } 100 /* 100 101 * Memory data for read/write text or data. The size is in data. The target 101 102 * addr is in the addr field. … … 104 105 * become too small if this value gets incremented. 105 106 */ 106 bool_t 107 xdr_xdr_mem (xdrs, objp) 108 XDR *xdrs; 109 struct xdr_mem *objp; 110 { 111 if (!xdr_u_long (xdrs, &objp->addr)) { 112 return (FALSE); 113 } 114 if (!xdr_u_int (xdrs, &objp->dataNb)) { 115 return (FALSE); 116 } 117 return (xdr_opaque (xdrs, objp->data, objp->dataNb)); 118 } 119 120 bool_t 121 xdr_break_type (XDR * xdrs, break_type * objp) 122 { 123 register int32_t *buf; 124 125 if (!xdr_enum (xdrs, (enum_t *) objp)) 126 return FALSE; 127 return TRUE; 128 } 129 130 bool_t 131 xdr_xdr_break (XDR * xdrs, xdr_break * objp) 132 { 133 register int32_t *buf; 134 135 int i; 136 137 if (xdrs->x_op == XDR_ENCODE) { 138 if (!xdr_u_char (xdrs, &objp->type)) 139 return FALSE; 140 if (!xdr_u_char (xdrs, &objp->thread_spec)) 141 return FALSE; 142 buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT); 143 if (buf == NULL) { 144 if (!xdr_u_short (xdrs, &objp->handle)) 145 return FALSE; 146 if (!xdr_u_long (xdrs, &objp->ee_loc)) 147 return FALSE; 148 if (!xdr_u_long (xdrs, &objp->ee_type)) 149 return FALSE; 150 if (!xdr_u_short (xdrs, &objp->length)) 151 return FALSE; 152 153 } else { 154 IXDR_PUT_U_SHORT (buf, objp->handle); 155 IXDR_PUT_U_LONG (buf, objp->ee_loc); 156 IXDR_PUT_U_LONG (buf, objp->ee_type); 157 IXDR_PUT_U_SHORT (buf, objp->length); 158 } 159 if (!xdr_u_char (xdrs, &objp->pass_count)) 160 return FALSE; 161 if (!xdr_u_char (xdrs, &objp->curr_pass)) 162 return FALSE; 163 buf = XDR_INLINE (xdrs, MAX_THRD_BRK * BYTES_PER_XDR_UNIT); 164 if (buf == NULL) { 165 if (!xdr_vector (xdrs, (char *) objp->thread_list, MAX_THRD_BRK, 166 sizeof (u_long), (xdrproc_t) xdr_u_long)) 167 return FALSE; 168 } else { 169 { 170 register u_long *genp; 171 172 for (i = 0, genp = objp->thread_list; i < MAX_THRD_BRK; ++i) { 173 IXDR_PUT_U_LONG (buf, *genp++); 174 } 175 } 176 } 177 return TRUE; 178 } else if (xdrs->x_op == XDR_DECODE) { 179 if (!xdr_u_char (xdrs, &objp->type)) 180 return FALSE; 181 if (!xdr_u_char (xdrs, &objp->thread_spec)) 182 return FALSE; 183 buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT); 184 if (buf == NULL) { 185 if (!xdr_u_short (xdrs, &objp->handle)) 186 return FALSE; 187 if (!xdr_u_long (xdrs, &objp->ee_loc)) 188 return FALSE; 189 if (!xdr_u_long (xdrs, &objp->ee_type)) 190 return FALSE; 191 if (!xdr_u_short (xdrs, &objp->length)) 192 return FALSE; 193 194 } else { 195 objp->handle = IXDR_GET_U_SHORT (buf); 196 objp->ee_loc = IXDR_GET_U_LONG (buf); 197 objp->ee_type = IXDR_GET_U_LONG (buf); 198 objp->length = IXDR_GET_U_SHORT (buf); 199 } 200 if (!xdr_u_char (xdrs, &objp->pass_count)) 201 return FALSE; 202 if (!xdr_u_char (xdrs, &objp->curr_pass)) 203 return FALSE; 204 buf = XDR_INLINE (xdrs, MAX_THRD_BRK * BYTES_PER_XDR_UNIT); 205 if (buf == NULL) { 206 if (!xdr_vector (xdrs, (char *) objp->thread_list, MAX_THRD_BRK, 207 sizeof (u_long), (xdrproc_t) xdr_u_long)) 208 return FALSE; 209 } else { 210 { 211 register u_long *genp; 212 213 for (i = 0, genp = objp->thread_list; i < MAX_THRD_BRK; ++i) { 214 *genp++ = IXDR_GET_U_LONG (buf); 215 } 216 } 217 } 218 return TRUE; 219 } 220 221 if (!xdr_u_char (xdrs, &objp->type)) 222 return FALSE; 223 if (!xdr_u_char (xdrs, &objp->thread_spec)) 224 return FALSE; 225 if (!xdr_u_short (xdrs, &objp->handle)) 226 return FALSE; 227 if (!xdr_u_long (xdrs, &objp->ee_loc)) 228 return FALSE; 229 if (!xdr_u_long (xdrs, &objp->ee_type)) 230 return FALSE; 231 if (!xdr_u_short (xdrs, &objp->length)) 232 return FALSE; 233 if (!xdr_u_char (xdrs, &objp->pass_count)) 234 return FALSE; 235 if (!xdr_u_char (xdrs, &objp->curr_pass)) 236 return FALSE; 237 if (!xdr_vector (xdrs, (char *) objp->thread_list, MAX_THRD_BRK, 238 sizeof (u_long), (xdrproc_t) xdr_u_long)) 239 return FALSE; 240 return TRUE; 241 } 242 243 bool_t 244 xdr_thread_name (XDR * xdrs, thread_name * objp) 245 { 246 register int32_t *buf; 247 248 if (!xdr_string (xdrs, objp, THREADNAMEMAX)) 249 return FALSE; 250 return TRUE; 251 } 252 253 bool_t 254 xdr_KernThread (XDR * xdrs, KernThread * objp) 255 { 256 register int32_t *buf; 257 258 if (!xdr_u_int (xdrs, &objp->threadLi)) 259 return FALSE; 260 return TRUE; 261 } 262 263 bool_t 264 xdr_thread_list (xdrs, objp) 265 XDR *xdrs; 266 struct thread_list *objp; 267 { 268 return (xdr_array (xdrs, (char **) &objp->threads, &objp->nbThread, 269 UTHREAD_MAX, sizeof (KernThread), xdr_KernThread)); 270 } 271 272 bool_t 273 xdr_ptrace_addr_data_in (XDR * xdrs, ptrace_addr_data_in * objp) 274 { 275 register int32_t *buf; 276 277 if (!xdr_ptracereq (xdrs, &objp->req)) 278 return FALSE; 279 switch (objp->req) { 280 case RPT_SETTHREADREGS: 281 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_in_u.regs)) 282 return FALSE; 283 break; 284 case RPT_SETREGS: 285 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_in_u.regs)) 286 return FALSE; 287 break; 288 case RPT_PSETTHREADREGS: 289 if (!xdr_array 290 (xdrs, (char **) &objp->ptrace_addr_data_in_u.pregs.pregs_val, 291 (u_int *) & objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0, 292 sizeof (u_int), (xdrproc_t) xdr_u_int)) 293 return FALSE; 294 break; 295 case RPT_PSETREGS: 296 if (!xdr_array 297 (xdrs, (char **) &objp->ptrace_addr_data_in_u.pregs.pregs_val, 298 (u_int *) & objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0, 299 sizeof (u_int), (xdrproc_t) xdr_u_int)) 300 return FALSE; 301 break; 302 case RPT_SETTHREADNAME: 303 if (!xdr_thread_name (xdrs, &objp->ptrace_addr_data_in_u.name)) 304 return FALSE; 305 break; 306 case RPT_WRITETEXT: 307 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_in_u.mem)) 308 return FALSE; 309 break; 310 case RPT_WRITEDATA: 311 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_in_u.mem)) 312 return FALSE; 313 break; 314 case RPT_SETBREAK: 315 if (!xdr_xdr_break (xdrs, &objp->ptrace_addr_data_in_u.breakp)) 316 return FALSE; 317 break; 318 default: 319 if (!xdr_u_int (xdrs, &objp->ptrace_addr_data_in_u.address)) 320 return FALSE; 321 break; 322 } 323 return TRUE; 324 } 325 326 bool_t 327 xdr_ptrace_addr_data_out (XDR * xdrs, ptrace_addr_data_out * objp) 328 { 329 register int32_t *buf; 330 331 if (!xdr_ptracereq (xdrs, &objp->req)) 332 return FALSE; 333 switch (objp->req) { 334 case RPT_GETREGS: 335 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_out_u.regs)) 336 return FALSE; 337 break; 338 case RPT_GETTHREADREGS: 339 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_out_u.regs)) 340 return FALSE; 341 break; 342 case RPT_PGETREGS: 343 if (!xdr_array 344 (xdrs, (char **) &objp->ptrace_addr_data_out_u.pregs.pregs_val, 345 (u_int *) & objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0, 346 sizeof (u_int), (xdrproc_t) xdr_u_int)) 347 return FALSE; 348 break; 349 case RPT_PGETTHREADREGS: 350 if (!xdr_array 351 (xdrs, (char **) &objp->ptrace_addr_data_out_u.pregs.pregs_val, 352 (u_int *) & objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0, 353 sizeof (u_int), (xdrproc_t) xdr_u_int)) 354 return FALSE; 355 break; 356 case RPT_THREADLIST: 357 if (!xdr_thread_list (xdrs, &objp->ptrace_addr_data_out_u.threads)) 358 return FALSE; 359 break; 360 case RPT_GETTHREADNAME: 361 if (!xdr_thread_name (xdrs, &objp->ptrace_addr_data_out_u.name)) 362 return FALSE; 363 break; 364 case RPT_READTEXT: 365 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 366 return FALSE; 367 break; 368 case RPT_GETNAME: 369 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 370 return FALSE; 371 break; 372 case RPT_READDATA: 373 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 374 return FALSE; 375 break; 376 case RPT_GETBREAK: 377 if (!xdr_xdr_break (xdrs, &objp->ptrace_addr_data_out_u.breakp)) 378 return FALSE; 379 break; 380 default: 381 if (!xdr_u_int (xdrs, &objp->ptrace_addr_data_out_u.addr)) 382 return FALSE; 383 break; 384 } 385 return TRUE; 386 } 387 388 bool_t 389 xdr_CHAR_DATA (XDR * xdrs, CHAR_DATA * objp) 390 { 391 register int32_t *buf; 392 393 if (!xdr_bytes 394 (xdrs, (char **) &objp->CHAR_DATA_val, (u_int *) & objp->CHAR_DATA_len, 395 NET_SAFE)) 396 return FALSE; 397 return TRUE; 398 } 399 400 #ifndef XRY_MAX_CMD_STR 401 #endif /* REMDEB_H */ 402 403 bool_t 404 xdr_xry_inst (XDR * xdrs, xry_inst * objp) 405 { 406 register int32_t *buf; 407 408 if (!xdr_u_char (xdrs, &objp->flags)) 409 return FALSE; 410 if (!xdr_u_char (xdrs, &objp->type)) 411 return FALSE; 412 if (!xdr_u_char (xdrs, &objp->sub_type)) 413 return FALSE; 414 if (!xdr_u_char (xdrs, &objp->res_type)) 415 return FALSE; 416 if (!xdr_u_long (xdrs, &objp->value)) 417 return FALSE; 418 if (!xdr_u_long (xdrs, &objp->value2)) 419 return FALSE; 420 return TRUE; 421 } 422 423 bool_t 424 xdr_instance (XDR * xdrs, instance * objp) 425 { 426 register int32_t *buf; 427 428 int i; 429 if (!xdr_vector (xdrs, (char *) objp->instances, XRY_MAX_INSTANCES, 430 sizeof (xry_inst), (xdrproc_t) xdr_xry_inst)) 431 return FALSE; 432 if (!xdr_vector (xdrs, (char *) objp->buffer, XRY_MAX_INST_BUFF, 433 sizeof (u_char), (xdrproc_t) xdr_u_char)) 434 return FALSE; 435 return TRUE; 436 } 437 438 bool_t 439 xdr_instance_union (XDR * xdrs, instance_union * objp) 440 { 441 register int32_t *buf; 442 443 if (!xdr_bool (xdrs, &objp->instances)) 444 return FALSE; 445 switch (objp->instances) { 446 case TRUE: 447 if (!xdr_instance (xdrs, &objp->instance_union_u.inst)) 448 return FALSE; 449 break; 450 case FALSE: 451 if (!xdr_string (xdrs, &objp->instance_union_u.buffer, XRY_MAX_CMD_STR)) 452 return FALSE; 453 break; 454 default: 455 return FALSE; 456 } 457 return TRUE; 458 } 459 460 bool_t 461 xdr_one_arg (XDR * xdrs, one_arg * objp) 462 { 463 register int32_t *buf; 464 465 if (!xdr_string (xdrs, objp, NET_SAFE)) 466 return FALSE; 467 return TRUE; 468 } 469 470 /* 471 * now open_connex() routine which establishes a connection to server 472 */ 473 474 bool_t 475 xdr_debug_type (XDR * xdrs, debug_type * objp) 476 { 477 register int32_t *buf; 478 479 if (!xdr_enum (xdrs, (enum_t *) objp)) 480 return FALSE; 481 return TRUE; 482 } 483 484 #define DEBUGGER_IS_GDB 0x2 /* */ 485 486 bool_t 487 xdr_open_in (XDR * xdrs, open_in * objp) 488 { 489 register int32_t *buf; 490 491 int i; 492 if (!xdr_vector (xdrs, (char *) objp->back_port, 16, 493 sizeof (u_char), (xdrproc_t) xdr_u_char)) 494 return FALSE; 495 if (!xdr_u_short (xdrs, &objp->debug_type)) 496 return FALSE; 497 if (!xdr_u_short (xdrs, &objp->flags)) 498 return FALSE; 499 if (!xdr_vector (xdrs, (char *) objp->destination, 16, 500 sizeof (u_char), (xdrproc_t) xdr_u_char)) 501 return FALSE; 502 if (!xdr_one_arg (xdrs, &objp->user_name)) 503 return FALSE; 504 return TRUE; 505 } 506 507 bool_t 508 xdr_open_out (XDR * xdrs, open_out * objp) 509 { 510 register int32_t *buf; 511 512 int i; 513 514 if (xdrs->x_op == XDR_ENCODE) { 515 buf = XDR_INLINE (xdrs, (2 + (4)) * BYTES_PER_XDR_UNIT); 516 if (buf == NULL) { 517 if (!xdr_u_long (xdrs, &objp->port)) 518 return FALSE; 519 if (!xdr_vector (xdrs, (char *) objp->pad, 4, 520 sizeof (u_int), (xdrproc_t) xdr_u_int)) 521 return FALSE; 522 if (!xdr_u_int (xdrs, &objp->fp)) 523 return FALSE; 524 525 } else { 526 IXDR_PUT_U_LONG (buf, objp->port); 527 { 528 register u_int *genp; 529 530 for (i = 0, genp = objp->pad; i < 4; ++i) { 531 IXDR_PUT_U_LONG (buf, *genp++); 532 } 533 } 534 IXDR_PUT_U_LONG (buf, objp->fp); 535 } 536 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 537 return FALSE; 538 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 539 return FALSE; 540 if (!xdr_u_short (xdrs, &objp->server_vers)) 541 return FALSE; 542 return TRUE; 543 } else if (xdrs->x_op == XDR_DECODE) { 544 buf = XDR_INLINE (xdrs, (2 + (4)) * BYTES_PER_XDR_UNIT); 545 if (buf == NULL) { 546 if (!xdr_u_long (xdrs, &objp->port)) 547 return FALSE; 548 if (!xdr_vector (xdrs, (char *) objp->pad, 4, 549 sizeof (u_int), (xdrproc_t) xdr_u_int)) 550 return FALSE; 551 if (!xdr_u_int (xdrs, &objp->fp)) 552 return FALSE; 553 554 } else { 555 objp->port = IXDR_GET_U_LONG (buf); 556 { 557 register u_int *genp; 558 559 for (i = 0, genp = objp->pad; i < 4; ++i) { 560 *genp++ = IXDR_GET_U_LONG (buf); 561 } 562 } 563 objp->fp = IXDR_GET_U_LONG (buf); 564 } 565 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 566 return FALSE; 567 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 568 return FALSE; 569 if (!xdr_u_short (xdrs, &objp->server_vers)) 570 return FALSE; 571 return TRUE; 572 } 573 574 if (!xdr_u_long (xdrs, &objp->port)) 575 return FALSE; 576 if (!xdr_vector (xdrs, (char *) objp->pad, 4, 577 sizeof (u_int), (xdrproc_t) xdr_u_int)) 578 return FALSE; 579 if (!xdr_u_int (xdrs, &objp->fp)) 580 return FALSE; 581 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 582 return FALSE; 583 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 584 return FALSE; 585 if (!xdr_u_short (xdrs, &objp->server_vers)) 586 return FALSE; 587 return TRUE; 588 } 589 590 /* 591 * now close_connex() routine which detaches from server 592 */ 593 594 bool_t 595 xdr_close_control (XDR * xdrs, close_control * objp) 596 { 597 register int32_t *buf; 598 599 if (!xdr_enum (xdrs, (enum_t *) objp)) 600 return FALSE; 601 return TRUE; 602 } 603 604 bool_t 605 xdr_close_in (XDR * xdrs, close_in * objp) 606 { 607 register int32_t *buf; 608 609 if (!xdr_close_control (xdrs, &objp->control)) 610 return FALSE; 611 return TRUE; 612 } 613 614 /* 615 * now send_signal() routine which sends signals to processes like kill(2) 616 */ 617 618 bool_t 619 xdr_signal_in (XDR * xdrs, signal_in * objp) 620 { 621 register int32_t *buf; 622 623 if (!xdr_int (xdrs, &objp->pid)) 624 return FALSE; 625 if (!xdr_int (xdrs, &objp->sig)) 626 return FALSE; 627 return TRUE; 628 } 629 630 bool_t 631 xdr_signal_out (XDR * xdrs, signal_out * objp) 632 { 633 register int32_t *buf; 634 635 if (!xdr_int (xdrs, &objp->kill_return)) 636 return FALSE; 637 if (!xdr_int (xdrs, &objp->errNo)) 638 return FALSE; 639 return TRUE; 640 } 641 642 /* 643 * now wait_info() routine which returns results of polling the wait status 644 * of a process/actor. It may return 0 if running, else pid or -1 645 */ 646 647 bool_t 648 xdr_stop_code (XDR * xdrs, stop_code * objp) 649 { 650 register int32_t *buf; 651 652 if (!xdr_enum (xdrs, (enum_t *) objp)) 653 return FALSE; 654 return TRUE; 655 } 656 657 bool_t 658 xdr_wait_in (XDR * xdrs, wait_in * objp) 659 { 660 register int32_t *buf; 661 662 if (!xdr_int (xdrs, &objp->pid)) 663 return FALSE; 664 return TRUE; 665 } 666 667 bool_t 668 xdr_wait_out (XDR * xdrs, wait_out * objp) 669 { 670 register int32_t *buf; 671 672 if (xdrs->x_op == XDR_ENCODE) { 673 buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); 674 if (buf == NULL) { 675 if (!xdr_int (xdrs, &objp->wait_return)) 676 return FALSE; 677 if (!xdr_int (xdrs, &objp->errNo)) 678 return FALSE; 679 if (!xdr_int (xdrs, &objp->status)) 680 return FALSE; 681 682 } else { 683 IXDR_PUT_LONG (buf, objp->wait_return); 684 IXDR_PUT_LONG (buf, objp->errNo); 685 IXDR_PUT_LONG (buf, objp->status); 686 } 687 if (!xdr_stop_code (xdrs, &objp->reason)) 688 return FALSE; 689 buf = XDR_INLINE (xdrs, 5 * BYTES_PER_XDR_UNIT); 690 if (buf == NULL) { 691 if (!xdr_int (xdrs, &objp->handle)) 692 return FALSE; 693 if (!xdr_u_long (xdrs, &objp->PC)) 694 return FALSE; 695 if (!xdr_u_long (xdrs, &objp->SP)) 696 return FALSE; 697 if (!xdr_u_long (xdrs, &objp->FP)) 698 return FALSE; 699 if (!xdr_u_long (xdrs, &objp->thread)) 700 return FALSE; 701 } else { 702 IXDR_PUT_LONG (buf, objp->handle); 703 IXDR_PUT_U_LONG (buf, objp->PC); 704 IXDR_PUT_U_LONG (buf, objp->SP); 705 IXDR_PUT_U_LONG (buf, objp->FP); 706 IXDR_PUT_U_LONG (buf, objp->thread); 707 } 708 return TRUE; 709 } else if (xdrs->x_op == XDR_DECODE) { 710 buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); 711 if (buf == NULL) { 712 if (!xdr_int (xdrs, &objp->wait_return)) 713 return FALSE; 714 if (!xdr_int (xdrs, &objp->errNo)) 715 return FALSE; 716 if (!xdr_int (xdrs, &objp->status)) 717 return FALSE; 718 719 } else { 720 objp->wait_return = IXDR_GET_LONG (buf); 721 objp->errNo = IXDR_GET_LONG (buf); 722 objp->status = IXDR_GET_LONG (buf); 723 } 724 if (!xdr_stop_code (xdrs, &objp->reason)) 725 return FALSE; 726 buf = XDR_INLINE (xdrs, 5 * BYTES_PER_XDR_UNIT); 727 if (buf == NULL) { 728 if (!xdr_int (xdrs, &objp->handle)) 729 return FALSE; 730 if (!xdr_u_long (xdrs, &objp->PC)) 731 return FALSE; 732 if (!xdr_u_long (xdrs, &objp->SP)) 733 return FALSE; 734 if (!xdr_u_long (xdrs, &objp->FP)) 735 return FALSE; 736 if (!xdr_u_long (xdrs, &objp->thread)) 737 return FALSE; 738 } else { 739 objp->handle = IXDR_GET_LONG (buf); 740 objp->PC = IXDR_GET_U_LONG (buf); 741 objp->SP = IXDR_GET_U_LONG (buf); 742 objp->FP = IXDR_GET_U_LONG (buf); 743 objp->thread = IXDR_GET_U_LONG (buf); 744 } 745 return TRUE; 746 } 747 748 if (!xdr_int (xdrs, &objp->wait_return)) 749 return FALSE; 750 if (!xdr_int (xdrs, &objp->errNo)) 751 return FALSE; 752 if (!xdr_int (xdrs, &objp->status)) 753 return FALSE; 754 if (!xdr_stop_code (xdrs, &objp->reason)) 755 return FALSE; 756 if (!xdr_int (xdrs, &objp->handle)) 757 return FALSE; 758 if (!xdr_u_long (xdrs, &objp->PC)) 759 return FALSE; 760 if (!xdr_u_long (xdrs, &objp->SP)) 761 return FALSE; 762 if (!xdr_u_long (xdrs, &objp->FP)) 763 return FALSE; 764 if (!xdr_u_long (xdrs, &objp->thread)) 765 return FALSE; 766 return TRUE; 767 } 768 769 /* 770 * now ptrace() routine. This matches the Sun UNIX ptrace as well as 771 * some additions 772 */ 773 774 bool_t 775 xdr_ptrace_in (XDR * xdrs, ptrace_in * objp) 776 { 777 register int32_t *buf; 778 779 if (!xdr_int (xdrs, &objp->pid)) 780 return FALSE; 781 if (!xdr_ptrace_addr_data_in (xdrs, &objp->addr)) 782 return FALSE; 783 if (!xdr_u_int (xdrs, &objp->data)) 784 return FALSE; 785 if (!xdr_u_int (xdrs, &objp->flags)) 786 return FALSE; 787 return TRUE; 788 } 789 790 bool_t 791 xdr_ptrace_out (XDR * xdrs, ptrace_out * objp) 792 { 793 register int32_t *buf; 794 795 if (!xdr_ptrace_addr_data_out (xdrs, &objp->addr)) 796 return FALSE; 797 if (!xdr_int (xdrs, &objp->result)) 798 return FALSE; 799 if (!xdr_int (xdrs, &objp->errNo)) 800 return FALSE; 801 return TRUE; 802 } 803 804 bool_t 805 xdr_one_symbol (XDR * xdrs, one_symbol * objp) 806 { 807 register int32_t *buf; 808 809 if (!xdr_string (xdrs, &objp->symbolName, ~0)) 810 return FALSE; 811 if (!xdr_long (xdrs, &objp->symbolValue)) 812 return FALSE; 813 return TRUE; 814 } 815 816 bool_t 817 xdr_all_symbols (XDR * xdrs, all_symbols * objp) 818 { 819 register int32_t *buf; 820 821 if (!xdr_array 822 (xdrs, (char **) &objp->all_symbols_val, 823 (u_int *) & objp->all_symbols_len, ~0, sizeof (one_symbol), 824 (xdrproc_t) xdr_one_symbol)) 825 return FALSE; 826 return TRUE; 827 } 828 829 bool_t 830 xdr_get_global_symbols_out (XDR * xdrs, get_global_symbols_out * objp) 831 { 832 register int32_t *buf; 833 834 if (!xdr_all_symbols (xdrs, &objp->symbols)) 835 return FALSE; 836 return TRUE; 837 } 838 839 bool_t 840 xdr_get_text_data_in (XDR * xdrs, get_text_data_in * objp) 841 { 842 register int32_t *buf; 843 844 if (!xdr_int (xdrs, &objp->pid)) 845 return FALSE; 846 if (!xdr_string (xdrs, &objp->actorName, 16)) 847 return FALSE; 848 return TRUE; 849 } 850 851 bool_t 852 xdr_get_text_data_out (XDR * xdrs, get_text_data_out * objp) 853 { 854 register int32_t *buf; 855 856 if (xdrs->x_op == XDR_ENCODE) { 857 buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT); 858 if (buf == NULL) { 859 if (!xdr_int (xdrs, &objp->result)) 860 return FALSE; 861 if (!xdr_int (xdrs, &objp->errNo)) 862 return FALSE; 863 if (!xdr_u_long (xdrs, &objp->textStart)) 864 return FALSE; 865 if (!xdr_u_long (xdrs, &objp->textSize)) 866 return FALSE; 867 if (!xdr_u_long (xdrs, &objp->dataStart)) 868 return FALSE; 869 if (!xdr_u_long (xdrs, &objp->dataSize)) 870 return FALSE; 871 } else { 872 IXDR_PUT_LONG (buf, objp->result); 873 IXDR_PUT_LONG (buf, objp->errNo); 874 IXDR_PUT_U_LONG (buf, objp->textStart); 875 IXDR_PUT_U_LONG (buf, objp->textSize); 876 IXDR_PUT_U_LONG (buf, objp->dataStart); 877 IXDR_PUT_U_LONG (buf, objp->dataSize); 878 } 879 return TRUE; 880 } else if (xdrs->x_op == XDR_DECODE) { 881 buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT); 882 if (buf == NULL) { 883 if (!xdr_int (xdrs, &objp->result)) 884 return FALSE; 885 if (!xdr_int (xdrs, &objp->errNo)) 886 return FALSE; 887 if (!xdr_u_long (xdrs, &objp->textStart)) 888 return FALSE; 889 if (!xdr_u_long (xdrs, &objp->textSize)) 890 return FALSE; 891 if (!xdr_u_long (xdrs, &objp->dataStart)) 892 return FALSE; 893 if (!xdr_u_long (xdrs, &objp->dataSize)) 894 return FALSE; 895 } else { 896 objp->result = IXDR_GET_LONG (buf); 897 objp->errNo = IXDR_GET_LONG (buf); 898 objp->textStart = IXDR_GET_U_LONG (buf); 899 objp->textSize = IXDR_GET_U_LONG (buf); 900 objp->dataStart = IXDR_GET_U_LONG (buf); 901 objp->dataSize = IXDR_GET_U_LONG (buf); 902 } 903 return TRUE; 904 } 905 906 if (!xdr_int (xdrs, &objp->result)) 907 return FALSE; 908 if (!xdr_int (xdrs, &objp->errNo)) 909 return FALSE; 910 if (!xdr_u_long (xdrs, &objp->textStart)) 911 return FALSE; 912 if (!xdr_u_long (xdrs, &objp->textSize)) 913 return FALSE; 914 if (!xdr_u_long (xdrs, &objp->dataStart)) 915 return FALSE; 916 if (!xdr_u_long (xdrs, &objp->dataSize)) 917 return FALSE; 918 return TRUE; 919 } 920 921 bool_t 922 xdr_one_signal (XDR * xdrs, one_signal * objp) 923 { 924 register int32_t *buf; 925 926 if (!xdr_u_int (xdrs, &objp->number)) 927 return FALSE; 928 if (!xdr_string (xdrs, &objp->name, ~0)) 929 return FALSE; 930 return TRUE; 931 } 932 933 bool_t 934 xdr_all_signals (XDR * xdrs, all_signals * objp) 935 { 936 register int32_t *buf; 937 938 if (!xdr_array 939 (xdrs, (char **) &objp->all_signals_val, 940 (u_int *) & objp->all_signals_len, ~0, sizeof (one_signal), 941 (xdrproc_t) xdr_one_signal)) 942 return FALSE; 943 return TRUE; 944 } 945 946 bool_t 947 xdr_get_signal_names_out (XDR * xdrs, get_signal_names_out * objp) 948 { 949 register int32_t *buf; 950 951 if (!xdr_all_signals (xdrs, &objp->signals)) 952 return FALSE; 953 return TRUE; 954 } 955 956 /* 957 * now define the actual calls we support 958 */ 107 bool_t xdr_xdr_mem(xdrs, objp) 108 XDR *xdrs; 109 struct xdr_mem *objp; 110 { 111 if (!xdr_u_long(xdrs, &objp->addr)) { 112 return (FALSE); 113 } 114 if (!xdr_u_int(xdrs, &objp->dataNb)) { 115 return(FALSE); 116 } 117 return (xdr_opaque(xdrs, objp->data, objp->dataNb)); 118 } 119 120 bool_t 121 xdr_break_type (XDR *xdrs, break_type *objp) 122 { 123 register int32_t *buf; 124 125 if (!xdr_enum (xdrs, (enum_t *) objp)) 126 return FALSE; 127 return TRUE; 128 } 129 130 bool_t 131 xdr_xdr_break (XDR *xdrs, xdr_break *objp) 132 { 133 register int32_t *buf; 134 135 int i; 136 137 if (xdrs->x_op == XDR_ENCODE) { 138 if (!xdr_u_char (xdrs, &objp->type)) 139 return FALSE; 140 if (!xdr_u_char (xdrs, &objp->thread_spec)) 141 return FALSE; 142 buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT); 143 if (buf == NULL) { 144 if (!xdr_u_short (xdrs, &objp->handle)) 145 return FALSE; 146 if (!xdr_u_long (xdrs, &objp->ee_loc)) 147 return FALSE; 148 if (!xdr_u_long (xdrs, &objp->ee_type)) 149 return FALSE; 150 if (!xdr_u_short (xdrs, &objp->length)) 151 return FALSE; 152 153 } else { 154 IXDR_PUT_U_SHORT(buf, objp->handle); 155 IXDR_PUT_U_LONG(buf, objp->ee_loc); 156 IXDR_PUT_U_LONG(buf, objp->ee_type); 157 IXDR_PUT_U_SHORT(buf, objp->length); 158 } 159 if (!xdr_u_char (xdrs, &objp->pass_count)) 160 return FALSE; 161 if (!xdr_u_char (xdrs, &objp->curr_pass)) 162 return FALSE; 163 buf = XDR_INLINE (xdrs, ( MAX_THRD_BRK ) * BYTES_PER_XDR_UNIT); 164 if (buf == NULL) { 165 if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK, 166 sizeof (u_long), (xdrproc_t) xdr_u_long)) 167 return FALSE; 168 } else { 169 { 170 register u_long *genp; 171 172 for (i = 0, genp = objp->thread_list; 173 i < MAX_THRD_BRK; ++i) { 174 IXDR_PUT_U_LONG(buf, *genp++); 175 } 176 } 177 } 178 return TRUE; 179 } else if (xdrs->x_op == XDR_DECODE) { 180 if (!xdr_u_char (xdrs, &objp->type)) 181 return FALSE; 182 if (!xdr_u_char (xdrs, &objp->thread_spec)) 183 return FALSE; 184 buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT); 185 if (buf == NULL) { 186 if (!xdr_u_short (xdrs, &objp->handle)) 187 return FALSE; 188 if (!xdr_u_long (xdrs, &objp->ee_loc)) 189 return FALSE; 190 if (!xdr_u_long (xdrs, &objp->ee_type)) 191 return FALSE; 192 if (!xdr_u_short (xdrs, &objp->length)) 193 return FALSE; 194 195 } else { 196 objp->handle = IXDR_GET_U_SHORT(buf); 197 objp->ee_loc = IXDR_GET_U_LONG(buf); 198 objp->ee_type = IXDR_GET_U_LONG(buf); 199 objp->length = IXDR_GET_U_SHORT(buf); 200 } 201 if (!xdr_u_char (xdrs, &objp->pass_count)) 202 return FALSE; 203 if (!xdr_u_char (xdrs, &objp->curr_pass)) 204 return FALSE; 205 buf = XDR_INLINE (xdrs, ( MAX_THRD_BRK ) * BYTES_PER_XDR_UNIT); 206 if (buf == NULL) { 207 if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK, 208 sizeof (u_long), (xdrproc_t) xdr_u_long)) 209 return FALSE; 210 } else { 211 { 212 register u_long *genp; 213 214 for (i = 0, genp = objp->thread_list; 215 i < MAX_THRD_BRK; ++i) { 216 *genp++ = IXDR_GET_U_LONG(buf); 217 } 218 } 219 } 220 return TRUE; 221 } 222 223 if (!xdr_u_char (xdrs, &objp->type)) 224 return FALSE; 225 if (!xdr_u_char (xdrs, &objp->thread_spec)) 226 return FALSE; 227 if (!xdr_u_short (xdrs, &objp->handle)) 228 return FALSE; 229 if (!xdr_u_long (xdrs, &objp->ee_loc)) 230 return FALSE; 231 if (!xdr_u_long (xdrs, &objp->ee_type)) 232 return FALSE; 233 if (!xdr_u_short (xdrs, &objp->length)) 234 return FALSE; 235 if (!xdr_u_char (xdrs, &objp->pass_count)) 236 return FALSE; 237 if (!xdr_u_char (xdrs, &objp->curr_pass)) 238 return FALSE; 239 if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK, 240 sizeof (u_long), (xdrproc_t) xdr_u_long)) 241 return FALSE; 242 return TRUE; 243 } 244 245 bool_t 246 xdr_thread_name (XDR *xdrs, thread_name *objp) 247 { 248 register int32_t *buf; 249 250 if (!xdr_string (xdrs, objp, THREADNAMEMAX)) 251 return FALSE; 252 return TRUE; 253 } 254 255 bool_t 256 xdr_KernThread (XDR *xdrs, KernThread *objp) 257 { 258 register int32_t *buf; 259 260 if (!xdr_u_int (xdrs, &objp->threadLi)) 261 return FALSE; 262 return TRUE; 263 } 264 bool_t xdr_thread_list(xdrs, objp) 265 XDR *xdrs; 266 struct thread_list *objp; 267 { 268 return (xdr_array(xdrs, (char**)&objp->threads, &objp->nbThread, 269 UTHREAD_MAX, sizeof(KernThread), xdr_KernThread)); 270 } 271 272 bool_t 273 xdr_ptrace_addr_data_in (XDR *xdrs, ptrace_addr_data_in *objp) 274 { 275 register int32_t *buf; 276 277 if (!xdr_ptracereq (xdrs, &objp->req)) 278 return FALSE; 279 switch (objp->req) { 280 case RPT_SETTHREADREGS: 281 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_in_u.regs)) 282 return FALSE; 283 break; 284 case RPT_SETREGS: 285 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_in_u.regs)) 286 return FALSE; 287 break; 288 case RPT_PSETTHREADREGS: 289 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, 290 sizeof (u_int), (xdrproc_t) xdr_u_int)) 291 return FALSE; 292 break; 293 case RPT_PSETREGS: 294 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, 295 sizeof (u_int), (xdrproc_t) xdr_u_int)) 296 return FALSE; 297 break; 298 case RPT_SETTHREADNAME: 299 if (!xdr_thread_name (xdrs, &objp->ptrace_addr_data_in_u.name)) 300 return FALSE; 301 break; 302 case RPT_WRITETEXT: 303 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_in_u.mem)) 304 return FALSE; 305 break; 306 case RPT_WRITEDATA: 307 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_in_u.mem)) 308 return FALSE; 309 break; 310 case RPT_SETBREAK: 311 if (!xdr_xdr_break (xdrs, &objp->ptrace_addr_data_in_u.breakp)) 312 return FALSE; 313 break; 314 default: 315 if (!xdr_u_int (xdrs, &objp->ptrace_addr_data_in_u.address)) 316 return FALSE; 317 break; 318 } 319 return TRUE; 320 } 321 322 bool_t 323 xdr_ptrace_addr_data_out (XDR *xdrs, ptrace_addr_data_out *objp) 324 { 325 register int32_t *buf; 326 327 if (!xdr_ptracereq (xdrs, &objp->req)) 328 return FALSE; 329 switch (objp->req) { 330 case RPT_GETREGS: 331 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_out_u.regs)) 332 return FALSE; 333 break; 334 case RPT_GETTHREADREGS: 335 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_out_u.regs)) 336 return FALSE; 337 break; 338 case RPT_PGETREGS: 339 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, 340 sizeof (u_int), (xdrproc_t) xdr_u_int)) 341 return FALSE; 342 break; 343 case RPT_PGETTHREADREGS: 344 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, 345 sizeof (u_int), (xdrproc_t) xdr_u_int)) 346 return FALSE; 347 break; 348 case RPT_THREADLIST: 349 if (!xdr_thread_list (xdrs, &objp->ptrace_addr_data_out_u.threads)) 350 return FALSE; 351 break; 352 case RPT_GETTHREADNAME: 353 if (!xdr_thread_name (xdrs, &objp->ptrace_addr_data_out_u.name)) 354 return FALSE; 355 break; 356 case RPT_READTEXT: 357 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 358 return FALSE; 359 break; 360 case RPT_GETNAME: 361 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 362 return FALSE; 363 break; 364 case RPT_READDATA: 365 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 366 return FALSE; 367 break; 368 case RPT_GETBREAK: 369 if (!xdr_xdr_break (xdrs, &objp->ptrace_addr_data_out_u.breakp)) 370 return FALSE; 371 break; 372 default: 373 if (!xdr_u_int (xdrs, &objp->ptrace_addr_data_out_u.addr)) 374 return FALSE; 375 break; 376 } 377 return TRUE; 378 } 379 380 bool_t 381 xdr_CHAR_DATA (XDR *xdrs, CHAR_DATA *objp) 382 { 383 register int32_t *buf; 384 385 if (!xdr_bytes (xdrs, (char **)&objp->CHAR_DATA_val, (u_int *) &objp->CHAR_DATA_len, NET_SAFE)) 386 return FALSE; 387 return TRUE; 388 } 389 390 bool_t 391 xdr_one_arg (XDR *xdrs, one_arg *objp) 392 { 393 register int32_t *buf; 394 395 if (!xdr_string (xdrs, objp, NET_SAFE)) 396 return FALSE; 397 return TRUE; 398 } 399 /* now open_connex() routine which establishes a connection to server */ 400 401 bool_t 402 xdr_debug_type (XDR *xdrs, debug_type *objp) 403 { 404 register int32_t *buf; 405 406 if (!xdr_enum (xdrs, (enum_t *) objp)) 407 return FALSE; 408 return TRUE; 409 } 410 #define DEBUGGER_IS_GDB 0x2 /* */ 411 412 bool_t 413 xdr_open_in (XDR *xdrs, open_in *objp) 414 { 415 register int32_t *buf; 416 417 int i; 418 if (!xdr_vector (xdrs, (char *)objp->back_port, 16, 419 sizeof (u_char), (xdrproc_t) xdr_u_char)) 420 return FALSE; 421 if (!xdr_u_short (xdrs, &objp->debug_type)) 422 return FALSE; 423 if (!xdr_u_short (xdrs, &objp->flags)) 424 return FALSE; 425 if (!xdr_vector (xdrs, (char *)objp->destination, 16, 426 sizeof (u_char), (xdrproc_t) xdr_u_char)) 427 return FALSE; 428 if (!xdr_one_arg (xdrs, &objp->user_name)) 429 return FALSE; 430 return TRUE; 431 } 432 433 bool_t 434 xdr_open_out (XDR *xdrs, open_out *objp) 435 { 436 register int32_t *buf; 437 438 int i; 439 440 if (xdrs->x_op == XDR_ENCODE) { 441 buf = XDR_INLINE (xdrs, (2 + ( 4 )) * BYTES_PER_XDR_UNIT); 442 if (buf == NULL) { 443 if (!xdr_u_long (xdrs, &objp->port)) 444 return FALSE; 445 if (!xdr_vector (xdrs, (char *)objp->pad, 4, 446 sizeof (u_int), (xdrproc_t) xdr_u_int)) 447 return FALSE; 448 if (!xdr_u_int (xdrs, &objp->fp)) 449 return FALSE; 450 451 } else { 452 IXDR_PUT_U_LONG(buf, objp->port); 453 { 454 register u_int *genp; 455 456 for (i = 0, genp = objp->pad; 457 i < 4; ++i) { 458 IXDR_PUT_U_LONG(buf, *genp++); 459 } 460 } 461 IXDR_PUT_U_LONG(buf, objp->fp); 462 } 463 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 464 return FALSE; 465 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 466 return FALSE; 467 if (!xdr_u_short (xdrs, &objp->server_vers)) 468 return FALSE; 469 return TRUE; 470 } else if (xdrs->x_op == XDR_DECODE) { 471 buf = XDR_INLINE (xdrs, (2 + ( 4 )) * BYTES_PER_XDR_UNIT); 472 if (buf == NULL) { 473 if (!xdr_u_long (xdrs, &objp->port)) 474 return FALSE; 475 if (!xdr_vector (xdrs, (char *)objp->pad, 4, 476 sizeof (u_int), (xdrproc_t) xdr_u_int)) 477 return FALSE; 478 if (!xdr_u_int (xdrs, &objp->fp)) 479 return FALSE; 480 481 } else { 482 objp->port = IXDR_GET_U_LONG(buf); 483 { 484 register u_int *genp; 485 486 for (i = 0, genp = objp->pad; 487 i < 4; ++i) { 488 *genp++ = IXDR_GET_U_LONG(buf); 489 } 490 } 491 objp->fp = IXDR_GET_U_LONG(buf); 492 } 493 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 494 return FALSE; 495 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 496 return FALSE; 497 if (!xdr_u_short (xdrs, &objp->server_vers)) 498 return FALSE; 499 return TRUE; 500 } 501 502 if (!xdr_u_long (xdrs, &objp->port)) 503 return FALSE; 504 if (!xdr_vector (xdrs, (char *)objp->pad, 4, 505 sizeof (u_int), (xdrproc_t) xdr_u_int)) 506 return FALSE; 507 if (!xdr_u_int (xdrs, &objp->fp)) 508 return FALSE; 509 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 510 return FALSE; 511 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 512 return FALSE; 513 if (!xdr_u_short (xdrs, &objp->server_vers)) 514 return FALSE; 515 return TRUE; 516 } 517 /* now close_connex() routine which detaches from server */ 518 519 bool_t 520 xdr_close_control (XDR *xdrs, close_control *objp) 521 { 522 register int32_t *buf; 523 524 if (!xdr_enum (xdrs, (enum_t *) objp)) 525 return FALSE; 526 return TRUE; 527 } 528 529 bool_t 530 xdr_close_in (XDR *xdrs, close_in *objp) 531 { 532 register int32_t *buf; 533 534 if (!xdr_close_control (xdrs, &objp->control)) 535 return FALSE; 536 return TRUE; 537 } 538 /* now send_signal() routine which sends signals to processes like kill(2) */ 539 540 bool_t 541 xdr_signal_in (XDR *xdrs, signal_in *objp) 542 { 543 register int32_t *buf; 544 545 if (!xdr_int (xdrs, &objp->pid)) 546 return FALSE; 547 if (!xdr_int (xdrs, &objp->sig)) 548 return FALSE; 549 return TRUE; 550 } 551 552 bool_t 553 xdr_signal_out (XDR *xdrs, signal_out *objp) 554 { 555 register int32_t *buf; 556 557 if (!xdr_int (xdrs, &objp->kill_return)) 558 return FALSE; 559 if (!xdr_int (xdrs, &objp->errNo)) 560 return FALSE; 561 return TRUE; 562 } 563 /* now wait_info() routine which returns results of polling the wait status 564 of a process/actor. It may return 0 if running, else pid or -1 */ 565 566 bool_t 567 xdr_stop_code (XDR *xdrs, stop_code *objp) 568 { 569 register int32_t *buf; 570 571 if (!xdr_enum (xdrs, (enum_t *) objp)) 572 return FALSE; 573 return TRUE; 574 } 575 576 bool_t 577 xdr_wait_in (XDR *xdrs, wait_in *objp) 578 { 579 register int32_t *buf; 580 581 if (!xdr_int (xdrs, &objp->pid)) 582 return FALSE; 583 return TRUE; 584 } 585 586 bool_t 587 xdr_wait_out (XDR *xdrs, wait_out *objp) 588 { 589 register int32_t *buf; 590 591 592 if (xdrs->x_op == XDR_ENCODE) { 593 buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); 594 if (buf == NULL) { 595 if (!xdr_int (xdrs, &objp->wait_return)) 596 return FALSE; 597 if (!xdr_int (xdrs, &objp->errNo)) 598 return FALSE; 599 if (!xdr_int (xdrs, &objp->status)) 600 return FALSE; 601 602 } else { 603 IXDR_PUT_LONG(buf, objp->wait_return); 604 IXDR_PUT_LONG(buf, objp->errNo); 605 IXDR_PUT_LONG(buf, objp->status); 606 } 607 if (!xdr_stop_code (xdrs, &objp->reason)) 608 return FALSE; 609 buf = XDR_INLINE (xdrs, 5 * BYTES_PER_XDR_UNIT); 610 if (buf == NULL) { 611 if (!xdr_int (xdrs, &objp->handle)) 612 return FALSE; 613 if (!xdr_u_long (xdrs, &objp->PC)) 614 return FALSE; 615 if (!xdr_u_long (xdrs, &objp->SP)) 616 return FALSE; 617 if (!xdr_u_long (xdrs, &objp->FP)) 618 return FALSE; 619 if (!xdr_u_long (xdrs, &objp->thread)) 620 return FALSE; 621 } else { 622 IXDR_PUT_LONG(buf, objp->handle); 623 IXDR_PUT_U_LONG(buf, objp->PC); 624 IXDR_PUT_U_LONG(buf, objp->SP); 625 IXDR_PUT_U_LONG(buf, objp->FP); 626 IXDR_PUT_U_LONG(buf, objp->thread); 627 } 628 return TRUE; 629 } else if (xdrs->x_op == XDR_DECODE) { 630 buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); 631 if (buf == NULL) { 632 if (!xdr_int (xdrs, &objp->wait_return)) 633 return FALSE; 634 if (!xdr_int (xdrs, &objp->errNo)) 635 return FALSE; 636 if (!xdr_int (xdrs, &objp->status)) 637 return FALSE; 638 639 } else { 640 objp->wait_return = IXDR_GET_LONG(buf); 641 objp->errNo = IXDR_GET_LONG(buf); 642 objp->status = IXDR_GET_LONG(buf); 643 } 644 if (!xdr_stop_code (xdrs, &objp->reason)) 645 return FALSE; 646 buf = XDR_INLINE (xdrs, 5 * BYTES_PER_XDR_UNIT); 647 if (buf == NULL) { 648 if (!xdr_int (xdrs, &objp->handle)) 649 return FALSE; 650 if (!xdr_u_long (xdrs, &objp->PC)) 651 return FALSE; 652 if (!xdr_u_long (xdrs, &objp->SP)) 653 return FALSE; 654 if (!xdr_u_long (xdrs, &objp->FP)) 655 return FALSE; 656 if (!xdr_u_long (xdrs, &objp->thread)) 657 return FALSE; 658 } else { 659 objp->handle = IXDR_GET_LONG(buf); 660 objp->PC = IXDR_GET_U_LONG(buf); 661 objp->SP = IXDR_GET_U_LONG(buf); 662 objp->FP = IXDR_GET_U_LONG(buf); 663 objp->thread = IXDR_GET_U_LONG(buf); 664 } 665 return TRUE; 666 } 667 668 if (!xdr_int (xdrs, &objp->wait_return)) 669 return FALSE; 670 if (!xdr_int (xdrs, &objp->errNo)) 671 return FALSE; 672 if (!xdr_int (xdrs, &objp->status)) 673 return FALSE; 674 if (!xdr_stop_code (xdrs, &objp->reason)) 675 return FALSE; 676 if (!xdr_int (xdrs, &objp->handle)) 677 return FALSE; 678 if (!xdr_u_long (xdrs, &objp->PC)) 679 return FALSE; 680 if (!xdr_u_long (xdrs, &objp->SP)) 681 return FALSE; 682 if (!xdr_u_long (xdrs, &objp->FP)) 683 return FALSE; 684 if (!xdr_u_long (xdrs, &objp->thread)) 685 return FALSE; 686 return TRUE; 687 } 688 /* now ptrace() routine. This matches the Sun UNIX ptrace as well as 689 some additions */ 690 691 bool_t 692 xdr_ptrace_in (XDR *xdrs, ptrace_in *objp) 693 { 694 register int32_t *buf; 695 696 if (!xdr_int (xdrs, &objp->pid)) 697 return FALSE; 698 if (!xdr_ptrace_addr_data_in (xdrs, &objp->addr)) 699 return FALSE; 700 if (!xdr_u_int (xdrs, &objp->data)) 701 return FALSE; 702 if (!xdr_u_int (xdrs, &objp->flags)) 703 return FALSE; 704 return TRUE; 705 } 706 707 bool_t 708 xdr_ptrace_out (XDR *xdrs, ptrace_out *objp) 709 { 710 register int32_t *buf; 711 712 if (!xdr_ptrace_addr_data_out (xdrs, &objp->addr)) 713 return FALSE; 714 if (!xdr_int (xdrs, &objp->result)) 715 return FALSE; 716 if (!xdr_int (xdrs, &objp->errNo)) 717 return FALSE; 718 return TRUE; 719 } 720 721 bool_t 722 xdr_one_symbol (XDR *xdrs, one_symbol *objp) 723 { 724 register int32_t *buf; 725 726 if (!xdr_string (xdrs, &objp->symbolName, ~0)) 727 return FALSE; 728 if (!xdr_long (xdrs, &objp->symbolValue)) 729 return FALSE; 730 return TRUE; 731 } 732 733 bool_t 734 xdr_all_symbols (XDR *xdrs, all_symbols *objp) 735 { 736 register int32_t *buf; 737 738 if (!xdr_array (xdrs, (char **)&objp->all_symbols_val, (u_int *) &objp->all_symbols_len, ~0, 739 sizeof (one_symbol), (xdrproc_t) xdr_one_symbol)) 740 return FALSE; 741 return TRUE; 742 } 743 744 bool_t 745 xdr_get_global_symbols_out (XDR *xdrs, get_global_symbols_out *objp) 746 { 747 register int32_t *buf; 748 749 if (!xdr_all_symbols (xdrs, &objp->symbols)) 750 return FALSE; 751 return TRUE; 752 } 753 754 bool_t 755 xdr_get_text_data_in (XDR *xdrs, get_text_data_in *objp) 756 { 757 register int32_t *buf; 758 759 if (!xdr_int (xdrs, &objp->pid)) 760 return FALSE; 761 if (!xdr_string (xdrs, &objp->actorName, 16)) 762 return FALSE; 763 return TRUE; 764 } 765 766 bool_t 767 xdr_get_text_data_out (XDR *xdrs, get_text_data_out *objp) 768 { 769 register int32_t *buf; 770 771 772 if (xdrs->x_op == XDR_ENCODE) { 773 buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT); 774 if (buf == NULL) { 775 if (!xdr_int (xdrs, &objp->result)) 776 return FALSE; 777 if (!xdr_int (xdrs, &objp->errNo)) 778 return FALSE; 779 if (!xdr_u_long (xdrs, &objp->textStart)) 780 return FALSE; 781 if (!xdr_u_long (xdrs, &objp->textSize)) 782 return FALSE; 783 if (!xdr_u_long (xdrs, &objp->dataStart)) 784 return FALSE; 785 if (!xdr_u_long (xdrs, &objp->dataSize)) 786 return FALSE; 787 } else { 788 IXDR_PUT_LONG(buf, objp->result); 789 IXDR_PUT_LONG(buf, objp->errNo); 790 IXDR_PUT_U_LONG(buf, objp->textStart); 791 IXDR_PUT_U_LONG(buf, objp->textSize); 792 IXDR_PUT_U_LONG(buf, objp->dataStart); 793 IXDR_PUT_U_LONG(buf, objp->dataSize); 794 } 795 return TRUE; 796 } else if (xdrs->x_op == XDR_DECODE) { 797 buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT); 798 if (buf == NULL) { 799 if (!xdr_int (xdrs, &objp->result)) 800 return FALSE; 801 if (!xdr_int (xdrs, &objp->errNo)) 802 return FALSE; 803 if (!xdr_u_long (xdrs, &objp->textStart)) 804 return FALSE; 805 if (!xdr_u_long (xdrs, &objp->textSize)) 806 return FALSE; 807 if (!xdr_u_long (xdrs, &objp->dataStart)) 808 return FALSE; 809 if (!xdr_u_long (xdrs, &objp->dataSize)) 810 return FALSE; 811 } else { 812 objp->result = IXDR_GET_LONG(buf); 813 objp->errNo = IXDR_GET_LONG(buf); 814 objp->textStart = IXDR_GET_U_LONG(buf); 815 objp->textSize = IXDR_GET_U_LONG(buf); 816 objp->dataStart = IXDR_GET_U_LONG(buf); 817 objp->dataSize = IXDR_GET_U_LONG(buf); 818 } 819 return TRUE; 820 } 821 822 if (!xdr_int (xdrs, &objp->result)) 823 return FALSE; 824 if (!xdr_int (xdrs, &objp->errNo)) 825 return FALSE; 826 if (!xdr_u_long (xdrs, &objp->textStart)) 827 return FALSE; 828 if (!xdr_u_long (xdrs, &objp->textSize)) 829 return FALSE; 830 if (!xdr_u_long (xdrs, &objp->dataStart)) 831 return FALSE; 832 if (!xdr_u_long (xdrs, &objp->dataSize)) 833 return FALSE; 834 return TRUE; 835 } 836 837 bool_t 838 xdr_one_signal (XDR *xdrs, one_signal *objp) 839 { 840 register int32_t *buf; 841 842 if (!xdr_u_int (xdrs, &objp->number)) 843 return FALSE; 844 if (!xdr_string (xdrs, &objp->name, ~0)) 845 return FALSE; 846 return TRUE; 847 } 848 849 bool_t 850 xdr_all_signals (XDR *xdrs, all_signals *objp) 851 { 852 register int32_t *buf; 853 854 if (!xdr_array (xdrs, (char **)&objp->all_signals_val, (u_int *) &objp->all_signals_len, ~0, 855 sizeof (one_signal), (xdrproc_t) xdr_one_signal)) 856 return FALSE; 857 return TRUE; 858 } 859 860 bool_t 861 xdr_get_signal_names_out (XDR *xdrs, get_signal_names_out *objp) 862 { 863 register int32_t *buf; 864 865 if (!xdr_all_signals (xdrs, &objp->signals)) 866 return FALSE; 867 return TRUE; 868 } 869 /* now define the actual calls we support */ -
c/src/librdbg/src/m68k/any/remdeb.h
rbdb86b4 r97f6256 9 9 #include <rpc/rpc.h> 10 10 11 11 12 #ifdef __cplusplus 12 13 extern "C" { … … 16 17 #define RTEMS_BACK_PORT 2073 17 18 #ifndef REMDEB_H 18 #define RPCGENSRVNAME(a) 19 20 21 22 23 24 19 #define RPCGENSRVNAME(a) a 20 21 enum rpc_type { 22 SUNRPC = 0, 23 BADRPCTYPE = 25, 24 }; 25 typedef enum rpc_type rpc_type; 25 26 #define NET_SAFE 1400 26 27 27 28 29 30 31 32 33 34 28 struct UDP_MSG { 29 u_char type; 30 u_char msg_num; 31 u_short spec; 32 long pid; 33 u_long context; 34 }; 35 typedef struct UDP_MSG UDP_MSG; 35 36 /* 36 37 * Sun request values for the remote ptrace system call 37 38 */ 38 39 39 enum ptracereq { 40 RPT_TRACEME = 0, 41 RPT_CHILDDONE = 0, 42 RPT_PEEKTEXT = 0 + 1, 43 RPT_PEEKDATA = 0 + 2, 44 RPT_PEEKUSER = 0 + 3, 45 RPT_POKETEXT = 0 + 4, 46 RPT_POKEDATA = 0 + 5, 47 RPT_POKEUSER = 0 + 6, 48 RPT_CONT = 0 + 7, 49 RPT_KILL = 0 + 8, 50 RPT_SINGLESTEP = 0 + 9, 51 RPT_ATTACH = 0 + 10, 52 RPT_DETACH = 0 + 11, 53 RPT_GETREGS = 0 + 12, 54 RPT_SETREGS = 0 + 13, 55 RPT_GETFPREGS = 0 + 14, 56 RPT_SETFPREGS = 0 + 15, 57 RPT_READDATA = 0 + 16, 58 RPT_WRITEDATA = 0 + 17, 59 RPT_READTEXT = 0 + 18, 60 RPT_WRITETEXT = 0 + 19, 61 RPT_GETFPAREGS = 0 + 20, 62 RPT_SETFPAREGS = 0 + 21, 63 RPT_22 = 0 + 22, 64 RPT_23 = 0 + 23, 65 RPT_SYSCALL = 0 + 24, 66 RPT_DUMPCORE = 0 + 25, 67 RPT_26 = 0 + 26, 68 RPT_27 = 0 + 27, 69 RPT_28 = 0 + 28, 70 RPT_GETUCODE = 0 + 29, 71 RPT_GETTARGETTHREAD = 50, 72 RPT_SETTARGETTHREAD = 51, 73 RPT_THREADSUSPEND = 52, 74 RPT_THREADRESUME = 53, 75 RPT_THREADLIST = 54, 76 RPT_GETTHREADNAME = 55, 77 RPT_SETTHREADNAME = 56, 78 RPT_SETTHREADREGS = 57, 79 RPT_GETTHREADREGS = 58, 80 RPT_STEPRANGE = 75, 81 RPT_CONTTO = 76, 82 RPT_SETBREAK = 77, 83 RPT_CLRBREAK = 78, 84 RPT_GETBREAK = 79, 85 RPT_GETNAME = 80, 86 RPT_STOP = 81, 87 RPT_PGETREGS = 82, 88 RPT_PSETREGS = 83, 89 RPT_PSETTHREADREGS = 84, 90 RPT_PGETTHREADREGS = 85, 91 }; 92 typedef enum ptracereq ptracereq; 93 94 struct xdr_regs { 95 int r_dreg[8]; 96 int r_areg[8]; 97 int r_sr; 98 int r_pc; 99 int r_vec; 100 }; 101 typedef struct xdr_regs xdr_regs; 40 41 enum ptracereq { 42 RPT_TRACEME = 0, 43 RPT_CHILDDONE = 0, 44 RPT_PEEKTEXT = 0 + 1, 45 RPT_PEEKDATA = 0 + 2, 46 RPT_PEEKUSER = 0 + 3, 47 RPT_POKETEXT = 0 + 4, 48 RPT_POKEDATA = 0 + 5, 49 RPT_POKEUSER = 0 + 6, 50 RPT_CONT = 0 + 7, 51 RPT_KILL = 0 + 8, 52 RPT_SINGLESTEP = 0 + 9, 53 RPT_ATTACH = 0 + 10, 54 RPT_DETACH = 0 + 11, 55 RPT_GETREGS = 0 + 12, 56 RPT_SETREGS = 0 + 13, 57 RPT_GETFPREGS = 0 + 14, 58 RPT_SETFPREGS = 0 + 15, 59 RPT_READDATA = 0 + 16, 60 RPT_WRITEDATA = 0 + 17, 61 RPT_READTEXT = 0 + 18, 62 RPT_WRITETEXT = 0 + 19, 63 RPT_GETFPAREGS = 0 + 20, 64 RPT_SETFPAREGS = 0 + 21, 65 RPT_22 = 0 + 22, 66 RPT_23 = 0 + 23, 67 RPT_SYSCALL = 0 + 24, 68 RPT_DUMPCORE = 0 + 25, 69 RPT_26 = 0 + 26, 70 RPT_27 = 0 + 27, 71 RPT_28 = 0 + 28, 72 RPT_GETUCODE = 0 + 29, 73 RPT_GETTARGETTHREAD = 50, 74 RPT_SETTARGETTHREAD = 51, 75 RPT_THREADSUSPEND = 52, 76 RPT_THREADRESUME = 53, 77 RPT_THREADLIST = 54, 78 RPT_GETTHREADNAME = 55, 79 RPT_SETTHREADNAME = 56, 80 RPT_SETTHREADREGS = 57, 81 RPT_GETTHREADREGS = 58, 82 RPT_STEPRANGE = 75, 83 RPT_CONTTO = 76, 84 RPT_SETBREAK = 77, 85 RPT_CLRBREAK = 78, 86 RPT_GETBREAK = 79, 87 RPT_GETNAME = 80, 88 RPT_STOP = 81, 89 RPT_PGETREGS = 82, 90 RPT_PSETREGS = 83, 91 RPT_PSETTHREADREGS = 84, 92 RPT_PGETTHREADREGS = 85, 93 }; 94 typedef enum ptracereq ptracereq; 95 96 struct xdr_regs { 97 int r_dreg[8]; 98 int r_areg[8]; 99 int r_sr; 100 int r_pc; 101 int r_vec; 102 }; 103 typedef struct xdr_regs xdr_regs; 102 104 /* now define register macros to apply to xdr_reg struct */ 103 105 104 #define r_r0 r_dreg[0]/* r0 for portability */105 #define r_sp r_areg[7]/* user stack pointer */106 #define r_ps 107 #define REG_PC r_pc 108 #define REG_SP r_areg[7] 109 #define REG_FP r_areg[6] 106 #define r_r0 r_dreg[0] /* r0 for portability */ 107 #define r_sp r_areg[7] /* user stack pointer */ 108 #define r_ps r_sr 109 #define REG_PC r_pc /* PC register offset */ 110 #define REG_SP r_areg[7] /* SP register offset */ 111 #define REG_FP r_areg[6] /* FP register offset */ 110 112 /* now define the BREAKPOINT mask technique to a long word */ 111 #define SET_BREAK(l) ((l&0x0000FFFF) | 0x4E4F0000)/* TRAP 15 */112 #define IS_BREAK(l) 113 #define SET_BREAK(l) ((l&0x0000FFFF) | 0x4E4F0000) /* TRAP 15 */ 114 #define IS_BREAK(l) (((l) & 0xFFFF0000) == 0x4E4F0000) 113 115 #define ORG_BREAK(c,p) (((c) & 0x0000FFFF) | ((p) & 0xFFFF0000)) 114 #define IS_STEP(regs) 115 #define BREAK_ADJ 116 #define BREAK_SIZE 117 #define TARGET_PROC_TYPE 116 #define IS_STEP(regs) ((regs).r_vec == 9) 117 #define BREAK_ADJ 0 118 #define BREAK_SIZE 2 119 #define TARGET_PROC_TYPE 2 118 120 #define MAXDEBUGGEE 150 119 121 #define NAMEMAX 17 120 122 /* 121 123 * Memory data for read/write text or data. The size is in data. The target 122 124 * addr is in the addr field. … … 127 129 #define MEM_DATA_MAX 256 128 130 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 131 struct xdr_mem { 132 u_long addr; 133 u_int dataNb; 134 u_char data[MEM_DATA_MAX]; 135 }; 136 typedef struct xdr_mem xdr_mem; 137 138 enum break_type { 139 BRKT_NONE = 0, 140 BRKT_INSTR = 1, 141 BRKT_READ = 2, 142 BRKT_WRITE = 3, 143 BRKT_ACCESS = 4, 144 BRKT_EXEC = 5, 145 BRKT_OS_CALL = 6, 146 BRKT_OS_SWITCH = 7, 147 BRKT_STEPEMUL = 8, 148 }; 149 typedef enum break_type break_type; 148 150 #define MAX_THRD_BRK 4 149 151 150 151 152 153 154 155 156 157 158 159 160 161 152 struct xdr_break { 153 u_char type; 154 u_char thread_spec; 155 u_short handle; 156 u_long ee_loc; 157 u_long ee_type; 158 u_short length; 159 u_char pass_count; 160 u_char curr_pass; 161 u_long thread_list[MAX_THRD_BRK]; 162 }; 163 typedef struct xdr_break xdr_break; 162 164 #define UTHREAD_MAX 64 163 165 #define THREADNAMEMAX 16 164 166 165 typedef char *thread_name; 166 167 struct KernThread { 168 u_int threadLi; 169 }; 170 typedef struct KernThread KernThread; 171 typedef KernThread *ptThreadList; 172 173 struct thread_list { 174 u_int nbThread; 175 ptThreadList threads; 176 }; 177 typedef struct thread_list thread_list; 178 179 struct ptrace_addr_data_in { 180 ptracereq req; 181 union { 182 xdr_regs regs; 183 struct { 184 u_int pregs_len; 185 u_int *pregs_val; 186 } pregs; 187 thread_name name; 188 xdr_mem mem; 189 xdr_break breakp; 190 u_int address; 191 } ptrace_addr_data_in_u; 192 }; 193 typedef struct ptrace_addr_data_in ptrace_addr_data_in; 194 195 struct ptrace_addr_data_out { 196 ptracereq req; 197 union { 198 xdr_regs regs; 199 struct { 200 u_int pregs_len; 201 u_int *pregs_val; 202 } pregs; 203 thread_list threads; 204 thread_name name; 205 xdr_mem mem; 206 xdr_break breakp; 207 u_int addr; 208 } ptrace_addr_data_out_u; 209 }; 210 typedef struct ptrace_addr_data_out ptrace_addr_data_out; 211 212 typedef struct { 213 u_int CHAR_DATA_len; 214 char *CHAR_DATA_val; 215 } CHAR_DATA; 216 #define XRY_MAX_INST_BUFF 128 217 #define XRY_MAX_INSTANCES 16 218 #ifndef XRY_MAX_CMD_STR 219 #define XRY_MAX_CMD_STR 320 220 #endif /* REMDEB_H */ 221 222 struct xry_inst { 223 u_char flags; 224 u_char type; 225 u_char sub_type; 226 u_char res_type; 227 u_long value; 228 u_long value2; 229 }; 230 typedef struct xry_inst xry_inst; 231 232 struct instance { 233 struct xry_inst instances[XRY_MAX_INSTANCES]; 234 u_char buffer[XRY_MAX_INST_BUFF]; 235 }; 236 typedef struct instance instance; 237 238 struct instance_union { 239 bool_t instances; 240 union { 241 instance inst; 242 char *buffer; 243 } instance_union_u; 244 }; 245 typedef struct instance_union instance_union; 246 247 typedef char *one_arg; 248 #define XRY_MAX_OBJ_NAME 32 249 /* 250 * now open_connex() routine which establishes a connection to server 251 */ 252 253 enum debug_type { 254 DEBTYP_PROCESS = 0, 255 DEBTYP_C_ACTOR = 1, 256 DEBTYP_KERNEL = 2, 257 DEBTYP_OTHER = 3, 258 }; 259 typedef enum debug_type debug_type; 260 #define DEBUGGER_IS_GDB 0x2 /* */ 261 262 struct open_in { 263 u_char back_port[16]; 264 u_short debug_type; 265 u_short flags; 266 u_char destination[16]; 267 one_arg user_name; 268 }; 269 typedef struct open_in open_in; 270 271 struct open_out { 272 u_long port; 273 u_int pad[4]; 274 u_int fp; 275 u_char cmd_table_num; 276 u_char cmd_table_vers; 277 u_short server_vers; 278 }; 279 typedef struct open_out open_out; 280 /* 281 * now close_connex() routine which detaches from server 282 */ 283 284 enum close_control { 285 CLOSE_IGNORE = 0, 286 CLOSE_KILL = 1, 287 CLOSE_DETACH = 2, 288 }; 289 typedef enum close_control close_control; 290 291 struct close_in { 292 close_control control; 293 }; 294 typedef struct close_in close_in; 295 /* 296 * now send_signal() routine which sends signals to processes like kill(2) 297 */ 298 299 struct signal_in { 300 int pid; 301 int sig; 302 }; 303 typedef struct signal_in signal_in; 304 305 struct signal_out { 306 int kill_return; 307 int errNo; 308 }; 309 typedef struct signal_out signal_out; 310 /* 311 * now wait_info() routine which returns results of polling the wait status 312 * of a process/actor. It may return 0 if running, else pid or -1 313 */ 314 315 enum stop_code { 316 STOP_ERROR = 0, 317 STOP_NONE = 1, 318 STOP_UNKNOWN = 2, 319 STOP_BREAK = 3, 320 STOP_STEP = 4, 321 STOP_SIGNAL = 5, 322 STOP_TERM_EXIT = 6, 323 STOP_TERM_SIG = 7, 324 STOP_DETACHED = 8, 325 STOP_KILLED = 9, 326 STOP_SPAWN_FAILED = 10, 327 }; 328 typedef enum stop_code stop_code; 329 330 struct wait_in { 331 int pid; 332 }; 333 typedef struct wait_in wait_in; 334 335 struct wait_out { 336 int wait_return; 337 int errNo; 338 int status; 339 stop_code reason; 340 int handle; 341 u_long PC; 342 u_long SP; 343 u_long FP; 344 u_long thread; 345 }; 346 typedef struct wait_out wait_out; 347 /* 348 * now ptrace() routine. This matches the Sun UNIX ptrace as well as 349 * some additions 350 */ 167 typedef char *thread_name; 168 169 struct KernThread { 170 u_int threadLi; 171 }; 172 typedef struct KernThread KernThread; 173 typedef KernThread *ptThreadList; 174 175 struct thread_list { 176 u_int nbThread; 177 ptThreadList threads; 178 }; 179 typedef struct thread_list thread_list; 180 181 struct ptrace_addr_data_in { 182 ptracereq req; 183 union { 184 xdr_regs regs; 185 struct { 186 u_int pregs_len; 187 u_int *pregs_val; 188 } pregs; 189 thread_name name; 190 xdr_mem mem; 191 xdr_break breakp; 192 u_int address; 193 } ptrace_addr_data_in_u; 194 }; 195 typedef struct ptrace_addr_data_in ptrace_addr_data_in; 196 197 struct ptrace_addr_data_out { 198 ptracereq req; 199 union { 200 xdr_regs regs; 201 struct { 202 u_int pregs_len; 203 u_int *pregs_val; 204 } pregs; 205 thread_list threads; 206 thread_name name; 207 xdr_mem mem; 208 xdr_break breakp; 209 u_int addr; 210 } ptrace_addr_data_out_u; 211 }; 212 typedef struct ptrace_addr_data_out ptrace_addr_data_out; 213 214 typedef struct { 215 u_int CHAR_DATA_len; 216 char *CHAR_DATA_val; 217 } CHAR_DATA; 218 219 typedef char *one_arg; 220 /* now open_connex() routine which establishes a connection to server */ 221 222 enum debug_type { 223 DEBTYP_PROCESS = 0, 224 DEBTYP_C_ACTOR = 1, 225 DEBTYP_KERNEL = 2, 226 DEBTYP_OTHER = 3, 227 }; 228 typedef enum debug_type debug_type; 229 #define DEBUGGER_IS_GDB 0x2 /* */ 230 231 struct open_in { 232 u_char back_port[16]; 233 u_short debug_type; 234 u_short flags; 235 u_char destination[16]; 236 one_arg user_name; 237 }; 238 typedef struct open_in open_in; 239 240 struct open_out { 241 u_long port; 242 u_int pad[4]; 243 u_int fp; 244 u_char cmd_table_num; 245 u_char cmd_table_vers; 246 u_short server_vers; 247 }; 248 typedef struct open_out open_out; 249 /* now close_connex() routine which detaches from server */ 250 251 enum close_control { 252 CLOSE_IGNORE = 0, 253 CLOSE_KILL = 1, 254 CLOSE_DETACH = 2, 255 }; 256 typedef enum close_control close_control; 257 258 struct close_in { 259 close_control control; 260 }; 261 typedef struct close_in close_in; 262 /* now send_signal() routine which sends signals to processes like kill(2) */ 263 264 struct signal_in { 265 int pid; 266 int sig; 267 }; 268 typedef struct signal_in signal_in; 269 270 struct signal_out { 271 int kill_return; 272 int errNo; 273 }; 274 typedef struct signal_out signal_out; 275 /* now wait_info() routine which returns results of polling the wait status 276 of a process/actor. It may return 0 if running, else pid or -1 */ 277 278 enum stop_code { 279 STOP_ERROR = 0, 280 STOP_NONE = 1, 281 STOP_UNKNOWN = 2, 282 STOP_BREAK = 3, 283 STOP_STEP = 4, 284 STOP_SIGNAL = 5, 285 STOP_TERM_EXIT = 6, 286 STOP_TERM_SIG = 7, 287 STOP_DETACHED = 8, 288 STOP_KILLED = 9, 289 STOP_SPAWN_FAILED = 10, 290 }; 291 typedef enum stop_code stop_code; 292 293 struct wait_in { 294 int pid; 295 }; 296 typedef struct wait_in wait_in; 297 298 struct wait_out { 299 int wait_return; 300 int errNo; 301 int status; 302 stop_code reason; 303 int handle; 304 u_long PC; 305 u_long SP; 306 u_long FP; 307 u_long thread; 308 }; 309 typedef struct wait_out wait_out; 310 /* now ptrace() routine. This matches the Sun UNIX ptrace as well as 311 some additions */ 351 312 #define PTRFLG_FORCE 1 352 313 #define PTRFLG_NON_OWNER 2 … … 354 315 #define PTRDET_UNOWN 0x100 355 316 356 struct ptrace_in { 357 int pid; 358 ptrace_addr_data_in addr; 359 u_int data; 360 u_int flags; 361 }; 362 typedef struct ptrace_in ptrace_in; 363 364 struct ptrace_out { 365 ptrace_addr_data_out addr; 366 int result; 367 int errNo; 368 }; 369 typedef struct ptrace_out ptrace_out; 370 371 struct one_symbol { 372 char *symbolName; 373 long symbolValue; 374 }; 375 typedef struct one_symbol one_symbol; 376 377 typedef struct { 378 u_int all_symbols_len; 379 one_symbol *all_symbols_val; 380 } all_symbols; 381 382 struct get_global_symbols_out { 383 all_symbols symbols; 384 }; 385 typedef struct get_global_symbols_out get_global_symbols_out; 386 387 struct get_text_data_in { 388 int pid; 389 char *actorName; 390 }; 391 typedef struct get_text_data_in get_text_data_in; 392 393 struct get_text_data_out { 394 int result; 395 int errNo; 396 u_long textStart; 397 u_long textSize; 398 u_long dataStart; 399 u_long dataSize; 400 }; 401 typedef struct get_text_data_out get_text_data_out; 402 403 struct one_signal { 404 u_int number; 405 char *name; 406 }; 407 typedef struct one_signal one_signal; 408 409 typedef struct { 410 u_int all_signals_len; 411 one_signal *all_signals_val; 412 } all_signals; 413 414 struct get_signal_names_out { 415 all_signals signals; 416 }; 417 typedef struct get_signal_names_out get_signal_names_out; 418 /* 419 * now define the actual calls we support 420 */ 317 struct ptrace_in { 318 int pid; 319 ptrace_addr_data_in addr; 320 u_int data; 321 u_int flags; 322 }; 323 typedef struct ptrace_in ptrace_in; 324 325 struct ptrace_out { 326 ptrace_addr_data_out addr; 327 int result; 328 int errNo; 329 }; 330 typedef struct ptrace_out ptrace_out; 331 332 struct one_symbol { 333 char *symbolName; 334 long symbolValue; 335 }; 336 typedef struct one_symbol one_symbol; 337 338 typedef struct { 339 u_int all_symbols_len; 340 one_symbol *all_symbols_val; 341 } all_symbols; 342 343 struct get_global_symbols_out { 344 all_symbols symbols; 345 }; 346 typedef struct get_global_symbols_out get_global_symbols_out; 347 348 struct get_text_data_in { 349 int pid; 350 char *actorName; 351 }; 352 typedef struct get_text_data_in get_text_data_in; 353 354 struct get_text_data_out { 355 int result; 356 int errNo; 357 u_long textStart; 358 u_long textSize; 359 u_long dataStart; 360 u_long dataSize; 361 }; 362 typedef struct get_text_data_out get_text_data_out; 363 364 struct one_signal { 365 u_int number; 366 char *name; 367 }; 368 typedef struct one_signal one_signal; 369 370 typedef struct { 371 u_int all_signals_len; 372 one_signal *all_signals_val; 373 } all_signals; 374 375 struct get_signal_names_out { 376 all_signals signals; 377 }; 378 typedef struct get_signal_names_out get_signal_names_out; 379 /* now define the actual calls we support */ 421 380 #define REMDEB_H 422 381 #endif … … 427 386 #if defined(__STDC__) || defined(__cplusplus) 428 387 #define OPEN_CONNEX 1 429 extern open_out *open_connex_2(open_in *, CLIENT *);430 extern open_out *open_connex_2_svc(open_in *, struct svc_req *);388 extern open_out * open_connex_2(open_in *, CLIENT *); 389 extern open_out * open_connex_2_svc(open_in *, struct svc_req *); 431 390 #define SEND_SIGNAL 2 432 extern signal_out *send_signal_2(signal_in *, CLIENT *);433 extern signal_out *send_signal_2_svc(signal_in *, struct svc_req *);391 extern signal_out * send_signal_2(signal_in *, CLIENT *); 392 extern signal_out * send_signal_2_svc(signal_in *, struct svc_req *); 434 393 #define CLOSE_CONNEX 10 435 extern void *close_connex_2(close_in *, CLIENT *);436 extern void *close_connex_2_svc(close_in *, struct svc_req *);394 extern void * close_connex_2(close_in *, CLIENT *); 395 extern void * close_connex_2_svc(close_in *, struct svc_req *); 437 396 #define PTRACE 11 438 extern ptrace_out *ptrace_2(ptrace_in *, CLIENT *);439 extern ptrace_out *ptrace_2_svc(ptrace_in *, struct svc_req *);397 extern ptrace_out * ptrace_2(ptrace_in *, CLIENT *); 398 extern ptrace_out * ptrace_2_svc(ptrace_in *, struct svc_req *); 440 399 #define WAIT_INFO 13 441 extern wait_out *wait_info_2(wait_in *, CLIENT *);442 extern wait_out *wait_info_2_svc(wait_in *, struct svc_req *);400 extern wait_out * wait_info_2(wait_in *, CLIENT *); 401 extern wait_out * wait_info_2_svc(wait_in *, struct svc_req *); 443 402 #define GET_SIGNAL_NAMES 17 444 extern get_signal_names_out *get_signal_names_2 (void *, CLIENT *); 445 extern get_signal_names_out *get_signal_names_2_svc (void *, 446 struct svc_req *); 447 extern int remotedeb_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t); 448 449 #else /* K&R C */ 403 extern get_signal_names_out * get_signal_names_2(void *, CLIENT *); 404 extern get_signal_names_out * get_signal_names_2_svc(void *, struct svc_req *); 405 extern int remotedeb_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t); 406 407 #else /* K&R C */ 450 408 #define OPEN_CONNEX 1 451 extern open_out *open_connex_2();452 extern open_out *open_connex_2_svc();409 extern open_out * open_connex_2(); 410 extern open_out * open_connex_2_svc(); 453 411 #define SEND_SIGNAL 2 454 extern signal_out *send_signal_2();455 extern signal_out *send_signal_2_svc();412 extern signal_out * send_signal_2(); 413 extern signal_out * send_signal_2_svc(); 456 414 #define CLOSE_CONNEX 10 457 extern void *close_connex_2();458 extern void *close_connex_2_svc();415 extern void * close_connex_2(); 416 extern void * close_connex_2_svc(); 459 417 #define PTRACE 11 460 extern ptrace_out *ptrace_2();461 extern ptrace_out *ptrace_2_svc();418 extern ptrace_out * ptrace_2(); 419 extern ptrace_out * ptrace_2_svc(); 462 420 #define WAIT_INFO 13 463 extern wait_out *wait_info_2();464 extern wait_out *wait_info_2_svc();421 extern wait_out * wait_info_2(); 422 extern wait_out * wait_info_2_svc(); 465 423 #define GET_SIGNAL_NAMES 17 466 extern get_signal_names_out *get_signal_names_2();467 extern get_signal_names_out *get_signal_names_2_svc();468 469 #endif 424 extern get_signal_names_out * get_signal_names_2(); 425 extern get_signal_names_out * get_signal_names_2_svc(); 426 extern int remotedeb_2_freeresult (); 427 #endif /* K&R C */ 470 428 471 429 /* the xdr functions */ 472 430 473 431 #if defined(__STDC__) || defined(__cplusplus) 474 extern bool_t xdr_rpc_type (XDR *, rpc_type *); 475 extern bool_t xdr_UDP_MSG (XDR *, UDP_MSG *); 476 extern bool_t xdr_ptracereq (XDR *, ptracereq *); 477 extern bool_t xdr_xdr_regs (XDR *, xdr_regs *); 478 extern bool_t xdr_xdr_mem (XDR *, xdr_mem *); 479 extern bool_t xdr_break_type (XDR *, break_type *); 480 extern bool_t xdr_xdr_break (XDR *, xdr_break *); 481 extern bool_t xdr_thread_name (XDR *, thread_name *); 482 extern bool_t xdr_KernThread (XDR *, KernThread *); 483 extern bool_t xdr_thread_list (XDR *, thread_list *); 484 extern bool_t xdr_ptrace_addr_data_in (XDR *, ptrace_addr_data_in *); 485 extern bool_t xdr_ptrace_addr_data_out (XDR *, ptrace_addr_data_out *); 486 extern bool_t xdr_CHAR_DATA (XDR *, CHAR_DATA *); 487 extern bool_t xdr_xry_inst (XDR *, xry_inst *); 488 extern bool_t xdr_instance (XDR *, instance *); 489 extern bool_t xdr_instance_union (XDR *, instance_union *); 490 extern bool_t xdr_one_arg (XDR *, one_arg *); 491 extern bool_t xdr_debug_type (XDR *, debug_type *); 492 extern bool_t xdr_open_in (XDR *, open_in *); 493 extern bool_t xdr_open_out (XDR *, open_out *); 494 extern bool_t xdr_close_control (XDR *, close_control *); 495 extern bool_t xdr_close_in (XDR *, close_in *); 496 extern bool_t xdr_signal_in (XDR *, signal_in *); 497 extern bool_t xdr_signal_out (XDR *, signal_out *); 498 extern bool_t xdr_stop_code (XDR *, stop_code *); 499 extern bool_t xdr_wait_in (XDR *, wait_in *); 500 extern bool_t xdr_wait_out (XDR *, wait_out *); 501 extern bool_t xdr_ptrace_in (XDR *, ptrace_in *); 502 extern bool_t xdr_ptrace_out (XDR *, ptrace_out *); 503 extern bool_t xdr_one_symbol (XDR *, one_symbol *); 504 extern bool_t xdr_all_symbols (XDR *, all_symbols *); 505 extern bool_t xdr_get_global_symbols_out (XDR *, get_global_symbols_out *); 506 extern bool_t xdr_get_text_data_in (XDR *, get_text_data_in *); 507 extern bool_t xdr_get_text_data_out (XDR *, get_text_data_out *); 508 extern bool_t xdr_one_signal (XDR *, one_signal *); 509 extern bool_t xdr_all_signals (XDR *, all_signals *); 510 extern bool_t xdr_get_signal_names_out (XDR *, get_signal_names_out *); 511 512 #else /* K&R C */ 513 extern bool_t xdr_rpc_type (); 514 extern bool_t xdr_UDP_MSG (); 515 extern bool_t xdr_ptracereq (); 516 extern bool_t xdr_xdr_regs (); 517 extern bool_t xdr_xdr_mem (); 518 extern bool_t xdr_break_type (); 519 extern bool_t xdr_xdr_break (); 520 extern bool_t xdr_thread_name (); 521 extern bool_t xdr_KernThread (); 522 extern bool_t xdr_thread_list (); 523 extern bool_t xdr_ptrace_addr_data_in (); 524 extern bool_t xdr_ptrace_addr_data_out (); 525 extern bool_t xdr_CHAR_DATA (); 526 extern bool_t xdr_xry_inst (); 527 extern bool_t xdr_instance (); 528 extern bool_t xdr_instance_union (); 529 extern bool_t xdr_one_arg (); 530 extern bool_t xdr_debug_type (); 531 extern bool_t xdr_open_in (); 532 extern bool_t xdr_open_out (); 533 extern bool_t xdr_close_control (); 534 extern bool_t xdr_close_in (); 535 extern bool_t xdr_signal_in (); 536 extern bool_t xdr_signal_out (); 537 extern bool_t xdr_stop_code (); 538 extern bool_t xdr_wait_in (); 539 extern bool_t xdr_wait_out (); 540 extern bool_t xdr_ptrace_in (); 541 extern bool_t xdr_ptrace_out (); 542 extern bool_t xdr_one_symbol (); 543 extern bool_t xdr_all_symbols (); 544 extern bool_t xdr_get_global_symbols_out (); 545 extern bool_t xdr_get_text_data_in (); 546 extern bool_t xdr_get_text_data_out (); 547 extern bool_t xdr_one_signal (); 548 extern bool_t xdr_all_signals (); 549 extern bool_t xdr_get_signal_names_out (); 550 551 #endif /* K&R C */ 432 extern bool_t xdr_rpc_type (XDR *, rpc_type*); 433 extern bool_t xdr_UDP_MSG (XDR *, UDP_MSG*); 434 extern bool_t xdr_ptracereq (XDR *, ptracereq*); 435 extern bool_t xdr_xdr_regs (XDR *, xdr_regs*); 436 extern bool_t xdr_xdr_mem (XDR *, xdr_mem*); 437 extern bool_t xdr_break_type (XDR *, break_type*); 438 extern bool_t xdr_xdr_break (XDR *, xdr_break*); 439 extern bool_t xdr_thread_name (XDR *, thread_name*); 440 extern bool_t xdr_KernThread (XDR *, KernThread*); 441 extern bool_t xdr_thread_list (XDR *, thread_list*); 442 extern bool_t xdr_ptrace_addr_data_in (XDR *, ptrace_addr_data_in*); 443 extern bool_t xdr_ptrace_addr_data_out (XDR *, ptrace_addr_data_out*); 444 extern bool_t xdr_CHAR_DATA (XDR *, CHAR_DATA*); 445 extern bool_t xdr_one_arg (XDR *, one_arg*); 446 extern bool_t xdr_debug_type (XDR *, debug_type*); 447 extern bool_t xdr_open_in (XDR *, open_in*); 448 extern bool_t xdr_open_out (XDR *, open_out*); 449 extern bool_t xdr_close_control (XDR *, close_control*); 450 extern bool_t xdr_close_in (XDR *, close_in*); 451 extern bool_t xdr_signal_in (XDR *, signal_in*); 452 extern bool_t xdr_signal_out (XDR *, signal_out*); 453 extern bool_t xdr_stop_code (XDR *, stop_code*); 454 extern bool_t xdr_wait_in (XDR *, wait_in*); 455 extern bool_t xdr_wait_out (XDR *, wait_out*); 456 extern bool_t xdr_ptrace_in (XDR *, ptrace_in*); 457 extern bool_t xdr_ptrace_out (XDR *, ptrace_out*); 458 extern bool_t xdr_one_symbol (XDR *, one_symbol*); 459 extern bool_t xdr_all_symbols (XDR *, all_symbols*); 460 extern bool_t xdr_get_global_symbols_out (XDR *, get_global_symbols_out*); 461 extern bool_t xdr_get_text_data_in (XDR *, get_text_data_in*); 462 extern bool_t xdr_get_text_data_out (XDR *, get_text_data_out*); 463 extern bool_t xdr_one_signal (XDR *, one_signal*); 464 extern bool_t xdr_all_signals (XDR *, all_signals*); 465 extern bool_t xdr_get_signal_names_out (XDR *, get_signal_names_out*); 466 467 #else /* K&R C */ 468 extern bool_t xdr_rpc_type (); 469 extern bool_t xdr_UDP_MSG (); 470 extern bool_t xdr_ptracereq (); 471 extern bool_t xdr_xdr_regs (); 472 extern bool_t xdr_xdr_mem (); 473 extern bool_t xdr_break_type (); 474 extern bool_t xdr_xdr_break (); 475 extern bool_t xdr_thread_name (); 476 extern bool_t xdr_KernThread (); 477 extern bool_t xdr_thread_list (); 478 extern bool_t xdr_ptrace_addr_data_in (); 479 extern bool_t xdr_ptrace_addr_data_out (); 480 extern bool_t xdr_CHAR_DATA (); 481 extern bool_t xdr_one_arg (); 482 extern bool_t xdr_debug_type (); 483 extern bool_t xdr_open_in (); 484 extern bool_t xdr_open_out (); 485 extern bool_t xdr_close_control (); 486 extern bool_t xdr_close_in (); 487 extern bool_t xdr_signal_in (); 488 extern bool_t xdr_signal_out (); 489 extern bool_t xdr_stop_code (); 490 extern bool_t xdr_wait_in (); 491 extern bool_t xdr_wait_out (); 492 extern bool_t xdr_ptrace_in (); 493 extern bool_t xdr_ptrace_out (); 494 extern bool_t xdr_one_symbol (); 495 extern bool_t xdr_all_symbols (); 496 extern bool_t xdr_get_global_symbols_out (); 497 extern bool_t xdr_get_text_data_in (); 498 extern bool_t xdr_get_text_data_out (); 499 extern bool_t xdr_one_signal (); 500 extern bool_t xdr_all_signals (); 501 extern bool_t xdr_get_signal_names_out (); 502 503 #endif /* K&R C */ 552 504 553 505 #ifdef __cplusplus 554 506 } 555 507 #endif 556 #endif /* !_REMDEB_H_RPCGEN */ 508 509 #endif /* !_REMDEB_H_RPCGEN */ -
c/src/librdbg/src/m68k/any/remdeb_svc.c
rbdb86b4 r97f6256 1 #include <rpc/types.h>2 #include <rpc/rpc.h>3 #include <stdio.h>4 #include <stdlib.h>5 #include <string.h>6 #include <bsp.h>7 #include <rdbg/servrpc.h>8 #include <rdbg/remdeb.h>9 #define fprintf(a,b) printf(b)10 /*HEADER_START*/11 #define RTEMS_PORT 207112 #define RTEMS_BACK_PORT 207313 /*14 * Sun request values for the remote ptrace system call15 */16 17 /*18 * Memory data for read/write text or data. The size is in data. The target19 * addr is in the addr field.20 * Be careful before modifying because this value goes into internal21 * pipes and is allocated on stack too. Pipes and/or the stack could22 * become too small if this value gets incremented.23 */24 #ifndef XRY_MAX_CMD_STR25 #endif /* REMDEB_H */26 /*27 * now open_connex() routine which establishes a connection to server28 */29 #define DEBUGGER_IS_GDB 0x2 /* */30 /*31 * now close_connex() routine which detaches from server32 */33 /*34 * now send_signal() routine which sends signals to processes like kill(2)35 */36 /*37 * now wait_info() routine which returns results of polling the wait status38 * of a process/actor. It may return 0 if running, else pid or -139 */40 /*41 * now ptrace() routine. This matches the Sun UNIX ptrace as well as42 * some additions43 */44 /*45 * now define the actual calls we support46 */47 const char *names[] = {48 "NULLPROC", "OPEN_CONNEX", "SEND_SIGNAL", "name3",49 "name4", "name5", "name6", "name7",50 "name8", "name9", "CLOSE_CONNEX", "PTRACE",51 "name12", "WAIT_INFO", "name14", "name15",52 "name16", "GET_SIGNAL_NAMES", "name18"53 };54 55 void56 remotedeb_2 (struct svc_req *rqstp, register SVCXPRT * transp)57 {58 union {59 open_in open_connex_2_arg;60 signal_in send_signal_2_arg;61 close_in close_connex_2_arg;62 ptrace_in ptrace_2_arg;63 wait_in wait_info_2_arg;64 } argument;65 char *result;66 xdrproc_t _xdr_argument, _xdr_result;67 char *(*local) (char *, struct svc_req *);68 69 DPRINTF (("remotedeb_2: %s (%d)\n",70 (unsigned) rqstp->rq_proc <71 (unsigned) (sizeof names / sizeof names[0]) ?72 names[rqstp->rq_proc] : "???", (int) rqstp->rq_proc));73 74 switch (rqstp->rq_proc) {75 case NULLPROC:76 (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *) NULL);77 return;78 79 case OPEN_CONNEX:80 _xdr_argument = (xdrproc_t) xdr_open_in;81 _xdr_result = (xdrproc_t) xdr_open_out;82 local = (char *(*)(char *, struct svc_req *)) open_connex_2_svc;83 break;84 85 case SEND_SIGNAL:86 _xdr_argument = (xdrproc_t) xdr_signal_in;87 _xdr_result = (xdrproc_t) xdr_signal_out;88 local = (char *(*)(char *, struct svc_req *)) send_signal_2_svc;89 break;90 91 case CLOSE_CONNEX:92 _xdr_argument = (xdrproc_t) xdr_close_in;93 _xdr_result = (xdrproc_t) xdr_void;94 local = (char *(*)(char *, struct svc_req *)) close_connex_2_svc;95 break;96 97 case PTRACE:98 _xdr_argument = (xdrproc_t) xdr_ptrace_in;99 _xdr_result = (xdrproc_t) xdr_ptrace_out;100 local = (char *(*)(char *, struct svc_req *)) ptrace_2_svc;101 break;102 103 case WAIT_INFO:104 _xdr_argument = (xdrproc_t) xdr_wait_in;105 _xdr_result = (xdrproc_t) xdr_wait_out;106 local = (char *(*)(char *, struct svc_req *)) wait_info_2_svc;107 break;108 109 case GET_SIGNAL_NAMES:110 _xdr_argument = (xdrproc_t) xdr_void;111 _xdr_result = (xdrproc_t) xdr_get_signal_names_out;112 local = (char *(*)(char *, struct svc_req *)) get_signal_names_2_svc;113 break;114 115 default:116 svcerr_noproc (transp);117 return;118 }119 memset ((char *) &argument, 0, sizeof (argument));120 if (!svc_getargs (transp, _xdr_argument, (caddr_t) & argument)) {121 svcerr_decode (transp);122 return;123 }124 result = (*local) ((char *) &argument, rqstp);125 if (result != NULL && !svc_sendreply (transp, _xdr_result, result)) {126 svcerr_systemerr (transp);127 }128 if (!svc_freeargs (transp, _xdr_argument, (caddr_t) & argument)) {129 fprintf (stderr, "unable to free arguments");130 exit (1);131 }132 return;133 } -
c/src/librdbg/src/m68k/any/remdeb_xdr.c
rbdb86b4 r97f6256 9 9 10 10 bool_t 11 xdr_rpc_type (XDR * xdrs, rpc_type * objp) 12 { 13 register int32_t *buf; 14 15 if (!xdr_enum (xdrs, (enum_t *) objp)) 16 return FALSE; 17 return TRUE; 18 } 19 20 bool_t 21 xdr_UDP_MSG (XDR * xdrs, UDP_MSG * objp) 22 { 23 register int32_t *buf; 24 25 if (!xdr_u_char (xdrs, &objp->type)) 26 return FALSE; 27 if (!xdr_u_char (xdrs, &objp->msg_num)) 28 return FALSE; 29 if (!xdr_u_short (xdrs, &objp->spec)) 30 return FALSE; 31 if (!xdr_long (xdrs, &objp->pid)) 32 return FALSE; 33 if (!xdr_u_long (xdrs, &objp->context)) 34 return FALSE; 35 return TRUE; 36 } 37 11 xdr_rpc_type (XDR *xdrs, rpc_type *objp) 12 { 13 register int32_t *buf; 14 15 if (!xdr_enum (xdrs, (enum_t *) objp)) 16 return FALSE; 17 return TRUE; 18 } 19 20 bool_t 21 xdr_UDP_MSG (XDR *xdrs, UDP_MSG *objp) 22 { 23 register int32_t *buf; 24 25 if (!xdr_u_char (xdrs, &objp->type)) 26 return FALSE; 27 if (!xdr_u_char (xdrs, &objp->msg_num)) 28 return FALSE; 29 if (!xdr_u_short (xdrs, &objp->spec)) 30 return FALSE; 31 if (!xdr_long (xdrs, &objp->pid)) 32 return FALSE; 33 if (!xdr_u_long (xdrs, &objp->context)) 34 return FALSE; 35 return TRUE; 36 } 38 37 /* 39 38 * Sun request values for the remote ptrace system call 40 39 */ 41 40 42 bool_t 43 xdr_ptracereq (XDR * xdrs, ptracereq * objp) 44 { 45 register int32_t *buf; 46 47 if (!xdr_enum (xdrs, (enum_t *) objp)) 48 return FALSE; 49 return TRUE; 50 } 51 52 bool_t 53 xdr_xdr_regs (XDR * xdrs, xdr_regs * objp) 54 { 55 register int32_t *buf; 56 57 int i; 58 59 if (xdrs->x_op == XDR_ENCODE) { 60 buf = XDR_INLINE (xdrs, (3 + 8 + 8) * BYTES_PER_XDR_UNIT); 61 if (buf == NULL) { 62 if (!xdr_vector (xdrs, (char *) objp->r_dreg, 8, 63 sizeof (int), (xdrproc_t) xdr_int)) 64 return FALSE; 65 if (!xdr_vector (xdrs, (char *) objp->r_areg, 8, 66 sizeof (int), (xdrproc_t) xdr_int)) 67 return FALSE; 68 if (!xdr_int (xdrs, &objp->r_sr)) 69 return FALSE; 70 if (!xdr_int (xdrs, &objp->r_pc)) 71 return FALSE; 72 if (!xdr_int (xdrs, &objp->r_vec)) 73 return FALSE; 74 } else { 75 { 76 register int *genp; 77 78 for (i = 0, genp = objp->r_dreg; i < 8; ++i) { 79 IXDR_PUT_LONG (buf, *genp++); 80 } 81 } 82 { 83 register int *genp; 84 85 for (i = 0, genp = objp->r_areg; i < 8; ++i) { 86 IXDR_PUT_LONG (buf, *genp++); 87 } 88 } 89 IXDR_PUT_LONG (buf, objp->r_sr); 90 IXDR_PUT_LONG (buf, objp->r_pc); 91 IXDR_PUT_LONG (buf, objp->r_vec); 92 } 93 return TRUE; 94 } else if (xdrs->x_op == XDR_DECODE) { 95 buf = XDR_INLINE (xdrs, (3 + 8 + 8) * BYTES_PER_XDR_UNIT); 96 if (buf == NULL) { 97 if (!xdr_vector (xdrs, (char *) objp->r_dreg, 8, 98 sizeof (int), (xdrproc_t) xdr_int)) 99 return FALSE; 100 if (!xdr_vector (xdrs, (char *) objp->r_areg, 8, 101 sizeof (int), (xdrproc_t) xdr_int)) 102 return FALSE; 103 if (!xdr_int (xdrs, &objp->r_sr)) 104 return FALSE; 105 if (!xdr_int (xdrs, &objp->r_pc)) 106 return FALSE; 107 if (!xdr_int (xdrs, &objp->r_vec)) 108 return FALSE; 109 } else { 110 { 111 register int *genp; 112 113 for (i = 0, genp = objp->r_dreg; i < 8; ++i) { 114 *genp++ = IXDR_GET_LONG (buf); 115 } 116 } 117 { 118 register int *genp; 119 120 for (i = 0, genp = objp->r_areg; i < 8; ++i) { 121 *genp++ = IXDR_GET_LONG (buf); 122 } 123 } 124 objp->r_sr = IXDR_GET_LONG (buf); 125 objp->r_pc = IXDR_GET_LONG (buf); 126 objp->r_vec = IXDR_GET_LONG (buf); 127 } 128 return TRUE; 129 } 130 131 if (!xdr_vector (xdrs, (char *) objp->r_dreg, 8, 132 sizeof (int), (xdrproc_t) xdr_int)) 133 return FALSE; 134 if (!xdr_vector (xdrs, (char *) objp->r_areg, 8, 135 sizeof (int), (xdrproc_t) xdr_int)) 136 return FALSE; 137 if (!xdr_int (xdrs, &objp->r_sr)) 138 return FALSE; 139 if (!xdr_int (xdrs, &objp->r_pc)) 140 return FALSE; 141 if (!xdr_int (xdrs, &objp->r_vec)) 142 return FALSE; 143 return TRUE; 144 } 145 146 /* 41 42 bool_t 43 xdr_ptracereq (XDR *xdrs, ptracereq *objp) 44 { 45 register int32_t *buf; 46 47 if (!xdr_enum (xdrs, (enum_t *) objp)) 48 return FALSE; 49 return TRUE; 50 } 51 52 bool_t 53 xdr_xdr_regs (XDR *xdrs, xdr_regs *objp) 54 { 55 register int32_t *buf; 56 57 int i; 58 59 if (xdrs->x_op == XDR_ENCODE) { 60 buf = XDR_INLINE (xdrs, (3 + 8 + 8 )* BYTES_PER_XDR_UNIT); 61 if (buf == NULL) { 62 if (!xdr_vector (xdrs, (char *)objp->r_dreg, 8, 63 sizeof (int), (xdrproc_t) xdr_int)) 64 return FALSE; 65 if (!xdr_vector (xdrs, (char *)objp->r_areg, 8, 66 sizeof (int), (xdrproc_t) xdr_int)) 67 return FALSE; 68 if (!xdr_int (xdrs, &objp->r_sr)) 69 return FALSE; 70 if (!xdr_int (xdrs, &objp->r_pc)) 71 return FALSE; 72 if (!xdr_int (xdrs, &objp->r_vec)) 73 return FALSE; 74 } else { 75 { 76 register int *genp; 77 78 for (i = 0, genp = objp->r_dreg; 79 i < 8; ++i) { 80 IXDR_PUT_LONG(buf, *genp++); 81 } 82 } 83 { 84 register int *genp; 85 86 for (i = 0, genp = objp->r_areg; 87 i < 8; ++i) { 88 IXDR_PUT_LONG(buf, *genp++); 89 } 90 } 91 IXDR_PUT_LONG(buf, objp->r_sr); 92 IXDR_PUT_LONG(buf, objp->r_pc); 93 IXDR_PUT_LONG(buf, objp->r_vec); 94 } 95 return TRUE; 96 } else if (xdrs->x_op == XDR_DECODE) { 97 buf = XDR_INLINE (xdrs, (3 + 8 + 8 )* BYTES_PER_XDR_UNIT); 98 if (buf == NULL) { 99 if (!xdr_vector (xdrs, (char *)objp->r_dreg, 8, 100 sizeof (int), (xdrproc_t) xdr_int)) 101 return FALSE; 102 if (!xdr_vector (xdrs, (char *)objp->r_areg, 8, 103 sizeof (int), (xdrproc_t) xdr_int)) 104 return FALSE; 105 if (!xdr_int (xdrs, &objp->r_sr)) 106 return FALSE; 107 if (!xdr_int (xdrs, &objp->r_pc)) 108 return FALSE; 109 if (!xdr_int (xdrs, &objp->r_vec)) 110 return FALSE; 111 } else { 112 { 113 register int *genp; 114 115 for (i = 0, genp = objp->r_dreg; 116 i < 8; ++i) { 117 *genp++ = IXDR_GET_LONG(buf); 118 } 119 } 120 { 121 register int *genp; 122 123 for (i = 0, genp = objp->r_areg; 124 i < 8; ++i) { 125 *genp++ = IXDR_GET_LONG(buf); 126 } 127 } 128 objp->r_sr = IXDR_GET_LONG(buf); 129 objp->r_pc = IXDR_GET_LONG(buf); 130 objp->r_vec = IXDR_GET_LONG(buf); 131 } 132 return TRUE; 133 } 134 135 if (!xdr_vector (xdrs, (char *)objp->r_dreg, 8, 136 sizeof (int), (xdrproc_t) xdr_int)) 137 return FALSE; 138 if (!xdr_vector (xdrs, (char *)objp->r_areg, 8, 139 sizeof (int), (xdrproc_t) xdr_int)) 140 return FALSE; 141 if (!xdr_int (xdrs, &objp->r_sr)) 142 return FALSE; 143 if (!xdr_int (xdrs, &objp->r_pc)) 144 return FALSE; 145 if (!xdr_int (xdrs, &objp->r_vec)) 146 return FALSE; 147 return TRUE; 148 } 149 /* 147 150 * Memory data for read/write text or data. The size is in data. The target 148 151 * addr is in the addr field. … … 151 154 * become too small if this value gets incremented. 152 155 */ 153 bool_t 154 xdr_xdr_mem (xdrs, objp) 155 XDR *xdrs; 156 struct xdr_mem *objp; 157 { 158 if (!xdr_u_long (xdrs, &objp->addr)) { 159 return (FALSE); 160 } 161 if (!xdr_u_int (xdrs, &objp->dataNb)) { 162 return (FALSE); 163 } 164 return (xdr_opaque (xdrs, objp->data, objp->dataNb)); 165 } 166 167 bool_t 168 xdr_break_type (XDR * xdrs, break_type * objp) 169 { 170 register int32_t *buf; 171 172 if (!xdr_enum (xdrs, (enum_t *) objp)) 173 return FALSE; 174 return TRUE; 175 } 176 177 bool_t 178 xdr_xdr_break (XDR * xdrs, xdr_break * objp) 179 { 180 register int32_t *buf; 181 182 int i; 183 184 if (xdrs->x_op == XDR_ENCODE) { 185 if (!xdr_u_char (xdrs, &objp->type)) 186 return FALSE; 187 if (!xdr_u_char (xdrs, &objp->thread_spec)) 188 return FALSE; 189 buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT); 190 if (buf == NULL) { 191 if (!xdr_u_short (xdrs, &objp->handle)) 192 return FALSE; 193 if (!xdr_u_long (xdrs, &objp->ee_loc)) 194 return FALSE; 195 if (!xdr_u_long (xdrs, &objp->ee_type)) 196 return FALSE; 197 if (!xdr_u_short (xdrs, &objp->length)) 198 return FALSE; 199 200 } else { 201 IXDR_PUT_U_SHORT (buf, objp->handle); 202 IXDR_PUT_U_LONG (buf, objp->ee_loc); 203 IXDR_PUT_U_LONG (buf, objp->ee_type); 204 IXDR_PUT_U_SHORT (buf, objp->length); 205 } 206 if (!xdr_u_char (xdrs, &objp->pass_count)) 207 return FALSE; 208 if (!xdr_u_char (xdrs, &objp->curr_pass)) 209 return FALSE; 210 buf = XDR_INLINE (xdrs, MAX_THRD_BRK * BYTES_PER_XDR_UNIT); 211 if (buf == NULL) { 212 if (!xdr_vector (xdrs, (char *) objp->thread_list, MAX_THRD_BRK, 213 sizeof (u_long), (xdrproc_t) xdr_u_long)) 214 return FALSE; 215 } else { 216 { 217 register u_long *genp; 218 219 for (i = 0, genp = objp->thread_list; i < MAX_THRD_BRK; ++i) { 220 IXDR_PUT_U_LONG (buf, *genp++); 221 } 222 } 223 } 224 return TRUE; 225 } else if (xdrs->x_op == XDR_DECODE) { 226 if (!xdr_u_char (xdrs, &objp->type)) 227 return FALSE; 228 if (!xdr_u_char (xdrs, &objp->thread_spec)) 229 return FALSE; 230 buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT); 231 if (buf == NULL) { 232 if (!xdr_u_short (xdrs, &objp->handle)) 233 return FALSE; 234 if (!xdr_u_long (xdrs, &objp->ee_loc)) 235 return FALSE; 236 if (!xdr_u_long (xdrs, &objp->ee_type)) 237 return FALSE; 238 if (!xdr_u_short (xdrs, &objp->length)) 239 return FALSE; 240 241 } else { 242 objp->handle = IXDR_GET_U_SHORT (buf); 243 objp->ee_loc = IXDR_GET_U_LONG (buf); 244 objp->ee_type = IXDR_GET_U_LONG (buf); 245 objp->length = IXDR_GET_U_SHORT (buf); 246 } 247 if (!xdr_u_char (xdrs, &objp->pass_count)) 248 return FALSE; 249 if (!xdr_u_char (xdrs, &objp->curr_pass)) 250 return FALSE; 251 buf = XDR_INLINE (xdrs, MAX_THRD_BRK * BYTES_PER_XDR_UNIT); 252 if (buf == NULL) { 253 if (!xdr_vector (xdrs, (char *) objp->thread_list, MAX_THRD_BRK, 254 sizeof (u_long), (xdrproc_t) xdr_u_long)) 255 return FALSE; 256 } else { 257 { 258 register u_long *genp; 259 260 for (i = 0, genp = objp->thread_list; i < MAX_THRD_BRK; ++i) { 261 *genp++ = IXDR_GET_U_LONG (buf); 262 } 263 } 264 } 265 return TRUE; 266 } 267 268 if (!xdr_u_char (xdrs, &objp->type)) 269 return FALSE; 270 if (!xdr_u_char (xdrs, &objp->thread_spec)) 271 return FALSE; 272 if (!xdr_u_short (xdrs, &objp->handle)) 273 return FALSE; 274 if (!xdr_u_long (xdrs, &objp->ee_loc)) 275 return FALSE; 276 if (!xdr_u_long (xdrs, &objp->ee_type)) 277 return FALSE; 278 if (!xdr_u_short (xdrs, &objp->length)) 279 return FALSE; 280 if (!xdr_u_char (xdrs, &objp->pass_count)) 281 return FALSE; 282 if (!xdr_u_char (xdrs, &objp->curr_pass)) 283 return FALSE; 284 if (!xdr_vector (xdrs, (char *) objp->thread_list, MAX_THRD_BRK, 285 sizeof (u_long), (xdrproc_t) xdr_u_long)) 286 return FALSE; 287 return TRUE; 288 } 289 290 bool_t 291 xdr_thread_name (XDR * xdrs, thread_name * objp) 292 { 293 register int32_t *buf; 294 295 if (!xdr_string (xdrs, objp, THREADNAMEMAX)) 296 return FALSE; 297 return TRUE; 298 } 299 300 bool_t 301 xdr_KernThread (XDR * xdrs, KernThread * objp) 302 { 303 register int32_t *buf; 304 305 if (!xdr_u_int (xdrs, &objp->threadLi)) 306 return FALSE; 307 return TRUE; 308 } 309 310 bool_t 311 xdr_thread_list (xdrs, objp) 312 XDR *xdrs; 313 struct thread_list *objp; 314 { 315 return (xdr_array (xdrs, (char **) &objp->threads, &objp->nbThread, 316 UTHREAD_MAX, sizeof (KernThread), xdr_KernThread)); 317 } 318 319 bool_t 320 xdr_ptrace_addr_data_in (XDR * xdrs, ptrace_addr_data_in * objp) 321 { 322 register int32_t *buf; 323 324 if (!xdr_ptracereq (xdrs, &objp->req)) 325 return FALSE; 326 switch (objp->req) { 327 case RPT_SETTHREADREGS: 328 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_in_u.regs)) 329 return FALSE; 330 break; 331 case RPT_SETREGS: 332 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_in_u.regs)) 333 return FALSE; 334 break; 335 case RPT_PSETTHREADREGS: 336 if (!xdr_array 337 (xdrs, (char **) &objp->ptrace_addr_data_in_u.pregs.pregs_val, 338 (u_int *) & objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0, 339 sizeof (u_int), (xdrproc_t) xdr_u_int)) 340 return FALSE; 341 break; 342 case RPT_PSETREGS: 343 if (!xdr_array 344 (xdrs, (char **) &objp->ptrace_addr_data_in_u.pregs.pregs_val, 345 (u_int *) & objp->ptrace_addr_data_in_u.pregs.pregs_len, ~0, 346 sizeof (u_int), (xdrproc_t) xdr_u_int)) 347 return FALSE; 348 break; 349 case RPT_SETTHREADNAME: 350 if (!xdr_thread_name (xdrs, &objp->ptrace_addr_data_in_u.name)) 351 return FALSE; 352 break; 353 case RPT_WRITETEXT: 354 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_in_u.mem)) 355 return FALSE; 356 break; 357 case RPT_WRITEDATA: 358 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_in_u.mem)) 359 return FALSE; 360 break; 361 case RPT_SETBREAK: 362 if (!xdr_xdr_break (xdrs, &objp->ptrace_addr_data_in_u.breakp)) 363 return FALSE; 364 break; 365 default: 366 if (!xdr_u_int (xdrs, &objp->ptrace_addr_data_in_u.address)) 367 return FALSE; 368 break; 369 } 370 return TRUE; 371 } 372 373 bool_t 374 xdr_ptrace_addr_data_out (XDR * xdrs, ptrace_addr_data_out * objp) 375 { 376 register int32_t *buf; 377 378 if (!xdr_ptracereq (xdrs, &objp->req)) 379 return FALSE; 380 switch (objp->req) { 381 case RPT_GETREGS: 382 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_out_u.regs)) 383 return FALSE; 384 break; 385 case RPT_GETTHREADREGS: 386 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_out_u.regs)) 387 return FALSE; 388 break; 389 case RPT_PGETREGS: 390 if (!xdr_array 391 (xdrs, (char **) &objp->ptrace_addr_data_out_u.pregs.pregs_val, 392 (u_int *) & objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0, 393 sizeof (u_int), (xdrproc_t) xdr_u_int)) 394 return FALSE; 395 break; 396 case RPT_PGETTHREADREGS: 397 if (!xdr_array 398 (xdrs, (char **) &objp->ptrace_addr_data_out_u.pregs.pregs_val, 399 (u_int *) & objp->ptrace_addr_data_out_u.pregs.pregs_len, ~0, 400 sizeof (u_int), (xdrproc_t) xdr_u_int)) 401 return FALSE; 402 break; 403 case RPT_THREADLIST: 404 if (!xdr_thread_list (xdrs, &objp->ptrace_addr_data_out_u.threads)) 405 return FALSE; 406 break; 407 case RPT_GETTHREADNAME: 408 if (!xdr_thread_name (xdrs, &objp->ptrace_addr_data_out_u.name)) 409 return FALSE; 410 break; 411 case RPT_READTEXT: 412 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 413 return FALSE; 414 break; 415 case RPT_GETNAME: 416 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 417 return FALSE; 418 break; 419 case RPT_READDATA: 420 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 421 return FALSE; 422 break; 423 case RPT_GETBREAK: 424 if (!xdr_xdr_break (xdrs, &objp->ptrace_addr_data_out_u.breakp)) 425 return FALSE; 426 break; 427 default: 428 if (!xdr_u_int (xdrs, &objp->ptrace_addr_data_out_u.addr)) 429 return FALSE; 430 break; 431 } 432 return TRUE; 433 } 434 435 bool_t 436 xdr_CHAR_DATA (XDR * xdrs, CHAR_DATA * objp) 437 { 438 register int32_t *buf; 439 440 if (!xdr_bytes 441 (xdrs, (char **) &objp->CHAR_DATA_val, (u_int *) & objp->CHAR_DATA_len, 442 NET_SAFE)) 443 return FALSE; 444 return TRUE; 445 } 446 447 #ifndef XRY_MAX_CMD_STR 448 #endif /* REMDEB_H */ 449 450 bool_t 451 xdr_xry_inst (XDR * xdrs, xry_inst * objp) 452 { 453 register int32_t *buf; 454 455 if (!xdr_u_char (xdrs, &objp->flags)) 456 return FALSE; 457 if (!xdr_u_char (xdrs, &objp->type)) 458 return FALSE; 459 if (!xdr_u_char (xdrs, &objp->sub_type)) 460 return FALSE; 461 if (!xdr_u_char (xdrs, &objp->res_type)) 462 return FALSE; 463 if (!xdr_u_long (xdrs, &objp->value)) 464 return FALSE; 465 if (!xdr_u_long (xdrs, &objp->value2)) 466 return FALSE; 467 return TRUE; 468 } 469 470 bool_t 471 xdr_instance (XDR * xdrs, instance * objp) 472 { 473 register int32_t *buf; 474 475 int i; 476 if (!xdr_vector (xdrs, (char *) objp->instances, XRY_MAX_INSTANCES, 477 sizeof (xry_inst), (xdrproc_t) xdr_xry_inst)) 478 return FALSE; 479 if (!xdr_vector (xdrs, (char *) objp->buffer, XRY_MAX_INST_BUFF, 480 sizeof (u_char), (xdrproc_t) xdr_u_char)) 481 return FALSE; 482 return TRUE; 483 } 484 485 bool_t 486 xdr_instance_union (XDR * xdrs, instance_union * objp) 487 { 488 register int32_t *buf; 489 490 if (!xdr_bool (xdrs, &objp->instances)) 491 return FALSE; 492 switch (objp->instances) { 493 case TRUE: 494 if (!xdr_instance (xdrs, &objp->instance_union_u.inst)) 495 return FALSE; 496 break; 497 case FALSE: 498 if (!xdr_string (xdrs, &objp->instance_union_u.buffer, XRY_MAX_CMD_STR)) 499 return FALSE; 500 break; 501 default: 502 return FALSE; 503 } 504 return TRUE; 505 } 506 507 bool_t 508 xdr_one_arg (XDR * xdrs, one_arg * objp) 509 { 510 register int32_t *buf; 511 512 if (!xdr_string (xdrs, objp, NET_SAFE)) 513 return FALSE; 514 return TRUE; 515 } 516 517 /* 518 * now open_connex() routine which establishes a connection to server 519 */ 520 521 bool_t 522 xdr_debug_type (XDR * xdrs, debug_type * objp) 523 { 524 register int32_t *buf; 525 526 if (!xdr_enum (xdrs, (enum_t *) objp)) 527 return FALSE; 528 return TRUE; 529 } 530 531 #define DEBUGGER_IS_GDB 0x2 /* */ 532 533 bool_t 534 xdr_open_in (XDR * xdrs, open_in * objp) 535 { 536 register int32_t *buf; 537 538 int i; 539 if (!xdr_vector (xdrs, (char *) objp->back_port, 16, 540 sizeof (u_char), (xdrproc_t) xdr_u_char)) 541 return FALSE; 542 if (!xdr_u_short (xdrs, &objp->debug_type)) 543 return FALSE; 544 if (!xdr_u_short (xdrs, &objp->flags)) 545 return FALSE; 546 if (!xdr_vector (xdrs, (char *) objp->destination, 16, 547 sizeof (u_char), (xdrproc_t) xdr_u_char)) 548 return FALSE; 549 if (!xdr_one_arg (xdrs, &objp->user_name)) 550 return FALSE; 551 return TRUE; 552 } 553 554 bool_t 555 xdr_open_out (XDR * xdrs, open_out * objp) 556 { 557 register int32_t *buf; 558 559 int i; 560 561 if (xdrs->x_op == XDR_ENCODE) { 562 buf = XDR_INLINE (xdrs, (2 + (4)) * BYTES_PER_XDR_UNIT); 563 if (buf == NULL) { 564 if (!xdr_u_long (xdrs, &objp->port)) 565 return FALSE; 566 if (!xdr_vector (xdrs, (char *) objp->pad, 4, 567 sizeof (u_int), (xdrproc_t) xdr_u_int)) 568 return FALSE; 569 if (!xdr_u_int (xdrs, &objp->fp)) 570 return FALSE; 571 572 } else { 573 IXDR_PUT_U_LONG (buf, objp->port); 574 { 575 register u_int *genp; 576 577 for (i = 0, genp = objp->pad; i < 4; ++i) { 578 IXDR_PUT_U_LONG (buf, *genp++); 579 } 580 } 581 IXDR_PUT_U_LONG (buf, objp->fp); 582 } 583 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 584 return FALSE; 585 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 586 return FALSE; 587 if (!xdr_u_short (xdrs, &objp->server_vers)) 588 return FALSE; 589 return TRUE; 590 } else if (xdrs->x_op == XDR_DECODE) { 591 buf = XDR_INLINE (xdrs, (2 + (4)) * BYTES_PER_XDR_UNIT); 592 if (buf == NULL) { 593 if (!xdr_u_long (xdrs, &objp->port)) 594 return FALSE; 595 if (!xdr_vector (xdrs, (char *) objp->pad, 4, 596 sizeof (u_int), (xdrproc_t) xdr_u_int)) 597 return FALSE; 598 if (!xdr_u_int (xdrs, &objp->fp)) 599 return FALSE; 600 601 } else { 602 objp->port = IXDR_GET_U_LONG (buf); 603 { 604 register u_int *genp; 605 606 for (i = 0, genp = objp->pad; i < 4; ++i) { 607 *genp++ = IXDR_GET_U_LONG (buf); 608 } 609 } 610 objp->fp = IXDR_GET_U_LONG (buf); 611 } 612 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 613 return FALSE; 614 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 615 return FALSE; 616 if (!xdr_u_short (xdrs, &objp->server_vers)) 617 return FALSE; 618 return TRUE; 619 } 620 621 if (!xdr_u_long (xdrs, &objp->port)) 622 return FALSE; 623 if (!xdr_vector (xdrs, (char *) objp->pad, 4, 624 sizeof (u_int), (xdrproc_t) xdr_u_int)) 625 return FALSE; 626 if (!xdr_u_int (xdrs, &objp->fp)) 627 return FALSE; 628 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 629 return FALSE; 630 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 631 return FALSE; 632 if (!xdr_u_short (xdrs, &objp->server_vers)) 633 return FALSE; 634 return TRUE; 635 } 636 637 /* 638 * now close_connex() routine which detaches from server 639 */ 640 641 bool_t 642 xdr_close_control (XDR * xdrs, close_control * objp) 643 { 644 register int32_t *buf; 645 646 if (!xdr_enum (xdrs, (enum_t *) objp)) 647 return FALSE; 648 return TRUE; 649 } 650 651 bool_t 652 xdr_close_in (XDR * xdrs, close_in * objp) 653 { 654 register int32_t *buf; 655 656 if (!xdr_close_control (xdrs, &objp->control)) 657 return FALSE; 658 return TRUE; 659 } 660 661 /* 662 * now send_signal() routine which sends signals to processes like kill(2) 663 */ 664 665 bool_t 666 xdr_signal_in (XDR * xdrs, signal_in * objp) 667 { 668 register int32_t *buf; 669 670 if (!xdr_int (xdrs, &objp->pid)) 671 return FALSE; 672 if (!xdr_int (xdrs, &objp->sig)) 673 return FALSE; 674 return TRUE; 675 } 676 677 bool_t 678 xdr_signal_out (XDR * xdrs, signal_out * objp) 679 { 680 register int32_t *buf; 681 682 if (!xdr_int (xdrs, &objp->kill_return)) 683 return FALSE; 684 if (!xdr_int (xdrs, &objp->errNo)) 685 return FALSE; 686 return TRUE; 687 } 688 689 /* 690 * now wait_info() routine which returns results of polling the wait status 691 * of a process/actor. It may return 0 if running, else pid or -1 692 */ 693 694 bool_t 695 xdr_stop_code (XDR * xdrs, stop_code * objp) 696 { 697 register int32_t *buf; 698 699 if (!xdr_enum (xdrs, (enum_t *) objp)) 700 return FALSE; 701 return TRUE; 702 } 703 704 bool_t 705 xdr_wait_in (XDR * xdrs, wait_in * objp) 706 { 707 register int32_t *buf; 708 709 if (!xdr_int (xdrs, &objp->pid)) 710 return FALSE; 711 return TRUE; 712 } 713 714 bool_t 715 xdr_wait_out (XDR * xdrs, wait_out * objp) 716 { 717 register int32_t *buf; 718 719 if (xdrs->x_op == XDR_ENCODE) { 720 buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); 721 if (buf == NULL) { 722 if (!xdr_int (xdrs, &objp->wait_return)) 723 return FALSE; 724 if (!xdr_int (xdrs, &objp->errNo)) 725 return FALSE; 726 if (!xdr_int (xdrs, &objp->status)) 727 return FALSE; 728 729 } else { 730 IXDR_PUT_LONG (buf, objp->wait_return); 731 IXDR_PUT_LONG (buf, objp->errNo); 732 IXDR_PUT_LONG (buf, objp->status); 733 } 734 if (!xdr_stop_code (xdrs, &objp->reason)) 735 return FALSE; 736 buf = XDR_INLINE (xdrs, 5 * BYTES_PER_XDR_UNIT); 737 if (buf == NULL) { 738 if (!xdr_int (xdrs, &objp->handle)) 739 return FALSE; 740 if (!xdr_u_long (xdrs, &objp->PC)) 741 return FALSE; 742 if (!xdr_u_long (xdrs, &objp->SP)) 743 return FALSE; 744 if (!xdr_u_long (xdrs, &objp->FP)) 745 return FALSE; 746 if (!xdr_u_long (xdrs, &objp->thread)) 747 return FALSE; 748 } else { 749 IXDR_PUT_LONG (buf, objp->handle); 750 IXDR_PUT_U_LONG (buf, objp->PC); 751 IXDR_PUT_U_LONG (buf, objp->SP); 752 IXDR_PUT_U_LONG (buf, objp->FP); 753 IXDR_PUT_U_LONG (buf, objp->thread); 754 } 755 return TRUE; 756 } else if (xdrs->x_op == XDR_DECODE) { 757 buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); 758 if (buf == NULL) { 759 if (!xdr_int (xdrs, &objp->wait_return)) 760 return FALSE; 761 if (!xdr_int (xdrs, &objp->errNo)) 762 return FALSE; 763 if (!xdr_int (xdrs, &objp->status)) 764 return FALSE; 765 766 } else { 767 objp->wait_return = IXDR_GET_LONG (buf); 768 objp->errNo = IXDR_GET_LONG (buf); 769 objp->status = IXDR_GET_LONG (buf); 770 } 771 if (!xdr_stop_code (xdrs, &objp->reason)) 772 return FALSE; 773 buf = XDR_INLINE (xdrs, 5 * BYTES_PER_XDR_UNIT); 774 if (buf == NULL) { 775 if (!xdr_int (xdrs, &objp->handle)) 776 return FALSE; 777 if (!xdr_u_long (xdrs, &objp->PC)) 778 return FALSE; 779 if (!xdr_u_long (xdrs, &objp->SP)) 780 return FALSE; 781 if (!xdr_u_long (xdrs, &objp->FP)) 782 return FALSE; 783 if (!xdr_u_long (xdrs, &objp->thread)) 784 return FALSE; 785 } else { 786 objp->handle = IXDR_GET_LONG (buf); 787 objp->PC = IXDR_GET_U_LONG (buf); 788 objp->SP = IXDR_GET_U_LONG (buf); 789 objp->FP = IXDR_GET_U_LONG (buf); 790 objp->thread = IXDR_GET_U_LONG (buf); 791 } 792 return TRUE; 793 } 794 795 if (!xdr_int (xdrs, &objp->wait_return)) 796 return FALSE; 797 if (!xdr_int (xdrs, &objp->errNo)) 798 return FALSE; 799 if (!xdr_int (xdrs, &objp->status)) 800 return FALSE; 801 if (!xdr_stop_code (xdrs, &objp->reason)) 802 return FALSE; 803 if (!xdr_int (xdrs, &objp->handle)) 804 return FALSE; 805 if (!xdr_u_long (xdrs, &objp->PC)) 806 return FALSE; 807 if (!xdr_u_long (xdrs, &objp->SP)) 808 return FALSE; 809 if (!xdr_u_long (xdrs, &objp->FP)) 810 return FALSE; 811 if (!xdr_u_long (xdrs, &objp->thread)) 812 return FALSE; 813 return TRUE; 814 } 815 816 /* 817 * now ptrace() routine. This matches the Sun UNIX ptrace as well as 818 * some additions 819 */ 820 821 bool_t 822 xdr_ptrace_in (XDR * xdrs, ptrace_in * objp) 823 { 824 register int32_t *buf; 825 826 if (!xdr_int (xdrs, &objp->pid)) 827 return FALSE; 828 if (!xdr_ptrace_addr_data_in (xdrs, &objp->addr)) 829 return FALSE; 830 if (!xdr_u_int (xdrs, &objp->data)) 831 return FALSE; 832 if (!xdr_u_int (xdrs, &objp->flags)) 833 return FALSE; 834 return TRUE; 835 } 836 837 bool_t 838 xdr_ptrace_out (XDR * xdrs, ptrace_out * objp) 839 { 840 register int32_t *buf; 841 842 if (!xdr_ptrace_addr_data_out (xdrs, &objp->addr)) 843 return FALSE; 844 if (!xdr_int (xdrs, &objp->result)) 845 return FALSE; 846 if (!xdr_int (xdrs, &objp->errNo)) 847 return FALSE; 848 return TRUE; 849 } 850 851 bool_t 852 xdr_one_symbol (XDR * xdrs, one_symbol * objp) 853 { 854 register int32_t *buf; 855 856 if (!xdr_string (xdrs, &objp->symbolName, ~0)) 857 return FALSE; 858 if (!xdr_long (xdrs, &objp->symbolValue)) 859 return FALSE; 860 return TRUE; 861 } 862 863 bool_t 864 xdr_all_symbols (XDR * xdrs, all_symbols * objp) 865 { 866 register int32_t *buf; 867 868 if (!xdr_array 869 (xdrs, (char **) &objp->all_symbols_val, 870 (u_int *) & objp->all_symbols_len, ~0, sizeof (one_symbol), 871 (xdrproc_t) xdr_one_symbol)) 872 return FALSE; 873 return TRUE; 874 } 875 876 bool_t 877 xdr_get_global_symbols_out (XDR * xdrs, get_global_symbols_out * objp) 878 { 879 register int32_t *buf; 880 881 if (!xdr_all_symbols (xdrs, &objp->symbols)) 882 return FALSE; 883 return TRUE; 884 } 885 886 bool_t 887 xdr_get_text_data_in (XDR * xdrs, get_text_data_in * objp) 888 { 889 register int32_t *buf; 890 891 if (!xdr_int (xdrs, &objp->pid)) 892 return FALSE; 893 if (!xdr_string (xdrs, &objp->actorName, 16)) 894 return FALSE; 895 return TRUE; 896 } 897 898 bool_t 899 xdr_get_text_data_out (XDR * xdrs, get_text_data_out * objp) 900 { 901 register int32_t *buf; 902 903 if (xdrs->x_op == XDR_ENCODE) { 904 buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT); 905 if (buf == NULL) { 906 if (!xdr_int (xdrs, &objp->result)) 907 return FALSE; 908 if (!xdr_int (xdrs, &objp->errNo)) 909 return FALSE; 910 if (!xdr_u_long (xdrs, &objp->textStart)) 911 return FALSE; 912 if (!xdr_u_long (xdrs, &objp->textSize)) 913 return FALSE; 914 if (!xdr_u_long (xdrs, &objp->dataStart)) 915 return FALSE; 916 if (!xdr_u_long (xdrs, &objp->dataSize)) 917 return FALSE; 918 } else { 919 IXDR_PUT_LONG (buf, objp->result); 920 IXDR_PUT_LONG (buf, objp->errNo); 921 IXDR_PUT_U_LONG (buf, objp->textStart); 922 IXDR_PUT_U_LONG (buf, objp->textSize); 923 IXDR_PUT_U_LONG (buf, objp->dataStart); 924 IXDR_PUT_U_LONG (buf, objp->dataSize); 925 } 926 return TRUE; 927 } else if (xdrs->x_op == XDR_DECODE) { 928 buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT); 929 if (buf == NULL) { 930 if (!xdr_int (xdrs, &objp->result)) 931 return FALSE; 932 if (!xdr_int (xdrs, &objp->errNo)) 933 return FALSE; 934 if (!xdr_u_long (xdrs, &objp->textStart)) 935 return FALSE; 936 if (!xdr_u_long (xdrs, &objp->textSize)) 937 return FALSE; 938 if (!xdr_u_long (xdrs, &objp->dataStart)) 939 return FALSE; 940 if (!xdr_u_long (xdrs, &objp->dataSize)) 941 return FALSE; 942 } else { 943 objp->result = IXDR_GET_LONG (buf); 944 objp->errNo = IXDR_GET_LONG (buf); 945 objp->textStart = IXDR_GET_U_LONG (buf); 946 objp->textSize = IXDR_GET_U_LONG (buf); 947 objp->dataStart = IXDR_GET_U_LONG (buf); 948 objp->dataSize = IXDR_GET_U_LONG (buf); 949 } 950 return TRUE; 951 } 952 953 if (!xdr_int (xdrs, &objp->result)) 954 return FALSE; 955 if (!xdr_int (xdrs, &objp->errNo)) 956 return FALSE; 957 if (!xdr_u_long (xdrs, &objp->textStart)) 958 return FALSE; 959 if (!xdr_u_long (xdrs, &objp->textSize)) 960 return FALSE; 961 if (!xdr_u_long (xdrs, &objp->dataStart)) 962 return FALSE; 963 if (!xdr_u_long (xdrs, &objp->dataSize)) 964 return FALSE; 965 return TRUE; 966 } 967 968 bool_t 969 xdr_one_signal (XDR * xdrs, one_signal * objp) 970 { 971 register int32_t *buf; 972 973 if (!xdr_u_int (xdrs, &objp->number)) 974 return FALSE; 975 if (!xdr_string (xdrs, &objp->name, ~0)) 976 return FALSE; 977 return TRUE; 978 } 979 980 bool_t 981 xdr_all_signals (XDR * xdrs, all_signals * objp) 982 { 983 register int32_t *buf; 984 985 if (!xdr_array 986 (xdrs, (char **) &objp->all_signals_val, 987 (u_int *) & objp->all_signals_len, ~0, sizeof (one_signal), 988 (xdrproc_t) xdr_one_signal)) 989 return FALSE; 990 return TRUE; 991 } 992 993 bool_t 994 xdr_get_signal_names_out (XDR * xdrs, get_signal_names_out * objp) 995 { 996 register int32_t *buf; 997 998 if (!xdr_all_signals (xdrs, &objp->signals)) 999 return FALSE; 1000 return TRUE; 1001 } 1002 1003 /* 1004 * now define the actual calls we support 1005 */ 156 bool_t xdr_xdr_mem(xdrs, objp) 157 XDR *xdrs; 158 struct xdr_mem *objp; 159 { 160 if (!xdr_u_long(xdrs, &objp->addr)) { 161 return (FALSE); 162 } 163 if (!xdr_u_int(xdrs, &objp->dataNb)) { 164 return(FALSE); 165 } 166 return (xdr_opaque(xdrs, objp->data, objp->dataNb)); 167 } 168 169 bool_t 170 xdr_break_type (XDR *xdrs, break_type *objp) 171 { 172 register int32_t *buf; 173 174 if (!xdr_enum (xdrs, (enum_t *) objp)) 175 return FALSE; 176 return TRUE; 177 } 178 179 bool_t 180 xdr_xdr_break (XDR *xdrs, xdr_break *objp) 181 { 182 register int32_t *buf; 183 184 int i; 185 186 if (xdrs->x_op == XDR_ENCODE) { 187 if (!xdr_u_char (xdrs, &objp->type)) 188 return FALSE; 189 if (!xdr_u_char (xdrs, &objp->thread_spec)) 190 return FALSE; 191 buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT); 192 if (buf == NULL) { 193 if (!xdr_u_short (xdrs, &objp->handle)) 194 return FALSE; 195 if (!xdr_u_long (xdrs, &objp->ee_loc)) 196 return FALSE; 197 if (!xdr_u_long (xdrs, &objp->ee_type)) 198 return FALSE; 199 if (!xdr_u_short (xdrs, &objp->length)) 200 return FALSE; 201 202 } else { 203 IXDR_PUT_U_SHORT(buf, objp->handle); 204 IXDR_PUT_U_LONG(buf, objp->ee_loc); 205 IXDR_PUT_U_LONG(buf, objp->ee_type); 206 IXDR_PUT_U_SHORT(buf, objp->length); 207 } 208 if (!xdr_u_char (xdrs, &objp->pass_count)) 209 return FALSE; 210 if (!xdr_u_char (xdrs, &objp->curr_pass)) 211 return FALSE; 212 buf = XDR_INLINE (xdrs, ( MAX_THRD_BRK ) * BYTES_PER_XDR_UNIT); 213 if (buf == NULL) { 214 if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK, 215 sizeof (u_long), (xdrproc_t) xdr_u_long)) 216 return FALSE; 217 } else { 218 { 219 register u_long *genp; 220 221 for (i = 0, genp = objp->thread_list; 222 i < MAX_THRD_BRK; ++i) { 223 IXDR_PUT_U_LONG(buf, *genp++); 224 } 225 } 226 } 227 return TRUE; 228 } else if (xdrs->x_op == XDR_DECODE) { 229 if (!xdr_u_char (xdrs, &objp->type)) 230 return FALSE; 231 if (!xdr_u_char (xdrs, &objp->thread_spec)) 232 return FALSE; 233 buf = XDR_INLINE (xdrs, 4 * BYTES_PER_XDR_UNIT); 234 if (buf == NULL) { 235 if (!xdr_u_short (xdrs, &objp->handle)) 236 return FALSE; 237 if (!xdr_u_long (xdrs, &objp->ee_loc)) 238 return FALSE; 239 if (!xdr_u_long (xdrs, &objp->ee_type)) 240 return FALSE; 241 if (!xdr_u_short (xdrs, &objp->length)) 242 return FALSE; 243 244 } else { 245 objp->handle = IXDR_GET_U_SHORT(buf); 246 objp->ee_loc = IXDR_GET_U_LONG(buf); 247 objp->ee_type = IXDR_GET_U_LONG(buf); 248 objp->length = IXDR_GET_U_SHORT(buf); 249 } 250 if (!xdr_u_char (xdrs, &objp->pass_count)) 251 return FALSE; 252 if (!xdr_u_char (xdrs, &objp->curr_pass)) 253 return FALSE; 254 buf = XDR_INLINE (xdrs, ( MAX_THRD_BRK ) * BYTES_PER_XDR_UNIT); 255 if (buf == NULL) { 256 if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK, 257 sizeof (u_long), (xdrproc_t) xdr_u_long)) 258 return FALSE; 259 } else { 260 { 261 register u_long *genp; 262 263 for (i = 0, genp = objp->thread_list; 264 i < MAX_THRD_BRK; ++i) { 265 *genp++ = IXDR_GET_U_LONG(buf); 266 } 267 } 268 } 269 return TRUE; 270 } 271 272 if (!xdr_u_char (xdrs, &objp->type)) 273 return FALSE; 274 if (!xdr_u_char (xdrs, &objp->thread_spec)) 275 return FALSE; 276 if (!xdr_u_short (xdrs, &objp->handle)) 277 return FALSE; 278 if (!xdr_u_long (xdrs, &objp->ee_loc)) 279 return FALSE; 280 if (!xdr_u_long (xdrs, &objp->ee_type)) 281 return FALSE; 282 if (!xdr_u_short (xdrs, &objp->length)) 283 return FALSE; 284 if (!xdr_u_char (xdrs, &objp->pass_count)) 285 return FALSE; 286 if (!xdr_u_char (xdrs, &objp->curr_pass)) 287 return FALSE; 288 if (!xdr_vector (xdrs, (char *)objp->thread_list, MAX_THRD_BRK, 289 sizeof (u_long), (xdrproc_t) xdr_u_long)) 290 return FALSE; 291 return TRUE; 292 } 293 294 bool_t 295 xdr_thread_name (XDR *xdrs, thread_name *objp) 296 { 297 register int32_t *buf; 298 299 if (!xdr_string (xdrs, objp, THREADNAMEMAX)) 300 return FALSE; 301 return TRUE; 302 } 303 304 bool_t 305 xdr_KernThread (XDR *xdrs, KernThread *objp) 306 { 307 register int32_t *buf; 308 309 if (!xdr_u_int (xdrs, &objp->threadLi)) 310 return FALSE; 311 return TRUE; 312 } 313 bool_t xdr_thread_list(xdrs, objp) 314 XDR *xdrs; 315 struct thread_list *objp; 316 { 317 return (xdr_array(xdrs, (char**)&objp->threads, &objp->nbThread, 318 UTHREAD_MAX, sizeof(KernThread), xdr_KernThread)); 319 } 320 321 bool_t 322 xdr_ptrace_addr_data_in (XDR *xdrs, ptrace_addr_data_in *objp) 323 { 324 register int32_t *buf; 325 326 if (!xdr_ptracereq (xdrs, &objp->req)) 327 return FALSE; 328 switch (objp->req) { 329 case RPT_SETTHREADREGS: 330 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_in_u.regs)) 331 return FALSE; 332 break; 333 case RPT_SETREGS: 334 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_in_u.regs)) 335 return FALSE; 336 break; 337 case RPT_PSETTHREADREGS: 338 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, 339 sizeof (u_int), (xdrproc_t) xdr_u_int)) 340 return FALSE; 341 break; 342 case RPT_PSETREGS: 343 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, 344 sizeof (u_int), (xdrproc_t) xdr_u_int)) 345 return FALSE; 346 break; 347 case RPT_SETTHREADNAME: 348 if (!xdr_thread_name (xdrs, &objp->ptrace_addr_data_in_u.name)) 349 return FALSE; 350 break; 351 case RPT_WRITETEXT: 352 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_in_u.mem)) 353 return FALSE; 354 break; 355 case RPT_WRITEDATA: 356 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_in_u.mem)) 357 return FALSE; 358 break; 359 case RPT_SETBREAK: 360 if (!xdr_xdr_break (xdrs, &objp->ptrace_addr_data_in_u.breakp)) 361 return FALSE; 362 break; 363 default: 364 if (!xdr_u_int (xdrs, &objp->ptrace_addr_data_in_u.address)) 365 return FALSE; 366 break; 367 } 368 return TRUE; 369 } 370 371 bool_t 372 xdr_ptrace_addr_data_out (XDR *xdrs, ptrace_addr_data_out *objp) 373 { 374 register int32_t *buf; 375 376 if (!xdr_ptracereq (xdrs, &objp->req)) 377 return FALSE; 378 switch (objp->req) { 379 case RPT_GETREGS: 380 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_out_u.regs)) 381 return FALSE; 382 break; 383 case RPT_GETTHREADREGS: 384 if (!xdr_xdr_regs (xdrs, &objp->ptrace_addr_data_out_u.regs)) 385 return FALSE; 386 break; 387 case RPT_PGETREGS: 388 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, 389 sizeof (u_int), (xdrproc_t) xdr_u_int)) 390 return FALSE; 391 break; 392 case RPT_PGETTHREADREGS: 393 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, 394 sizeof (u_int), (xdrproc_t) xdr_u_int)) 395 return FALSE; 396 break; 397 case RPT_THREADLIST: 398 if (!xdr_thread_list (xdrs, &objp->ptrace_addr_data_out_u.threads)) 399 return FALSE; 400 break; 401 case RPT_GETTHREADNAME: 402 if (!xdr_thread_name (xdrs, &objp->ptrace_addr_data_out_u.name)) 403 return FALSE; 404 break; 405 case RPT_READTEXT: 406 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 407 return FALSE; 408 break; 409 case RPT_GETNAME: 410 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 411 return FALSE; 412 break; 413 case RPT_READDATA: 414 if (!xdr_xdr_mem (xdrs, &objp->ptrace_addr_data_out_u.mem)) 415 return FALSE; 416 break; 417 case RPT_GETBREAK: 418 if (!xdr_xdr_break (xdrs, &objp->ptrace_addr_data_out_u.breakp)) 419 return FALSE; 420 break; 421 default: 422 if (!xdr_u_int (xdrs, &objp->ptrace_addr_data_out_u.addr)) 423 return FALSE; 424 break; 425 } 426 return TRUE; 427 } 428 429 bool_t 430 xdr_CHAR_DATA (XDR *xdrs, CHAR_DATA *objp) 431 { 432 register int32_t *buf; 433 434 if (!xdr_bytes (xdrs, (char **)&objp->CHAR_DATA_val, (u_int *) &objp->CHAR_DATA_len, NET_SAFE)) 435 return FALSE; 436 return TRUE; 437 } 438 439 bool_t 440 xdr_one_arg (XDR *xdrs, one_arg *objp) 441 { 442 register int32_t *buf; 443 444 if (!xdr_string (xdrs, objp, NET_SAFE)) 445 return FALSE; 446 return TRUE; 447 } 448 /* now open_connex() routine which establishes a connection to server */ 449 450 bool_t 451 xdr_debug_type (XDR *xdrs, debug_type *objp) 452 { 453 register int32_t *buf; 454 455 if (!xdr_enum (xdrs, (enum_t *) objp)) 456 return FALSE; 457 return TRUE; 458 } 459 #define DEBUGGER_IS_GDB 0x2 /* */ 460 461 bool_t 462 xdr_open_in (XDR *xdrs, open_in *objp) 463 { 464 register int32_t *buf; 465 466 int i; 467 if (!xdr_vector (xdrs, (char *)objp->back_port, 16, 468 sizeof (u_char), (xdrproc_t) xdr_u_char)) 469 return FALSE; 470 if (!xdr_u_short (xdrs, &objp->debug_type)) 471 return FALSE; 472 if (!xdr_u_short (xdrs, &objp->flags)) 473 return FALSE; 474 if (!xdr_vector (xdrs, (char *)objp->destination, 16, 475 sizeof (u_char), (xdrproc_t) xdr_u_char)) 476 return FALSE; 477 if (!xdr_one_arg (xdrs, &objp->user_name)) 478 return FALSE; 479 return TRUE; 480 } 481 482 bool_t 483 xdr_open_out (XDR *xdrs, open_out *objp) 484 { 485 register int32_t *buf; 486 487 int i; 488 489 if (xdrs->x_op == XDR_ENCODE) { 490 buf = XDR_INLINE (xdrs, (2 + ( 4 )) * BYTES_PER_XDR_UNIT); 491 if (buf == NULL) { 492 if (!xdr_u_long (xdrs, &objp->port)) 493 return FALSE; 494 if (!xdr_vector (xdrs, (char *)objp->pad, 4, 495 sizeof (u_int), (xdrproc_t) xdr_u_int)) 496 return FALSE; 497 if (!xdr_u_int (xdrs, &objp->fp)) 498 return FALSE; 499 500 } else { 501 IXDR_PUT_U_LONG(buf, objp->port); 502 { 503 register u_int *genp; 504 505 for (i = 0, genp = objp->pad; 506 i < 4; ++i) { 507 IXDR_PUT_U_LONG(buf, *genp++); 508 } 509 } 510 IXDR_PUT_U_LONG(buf, objp->fp); 511 } 512 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 513 return FALSE; 514 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 515 return FALSE; 516 if (!xdr_u_short (xdrs, &objp->server_vers)) 517 return FALSE; 518 return TRUE; 519 } else if (xdrs->x_op == XDR_DECODE) { 520 buf = XDR_INLINE (xdrs, (2 + ( 4 )) * BYTES_PER_XDR_UNIT); 521 if (buf == NULL) { 522 if (!xdr_u_long (xdrs, &objp->port)) 523 return FALSE; 524 if (!xdr_vector (xdrs, (char *)objp->pad, 4, 525 sizeof (u_int), (xdrproc_t) xdr_u_int)) 526 return FALSE; 527 if (!xdr_u_int (xdrs, &objp->fp)) 528 return FALSE; 529 530 } else { 531 objp->port = IXDR_GET_U_LONG(buf); 532 { 533 register u_int *genp; 534 535 for (i = 0, genp = objp->pad; 536 i < 4; ++i) { 537 *genp++ = IXDR_GET_U_LONG(buf); 538 } 539 } 540 objp->fp = IXDR_GET_U_LONG(buf); 541 } 542 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 543 return FALSE; 544 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 545 return FALSE; 546 if (!xdr_u_short (xdrs, &objp->server_vers)) 547 return FALSE; 548 return TRUE; 549 } 550 551 if (!xdr_u_long (xdrs, &objp->port)) 552 return FALSE; 553 if (!xdr_vector (xdrs, (char *)objp->pad, 4, 554 sizeof (u_int), (xdrproc_t) xdr_u_int)) 555 return FALSE; 556 if (!xdr_u_int (xdrs, &objp->fp)) 557 return FALSE; 558 if (!xdr_u_char (xdrs, &objp->cmd_table_num)) 559 return FALSE; 560 if (!xdr_u_char (xdrs, &objp->cmd_table_vers)) 561 return FALSE; 562 if (!xdr_u_short (xdrs, &objp->server_vers)) 563 return FALSE; 564 return TRUE; 565 } 566 /* now close_connex() routine which detaches from server */ 567 568 bool_t 569 xdr_close_control (XDR *xdrs, close_control *objp) 570 { 571 register int32_t *buf; 572 573 if (!xdr_enum (xdrs, (enum_t *) objp)) 574 return FALSE; 575 return TRUE; 576 } 577 578 bool_t 579 xdr_close_in (XDR *xdrs, close_in *objp) 580 { 581 register int32_t *buf; 582 583 if (!xdr_close_control (xdrs, &objp->control)) 584 return FALSE; 585 return TRUE; 586 } 587 /* now send_signal() routine which sends signals to processes like kill(2) */ 588 589 bool_t 590 xdr_signal_in (XDR *xdrs, signal_in *objp) 591 { 592 register int32_t *buf; 593 594 if (!xdr_int (xdrs, &objp->pid)) 595 return FALSE; 596 if (!xdr_int (xdrs, &objp->sig)) 597 return FALSE; 598 return TRUE; 599 } 600 601 bool_t 602 xdr_signal_out (XDR *xdrs, signal_out *objp) 603 { 604 register int32_t *buf; 605 606 if (!xdr_int (xdrs, &objp->kill_return)) 607 return FALSE; 608 if (!xdr_int (xdrs, &objp->errNo)) 609 return FALSE; 610 return TRUE; 611 } 612 /* now wait_info() routine which returns results of polling the wait status 613 of a process/actor. It may return 0 if running, else pid or -1 */ 614 615 bool_t 616 xdr_stop_code (XDR *xdrs, stop_code *objp) 617 { 618 register int32_t *buf; 619 620 if (!xdr_enum (xdrs, (enum_t *) objp)) 621 return FALSE; 622 return TRUE; 623 } 624 625 bool_t 626 xdr_wait_in (XDR *xdrs, wait_in *objp) 627 { 628 register int32_t *buf; 629 630 if (!xdr_int (xdrs, &objp->pid)) 631 return FALSE; 632 return TRUE; 633 } 634 635 bool_t 636 xdr_wait_out (XDR *xdrs, wait_out *objp) 637 { 638 register int32_t *buf; 639 640 641 if (xdrs->x_op == XDR_ENCODE) { 642 buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); 643 if (buf == NULL) { 644 if (!xdr_int (xdrs, &objp->wait_return)) 645 return FALSE; 646 if (!xdr_int (xdrs, &objp->errNo)) 647 return FALSE; 648 if (!xdr_int (xdrs, &objp->status)) 649 return FALSE; 650 651 } else { 652 IXDR_PUT_LONG(buf, objp->wait_return); 653 IXDR_PUT_LONG(buf, objp->errNo); 654 IXDR_PUT_LONG(buf, objp->status); 655 } 656 if (!xdr_stop_code (xdrs, &objp->reason)) 657 return FALSE; 658 buf = XDR_INLINE (xdrs, 5 * BYTES_PER_XDR_UNIT); 659 if (buf == NULL) { 660 if (!xdr_int (xdrs, &objp->handle)) 661 return FALSE; 662 if (!xdr_u_long (xdrs, &objp->PC)) 663 return FALSE; 664 if (!xdr_u_long (xdrs, &objp->SP)) 665 return FALSE; 666 if (!xdr_u_long (xdrs, &objp->FP)) 667 return FALSE; 668 if (!xdr_u_long (xdrs, &objp->thread)) 669 return FALSE; 670 } else { 671 IXDR_PUT_LONG(buf, objp->handle); 672 IXDR_PUT_U_LONG(buf, objp->PC); 673 IXDR_PUT_U_LONG(buf, objp->SP); 674 IXDR_PUT_U_LONG(buf, objp->FP); 675 IXDR_PUT_U_LONG(buf, objp->thread); 676 } 677 return TRUE; 678 } else if (xdrs->x_op == XDR_DECODE) { 679 buf = XDR_INLINE (xdrs, 3 * BYTES_PER_XDR_UNIT); 680 if (buf == NULL) { 681 if (!xdr_int (xdrs, &objp->wait_return)) 682 return FALSE; 683 if (!xdr_int (xdrs, &objp->errNo)) 684 return FALSE; 685 if (!xdr_int (xdrs, &objp->status)) 686 return FALSE; 687 688 } else { 689 objp->wait_return = IXDR_GET_LONG(buf); 690 objp->errNo = IXDR_GET_LONG(buf); 691 objp->status = IXDR_GET_LONG(buf); 692 } 693 if (!xdr_stop_code (xdrs, &objp->reason)) 694 return FALSE; 695 buf = XDR_INLINE (xdrs, 5 * BYTES_PER_XDR_UNIT); 696 if (buf == NULL) { 697 if (!xdr_int (xdrs, &objp->handle)) 698 return FALSE; 699 if (!xdr_u_long (xdrs, &objp->PC)) 700 return FALSE; 701 if (!xdr_u_long (xdrs, &objp->SP)) 702 return FALSE; 703 if (!xdr_u_long (xdrs, &objp->FP)) 704 return FALSE; 705 if (!xdr_u_long (xdrs, &objp->thread)) 706 return FALSE; 707 } else { 708 objp->handle = IXDR_GET_LONG(buf); 709 objp->PC = IXDR_GET_U_LONG(buf); 710 objp->SP = IXDR_GET_U_LONG(buf); 711 objp->FP = IXDR_GET_U_LONG(buf); 712 objp->thread = IXDR_GET_U_LONG(buf); 713 } 714 return TRUE; 715 } 716 717 if (!xdr_int (xdrs, &objp->wait_return)) 718 return FALSE; 719 if (!xdr_int (xdrs, &objp->errNo)) 720 return FALSE; 721 if (!xdr_int (xdrs, &objp->status)) 722 return FALSE; 723 if (!xdr_stop_code (xdrs, &objp->reason)) 724 return FALSE; 725 if (!xdr_int (xdrs, &objp->handle)) 726 return FALSE; 727 if (!xdr_u_long (xdrs, &objp->PC)) 728 return FALSE; 729 if (!xdr_u_long (xdrs, &objp->SP)) 730 return FALSE; 731 if (!xdr_u_long (xdrs, &objp->FP)) 732 return FALSE; 733 if (!xdr_u_long (xdrs, &objp->thread)) 734 return FALSE; 735 return TRUE; 736 } 737 /* now ptrace() routine. This matches the Sun UNIX ptrace as well as 738 some additions */ 739 740 bool_t 741 xdr_ptrace_in (XDR *xdrs, ptrace_in *objp) 742 { 743 register int32_t *buf; 744 745 if (!xdr_int (xdrs, &objp->pid)) 746 return FALSE; 747 if (!xdr_ptrace_addr_data_in (xdrs, &objp->addr)) 748 return FALSE; 749 if (!xdr_u_int (xdrs, &objp->data)) 750 return FALSE; 751 if (!xdr_u_int (xdrs, &objp->flags)) 752 return FALSE; 753 return TRUE; 754 } 755 756 bool_t 757 xdr_ptrace_out (XDR *xdrs, ptrace_out *objp) 758 { 759 register int32_t *buf; 760 761 if (!xdr_ptrace_addr_data_out (xdrs, &objp->addr)) 762 return FALSE; 763 if (!xdr_int (xdrs, &objp->result)) 764 return FALSE; 765 if (!xdr_int (xdrs, &objp->errNo)) 766 return FALSE; 767 return TRUE; 768 } 769 770 bool_t 771 xdr_one_symbol (XDR *xdrs, one_symbol *objp) 772 { 773 register int32_t *buf; 774 775 if (!xdr_string (xdrs, &objp->symbolName, ~0)) 776 return FALSE; 777 if (!xdr_long (xdrs, &objp->symbolValue)) 778 return FALSE; 779 return TRUE; 780 } 781 782 bool_t 783 xdr_all_symbols (XDR *xdrs, all_symbols *objp) 784 { 785 register int32_t *buf; 786 787 if (!xdr_array (xdrs, (char **)&objp->all_symbols_val, (u_int *) &objp->all_symbols_len, ~0, 788 sizeof (one_symbol), (xdrproc_t) xdr_one_symbol)) 789 return FALSE; 790 return TRUE; 791 } 792 793 bool_t 794 xdr_get_global_symbols_out (XDR *xdrs, get_global_symbols_out *objp) 795 { 796 register int32_t *buf; 797 798 if (!xdr_all_symbols (xdrs, &objp->symbols)) 799 return FALSE; 800 return TRUE; 801 } 802 803 bool_t 804 xdr_get_text_data_in (XDR *xdrs, get_text_data_in *objp) 805 { 806 register int32_t *buf; 807 808 if (!xdr_int (xdrs, &objp->pid)) 809 return FALSE; 810 if (!xdr_string (xdrs, &objp->actorName, 16)) 811 return FALSE; 812 return TRUE; 813 } 814 815 bool_t 816 xdr_get_text_data_out (XDR *xdrs, get_text_data_out *objp) 817 { 818 register int32_t *buf; 819 820 821 if (xdrs->x_op == XDR_ENCODE) { 822 buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT); 823 if (buf == NULL) { 824 if (!xdr_int (xdrs, &objp->result)) 825 return FALSE; 826 if (!xdr_int (xdrs, &objp->errNo)) 827 return FALSE; 828 if (!xdr_u_long (xdrs, &objp->textStart)) 829 return FALSE; 830 if (!xdr_u_long (xdrs, &objp->textSize)) 831 return FALSE; 832 if (!xdr_u_long (xdrs, &objp->dataStart)) 833 return FALSE; 834 if (!xdr_u_long (xdrs, &objp->dataSize)) 835 return FALSE; 836 } else { 837 IXDR_PUT_LONG(buf, objp->result); 838 IXDR_PUT_LONG(buf, objp->errNo); 839 IXDR_PUT_U_LONG(buf, objp->textStart); 840 IXDR_PUT_U_LONG(buf, objp->textSize); 841 IXDR_PUT_U_LONG(buf, objp->dataStart); 842 IXDR_PUT_U_LONG(buf, objp->dataSize); 843 } 844 return TRUE; 845 } else if (xdrs->x_op == XDR_DECODE) { 846 buf = XDR_INLINE (xdrs, 6 * BYTES_PER_XDR_UNIT); 847 if (buf == NULL) { 848 if (!xdr_int (xdrs, &objp->result)) 849 return FALSE; 850 if (!xdr_int (xdrs, &objp->errNo)) 851 return FALSE; 852 if (!xdr_u_long (xdrs, &objp->textStart)) 853 return FALSE; 854 if (!xdr_u_long (xdrs, &objp->textSize)) 855 return FALSE; 856 if (!xdr_u_long (xdrs, &objp->dataStart)) 857 return FALSE; 858 if (!xdr_u_long (xdrs, &objp->dataSize)) 859 return FALSE; 860 } else { 861 objp->result = IXDR_GET_LONG(buf); 862 objp->errNo = IXDR_GET_LONG(buf); 863 objp->textStart = IXDR_GET_U_LONG(buf); 864 objp->textSize = IXDR_GET_U_LONG(buf); 865 objp->dataStart = IXDR_GET_U_LONG(buf); 866 objp->dataSize = IXDR_GET_U_LONG(buf); 867 } 868 return TRUE; 869 } 870 871 if (!xdr_int (xdrs, &objp->result)) 872 return FALSE; 873 if (!xdr_int (xdrs, &objp->errNo)) 874 return FALSE; 875 if (!xdr_u_long (xdrs, &objp->textStart)) 876 return FALSE; 877 if (!xdr_u_long (xdrs, &objp->textSize)) 878 return FALSE; 879 if (!xdr_u_long (xdrs, &objp->dataStart)) 880 return FALSE; 881 if (!xdr_u_long (xdrs, &objp->dataSize)) 882 return FALSE; 883 return TRUE; 884 } 885 886 bool_t 887 xdr_one_signal (XDR *xdrs, one_signal *objp) 888 { 889 register int32_t *buf; 890 891 if (!xdr_u_int (xdrs, &objp->number)) 892 return FALSE; 893 if (!xdr_string (xdrs, &objp->name, ~0)) 894 return FALSE; 895 return TRUE; 896 } 897 898 bool_t 899 xdr_all_signals (XDR *xdrs, all_signals *objp) 900 { 901 register int32_t *buf; 902 903 if (!xdr_array (xdrs, (char **)&objp->all_signals_val, (u_int *) &objp->all_signals_len, ~0, 904 sizeof (one_signal), (xdrproc_t) xdr_one_signal)) 905 return FALSE; 906 return TRUE; 907 } 908 909 bool_t 910 xdr_get_signal_names_out (XDR *xdrs, get_signal_names_out *objp) 911 { 912 register int32_t *buf; 913 914 if (!xdr_all_signals (xdrs, &objp->signals)) 915 return FALSE; 916 return TRUE; 917 } 918 /* now define the actual calls we support */ -
c/src/librdbg/src/powerpc/new_exception_processing/remdeb.h
rbdb86b4 r97f6256 17 17 #define RTEMS_BACK_PORT 2073 18 18 #ifndef REMDEB_H 19 #define RPCGENSRVNAME(a) 19 #define RPCGENSRVNAME(a) a 20 20 21 21 enum rpc_type { … … 100 100 /* now define register macros to apply to xdr_regs struct */ 101 101 102 #define R_PC 103 #define R_MSR 104 #define R_EXCEPNB 105 #define R_R0 106 #define R_R1 (R_R0 + 1)107 #define R_R2 108 #define R_R3 109 #define R_R4 110 #define R_R5 111 #define R_R6 112 #define R_R7 113 #define R_R8 114 #define R_R9 115 #define R_R10 116 #define R_R11 117 #define R_R12 118 #define R_R13 119 #define R_R14 120 #define R_R15 121 #define R_R16 122 #define R_R17 123 #define R_R18 124 #define R_R19 125 #define R_R20 126 #define R_R21 127 #define R_R22 128 #define R_R23 129 #define R_R24 130 #define R_R25 131 #define R_R26 132 #define R_R27 133 #define R_R28 134 #define R_R29 135 #define R_R30 136 #define R_R31 137 #define R_CR 138 #define R_CTR 139 #define R_XER 140 #define R_LR 141 #define R_MQ 102 #define R_PC 0 103 #define R_MSR 1 104 #define R_EXCEPNB 2 105 #define R_R0 3 106 #define R_R1 (R_R0 + 1) 107 #define R_R2 (R_R0 + 2) 108 #define R_R3 (R_R0 + 3) 109 #define R_R4 (R_R0 + 4) 110 #define R_R5 (R_R0 + 5) 111 #define R_R6 (R_R0 + 6) 112 #define R_R7 (R_R0 + 7) 113 #define R_R8 (R_R0 + 8) 114 #define R_R9 (R_R0 + 9) 115 #define R_R10 (R_R0 + 10) 116 #define R_R11 (R_R0 + 11) 117 #define R_R12 (R_R0 + 12) 118 #define R_R13 (R_R0 + 13) 119 #define R_R14 (R_R0 + 14) 120 #define R_R15 (R_R0 + 15) 121 #define R_R16 (R_R0 + 16) 122 #define R_R17 (R_R0 + 17) 123 #define R_R18 (R_R0 + 18) 124 #define R_R19 (R_R0 + 19) 125 #define R_R20 (R_R0 + 20) 126 #define R_R21 (R_R0 + 21) 127 #define R_R22 (R_R0 + 22) 128 #define R_R23 (R_R0 + 23) 129 #define R_R24 (R_R0 + 24) 130 #define R_R25 (R_R0 + 25) 131 #define R_R26 (R_R0 + 26) 132 #define R_R27 (R_R0 + 27) 133 #define R_R28 (R_R0 + 28) 134 #define R_R29 (R_R0 + 29) 135 #define R_R30 (R_R0 + 30) 136 #define R_R31 (R_R0 + 31) 137 #define R_CR 35 138 #define R_CTR 36 139 #define R_XER 37 140 #define R_LR 38 141 #define R_MQ 39 142 142 143 143 #include <libcpu/raw_exception.h> 144 144 145 #define REG_PC tabreg[R_PC] 146 #define REG_SP tabreg[R_R1] 147 #define REG_FP tabreg[R_R1] 148 #define BREAK_SIZE 4/* Breakpoint occupies 4 bytes */149 #define BREAK_ADJ 0/* Nothing to subtract from address after bp */150 #define IS_BREAK(l) 151 #define SET_BREAK(l) 145 #define REG_PC tabreg[R_PC] /* PC register offset */ 146 #define REG_SP tabreg[R_R1] /* SP register offset */ 147 #define REG_FP tabreg[R_R1] /* SP register offset (no FP on PPC) */ 148 #define BREAK_SIZE 4 /* Breakpoint occupies 4 bytes */ 149 #define BREAK_ADJ 0 /* Nothing to subtract from address after bp */ 150 #define IS_BREAK(l) ((l) == 0x7d8d6808) 151 #define SET_BREAK(l) (0x7d8d6808) 152 152 #define ORG_BREAK(c,p) (p) 153 #define IS_STEP(regs) 154 #define TARGET_PROC_TYPE 153 #define IS_STEP(regs) (regs.tabreg[R_EXCEPNB] == ASM_TRACE_VECTOR) /* Was step and not break */ 154 #define TARGET_PROC_TYPE 3 155 155 #define MAXDEBUGGEE 150 156 156 #define NAMEMAX 17 157 157 /* 158 158 * Memory data for read/write text or data. The size is in data. The target 159 159 * addr is in the addr field. … … 253 253 254 254 typedef char *one_arg; 255 255 /* now open_connex() routine which establishes a connection to server */ 256 256 257 257 enum debug_type { … … 262 262 }; 263 263 typedef enum debug_type debug_type; 264 #define DEBUGGER_IS_GDB 0x2 264 #define DEBUGGER_IS_GDB 0x2 /* */ 265 265 266 266 struct open_in { … … 282 282 }; 283 283 typedef struct open_out open_out; 284 284 /* now close_connex() routine which detaches from server */ 285 285 286 286 enum close_control { … … 295 295 }; 296 296 typedef struct close_in close_in; 297 297 /* now send_signal() routine which sends signals to processes like kill(2) */ 298 298 299 299 struct signal_in { … … 308 308 }; 309 309 typedef struct signal_out signal_out; 310 310 /* now wait_info() routine which returns results of polling the wait status 311 311 of a process/actor. It may return 0 if running, else pid or -1 */ 312 312 … … 343 343 }; 344 344 typedef struct wait_out wait_out; 345 346 some additions */ 345 /* now ptrace() routine. This matches the Sun UNIX ptrace as well as 346 some additions */ 347 347 #define PTRFLG_FORCE 1 348 348 #define PTRFLG_NON_OWNER 2 … … 412 412 }; 413 413 typedef struct get_signal_names_out get_signal_names_out; 414 414 /* now define the actual calls we support */ 415 415 #define REMDEB_H 416 416 #endif -
c/src/librdbg/src/powerpc/new_exception_processing/remdeb_svc.c
rbdb86b4 r97f6256 1 #include <rpc/types.h>2 #include <rpc/rpc.h>3 #include <stdio.h>4 #include <stdlib.h>5 #include <string.h>6 #include <bsp.h>7 #include <rdbg/servrpc.h>8 #include <rdbg/remdeb.h>9 #define printf(c)10 /*HEADER_START*/11 #define RTEMS_PORT 207112 #define RTEMS_BACK_PORT 207313 /*14 * Sun request values for the remote ptrace system call15 */16 17 /*18 * Memory data for read/write text or data. The size is in data. The target19 * addr is in the addr field.20 * Be careful before modifying because this value goes into internal21 * pipes and is allocated on stack too. Pipes and/or the stack could22 * become too small if this value gets incremented.23 */24 /* now open_connex() routine which establishes a connection to server */25 #define DEBUGGER_IS_GDB 0x2 /* */26 /* now close_connex() routine which detaches from server */27 /* now send_signal() routine which sends signals to processes like kill(2) */28 /* now wait_info() routine which returns results of polling the wait status29 of a process/actor. It may return 0 if running, else pid or -1 */30 /* now ptrace() routine. This matches the Sun UNIX ptrace as well as31 some additions */32 /* now define the actual calls we support */33 const char* names [] = {34 "NULLPROC", "OPEN_CONNEX", "SEND_SIGNAL", "name3",35 "name4", "name5", "name6", "name7",36 "name8", "name9", "CLOSE_CONNEX", "PTRACE",37 "name12", "WAIT_INFO", "name14", "name15",38 "name16", "GET_SIGNAL_NAMES", "name18"39 };40 41 void42 remotedeb_2(struct svc_req *rqstp, register SVCXPRT *transp)43 {44 union {45 open_in open_connex_2_arg;46 signal_in send_signal_2_arg;47 close_in close_connex_2_arg;48 ptrace_in ptrace_2_arg;49 wait_in wait_info_2_arg;50 } argument;51 char *result;52 xdrproc_t _xdr_argument, _xdr_result;53 char *(*local)(char *, struct svc_req *);54 55 DPRINTF (("remotedeb_2: %s (%d)\n",56 (unsigned) rqstp->rq_proc <57 (unsigned) (sizeof names / sizeof names[0]) ?58 names [rqstp->rq_proc] : "???",59 (int) rqstp->rq_proc));60 61 switch (rqstp->rq_proc) {62 case NULLPROC:63 (void) svc_sendreply (transp, (xdrproc_t) xdr_void, (char *)NULL);64 return;65 66 case OPEN_CONNEX:67 _xdr_argument = (xdrproc_t) xdr_open_in;68 _xdr_result = (xdrproc_t) xdr_open_out;69 local = (char *(*)(char *, struct svc_req *)) open_connex_2_svc;70 break;71 72 case SEND_SIGNAL:73 _xdr_argument = (xdrproc_t) xdr_signal_in;74 _xdr_result = (xdrproc_t) xdr_signal_out;75 local = (char *(*)(char *, struct svc_req *)) send_signal_2_svc;76 break;77 78 case CLOSE_CONNEX:79 _xdr_argument = (xdrproc_t) xdr_close_in;80 _xdr_result = (xdrproc_t) xdr_void;81 local = (char *(*)(char *, struct svc_req *)) close_connex_2_svc;82 break;83 84 case PTRACE:85 _xdr_argument = (xdrproc_t) xdr_ptrace_in;86 _xdr_result = (xdrproc_t) xdr_ptrace_out;87 local = (char *(*)(char *, struct svc_req *)) ptrace_2_svc;88 break;89 90 case WAIT_INFO:91 _xdr_argument = (xdrproc_t) xdr_wait_in;92 _xdr_result = (xdrproc_t) xdr_wait_out;93 local = (char *(*)(char *, struct svc_req *)) wait_info_2_svc;94 break;95 96 case GET_SIGNAL_NAMES:97 _xdr_argument = (xdrproc_t) xdr_void;98 _xdr_result = (xdrproc_t) xdr_get_signal_names_out;99 local = (char *(*)(char *, struct svc_req *)) get_signal_names_2_svc;100 break;101 102 default:103 svcerr_noproc (transp);104 return;105 }106 memset ((char *)&argument, 0, sizeof (argument));107 if (!svc_getargs (transp, _xdr_argument, (caddr_t) &argument)) {108 svcerr_decode (transp);109 return;110 }111 result = (*local)((char *)&argument, rqstp);112 if (result != NULL && !svc_sendreply(transp, _xdr_result, result)) {113 svcerr_systemerr (transp);114 }115 if (!svc_freeargs (transp, _xdr_argument, (caddr_t) &argument)) {116 printf( "unable to free arguments");117 exit (1);118 }119 return;120 } -
c/src/librdbg/src/powerpc/new_exception_processing/remdeb_xdr.c
rbdb86b4 r97f6256 98 98 return TRUE; 99 99 } 100 100 /* 101 101 * Memory data for read/write text or data. The size is in data. The target