public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: John Darrington <john@darrington.wattle.id.au>
To: Pedro Alves <palves@redhat.com>
Cc: John Darrington <john@darrington.wattle.id.au>,
	gdb-patches@sourceware.org
Subject: Re: [PATCH] Allow remote debugging over a local domain socket
Date: Fri, 31 Aug 2018 16:40:00 -0000	[thread overview]
Message-ID: <20180831164001.jcejryh3v7fqtsd3@jocasta.intra> (raw)
In-Reply-To: <61e78be6-4976-6a28-90d2-e515c0afc2f3@redhat.com>

On Fri, Aug 31, 2018 at 05:00:55PM +0100, Pedro Alves wrote:
     
     What server are you using this against?  It'd be great to add
     support for gdbserver as well.  Were you planning on doing it?

I'm using upad [1], but a version which has not yet been released (the
released one doesn't have the necessary features).
I wasn't planning to update gdbserver but I could do that when ...

     If we had that, then I think we could add unix domain socket testing
     to gdb/testsuite/gdb.server/server-connect.exp (assuming it'd be easy
     enough to create a socket from tcl).

Yes.  One of the big advantages of using local sockets in testing as
opposed to tcp sockets is that parallel tests become a lot easier.  You
don't have to worry about port number conflicts or wait times.

However to do it right is not altogether straightforward.  You'd need
gdbserver to have some kind of daemon mode, for example

tempdir=$(mkdir -d)
gdbserver --socket=$tempdir/mysock --start
gdb --iex="target remote $tempdir/mysock" ...
gdbserver --socket=$tempdir/mysock --stop
rm -rf $tempdir

This is because there is a race condition in a server between the 
bind and listen syscalls.  GDB must not attempt to connect until
listen has returned successfully.


[1] http://www.nongnu.org/micropad
     
     
     gdbserver/tracepoint.c does:
     
     #ifndef UNIX_PATH_MAX
     #define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path)
     #endif

I'm not sure if that's entirely safe.  I believe some systems define
sun_path as a pointer into a static buffer in the kernel.  But if some
higher authority can say otherwise I'll defer to them.

     > diff --git a/gdb/serial.c b/gdb/serial.c
     > index fb2b212918..13b1af3873 100644
     > --- a/gdb/serial.c
     > +++ b/gdb/serial.c
     > @@ -213,7 +213,15 @@ serial_open (const char *name)
     >    else if (strchr (name, ':'))
     >      ops = serial_interface_lookup ("tcp");
     >    else
     > -    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))
     > +	ops = serial_interface_lookup ("socket");
     > +      else
     > +	ops = serial_interface_lookup ("hardware");
     
     
     Nit: maybe it's just me, but I find "socket" ambiguous -- is it
     a unix domain socket, a tcp socket, a udp socket, other?
     I'd have picked "unix" or "uds" instead, and likewise have
     named the file ser-unix.c and functions unix_foo instead
     of serial.  We already have ser-unix.c, but since this is
     only for unix really, then we could add the new code in
     that file instead?

Let's face it, the names of these files are totally anachronistic.
ser-tcp.c has nothing to do with serial ports and serial.c does only
tangentially.

It could use a big rename action ...

J'
     

-- 
Avoid eavesdropping.  Send strong encrypted email.
PGP Public key ID: 1024D/2DE827B3 
fingerprint = 8797 A26D 0854 2EAB 0285  A290 8A67 719C 2DE8 27B3
See http://sks-keyservers.net or any PGP keyserver for public key.

  reply	other threads:[~2018-08-31 16:40 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-29  7:05 Remote debugging over local domain sockets? John Darrington
2018-08-29 15:17 ` Tom Tromey
2018-08-29 15:28   ` John Darrington
2018-08-29 15:39     ` Tom Tromey
2018-08-31 10:18       ` [PATCH] Allow remote debugging over a local domain socket John Darrington
2018-08-31 14:59         ` Eli Zaretskii
2018-08-31 15:10           ` John Darrington
2018-08-31 17:50             ` Eli Zaretskii
2018-08-31 15:10         ` Tom Tromey
2018-08-31 15:12           ` John Darrington
2018-08-31 16:01         ` Pedro Alves
2018-08-31 16:40           ` John Darrington [this message]
2018-09-03 13:19             ` Pedro Alves
2018-09-03 18:49               ` John Darrington
2018-10-01 19:45                 ` Pedro Alves
2018-10-02 10:16                   ` John Darrington

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180831164001.jcejryh3v7fqtsd3@jocasta.intra \
    --to=john@darrington.wattle.id.au \
    --cc=gdb-patches@sourceware.org \
    --cc=palves@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).