If at first the network screws you over, try, try again...
This commit is contained in:
parent
41ea717598
commit
afc5505f00
1 changed files with 47 additions and 70 deletions
|
@ -45,6 +45,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||
#include "vx-share/xdr_ld.h"
|
||||
#include "vx-share/xdr_rdb.h"
|
||||
#include "vx-share/dbgRpcLib.h"
|
||||
#include "vx-share/reg.h"
|
||||
|
||||
#include <symtab.h>
|
||||
|
||||
|
@ -85,7 +86,7 @@ static char *find_white_space ();
|
|||
|
||||
/* Tell the VxWorks target system to download a file.
|
||||
The load addresses of the text, data, and bss segments are
|
||||
stored in pTextAddr, pDataAddr, and *pBssAddr (respectively).
|
||||
stored in *pTextAddr, *pDataAddr, and *pBssAddr (respectively).
|
||||
Returns 0 for success, -1 for failure. */
|
||||
|
||||
static int
|
||||
|
@ -118,7 +119,7 @@ net_load (filename, pTextAddr, pDataAddr, pBssAddr)
|
|||
|
||||
if (status == RPC_SUCCESS)
|
||||
{
|
||||
if (*ldstruct.name == NULL) /* load failed on VxWorks side */
|
||||
if (*ldstruct.name == 0) /* load failed on VxWorks side */
|
||||
return -1;
|
||||
*pTextAddr = ldstruct.txt_addr;
|
||||
*pDataAddr = ldstruct.data_addr;
|
||||
|
@ -384,7 +385,11 @@ vx_read_register (regno)
|
|||
|
||||
ptrace_in.pid = inferior_pid;
|
||||
ptrace_out.info.more_data = (caddr_t) &out_data;
|
||||
#ifndef I80960
|
||||
out_data.len = 18 * REGISTER_RAW_SIZE (0); /* FIXME 68k hack */
|
||||
#else
|
||||
out_data.len = (16 + 16 + 3) * REGISTER_RAW_SIZE (0);
|
||||
#endif
|
||||
out_data.bytes = (caddr_t) registers;
|
||||
|
||||
status = net_ptrace_clnt_call (PTRACE_GETREGS, &ptrace_in, &ptrace_out);
|
||||
|
@ -398,32 +403,22 @@ vx_read_register (regno)
|
|||
|
||||
#ifdef I80960
|
||||
|
||||
bcopy ((char *) inferior_registers.r_lreg,
|
||||
®isters[REGISTER_BYTE (R0_REGNUM)], 16 * sizeof (int));
|
||||
bcopy ((char *) inferior_registers.r_greg,
|
||||
®isters[REGISTER_BYTE (G0_REGNUM)], 16 * sizeof (int));
|
||||
|
||||
/* Don't assume that a location in registers[] is properly aligned. */
|
||||
|
||||
bcopy ((char *) &inferior_registers.r_pcw,
|
||||
®isters[REGISTER_BYTE (PCW_REGNUM)], sizeof (int));
|
||||
bcopy ((char *) &inferior_registers.r_acw,
|
||||
®isters[REGISTER_BYTE (ACW_REGNUM)], sizeof (int));
|
||||
bcopy ((char *) &inferior_registers.r_lreg[2], /* r2 (RIP) -> IP */
|
||||
®isters[REGISTER_BYTE (IP_REGNUM)], sizeof (int));
|
||||
bcopy ((char *) &inferior_registers.r_tcw,
|
||||
®isters[REGISTER_BYTE (TCW_REGNUM)], sizeof (int));
|
||||
|
||||
{
|
||||
/* If the target has floating point registers, fetch them.
|
||||
Otherwise, zero the floating point register values in
|
||||
registers[] for good measure, even though we might not
|
||||
need to. */
|
||||
/* @@ Can't use this -- the rdb library for the 960 target
|
||||
doesn't support setting or retrieving FP regs. KR */
|
||||
#if 0
|
||||
struct fp_status inferior_fp_registers;
|
||||
|
||||
if (target_has_fp)
|
||||
{
|
||||
ptrace_in.pid = inferior_pid;
|
||||
ptrace_out.info.more_data = (caddr_t) &inferior_fp_registers;
|
||||
status = net_ptrace_clnt_call (PTRACE_GETFPREGS, &ptrace_in, &ptrace_out);
|
||||
status = net_ptrace_clnt_call (PTRACE_GETFPREGS,
|
||||
&ptrace_in, &ptrace_out);
|
||||
if (status)
|
||||
error (rpcerr);
|
||||
if (ptrace_out.status == -1)
|
||||
|
@ -440,7 +435,8 @@ vx_read_register (regno)
|
|||
bzero ((char *) ®isters[REGISTER_BYTE (FP0_REGNUM)],
|
||||
REGISTER_RAW_SIZE (FP0_REGNUM) * 4);
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
#else /* not 960, thus must be 68000: FIXME! */
|
||||
|
||||
if (target_has_fp)
|
||||
|
@ -507,20 +503,7 @@ vx_write_register (regno)
|
|||
|
||||
#ifdef I80960
|
||||
|
||||
/* FIXME */
|
||||
bcopy (®isters[REGISTER_BYTE (R0_REGNUM)],
|
||||
(char *) inferior_registers.r_lreg, 16 * sizeof (int));
|
||||
bcopy (®isters[REGISTER_BYTE (G0_REGNUM)],
|
||||
(char *) inferior_registers.r_greg, 16 * sizeof (int));
|
||||
|
||||
/* Don't assume that a location in registers[] is properly aligned. */
|
||||
|
||||
bcopy (®isters[REGISTER_BYTE (PCW_REGNUM)],
|
||||
(char *) &inferior_registers.r_pcw, sizeof (int));
|
||||
bcopy (®isters[REGISTER_BYTE (ACW_REGNUM)],
|
||||
(char *) &inferior_registers.r_acw, sizeof (int));
|
||||
bcopy (®isters[REGISTER_BYTE (TCW_REGNUM)],
|
||||
(char *) &inferior_registers.r_tcw, sizeof (int));
|
||||
in_data.len = (16 + 16 + 3) * sizeof (REGISTER_TYPE);
|
||||
|
||||
#else /* not 960 -- assume 68k -- FIXME */
|
||||
|
||||
|
@ -548,10 +531,10 @@ vx_write_register (regno)
|
|||
|
||||
|
||||
#ifdef I80960
|
||||
|
||||
bcopy (®isters[REGISTER_BYTE (FP0_REGNUM)], &inferior_fp_registers,
|
||||
sizeof inferior_fp_registers.fps_regs);
|
||||
|
||||
#if 0 /* @@ Not supported by target. */
|
||||
in_data.bytes = ®isters[REGISTER_BYTE (FP0_REGNUM)];
|
||||
in_data.len = 4 * REGISTER_RAW_SIZE (FP0_REGNUM);
|
||||
#endif
|
||||
#else /* not 960 -- assume 68k -- FIXME */
|
||||
|
||||
in_data.bytes = ®isters[REGISTER_BYTE (FP0_REGNUM)];
|
||||
|
@ -1252,18 +1235,12 @@ vx_detach (args, from_tty)
|
|||
/* vx_kill -- takes a running task and wipes it out. */
|
||||
|
||||
static void
|
||||
vx_kill (args, from_tty)
|
||||
char *args;
|
||||
int from_tty;
|
||||
vx_kill ()
|
||||
{
|
||||
Rptrace ptrace_in;
|
||||
Ptrace_return ptrace_out;
|
||||
int status;
|
||||
|
||||
if (args)
|
||||
error ("Argument given to VxWorks \"kill\".");
|
||||
|
||||
if (from_tty)
|
||||
printf ("Killing pid %s.\n", local_hex_string(inferior_pid));
|
||||
|
||||
bzero ((char *)&ptrace_in, sizeof (ptrace_in));
|
||||
|
|
Loading…
Add table
Reference in a new issue