From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 52686 invoked by alias); 4 May 2015 21:54:38 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 52607 invoked by uid 89); 4 May 2015 21:54:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW,SPF_NEUTRAL autolearn=ham version=3.3.2 X-HELO: smtp1-g21.free.fr Received: from smtp1-g21.free.fr (HELO smtp1-g21.free.fr) (212.27.42.1) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Mon, 04 May 2015 21:54:34 +0000 Received: from localhost.localdomain (unknown [81.56.99.41]) by smtp1-g21.free.fr (Postfix) with ESMTP id 1F0C0940093; Mon, 4 May 2015 23:51:44 +0200 (CEST) From: Gabriel Corona To: gdb-patches@sourceware.org Cc: Gabriel Corona Subject: [PATCH v2 2/2] Make gdbserver connect to SOCK_STREAM sockets Date: Mon, 04 May 2015 21:54:00 -0000 Message-Id: <1430776463-23214-2-git-send-email-gabriel.corona@enst-bretagne.fr> In-Reply-To: <1430776463-23214-1-git-send-email-gabriel.corona@enst-bretagne.fr> References: <1430776463-23214-1-git-send-email-gabriel.corona@enst-bretagne.fr> X-IsSubscribed: yes X-SW-Source: 2015-05/txt/msg00064.txt.bz2 In GDB: (gdb) target remote |socat STDIO UNIX-LISTEN:foo.sock In gdbserver: $ gdbserver foo.sock ./foo gdb/gdbserver/ChangeLog: * remote-utils.c: add support for connecting to a SOCK_STREAM socket * remote.c: add documentation about this feature --- gdb/gdbserver/remote-utils.c | 40 ++++++++++++++++++++++++++++++++++++++-- gdb/gdbserver/server.c | 1 + 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/gdb/gdbserver/remote-utils.c b/gdb/gdbserver/remote-utils.c index f15f1ce..ef4d8d6 100644 --- a/gdb/gdbserver/remote-utils.c +++ b/gdb/gdbserver/remote-utils.c @@ -36,6 +36,9 @@ #if HAVE_SYS_SOCKET_H #include #endif +#if HAVE_SYS_UN_H +#include +#endif #if HAVE_NETDB_H #include #endif @@ -340,6 +343,31 @@ open_shell_command (char *command) } #endif +#ifndef USE_WIN32API +static int +socket_open (char *name) +{ + int sock; + struct sockaddr_un addr; + + if (strlen (name) >= sizeof (addr.sun_path)) + return -1; + sock = socket (AF_UNIX, SOCK_STREAM, 0); + if (sock < 0) + return -1; + + addr.sun_family = AF_UNIX; + strcpy (addr.sun_path, name); + if (connect (sock, (const struct sockaddr *) &addr, + sizeof (struct sockaddr_un)) < 0) + { + close (sock); + return -1; + } + return sock; +} +#endif + /* Open a connection to a remote debugger. NAME is the filename used for communication. */ @@ -382,10 +410,18 @@ remote_open (char *name) else if (port_str == NULL) { struct stat statbuf; + int res; - if (stat (name, &statbuf) == 0 + res = stat (name, &statbuf); + if (res == 0 && (S_ISCHR (statbuf.st_mode) || S_ISFIFO (statbuf.st_mode))) - remote_desc = open (name, O_RDWR); + { + remote_desc = open (name, O_RDWR); + } + else if (res == 0 && S_ISSOCK (statbuf.st_mode)) + { + remote_desc = socket_open (name); + } else { errno = EINVAL; diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 9ed4049..675f9a5 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -3037,6 +3037,7 @@ gdbserver_usage (FILE *stream) "\tgdbserver [OPTIONS] --multi COMM\n" "\n" "COMM may be a tty device (for serial debugging),\n" + "an existing pathname stream-oriented socket,\n" "'|some shell command' to use stdin/stdout of a given shell command,\n" "HOST:PORT to listen for a TCP connection, or '-' or 'stdio' to use \n" "stdin/stdout of gdbserver.\n" -- 2.1.4