This is the mail archive of the
gdb-patches@sourceware.cygnus.com
mailing list for the GDB project.
[PATCH] update: minor fixes in remote.c
- To: gdb-patches at sourceware dot cygnus dot com
- Subject: [PATCH] update: minor fixes in remote.c
- From: Philippe GIACINTI <Philippe dot Giacinti at sxb dot bsf dot alcatel dot fr>
- Date: Mon, 20 Mar 2000 08:38:02 +0100 (MET)
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