From patchwork Mon Mar 24 08:28:36 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: max X-Patchwork-Id: 332981 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 679DF2C00C2 for ; Mon, 24 Mar 2014 19:29:00 +1100 (EST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:content-type; q=dns; s=default; b=Xa/DLF1aaXI7lON4wqAxhNcFkKt6L4rPSXc/6ZlLS43 6NZiV1hC/dPR3jQZ9J8njZpcLmG3K7dDQUN+cPXqcP7UjDlU2twBA6xzPWtHbIya DmgTBhBUbExth6V2pgg2SgQeWNTojcgSL4r+usoaw4MNthi19ADhtV/XyhgFUogA = DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :message-id:date:from:mime-version:to:cc:subject:content-type; s=default; bh=j7i1QqwezmfHCSzao/1kBsb9f/U=; b=IgZwobKtE3hcYuuvu M9fiaSvWA6DfuoFfWcoSFnM+J23eVYFZGhuHHeuI3s1/hNqjzhncIag1dS349+GF wRroqUTgBPs2XHjaVEBTgcaDqah5BTuGAu3cDz4IEklJ+uF323/UPsCPs2B/EQGr Spfp9f5Jf0EZLLWXJ4LYWO8oCk= Received: (qmail 15936 invoked by alias); 24 Mar 2014 08:28:52 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 15924 invoked by uid 89); 24 Mar 2014 08:28:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.1 required=5.0 tests=AWL, BAYES_00, RP_MATCHES_RCVD, SPF_HELO_PASS, T_HDRS_LCASE, T_MANY_HDRS_LCASE autolearn=ham version=3.3.2 X-HELO: mailout4.w1.samsung.com Received: from mailout4.w1.samsung.com (HELO mailout4.w1.samsung.com) (210.118.77.14) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (DES-CBC3-SHA encrypted) ESMTPS; Mon, 24 Mar 2014 08:28:50 +0000 Received: from eucpsbgm2.samsung.com (unknown [203.254.199.245]) by mailout4.w1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0N2X00FKEM7XS760@mailout4.w1.samsung.com> for gcc-patches@gcc.gnu.org; Mon, 24 Mar 2014 08:28:45 +0000 (GMT) Received: from eusync2.samsung.com ( [203.254.199.212]) by eucpsbgm2.samsung.com (EUCPMTA) with SMTP id B0.70.18565.DBCEF235; Mon, 24 Mar 2014 08:28:45 +0000 (GMT) Received: from [106.109.128.212] by eusync2.samsung.com (Oracle Communications Messaging Server 7u4-23.01(7.0.4.23.0) 64bit (built Aug 10 2011)) with ESMTPA id <0N2X00ED5M7WZS80@eusync2.samsung.com>; Mon, 24 Mar 2014 08:28:45 +0000 (GMT) Message-id: <532FECB4.90805@partner.samsung.com> Date: Mon, 24 Mar 2014 12:28:36 +0400 From: Maxim Ostapenko User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.1.0 MIME-version: 1.0 To: GCC Patches Cc: Yury Gribov , Slava Garbuzov , 'Evgeny Gavrin' Subject: [PATCH] Environment variables forwarding Content-type: multipart/mixed; boundary=------------080801030905020706040902 X-IsSubscribed: yes Hi all, When porting Lsan on arm, I ran into problem with testing, because almost all lsan tests require environment variables forwarding for remote targets. Unfortunately, this feature isn't implemented yet neither in Dejagnu nor in GCC. These two small patches seem to resolve this issue. Tested on arm with asan.exp and ubsan.exp. I've cross-posted this message in Dejagnu too. Do these changes make sense? If not - what's the proper way to forward env vars on remote targets? -Maxim 2014-03-24 Max Ostapenko * lib/gcc-dg.exp: Add check if Dejagnu supports environment variables forwarding for remote targets. * lib/target-supports.exp (check_runtime_env_vars_forwarding_nocache): New function. (check_runtime_env_vars_forwarding): New function. diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp index f9d52bc..05eab99 100644 --- a/gcc/testsuite/lib/gcc-dg.exp +++ b/gcc/testsuite/lib/gcc-dg.exp @@ -80,6 +80,9 @@ set LTO_TORTURE_OPTIONS "" global gcc_force_conventional_output set gcc_force_conventional_output "" +global target_env_vars_available +set target_env_vars_available "" + if [check_effective_target_lto] { # When having plugin test both slim and fat LTO and plugin/nonplugin # path. @@ -258,11 +261,21 @@ if { [info procs ${tool}_load] != [list] \ set saved_target_env_var [list] if { [info exists set_target_env_var] \ && [llength $set_target_env_var] != 0 } { - if { [is_remote target] } { - return [list "unsupported" ""] - } - set-target-env-var - } + if { [is_remote target] } { + if [check_runtime_env_vars_forwarding] { + foreach env_var $set_target_env_var { + set var [lindex $env_var 0] + set value [lindex $env_var 1] + set program "$var=$value $program" + } + } else { + return [list "unsupported" ""] + } + } else { + set-target-env-var + } + } + set result [eval [list saved_${tool}_load $program] $args] if { [info exists set_target_env_var] \ && [llength $set_target_env_var] != 0 } { diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index bee8471..3a3224f 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -5731,3 +5731,57 @@ proc force_conventional_output_for { test } { } } +# This procedure is the same the check_runtime_nocache one. The only +# difference is that executable will run with TEST=1 environment +# variable. If Dejagnu supports environment variables forwarding +# for remote targets, it will return 1, otherwise it will return 0. + +proc check_runtime_env_vars_forwarding_nocache {} { + global tool + global target_env_vars_available + set basename env_forwarding_works + set contents { + #ifdef __cplusplus + extern "C" + #endif + char *getenv(const char *name); + + #ifdef __cplusplus + extern "C" + #endif + int strcmp(const char *s1, const char *s2); + + int main () { return strcmp(getenv("TEST"), "1"); } + } + + set args "" + + set result [eval [list check_compile $basename executable $contents] $args] + set lines [lindex $result 0] + set output [lindex $result 1] + + set ok 0 + if { [string match "" $lines] } { + # No error messages, everything is OK. + set result [remote_load target "TEST=1 ./$output" "" ""] + set status [lindex $result 0] + verbose "check_runtime_nocache $basename: status is <$status>" 2 + if { $status == "pass" } { + set ok 1 + } + } + remote_file build delete $output + return $ok +} + +proc check_runtime_env_vars_forwarding {} { + global target_env_vars_available + if { $target_env_vars_available == "" } { + if [check_runtime_env_vars_forwarding_nocache] { + set target_env_vars_available 1 + } else { + set target_env_vars_available 0 + } + } + return $target_env_vars_available +}