From: Nathan Sidwell <nathan@codesourcery.com>
To: gdb-patches@sources.redhat.com
Cc: Paul Brook <paul@codesourcery.com>
Subject: [PATCH] remote protocol cleanups
Date: Wed, 09 Feb 2005 14:19:00 -0000 [thread overview]
Message-ID: <4209F9CE.4030405@codesourcery.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 845 bytes --]
Hi,
This patch fixes a couple of problems with the remote protcol handling
1) remote_fetch_registers checks to see things have not got out of
sync, but it does not deal with upper case hex characters and so can get
confused
2) remote_write_bytes attempts to honour get_memory_write_packet_size's
limit, but fails in two ways when that is a very small number. a) it can
end up with a negative byte count. b) it deducts the number of chars in
the *maximal* length count, not the number of chars in the actual length
count. This can result in packets sending 1 or 2 bytes fewer than they
are limited to.
built & tested on i686-pc-linux-gnu and an unreleased architecture. ok?
nathan
--
Nathan Sidwell :: http://www.codesourcery.com :: CodeSourcery LLC
nathan@codesourcery.com :: http://www.planetfall.pwp.blueyonder.co.uk
[-- Attachment #2: remote.patch --]
[-- Type: text/plain, Size: 2405 bytes --]
2005-02-09 Nathan Sidwell <nathan@codesourcery.com>
* remote.c (remote_fetch_registers): Allow uppercase hex when
resyncing.
(remote_write_bytes): Robustify packet size calculation for very
small packets.
Index: remote.c
===================================================================
RCS file: /cvs/src/src/gdb/remote.c,v
retrieving revision 1.163
diff -c -3 -p -r1.163 remote.c
*** remote.c 19 Jan 2005 21:15:44 -0000 1.163
--- remote.c 9 Feb 2005 11:09:39 -0000
*************** remote_fetch_registers (int regnum)
*** 3307,3312 ****
--- 3307,3313 ----
in the buffer is not a hex character, assume that has happened
and try to fetch another packet to read. */
while ((buf[0] < '0' || buf[0] > '9')
+ && (buf[0] < 'A' || buf[0] > 'F')
&& (buf[0] < 'a' || buf[0] > 'f')
&& buf[0] != 'x') /* New: unavailable register value. */
{
*************** remote_write_bytes (CORE_ADDR memaddr, c
*** 3640,3649 ****
buf = alloca (sizeof_buf);
/* Compute the size of the actual payload by subtracting out the
! packet header and footer overhead: "$M<memaddr>,<len>:...#nn". */
! payload_size = (get_memory_write_packet_size () - (strlen ("$M,:#NN")
! + hexnumlen (memaddr)
! + hexnumlen (len)));
/* Construct the packet header: "[MX]<memaddr>,<len>:". */
--- 3641,3651 ----
buf = alloca (sizeof_buf);
/* Compute the size of the actual payload by subtracting out the
! packet header and footer overhead: "$M<memaddr>,<len>:...#nn".
! */
! payload_size = get_memory_write_packet_size ();
! payload_size -= strlen ("$M,:#NN");
! payload_size -= hexnumlen (memaddr);
/* Construct the packet header: "[MX]<memaddr>,<len>:". */
*************** remote_write_bytes (CORE_ADDR memaddr, c
*** 3656,3666 ****
--- 3658,3673 ----
*p++ = 'X';
/* Best guess at number of bytes that will fit. */
todo = min (len, payload_size);
+ payload_size -= hexnumlen (todo);
+ todo = min (todo, payload_size);
break;
case PACKET_DISABLE:
*p++ = 'M';
/* Num bytes that will fit. */
todo = min (len, payload_size / 2);
+ payload_size -= hexnumlen (todo);
+ todo = min (todo, payload_size / 2);
+ todo = max (todo, 1);
break;
case PACKET_SUPPORT_UNKNOWN:
internal_error (__FILE__, __LINE__,
next reply other threads:[~2005-02-09 11:54 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-09 14:19 Nathan Sidwell [this message]
2005-03-07 22:45 ` Daniel Jacobowitz
2005-03-08 11:09 ` Nathan Sidwell
2005-03-08 13:37 ` Daniel Jacobowitz
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4209F9CE.4030405@codesourcery.com \
--to=nathan@codesourcery.com \
--cc=gdb-patches@sources.redhat.com \
--cc=paul@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox