From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 55364 invoked by alias); 27 Feb 2015 10:59:41 -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 55352 invoked by uid 89); 27 Feb 2015 10:59:40 -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,SPF_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 10:59:39 +0000 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t1RAxaMQ002489 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 27 Feb 2015 05:59:36 -0500 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t1RAxZEZ001881; Fri, 27 Feb 2015 05:59:35 -0500 Message-ID: <54F04E16.2070704@redhat.com> Date: Fri, 27 Feb 2015 10:59: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> In-Reply-To: <54F04A2B.5@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2015-02/txt/msg00810.txt.bz2 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. ----- >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); + } +} -- 1.9.3