This is the mail archive of the gdb-patches@sourceware.cygnus.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[PATCH] update: minor fixes in remote.c


Hi,

Here is an update of my previous patch + some explanations:

@@ -742,7 +742,7 @@
 record_currthread (currthread)
      int currthread;
 {
-  general_thread = currthread;
+  set_thread (currthread,1);
 
   /* If this is a new thread, add it to GDB's thread list.
      If we leave it up to WFI to do this, bad things will happen.  */

This fix is very useful when you're remotely debugging a multi-threaded
program (I'm currently working with a prototype of gdbserver with support for
linuxthreads). If the remote side doesn't know that the general thread has
changed, then next `g' or `G' requests (get or write registers) will return
bad values (i.e.: registers values of old general thread).


@@ -3439,7 +3439,8 @@
       int todo;
       int i;
 
-      todo = min (len, max_buf_size / 2);	/* num bytes that will fit */
+      todo = min (len, max_buf_size / 2 - 2);	/* num bytes that will fit */
+      /* -2 for leading $ and trailing # + checksum (2 hex chars) */
 
       /* construct "m"<memaddr>","<len>" */
       /* sprintf (buf, "m%lx,%x", (unsigned long) memaddr, todo); */

If the host side needs to read for example 500 bytes and assuming that the
maximum buffer size is 400 chars, then without the fix, the remote side will
be asked to send min (500, 400/2)=200 bytes, its answer will then be:
   $ ... 200 hex encoded bytes = 400 chars #CS = 400 + 4 chars which is greater
than the max buffer size and will lead to an error from the host side.
So we need to subtract 4 chars (i.e.: 2 hex encoded bytes) from requested
number of bytes.

Best regards.
-- 
Philippe Giacinti - Alcatel Business Systems - PCD/SMB/SWPCC - CC S0645
1, route du Dr Albert Schweitzer - 67408 Illkirch Cedex - FRANCE
Tel: +33 (0)3.90.67.62.10 - Fax: +33 (0)3.90.67.77.93
mailto:Philippe.Giacinti@sxb.bsf.alcatel.fr

--- insight-20000314.old/gdb/remote.c	Fri Feb 18 18:00:18 2000
+++ insight-20000314/gdb/remote.c	Mon Mar 20 08:21:19 2000
@@ -742,7 +742,7 @@
 record_currthread (currthread)
      int currthread;
 {
-  general_thread = currthread;
+  set_thread (currthread,1);
 
   /* If this is a new thread, add it to GDB's thread list.
      If we leave it up to WFI to do this, bad things will happen.  */
@@ -3439,7 +3439,8 @@
       int todo;
       int i;
 
-      todo = min (len, max_buf_size / 2);	/* num bytes that will fit */
+      todo = min (len, max_buf_size / 2 - 2);	/* num bytes that will fit */
+      /* -2 for leading $ and trailing # + checksum (2 hex chars) */
 
       /* construct "m"<memaddr>","<len>" */
       /* sprintf (buf, "m%lx,%x", (unsigned long) memaddr, todo); */
--- insight-20000314.old/gdb/ChangeLog	Tue Mar 14 03:37:24 2000
+++ insight-20000314/gdb/ChangeLog	Mon Mar 20 08:24:55 2000
@@ -1,3 +1,13 @@
+Fri Mar 17 2000  Philippe Giacinti <philippe@giacinti.com>
+
+	Minor fixes in `remote.c'
+	
+	* remote.c (record_currthread): must call `set_thread' to change
+	general thread, in order to let stub know we have changed it.
+	* remote.c (remote_read_bytes): when we need to read more memory
+	than max buffer size, we have to reserve space for leading $ and
+	trailing # + checksum (i.e.: 4 char <=> 2 hex encoded bytes)
+	
 Mon Mar 13 21:21:41 2000  Andrew Cagney  <cagney@b1.cygnus.com>
 
 	* defs.h (STREQ, STRCMP, STREQN): Document that these macros are

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]