From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30984 invoked by alias); 27 Feb 2015 11:01:58 -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 30975 invoked by uid 89); 27 Feb 2015 11:01:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,T_RP_MATCHES_RCVD autolearn=ham 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; Fri, 27 Feb 2015 11:01:56 +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 t1RB1r3m008257 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 27 Feb 2015 06:01:53 -0500 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 t1RB1pjr014540; Fri, 27 Feb 2015 06:01:52 -0500 Message-ID: <54F04E9E.1070500@redhat.com> Date: Fri, 27 Feb 2015 11:01:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0 MIME-Version: 1.0 To: Yao Qi CC: gdb-patches@sourceware.org Subject: Re: [PATCH 5/6] testsuite: Introduce $inferior_spawn_id References: <1424699660-11727-1-git-send-email-palves@redhat.com> <1424699660-11727-6-git-send-email-palves@redhat.com> <867fv7xodw.fsf@gmail.com> <54F04A2B.5@redhat.com> <54F04E16.2070704@redhat.com> In-Reply-To: <54F04E16.2070704@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2015-02/txt/msg00811.txt.bz2 On 02/27/2015 10:59 AM, Pedro Alves wrote: > On 02/27/2015 10:42 AM, Pedro Alves wrote: > >> Or we could fix the tests themselves to explicitly call setvbuf >> if needed and not bother boards at all. I count only around 20 >> tests that check gdb,noinferiorio, or use gdb_skip_stdio_test, and >> we could fix them incrementally, as they're converted to >> use $inferior_spawn_id. Maybe that's the cleanest. We can >> e.g., add: >> >> #include "lib/set_unbuffered_mode.c" >> >> at the top of such files, which avoids an explicit call in >> "main". That relies on __attribute__ ((constructor)), but >> we could also call an helper shared function that does the >> setvbuf from the tests' "main" if we don't want to rely on >> that attribute. >> >> Options, options... > > Something like this. I think this is the approach I'm liking best. TBC, I tried both ssh with -t and without -t, and confirmed the wanted isatty path is take accordingly. The mingw32 bit I did not test, but I'm sure we need it. > > ----- > From d68fb948b275b85b7f2fa95ac0626c5ba7037114 Mon Sep 17 00:00:00 2001 > From: Pedro Alves > Date: Fri, 27 Feb 2015 10:44:15 +0000 > Subject: [PATCH] Add "../lib/unbuffer_output.c" and use it in interrupt.exp > > --- > gdb/testsuite/gdb.base/interrupt.c | 5 +++++ > gdb/testsuite/lib/unbuffer_output.c | 37 +++++++++++++++++++++++++++++++++++++ > 2 files changed, 42 insertions(+) > create mode 100644 gdb/testsuite/lib/unbuffer_output.c > > diff --git a/gdb/testsuite/gdb.base/interrupt.c b/gdb/testsuite/gdb.base/interrupt.c > index d7bb271..6426015 100644 > --- a/gdb/testsuite/gdb.base/interrupt.c > +++ b/gdb/testsuite/gdb.base/interrupt.c > @@ -3,6 +3,8 @@ > #include > #include > > +#include "../lib/unbuffer_output.c" > + > #ifdef SIGNALS > #include > > @@ -17,6 +19,9 @@ main () > { > char x; > int nbytes; > + > + gdb_unbuffer_output (); > + > #ifdef SIGNALS > signal (SIGINT, sigint_handler); > #endif > diff --git a/gdb/testsuite/lib/unbuffer_output.c b/gdb/testsuite/lib/unbuffer_output.c > new file mode 100644 > index 0000000..654d01c > --- /dev/null > +++ b/gdb/testsuite/lib/unbuffer_output.c > @@ -0,0 +1,37 @@ > +/* Copyright (C) 2008-2015 Free Software Foundation, Inc. > + > + This file is part of GDB. > + > + This program is free software; you can redistribute it and/or modify > + it under the terms of the GNU General Public License as published by > + the Free Software Foundation; either version 3 of the License, or > + (at your option) any later version. > + > + This program is distributed in the hope that it will be useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + GNU General Public License for more details. > + > + You should have received a copy of the GNU General Public License > + along with this program. If not, see . */ > + > +/* Force outputs to unbuffered mode if not connected to a > + terminal. */ > + > +#include > + > +static int > +gdb_unbuffer_output (void) > +{ > + /* Always force this for Windows testing. To a native Windows > + program running under under a Cygwin shell/ssh, stdin is really a > + Windows pipe, thus not a tty and its outputs ends up fully > + buffered. */ > +#ifndef __MINGW32__ > + if (!isatty (fileno (stdin))) > +#endif > + { > + setvbuf (stdout, NULL, _IONBF, BUFSIZ); > + setvbuf (stderr, NULL, _IONBF, BUFSIZ); > + } > +} > Thanks, Pedro Alves