From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30922 invoked by alias); 4 Oct 2011 12:36:42 -0000 Received: (qmail 30704 invoked by uid 22791); 4 Oct 2011 12:36:39 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00,MSGID_MULTIPLE_AT X-Spam-Check-By: sourceware.org Received: from mailhost.u-strasbg.fr (HELO mailhost.u-strasbg.fr) (130.79.200.155) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Tue, 04 Oct 2011 12:36:21 +0000 Received: from md2.u-strasbg.fr (md2.u-strasbg.fr [IPv6:2001:660:2402::187]) by mailhost.u-strasbg.fr (8.14.3/jtpda-5.5pre1) with ESMTP id p94CaIwh019888 for ; Tue, 4 Oct 2011 14:36:18 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from mailserver.u-strasbg.fr (ms7.u-strasbg.fr [130.79.204.16]) by md2.u-strasbg.fr (8.14.4/jtpda-5.5pre1) with ESMTP id p94CaICa023474 for ; Tue, 4 Oct 2011 14:36:18 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) Received: from E6510Muller (gw-ics.u-strasbg.fr [130.79.210.225]) (user=mullerp mech=LOGIN) by mailserver.u-strasbg.fr (8.14.4/jtpda-5.5pre1) with ESMTP id p94CaHC5062986 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NO) for ; Tue, 4 Oct 2011 14:36:18 +0200 (CEST) (envelope-from pierre.muller@ics-cnrs.unistra.fr) From: "Pierre Muller" To: Subject: [RFA] testsuite: Add a test for passing of environment variables to inferior Date: Tue, 04 Oct 2011 12:36:00 -0000 Message-ID: <006301cc8292$367539b0$a35fad10$@muller@ics-cnrs.unistra.fr> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 X-SW-Source: 2011-10/txt/msg00073.txt.bz2 Following Eli's comment that it was not clear what I wanted to achieve, I wrote a new test. Manually checking CVS GDB for mingw, Eli's patch gives the correct output. But Stock Cygwin GDB currently passes none of these TEST_GDB_XXX variables to inferior. Even the patch that I sent earlier is not correct: it still fails for the last test, once TEST_GDB_VAR1 has been set into GDB environment list, it doesn't get removed on the last start of the inferior... Corinna, I think this is the reason why I wanted to restore the original environment layout (to avoid leaving unset variables around.) Anyhow, one more test in the testsuite to test an unchecked feature is always a good thing, no? Pierre testsuite/ChangeLog entry: 2011-10-04 Pierre Muller Add tests for passing of environment variables to inferior. * gdb.base/testenv.c: New test source. * gdb.base/testenv.exp: New expect test. Index: gdb.base/testenv.c =================================================================== RCS file: gdb.base/testenv.c diff -N gdb.base/testenv.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb.base/testenv.c 4 Oct 2011 12:27:05 -0000 @@ -0,0 +1,53 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2011 Free Software Foundation, Inc. + + 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 . */ + +/* + This source is used to check that GDb correctly + passes on environment variables down to inferior. + One of the tests checks that 'unset' variables also are removed from + inferior environment list. */ + +#include + +#ifdef PROTOTYPES +int main (int argc, char **argv, char **envp) +#else +main (argc, argv, envp) + int argc; + char **argv; + char **envp; +#endif +{ + int i, j; +#ifdef usestubs + set_debug_traps(); + breakpoint(); +#endif + + j = 0; + for (i = 0; envp[i]; i++) + { + if (strncmp ("TEST_GDB", envp[i], 8) == 0) + { + printf ("%s\n", envp[i]); + j++; + } + } + printf ("Program found %d variables starting with TEST_GDB\n", j); + return 0; /* set breakpoint here. */ +} + Index: gdb.base/testenv.exp =================================================================== RCS file: gdb.base/testenv.exp diff -N gdb.base/testenv.exp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb.base/testenv.exp 4 Oct 2011 12:27:05 -0000 @@ -0,0 +1,94 @@ +# Copyright 2011 Free Software Foundation, Inc. + +# 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 . + +# This file was written by Pierre Muller +# +# Check if environment variables are correctly passed to inferiors +# + +if $tracelevel then { + strace $tracelevel +} + + +set testfile "testenv" +set srcfile ${testfile}.c +set binfile ${objdir}/${subdir}/${testfile} +if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable {debug}] != "" } { + untested testenv.exp + return -1 +} + +# Start with a fresh gdb + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +# make sure $pc is sane, in case we're talking to a board. +if { ![runto_main] } { + gdb_suppress_tests; +} + +set bp_line [gdb_get_line_number "set breakpoint here"] +gdb_breakpoint $bp_line + +# +# Test gdb set/unset environment commands. +# Executable lists and counts all environment variables +# starting with TEST_GDB. + + +# First test with no TEST_GDB_VAR +gdb_test "continue" \ + ".*Program found 0 variables starting with TEST_GDB.*" \ + "Test no TEST_GDB var" + +gdb_test_no_output "set env TEST_GDB_VAR1 test1" \ + "Set TEST_GDB_VAR1" + +runto main +gdb_breakpoint $bp_line + +# Second test with one TEST_GDB_VAR +gdb_test "continue" \ + ".*Program found 1 variables starting with TEST_GDB.*" \ + "Test with one TEST_GDB var" + +gdb_test_no_output "set env TEST_GDB_VAR2 test2" \ + "Set TEST_GDB_VAR2" + +runto main +gdb_breakpoint $bp_line + +# Third test with two TEST_GDB_VAR +gdb_test "continue" \ + ".*Program found 2 variables starting with TEST_GDB.*" \ + "Test with two TEST_GDB var" + +gdb_test_no_output "unset env TEST_GDB_VAR1" \ + "Unset TEST_GDB_VAR1" + +runto main +gdb_breakpoint $bp_line + +# Fourth test with one TEST_GDB_VAR left, after one was removed +# with unset command. +gdb_test "continue" \ + ".*Program found 1 variables starting with TEST_GDB.*" \ + "Test with one TEST_GDB var, after unset" + +gdb_exit