This is the mail archive of the gdb-patches@sourceware.org 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]
Other format: [Raw text]

Re: [PATCH] Allow remote debugging over a local domain socket


> From: John Darrington <john@darrington.wattle.id.au>
> Cc: John Darrington <john@darrington.wattle.id.au>
> Date: Fri, 31 Aug 2018 12:18:18 +0200
> 
> Extend the "target remote"  and "target extended-remote" commands
> such that if the filename provided is a unix domain (AF_UNIX)
> socket, then it'll be treated as such, instead of trying to open
> it as if it were a character device.

Thanks.

> +target remote FILENAME
> +target extended-remote FILENAME
> +  If FILENAME is a unix domain socket gdb will attempt to connect
                                        ^
Missing comma.  Also, I believe "unix" should be "Unix" and "gdb"
should be "GDB".

>  @subsection Remote Connection Commands
>  @cindex remote connection commands
> -@value{GDBN} can communicate with the target over a serial line, or
> +@value{GDBN} can communicate with the target over a serial line, a
> +local socket, or

I'd prefer to say "local Unix domain socket" here.

> +@item target remote @var{local-socket}
> +@itemx target extended-remote @var{local-socket}
> +@cindex local socket, @code{target remote}
> +Use @var{local-socket} to communicate with the target.  For example,
> +to use a local socket bound to the file system entry @file{/tmp/gdb-socket0}:

Likewise here.  Alternatively, add a note that this only works on
systems that support Unix domain sockets.

The documentation parts are approved with these fixed.

> +int
> +socket_read_prim (struct serial *scb, size_t count)
> +{
> +  /* Need to cast to silence -Wpointer-sign on MinGW, as Winsock's
> +     'recv' takes 'char *' as second argument, while 'scb->buf' is
> +     'unsigned char *'.  */
> +  return recv (scb->fd, (char *) scb->buf, count, 0);
> +}
> +
> +int
> +socket_write_prim (struct serial *scb, const void *buf, size_t count)
> +{
> +  /* On Windows, the second parameter to send is a "const char *"; on
> +     UNIX systems it is generally "const void *".  The cast to "const
> +     char *" is OK everywhere, since in C++ any data pointer type can
> +     be implicitly converted to "const void *".  */
> +  return send (scb->fd, (const char *) buf, count, 0);
> +}

I'm confused: why does this mention MinGW and Windows, when Windows
doesn't support AF_UNIX (AFAIK)?  Should this stuff even be compiled
on Windows?

> +#ifdef USE_WIN32API
> +  /* Do nothing; Windoze does not have local domain sockets. */

Exactly!

> -    ops = serial_interface_lookup ("hardwire");
> +    {
> +      /* Check to see if name is a socket.  If it is, then treat is
> +         as such.  Otherwise assume that it's a character device.  */
> +      struct stat sb;
> +      if (0 == stat (name, &sb) && ((sb.st_mode & S_IFMT) == S_IFSOCK))

AFAIK, S_IFSOCK is not defined in the MinGW headers, so we need some
replacement definition, or we need to ifdef this away in the Windows
build.

Thanks.


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