* remote.c (remote_write_bytes): Chop up large transfers.
This commit is contained in:
parent
8513c9536d
commit
ec10503a73
|
@ -1,3 +1,7 @@
|
||||||
|
Tue Aug 15 07:51:21 1995 steve chamberlain <sac@slash.cygnus.com>
|
||||||
|
|
||||||
|
* remote.c (remote_write_bytes): Chop up large transfers.
|
||||||
|
|
||||||
Mon Aug 14 17:56:36 1995 Stan Shebs <shebs@andros.cygnus.com>
|
Mon Aug 14 17:56:36 1995 Stan Shebs <shebs@andros.cygnus.com>
|
||||||
|
|
||||||
* gcc.patch: Remove, relevant only to long-ago versions of GCC.
|
* gcc.patch: Remove, relevant only to long-ago versions of GCC.
|
||||||
|
|
60
gdb/remote.c
60
gdb/remote.c
|
@ -135,8 +135,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
running and the debugger should
|
running and the debugger should
|
||||||
continue to wait for 'W', 'T', etc.
|
continue to wait for 'W', 'T', etc.
|
||||||
|
|
||||||
or... Otext Send text to stdout.
|
|
||||||
|
|
||||||
thread alive TXX Find out if the thread XX is alive.
|
thread alive TXX Find out if the thread XX is alive.
|
||||||
reply OK thread is still alive
|
reply OK thread is still alive
|
||||||
ENN thread is dead
|
ENN thread is dead
|
||||||
|
@ -1054,33 +1052,45 @@ remote_write_bytes (memaddr, myaddr, len)
|
||||||
char buf[PBUFSIZ];
|
char buf[PBUFSIZ];
|
||||||
int i;
|
int i;
|
||||||
char *p;
|
char *p;
|
||||||
|
int done;
|
||||||
|
/* Chop the transfer down if necessary */
|
||||||
|
|
||||||
/* FIXME-32x64: Need a version of print_address_numeric which puts the
|
done = 0;
|
||||||
result in a buffer like sprintf. */
|
while (done < len)
|
||||||
sprintf (buf, "M%lx,%x:", (unsigned long) memaddr, len);
|
|
||||||
|
|
||||||
/* We send target system values byte by byte, in increasing byte addresses,
|
|
||||||
each byte encoded as two hex characters. */
|
|
||||||
|
|
||||||
p = buf + strlen (buf);
|
|
||||||
for (i = 0; i < len; i++)
|
|
||||||
{
|
{
|
||||||
*p++ = tohex ((myaddr[i] >> 4) & 0xf);
|
int todo = len - done;
|
||||||
*p++ = tohex (myaddr[i] & 0xf);
|
int cando = PBUFSIZ /2 - 32; /* number of bytes that will fit. */
|
||||||
}
|
if (todo > cando)
|
||||||
*p = '\0';
|
todo = cando;
|
||||||
|
|
||||||
putpkt (buf);
|
/* FIXME-32x64: Need a version of print_address_numeric which puts the
|
||||||
getpkt (buf, 0);
|
result in a buffer like sprintf. */
|
||||||
|
sprintf (buf, "M%lx,%x:", (unsigned long) memaddr + done, todo);
|
||||||
|
|
||||||
if (buf[0] == 'E')
|
/* We send target system values byte by byte, in increasing byte addresses,
|
||||||
{
|
each byte encoded as two hex characters. */
|
||||||
/* There is no correspondance between what the remote protocol uses
|
|
||||||
for errors and errno codes. We would like a cleaner way of
|
p = buf + strlen (buf);
|
||||||
representing errors (big enough to include errno codes, bfd_error
|
for (i = 0; i < todo; i++)
|
||||||
codes, and others). But for now just return EIO. */
|
{
|
||||||
errno = EIO;
|
*p++ = tohex ((myaddr[i + done] >> 4) & 0xf);
|
||||||
return 0;
|
*p++ = tohex (myaddr[i + done] & 0xf);
|
||||||
|
}
|
||||||
|
*p = '\0';
|
||||||
|
|
||||||
|
putpkt (buf);
|
||||||
|
getpkt (buf, 0);
|
||||||
|
|
||||||
|
if (buf[0] == 'E')
|
||||||
|
{
|
||||||
|
/* There is no correspondance between what the remote protocol uses
|
||||||
|
for errors and errno codes. We would like a cleaner way of
|
||||||
|
representing errors (big enough to include errno codes, bfd_error
|
||||||
|
codes, and others). But for now just return EIO. */
|
||||||
|
errno = EIO;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
done += todo;
|
||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue