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.
This commit is contained in:
Vladimir Prus
2007-04-08 15:20:07 +00:00
parent 1edf24da1a
commit 65cc4390f1
6 changed files with 111 additions and 2 deletions

View File

@@ -191,6 +191,11 @@ extern int serial_debug_p (struct serial *scb);
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