Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [PATCH] remote protocol cleanups
@ 2005-02-09 14:19 Nathan Sidwell
  2005-03-07 22:45 ` Daniel Jacobowitz
  0 siblings, 1 reply; 4+ messages in thread
From: Nathan Sidwell @ 2005-02-09 14:19 UTC (permalink / raw)
  To: gdb-patches; +Cc: Paul Brook

[-- 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__,

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-03-08 13:37 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-02-09 14:19 [PATCH] remote protocol cleanups Nathan Sidwell
2005-03-07 22:45 ` Daniel Jacobowitz
2005-03-08 11:09   ` Nathan Sidwell
2005-03-08 13:37     ` Daniel Jacobowitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox