From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 97836 invoked by alias); 21 May 2015 15:00:11 -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 97819 invoked by uid 89); 21 May 2015 15:00:10 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.4 required=5.0 tests=AWL,BAYES_00,KAM_LAZY_DOMAIN_SECURITY,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 21 May 2015 15:00:06 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t4LF01vU005642 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Thu, 21 May 2015 11:00:01 -0400 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t4LExwIC003885; Thu, 21 May 2015 10:59:59 -0400 Message-ID: <555DF2EE.2030707@redhat.com> Date: Thu, 21 May 2015 15:00:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Gary Benson , gdb-patches@sourceware.org CC: Eli Zaretskii , Doug Evans , =?windows-1252?Q?Iago_L=F3pez_Galeiras?= Subject: Re: [PATCH 8/9 v2] Implement vFile:setfs in gdbserver References: <1429186791-6867-1-git-send-email-gbenson@redhat.com> <1430395542-16017-9-git-send-email-gbenson@redhat.com> In-Reply-To: <1430395542-16017-9-git-send-email-gbenson@redhat.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit X-SW-Source: 2015-05/txt/msg00543.txt.bz2 On 04/30/2015 01:05 PM, Gary Benson wrote: > This commit implements the "vFile:setfs" packet in gdbserver. > > gdb/gdbserver/ChangeLog: > > * target.h (struct target_ops) : New field. > : Likewise. > : Likewise. > * linux-low.c (nat/linux-namespaces.h): New include. > (linux_target_ops): Initialize the_target->multifs_open, > the_target->multifs_unlink and the_target->multifs_readlink. > * hostio.c (hostio_fs_pid): New static variable. > (handle_setfs): New function. > (handle_open): Use the_target->multifs_open as appropriate. > (handle_unlink): Use the_target->multifs_unlink as appropriate. > (handle_readlink): Use the_target->multifs_readlink as > appropriate. > (handle_vFile): Handle vFile:setfs packets. > --- > gdb/gdbserver/ChangeLog | 16 +++++++++++ > gdb/gdbserver/hostio.c | 62 ++++++++++++++++++++++++++++++++++++++++++-- > gdb/gdbserver/linux-low.c | 4 +++ > gdb/gdbserver/target.h | 21 +++++++++++++++ > 4 files changed, 100 insertions(+), 3 deletions(-) > > diff --git a/gdb/gdbserver/hostio.c b/gdb/gdbserver/hostio.c > index 9e858d9..10cff5a 100644 > --- a/gdb/gdbserver/hostio.c > +++ b/gdb/gdbserver/hostio.c > @@ -243,6 +243,47 @@ hostio_reply_with_data (char *own_buf, char *buffer, int len, > return input_index; > } > > +/* Process ID of inferior whose filesystem hostio functions > + that take FILENAME arguments will use. Zero means to use > + our own filesystem. */ > + > +static int hostio_fs_pid = 0; This should be cleared if GDB reconnects. > + > +/* Handle a "vFile:setfs:" packet. */ > + > +static void > +handle_setfs (char *own_buf) > +{ > + char *p; > + int pid; > + > + /* If the target doesn't have any of the in-filesystem-of methods > + then there's no point in GDB sending "vFile:setfs:" packets. We > + reply with an empty packet (i.e. we pretend we don't understand > + "vFile:setfs:") and that should stop GDB sending any more. */ > + if (the_target->multifs_open == NULL > + && the_target->multifs_unlink == NULL > + && the_target->multifs_readlink == NULL) > + { > + own_buf[0] = '\0'; > + return; > + } For the setns/ENOSYS case, how about somehow probing whether setns actually works here (with a new method, or probing one of the existing ones with getpid()) and return empty packet, instead of ending up with open failing with ENOSYS later on? Some comment for the native side, actually. Thanks, Pedro Alves