[mingw] build error of the latest CVS

Pedro Alves palves@redhat.com
Wed Jun 13 09:57:00 GMT 2012


On 06/13/2012 10:54 AM, asmwarrior wrote:

> On 2012-6-13 17:39, Pedro Alves wrote:

>> We can just restore the function.  I'm testing a patch.

>>
> I firstly tried to use a hacker local patch to workaround the build error, but finally I found a hang problem caused by my local patch.


You don't say how your patch looked like, but I'm hoping it's not
the same as mine, otherwise I'll need to go back to the drawing board  :-)

Could you try the patch below on top of current mainline?

> So, I revert you three commit about serial.c, and now gdb cvs Head build and works OK.


> see: http://sourceware.org/bugzilla/show_bug.cgi?id=14227


Thanks.

2012-06-13  Pedro Alves  <palves@redhat.com>

	Partial revert of previous change.

	* serial.c (scb_base): New global.
	(serial_for_fd): New.
	(serial_open, serial_fdopen_ops): Link new serial in open serials
	chain.
	(do_serial_close): Unlink serial from the open serials chain.
---

 gdb/serial.c |   35 +++++++++++++++++++++++++++++++++++
 gdb/serial.h |    1 +
 2 files changed, 36 insertions(+), 0 deletions(-)

diff --git a/gdb/serial.c b/gdb/serial.c
index 1140feb..df18b2f 100644
--- a/gdb/serial.c
+++ b/gdb/serial.c
@@ -33,6 +33,10 @@ static int global_serial_debug_p;

 static struct serial_ops *serial_ops_list = NULL;

+/* Pointer to list of scb's.  */
+
+static struct serial *scb_base;
+
 /* Non-NULL gives filename which contains a recording of the remote session,
    suitable for playback by gdbserver.  */

@@ -157,6 +161,21 @@ serial_add_interface (struct serial_ops *optable)
   serial_ops_list = optable;
 }

+/* Return the open serial device for FD, if found, or NULL if FD is
+   not already opened.  */
+
+struct serial *
+serial_for_fd (int fd)
+{
+  struct serial *scb;
+
+  for (scb = scb_base; scb; scb = scb->next)
+    if (scb->fd == fd)
+      return scb;
+
+  return NULL;
+}
+
 /* Open up a device or a network socket, depending upon the syntax of NAME.  */

 struct serial *
@@ -206,10 +225,12 @@ serial_open (const char *name)
     }

   scb->name = xstrdup (name);
+  scb->next = scb_base;
   scb->debug_p = 0;
   scb->async_state = 0;
   scb->async_handler = NULL;
   scb->async_context = NULL;
+  scb_base = scb;

   if (serial_logfile != NULL)
     {
@@ -249,10 +270,12 @@ serial_fdopen_ops (const int fd, struct serial_ops *ops)
   scb->refcnt = 1;

   scb->name = NULL;
+  scb->next = scb_base;
   scb->debug_p = 0;
   scb->async_state = 0;
   scb->async_handler = NULL;
   scb->async_context = NULL;
+  scb_base = scb;

   if ((ops->fdopen) != NULL)
     (*ops->fdopen) (scb, fd);
@@ -296,6 +319,18 @@ do_serial_close (struct serial *scb, int really_close)
   /* For serial_is_open.  */
   scb->bufp = NULL;

+  if (scb_base == scb)
+    scb_base = scb_base->next;
+  else
+    for (tmp_scb = scb_base; tmp_scb; tmp_scb = tmp_scb->next)
+      {
+	if (tmp_scb->next != scb)
+	  continue;
+
+	tmp_scb->next = tmp_scb->next->next;
+	break;
+      }
+
   serial_unref (scb);
 }

diff --git a/gdb/serial.h b/gdb/serial.h
index 187ed03..b164062 100644
--- a/gdb/serial.h
+++ b/gdb/serial.h
@@ -249,6 +249,7 @@ struct serial
 				   still need to wait for this many
 				   more seconds.  */
     char *name;			/* The name of the device or host */
+    struct serial *next;	/* Pointer to the next `struct serial *' */
     int debug_p;		/* Trace this serial devices operation.  */
     int async_state;		/* Async internal state.  */
     void *async_context;	/* Async event thread's context */



More information about the Gdb mailing list