Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* "target remote | " stderr -- try2
@ 2007-03-25 13:35 Vladimir Prus
  2007-03-25 20:25 ` Eli Zaretskii
  2007-03-29 18:06 ` Daniel Jacobowitz
  0 siblings, 2 replies; 7+ messages in thread
From: Vladimir Prus @ 2007-03-25 13:35 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 452 bytes --]


This is a revision of my earlier patch to make
stderr output from program run with

   target remote | some_program

to be routed through gdb_stderr, so that MI
frontend sees that output.

The original patch is at:

	http://thread.gmane.org/gmane.comp.gdb.patches/32540

and this version differs by not having any #ifdef WIN32 inside
ser-base.c, but instead using new method in 'struct serial_ops',
that is initialized in ser-mingw.c.

OK?

- Volodya

[-- Attachment #2: remote_stderr_try2__gdb_mainline.diff --]
[-- Type: text/x-diff, Size: 6453 bytes --]

--- gdb/serial.c	(/mirrors/gdb_mainline)	(revision 3546)
+++ gdb/serial.c	(/patches/gdb/remote_stderr_try2/gdb_mainline)	(revision 3546)
@@ -211,6 +211,7 @@ serial_open (const char *name)
 
   scb->bufcnt = 0;
   scb->bufp = scb->buf;
+  scb->error_fd = -1;
 
   if (scb->ops->open (scb, open_name))
     {
--- gdb/serial.h	(/mirrors/gdb_mainline)	(revision 3546)
+++ gdb/serial.h	(/patches/gdb/remote_stderr_try2/gdb_mainline)	(revision 3546)
@@ -191,6 +191,11 @@ extern int serial_debug_p (struct serial
 struct serial
   {
     int fd;			/* File descriptor */
+    /* File descriptor for a separate error stream that should be
+       immediately forwarded to gdb_stderr.  This may be -1.
+       If != -1, this descriptor should be non-blocking or
+       ops->avail should be non-NULL.  */
+    int error_fd;               
     struct serial_ops *ops;	/* Function vector */
     void *state;       		/* Local context info for open FD */
     serial_ttystate ttystate;	/* Not used (yet) */
@@ -246,6 +251,11 @@ struct serial_ops
     /* Perform a low-level write operation, writing (at most) COUNT
        bytes from BUF.  */
     int (*write_prim)(struct serial *scb, const void *buf, size_t count);
+    /* Return that number of bytes that can be read from FD
+       without blocking.  Return value of -1 means that the
+       the read will not block even if less that requested bytes
+       are available.  */
+    int (*avail)(struct serial *scb);
 
 #ifdef USE_WIN32API
     /* Return a handle to wait on, indicating available data from SCB
--- gdb/ser-pipe.c	(/mirrors/gdb_mainline)	(revision 3546)
+++ gdb/ser-pipe.c	(/patches/gdb/remote_stderr_try2/gdb_mainline)	(revision 3546)
@@ -62,9 +62,12 @@ pipe_open (struct serial *scb, const cha
    * published in UNIX Review, Vol. 6, No. 8.
    */
   int pdes[2];
+  int err_pdes[2];
   int pid;
   if (socketpair (AF_UNIX, SOCK_STREAM, 0, pdes) < 0)
     return -1;
+  if (socketpair (AF_UNIX, SOCK_STREAM, 0, err_pdes) < 0)
+    return -1;
 
   /* Create the child process to run the command in.  Note that the
      apparent call to vfork() below *might* actually be a call to
@@ -77,9 +80,18 @@ pipe_open (struct serial *scb, const cha
     {
       close (pdes[0]);
       close (pdes[1]);
+      close (err_pdes[0]);
+      close (err_pdes[1]);
       return -1;
     }
 
+  if (fcntl (err_pdes[0], F_SETFL, O_NONBLOCK) == -1)
+    {
+      close (err_pdes[0]);
+      close (err_pdes[1]);
+      err_pdes[0] = err_pdes[1] = -1;
+    }
+
   /* Child. */
   if (pid == 0)
     {
@@ -91,6 +103,13 @@ pipe_open (struct serial *scb, const cha
 	  close (pdes[1]);
 	}
       dup2 (STDOUT_FILENO, STDIN_FILENO);
+
+      if (err_pdes[0] != -1)
+	{
+	  close (err_pdes[0]);
+	  dup2 (err_pdes[1], STDERR_FILENO);
+	  close (err_pdes[1]);
+	}
 #if 0
       /* close any stray FD's - FIXME - how? */
       /* POSIX.2 B.3.2.2 "popen() shall ensure that any streams
@@ -109,6 +128,7 @@ pipe_open (struct serial *scb, const cha
   state = XMALLOC (struct pipe_state);
   state->pid = pid;
   scb->fd = pdes[0];
+  scb->error_fd = err_pdes[0];
   scb->state = state;
 
   /* If we don't do this, GDB simply exits when the remote side dies.  */
--- gdb/ser-base.c	(/mirrors/gdb_mainline)	(revision 3546)
+++ gdb/ser-base.c	(/patches/gdb/remote_stderr_try2/gdb_mainline)	(revision 3546)
@@ -343,6 +343,45 @@ generic_readchar (struct serial *scb, in
 	    }
 	}
     }
+  /* Read any error output we might have.  */
+  if (scb->error_fd != -1)
+    {
+      ssize_t s;
+      char buf[81];
+
+      for (;;)
+        {
+ 	  char *current;
+ 	  char *newline;
+	  int to_read = 80;
+
+	  int num_bytes = -1;
+	  if (scb->ops->avail)
+	    num_bytes = (scb->ops->avail)(scb, scb->error_fd);
+	  if (num_bytes != -1)
+	    to_read = (num_bytes < to_read) ? num_bytes : to_read;
+
+	  s = read (scb->error_fd, &buf, to_read);
+	  if (s == -1)
+	    break;
+
+	  /* In theory, embedded newlines are not a problem.
+	     But for MI, we want each output line to have just
+	     one newline for legibility.  So output things
+	     in newline chunks.  */
+	  buf[s] = '\0';
+	  current = buf;
+	  while ((newline = strstr (current, "\n")) != NULL)
+	    {
+	      *newline = '\0';
+	      fputs_unfiltered (current, gdb_stderr);
+	      fputs_unfiltered ("\n", gdb_stderr);
+	      current = newline + 1;
+	    }
+	  fputs_unfiltered (current, gdb_stderr);
+	}
+    }
+
   reschedule (scb);
   return ch;
 }
--- gdb/ser-mingw.c	(/mirrors/gdb_mainline)	(revision 3546)
+++ gdb/ser-mingw.c	(/patches/gdb/remote_stderr_try2/gdb_mainline)	(revision 3546)
@@ -697,6 +697,7 @@ static int
 pipe_windows_open (struct serial *scb, const char *name)
 {
   struct pipe_state *ps;
+  FILE *pex_stderr;
 
   char **argv = buildargv (name);
   struct cleanup *back_to = make_cleanup_freeargv (argv);
@@ -717,7 +718,8 @@ pipe_windows_open (struct serial *scb, c
   {
     int err;
     const char *err_msg
-      = pex_run (ps->pex, PEX_SEARCH | PEX_BINARY_INPUT | PEX_BINARY_OUTPUT,
+      = pex_run (ps->pex, PEX_SEARCH | PEX_BINARY_INPUT | PEX_BINARY_OUTPUT
+		 | PEX_STDERR_TO_PIPE,
                  argv[0], argv, NULL, NULL,
                  &err);
 
@@ -739,8 +741,13 @@ pipe_windows_open (struct serial *scb, c
   ps->output = pex_read_output (ps->pex, 1);
   if (! ps->output)
     goto fail;
-
   scb->fd = fileno (ps->output);
+
+  pex_stderr = pex_read_err (ps->pex, 1);
+  if (! pex_stderr)
+    goto fail;
+  scb->error_fd = fileno (pex_stderr);
+
   scb->state = (void *) ps;
 
   discard_cleanups (back_to);
@@ -865,6 +872,17 @@ pipe_done_wait_handle (struct serial *sc
   WaitForSingleObject (ps->wait.have_stopped, INFINITE);
 }
 
+static int
+pipe_avail (struct serial *scb, int fd)
+{
+  HANDLE h = (HANDLE) _get_osfhandle (scb->error_fd);
+  DWORD numBytes;
+  BOOL r = PeekNamedPipe (h, NULL, 0, NULL, &numBytes, NULL);
+  if (r == FALSE)
+    numBytes = 0;
+  return numBytes;
+}
+
 struct net_windows_state
 {
   HANDLE read_event;
@@ -1164,6 +1182,7 @@ _initialize_ser_windows (void)
   ops->write_prim = pipe_windows_write;
   ops->wait_handle = pipe_wait_handle;
   ops->done_wait_handle = pipe_done_wait_handle;
+  ops->avail = pipe_avail;
 
   serial_add_interface (ops);
 

Property changes on: 
___________________________________________________________________
Name: csl:base
 +/all/mirrors/gdb_mainline
Name: svk:merge
 +e7755896-6108-0410-9592-8049d3e74e28:/mirrors/gdb/trunk:166548


[-- Attachment #3: ChangeLog --]
[-- Type: text/plain, Size: 572 bytes --]

        Pass stderr of program run with "target remote |"
        via gdb_stderr.
	* serial.c (serial_open): Set error_fd to -1.
	* serial.h (struct serial): New field error_fd.
	(struct serial_opts): New field avail.
	* ser-pipe.c (pipe_open): Create another pair
	of sockets.  Pass stderr to gdb.
	* ser-mingw.c (pipe_windows_open): Pass
	PEX_STDERR_TO_PIPE to pex_run.  Initialize
	sd->error_fd.
	(pipe_avail): New.
	(_initialize_ser_windows): Hook pipe_avail.
	* ser-base.c (generic_readchar): Check if there's
	anything in stderr channel and route that to gdb_stderr.

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

* Re: "target remote | " stderr -- try2
  2007-03-25 13:35 "target remote | " stderr -- try2 Vladimir Prus
@ 2007-03-25 20:25 ` Eli Zaretskii
  2007-03-26  5:32   ` Vladimir Prus
  2007-03-29 18:06 ` Daniel Jacobowitz
  1 sibling, 1 reply; 7+ messages in thread
From: Eli Zaretskii @ 2007-03-25 20:25 UTC (permalink / raw)
  To: Vladimir Prus; +Cc: gdb-patches

> From: Vladimir Prus <vladimir@codesourcery.com>
> Date: Sun, 25 Mar 2007 16:35:13 +0300
> 
> This is a revision of my earlier patch to make
> stderr output from program run with
> 
>    target remote | some_program
> 
> to be routed through gdb_stderr, so that MI
> frontend sees that output.

Should this be reflected in the manual?


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

* Re: "target remote | " stderr -- try2
  2007-03-25 20:25 ` Eli Zaretskii
@ 2007-03-26  5:32   ` Vladimir Prus
  0 siblings, 0 replies; 7+ messages in thread
From: Vladimir Prus @ 2007-03-26  5:32 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gdb-patches

On Monday 26 March 2007 00:25, Eli Zaretskii wrote:
> > From: Vladimir Prus <vladimir@codesourcery.com>
> > Date: Sun, 25 Mar 2007 16:35:13 +0300
> > 
> > This is a revision of my earlier patch to make
> > stderr output from program run with
> > 
> >    target remote | some_program
> > 
> > to be routed through gdb_stderr, so that MI
> > frontend sees that output.
> 
> Should this be reflected in the manual?

I'm not sure. The fact that some_program's stderr is
not routed via MI output streams seems like an
outright bug to me, so fixing it does not require
documentation.

- Volodya

 


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

* Re: "target remote | " stderr -- try2
  2007-03-25 13:35 "target remote | " stderr -- try2 Vladimir Prus
  2007-03-25 20:25 ` Eli Zaretskii
@ 2007-03-29 18:06 ` Daniel Jacobowitz
  2007-04-06  6:07   ` Vladimir Prus
  1 sibling, 1 reply; 7+ messages in thread
From: Daniel Jacobowitz @ 2007-03-29 18:06 UTC (permalink / raw)
  To: Vladimir Prus; +Cc: gdb-patches

On Sun, Mar 25, 2007 at 04:35:13PM +0300, Vladimir Prus wrote:
> 
> This is a revision of my earlier patch to make
> stderr output from program run with
> 
>    target remote | some_program
> 
> to be routed through gdb_stderr, so that MI
> frontend sees that output.
> 
> The original patch is at:
> 
> 	http://thread.gmane.org/gmane.comp.gdb.patches/32540
> 
> and this version differs by not having any #ifdef WIN32 inside
> ser-base.c, but instead using new method in 'struct serial_ops',
> that is initialized in ser-mingw.c.
> 
> OK?

This version is OK.  Thanks!

-- 
Daniel Jacobowitz
CodeSourcery


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

* Re: "target remote | " stderr -- try2
  2007-03-29 18:06 ` Daniel Jacobowitz
@ 2007-04-06  6:07   ` Vladimir Prus
  2007-04-06  8:24     ` Mark Kettenis
  2007-04-07 17:36     ` Daniel Jacobowitz
  0 siblings, 2 replies; 7+ messages in thread
From: Vladimir Prus @ 2007-04-06  6:07 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 861 bytes --]

Daniel Jacobowitz wrote:

> On Sun, Mar 25, 2007 at 04:35:13PM +0300, Vladimir Prus wrote:
>> 
>> This is a revision of my earlier patch to make
>> stderr output from program run with
>> 
>>    target remote | some_program
>> 
>> to be routed through gdb_stderr, so that MI
>> frontend sees that output.
>> 
>> The original patch is at:
>> 
>> http://thread.gmane.org/gmane.comp.gdb.patches/32540
>> 
>> and this version differs by not having any #ifdef WIN32 inside
>> ser-base.c, but instead using new method in 'struct serial_ops',
>> that is initialized in ser-mingw.c.
>> 
>> OK?
> 
> This version is OK.  Thanks!

Doh! It turns out I've attached a patch that won't even compile.
Although the difference to the real patch is trivial, for avoidance
of doubt I attach the "right" patch and the delta to the previous
one. Is this version OK?

Sorry,
Volodya


[-- Attachment #2: ChangeLog --]
[-- Type: text/plain, Size: 572 bytes --]

        Pass stderr of program run with "target remote |"
        via gdb_stderr.
	* serial.c (serial_open): Set error_fd to -1.
	* serial.h (struct serial): New field error_fd.
	(struct serial_opts): New field avail.
	* ser-pipe.c (pipe_open): Create another pair
	of sockets.  Pass stderr to gdb.
	* ser-mingw.c (pipe_windows_open): Pass
	PEX_STDERR_TO_PIPE to pex_run.  Initialize
	sd->error_fd.
	(pipe_avail): New.
	(_initialize_ser_windows): Hook pipe_avail.
	* ser-base.c (generic_readchar): Check if there's
	anything in stderr channel and route that to gdb_stderr.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: delta.diff --]
[-- Type: text/x-diff; name="delta.diff", Size: 1134 bytes --]

--- gdb/ser-base.c	(revision 3592)
+++ gdb/ser-base.c	(local)
@@ -361,6 +361,9 @@ generic_readchar (struct serial *scb, in
 	  if (num_bytes != -1)
 	    to_read = (num_bytes < to_read) ? num_bytes : to_read;
 
+	  if (to_read == 0)
+	    break;
+
 	  s = read (scb->error_fd, &buf, to_read);
 	  if (s == -1)
 	    break;
--- gdb/ser-mingw.c	(revision 3592)
+++ gdb/ser-mingw.c	(local)
@@ -875,7 +875,7 @@ pipe_done_wait_handle (struct serial *sc
 static int
 pipe_avail (struct serial *scb, int fd)
 {
-  HANDLE h = (HANDLE) _get_osfhandle (scb->error_fd);
+  HANDLE h = (HANDLE) _get_osfhandle (fd);
   DWORD numBytes;
   BOOL r = PeekNamedPipe (h, NULL, 0, NULL, &numBytes, NULL);
   if (r == FALSE)
--- gdb/serial.h	(revision 3592)
+++ gdb/serial.h	(local)
@@ -255,7 +255,7 @@ struct serial_ops
        without blocking.  Return value of -1 means that the
        the read will not block even if less that requested bytes
        are available.  */
-    int (*avail)(struct serial *scb);
+    int (*avail)(struct serial *scb, int fd);
 
 #ifdef USE_WIN32API
     /* Return a handle to wait on, indicating available data from SCB

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: remote_stderr_try2__gdb_mainline.diff --]
[-- Type: text/x-diff; name="remote_stderr_try2__gdb_mainline.diff", Size: 6487 bytes --]

--- gdb/serial.c	(/mirrors/gdb_mainline)	(revision 3593)
+++ gdb/serial.c	(/patches/gdb/remote_stderr_try2/gdb_mainline)	(revision 3593)
@@ -211,6 +211,7 @@ serial_open (const char *name)
 
   scb->bufcnt = 0;
   scb->bufp = scb->buf;
+  scb->error_fd = -1;
 
   if (scb->ops->open (scb, open_name))
     {
--- gdb/serial.h	(/mirrors/gdb_mainline)	(revision 3593)
+++ gdb/serial.h	(/patches/gdb/remote_stderr_try2/gdb_mainline)	(revision 3593)
@@ -191,6 +191,11 @@ extern int serial_debug_p (struct serial
 struct serial
   {
     int fd;			/* File descriptor */
+    /* File descriptor for a separate error stream that should be
+       immediately forwarded to gdb_stderr.  This may be -1.
+       If != -1, this descriptor should be non-blocking or
+       ops->avail should be non-NULL.  */
+    int error_fd;               
     struct serial_ops *ops;	/* Function vector */
     void *state;       		/* Local context info for open FD */
     serial_ttystate ttystate;	/* Not used (yet) */
@@ -246,6 +251,11 @@ struct serial_ops
     /* Perform a low-level write operation, writing (at most) COUNT
        bytes from BUF.  */
     int (*write_prim)(struct serial *scb, const void *buf, size_t count);
+    /* Return that number of bytes that can be read from FD
+       without blocking.  Return value of -1 means that the
+       the read will not block even if less that requested bytes
+       are available.  */
+    int (*avail)(struct serial *scb, int fd);
 
 #ifdef USE_WIN32API
     /* Return a handle to wait on, indicating available data from SCB
--- gdb/ser-pipe.c	(/mirrors/gdb_mainline)	(revision 3593)
+++ gdb/ser-pipe.c	(/patches/gdb/remote_stderr_try2/gdb_mainline)	(revision 3593)
@@ -62,9 +62,12 @@ pipe_open (struct serial *scb, const cha
    * published in UNIX Review, Vol. 6, No. 8.
    */
   int pdes[2];
+  int err_pdes[2];
   int pid;
   if (socketpair (AF_UNIX, SOCK_STREAM, 0, pdes) < 0)
     return -1;
+  if (socketpair (AF_UNIX, SOCK_STREAM, 0, err_pdes) < 0)
+    return -1;
 
   /* Create the child process to run the command in.  Note that the
      apparent call to vfork() below *might* actually be a call to
@@ -77,9 +80,18 @@ pipe_open (struct serial *scb, const cha
     {
       close (pdes[0]);
       close (pdes[1]);
+      close (err_pdes[0]);
+      close (err_pdes[1]);
       return -1;
     }
 
+  if (fcntl (err_pdes[0], F_SETFL, O_NONBLOCK) == -1)
+    {
+      close (err_pdes[0]);
+      close (err_pdes[1]);
+      err_pdes[0] = err_pdes[1] = -1;
+    }
+
   /* Child. */
   if (pid == 0)
     {
@@ -91,6 +103,13 @@ pipe_open (struct serial *scb, const cha
 	  close (pdes[1]);
 	}
       dup2 (STDOUT_FILENO, STDIN_FILENO);
+
+      if (err_pdes[0] != -1)
+	{
+	  close (err_pdes[0]);
+	  dup2 (err_pdes[1], STDERR_FILENO);
+	  close (err_pdes[1]);
+	}
 #if 0
       /* close any stray FD's - FIXME - how? */
       /* POSIX.2 B.3.2.2 "popen() shall ensure that any streams
@@ -109,6 +128,7 @@ pipe_open (struct serial *scb, const cha
   state = XMALLOC (struct pipe_state);
   state->pid = pid;
   scb->fd = pdes[0];
+  scb->error_fd = err_pdes[0];
   scb->state = state;
 
   /* If we don't do this, GDB simply exits when the remote side dies.  */
--- gdb/ser-base.c	(/mirrors/gdb_mainline)	(revision 3593)
+++ gdb/ser-base.c	(/patches/gdb/remote_stderr_try2/gdb_mainline)	(revision 3593)
@@ -343,6 +343,48 @@ generic_readchar (struct serial *scb, in
 	    }
 	}
     }
+  /* Read any error output we might have.  */
+  if (scb->error_fd != -1)
+    {
+      ssize_t s;
+      char buf[81];
+
+      for (;;)
+        {
+ 	  char *current;
+ 	  char *newline;
+	  int to_read = 80;
+
+	  int num_bytes = -1;
+	  if (scb->ops->avail)
+	    num_bytes = (scb->ops->avail)(scb, scb->error_fd);
+	  if (num_bytes != -1)
+	    to_read = (num_bytes < to_read) ? num_bytes : to_read;
+
+	  if (to_read == 0)
+	    break;
+
+	  s = read (scb->error_fd, &buf, to_read);
+	  if (s == -1)
+	    break;
+
+	  /* In theory, embedded newlines are not a problem.
+	     But for MI, we want each output line to have just
+	     one newline for legibility.  So output things
+	     in newline chunks.  */
+	  buf[s] = '\0';
+	  current = buf;
+	  while ((newline = strstr (current, "\n")) != NULL)
+	    {
+	      *newline = '\0';
+	      fputs_unfiltered (current, gdb_stderr);
+	      fputs_unfiltered ("\n", gdb_stderr);
+	      current = newline + 1;
+	    }
+	  fputs_unfiltered (current, gdb_stderr);
+	}
+    }
+
   reschedule (scb);
   return ch;
 }
--- gdb/ser-mingw.c	(/mirrors/gdb_mainline)	(revision 3593)
+++ gdb/ser-mingw.c	(/patches/gdb/remote_stderr_try2/gdb_mainline)	(revision 3593)
@@ -697,6 +697,7 @@ static int
 pipe_windows_open (struct serial *scb, const char *name)
 {
   struct pipe_state *ps;
+  FILE *pex_stderr;
 
   char **argv = buildargv (name);
   struct cleanup *back_to = make_cleanup_freeargv (argv);
@@ -717,7 +718,8 @@ pipe_windows_open (struct serial *scb, c
   {
     int err;
     const char *err_msg
-      = pex_run (ps->pex, PEX_SEARCH | PEX_BINARY_INPUT | PEX_BINARY_OUTPUT,
+      = pex_run (ps->pex, PEX_SEARCH | PEX_BINARY_INPUT | PEX_BINARY_OUTPUT
+		 | PEX_STDERR_TO_PIPE,
                  argv[0], argv, NULL, NULL,
                  &err);
 
@@ -739,8 +741,13 @@ pipe_windows_open (struct serial *scb, c
   ps->output = pex_read_output (ps->pex, 1);
   if (! ps->output)
     goto fail;
-
   scb->fd = fileno (ps->output);
+
+  pex_stderr = pex_read_err (ps->pex, 1);
+  if (! pex_stderr)
+    goto fail;
+  scb->error_fd = fileno (pex_stderr);
+
   scb->state = (void *) ps;
 
   discard_cleanups (back_to);
@@ -865,6 +872,17 @@ pipe_done_wait_handle (struct serial *sc
   WaitForSingleObject (ps->wait.have_stopped, INFINITE);
 }
 
+static int
+pipe_avail (struct serial *scb, int fd)
+{
+  HANDLE h = (HANDLE) _get_osfhandle (fd);
+  DWORD numBytes;
+  BOOL r = PeekNamedPipe (h, NULL, 0, NULL, &numBytes, NULL);
+  if (r == FALSE)
+    numBytes = 0;
+  return numBytes;
+}
+
 struct net_windows_state
 {
   HANDLE read_event;
@@ -1164,6 +1182,7 @@ _initialize_ser_windows (void)
   ops->write_prim = pipe_windows_write;
   ops->wait_handle = pipe_wait_handle;
   ops->done_wait_handle = pipe_done_wait_handle;
+  ops->avail = pipe_avail;
 
   serial_add_interface (ops);
 

Property changes on: 
___________________________________________________________________
Name: csl:base
 +/all/mirrors/gdb_mainline
Name: svk:merge
 +e7755896-6108-0410-9592-8049d3e74e28:/mirrors/gdb/trunk:166548


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

* Re: "target remote | " stderr -- try2
  2007-04-06  6:07   ` Vladimir Prus
@ 2007-04-06  8:24     ` Mark Kettenis
  2007-04-07 17:36     ` Daniel Jacobowitz
  1 sibling, 0 replies; 7+ messages in thread
From: Mark Kettenis @ 2007-04-06  8:24 UTC (permalink / raw)
  To: ghost; +Cc: gdb-patches

> From: Vladimir Prus <ghost@cs.msu.su>
> Date:  Fri, 06 Apr 2007 10:06:24 +0400
> 
> Daniel Jacobowitz wrote:
> 
> > On Sun, Mar 25, 2007 at 04:35:13PM +0300, Vladimir Prus wrote:
> >> 
> >> This is a revision of my earlier patch to make
> >> stderr output from program run with
> >> 
> >>    target remote | some_program
> >> 
> >> to be routed through gdb_stderr, so that MI
> >> frontend sees that output.
> >> 
> >> The original patch is at:
> >> 
> >> http://thread.gmane.org/gmane.comp.gdb.patches/32540
> >> 
> >> and this version differs by not having any #ifdef WIN32 inside
> >> ser-base.c, but instead using new method in 'struct serial_ops',
> >> that is initialized in ser-mingw.c.
> >> 
> >> OK?
> > 
> > This version is OK.  Thanks!
> 
> Doh! It turns out I've attached a patch that won't even compile.
> Although the difference to the real patch is trivial, for avoidance
> of doubt I attach the "right" patch and the delta to the previous
> one. Is this version OK?

I like this version a lot better than the one with #ifdef WIN32.
Thanks Volodya, for taking the trouble to clean things up.

Mark


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

* Re: "target remote | " stderr -- try2
  2007-04-06  6:07   ` Vladimir Prus
  2007-04-06  8:24     ` Mark Kettenis
@ 2007-04-07 17:36     ` Daniel Jacobowitz
  1 sibling, 0 replies; 7+ messages in thread
From: Daniel Jacobowitz @ 2007-04-07 17:36 UTC (permalink / raw)
  To: Vladimir Prus; +Cc: gdb-patches

On Fri, Apr 06, 2007 at 10:06:24AM +0400, Vladimir Prus wrote:
> Doh! It turns out I've attached a patch that won't even compile.
> Although the difference to the real patch is trivial, for avoidance
> of doubt I attach the "right" patch and the delta to the previous
> one. Is this version OK?

Yes, it is.  Thanks again!

-- 
Daniel Jacobowitz
CodeSourcery


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

end of thread, other threads:[~2007-04-07 17:36 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-03-25 13:35 "target remote | " stderr -- try2 Vladimir Prus
2007-03-25 20:25 ` Eli Zaretskii
2007-03-26  5:32   ` Vladimir Prus
2007-03-29 18:06 ` Daniel Jacobowitz
2007-04-06  6:07   ` Vladimir Prus
2007-04-06  8:24     ` Mark Kettenis
2007-04-07 17:36     ` Daniel Jacobowitz

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