From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 129974 invoked by alias); 12 Apr 2017 23:30:44 -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 125940 invoked by uid 89); 12 Apr 2017 23:30:23 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=responds, remained, hitherto, distinguished 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 ESMTP; Wed, 12 Apr 2017 23:30:20 +0000 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E2C2D7AEB2 for ; Wed, 12 Apr 2017 23:30:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com E2C2D7AEB2 Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx01.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=sergiodj@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com E2C2D7AEB2 Received: from localhost (unused-10-15-17-193.yyz.redhat.com [10.15.17.193]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9A63C785CD for ; Wed, 12 Apr 2017 23:30:18 +0000 (UTC) From: Sergio Durigan Junior To: GDB Patches Subject: Re: [PATCH] Make environ.exp run on all platforms (and create info-program.exp) References: <20170331172901.23402-1-sergiodj@redhat.com> Date: Wed, 12 Apr 2017 23:30:00 -0000 In-Reply-To: <20170331172901.23402-1-sergiodj@redhat.com> (Sergio Durigan Junior's message of "Fri, 31 Mar 2017 13:29:01 -0400") Message-ID: <874lxturud.fsf@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2017-04/txt/msg00375.txt.bz2 On Friday, March 31 2017, I wrote: > This has been on my TODO list for a while. There's a really old bug > about this (PR testsuite/8595), and there was no reason for > environ.exp to be specific for hppa* targets. So this patch removes > this constraint, modernizes the testcase, and cleans up some things. > Most of the tests remained, and some were rewritten (especially the > one that checks if "show environment" works, which is something kind > of hard to do). > > As a bonus, I'm adding a separated info-program.exp file containing > all the tests related to "info program" that were present on > environ.exp. > > Tested locally, everything still passes. Ping. > gdb/testsuite/ChangeLog: > 2017-03-31 Sergio Durigan Junior > > PR testsuite/8595 > * gdb.base/environ.exp: Make test available in all architectures. > Move bits related to "info program" testing to > gdb.base/info-program.exp. Rewrite tests to use the two new > procedures mentione below. > (test_set_show_env_var) New procedure. > (test_set_show_env_var_equal): Likewise. > * gdb.base/info-program.exp: New file. > --- > gdb/testsuite/ChangeLog | 11 ++ > gdb/testsuite/gdb.base/environ.exp | 302 ++++++-------------------------- > gdb/testsuite/gdb.base/info-program.exp | 45 +++++ > 3 files changed, 105 insertions(+), 253 deletions(-) > create mode 100644 gdb/testsuite/gdb.base/info-program.exp > > diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog > index eb543eb..98901a0 100644 > --- a/gdb/testsuite/ChangeLog > +++ b/gdb/testsuite/ChangeLog > @@ -1,3 +1,14 @@ > +2017-03-31 Sergio Durigan Junior > + > + PR testsuite/8595 > + * gdb.base/environ.exp: Make test available in all architectures. > + Move bits related to "info program" testing to > + gdb.base/info-program.exp. Rewrite tests to use the two new > + procedures mentione below. > + (test_set_show_env_var) New procedure. > + (test_set_show_env_var_equal): Likewise. > + * gdb.base/info-program.exp: New file. > + > 2017-03-29 Jan Kratochvil > > * gdb.python/py-section-script.exp (sepdebug): New testcases. > diff --git a/gdb/testsuite/gdb.base/environ.exp b/gdb/testsuite/gdb.base/environ.exp > index a833f79..5ea5626 100644 > --- a/gdb/testsuite/gdb.base/environ.exp > +++ b/gdb/testsuite/gdb.base/environ.exp > @@ -13,297 +13,93 @@ > # You should have received a copy of the GNU General Public License > # along with this program. If not, see . */ > > -# > -# test running programs > -# > +gdb_start > > -# This test exists solely to exercise the "environment" commands for > -# code-coverage on HP-UX. > -# > -if ![istarget "hppa*-*-hpux*"] then { > - return > -} > - > -standard_testfile break.c break1.c > - > -if {[prepare_for_testing "failed to prepare" $testfile \ > - [list $srcfile $srcfile2] {debug nowarnings}]} { > - return -1 > -} > - > -if ![runto_main] then { fail "environment command tests suppressed" } > - > -# (No, this is not really related to the environment commands. But it's > -# a convenient place to verify that this command works.) > -# > -send_gdb "info program\n" > -gdb_expect { > - -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped at breakpoint 1..*$gdb_prompt $"\ > - {pass "info program"} > - -re "$gdb_prompt $"\ > - {fail "info program"} > - timeout {fail "(timeout) info program"} > -} > - > -# We don't really care where this step lands, so long as it gets > -# the inferior pushed off the breakpoint it's currently on... > -# > -send_gdb "next\n" > -gdb_expect { > - -re ".*$gdb_prompt $"\ > - {pass "step before info program"} > - timeout {fail "(timeout) step before info program"} > +proc test_set_show_env_var { name value test_name } { > + gdb_test_no_output "set environment $name $value" "$test_name" > + gdb_test "show environment $name" "$name = $value" \ > + "confirm $test_name" > } > -send_gdb "info program\n" > -gdb_expect { > - -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped after being stepped..*$gdb_prompt $"\ > - {pass "info program after step"} > - -re "$gdb_prompt $"\ > - {fail "info program after step"} > - timeout {fail "(timeout) info program after step"} > -} > - > -if ![runto_main] then { fail "environment command tests suppressed" } > > -send_gdb "delete\n" > -gdb_expect { > - -re ".*y or n. $"\ > - {send_gdb "y\n" > - gdb_expect { > - -re ".*$gdb_prompt $"\ > - {pass "delete breakpoint before info program"} > - timeout {fail "(timeout) delete breakpoint before info program"} > - } > - } > - -re "$gdb_prompt $"\ > - {fail "delete breakpoint before info program"} > - timeout {fail "(timeout) delete breakpoint before info program"} > -} > -send_gdb "info program\n" > -gdb_expect { > - -re ".*Using the running image of child process \[0-9\]*.\r\nProgram stopped at 0x\[0-9a-fA-F\]*.\r\nIt stopped at a breakpoint that has since been deleted..*$gdb_prompt $"\ > - {pass "info program after deleted breakpoint"} > - -re "$gdb_prompt $"\ > - {fail "info program after deleted breakpoint"} > - timeout {fail "(timeout) info program after deleted breakpoint"} > +proc test_set_show_env_var_equal { name value test_name } { > + gdb_test_no_output "set environment $name = $value" "$test_name" > + gdb_test "show environment $name" "$name = $value" \ > + "confirm $test_name" > } > > # Verify that we can show all currently-set environment variables. > -# (It's a bit hacky, but nonetheless probably safe to check for at > -# least the SHELL variable.) > -# > -# need to increase timeout because of very long output > -set oldtimeout $timeout > -set timeout [expr "$timeout + 300"] > - > -send_gdb "show environment\n" > -gdb_expect { > - -re ".*SHELL=(\[a-zA-Z0-9\]*).*$gdb_prompt $"\ > - {pass "show environment"} > - -re "$gdb_prompt $"\ > - {fail "show environment"} > - timeout {fail "(timeout) show environment"} > -} > -set timeout $oldtimeout > +# It's hard to do this verification since we can't really compare each > +# entry with the current environment. So we just check to see if > +# there is anything that looks like an environment variable being > +# printed. > +gdb_test "show environment" "(\[A-Za-z_\]\[A-Za-z0-9_\]*=.*\r\n)+" \ > + "show environment works" > > # Verify that we can unset a specific environment variable. > -# > -send_gdb "unset environment EDITOR\n" > -gdb_expect { > - -re "$gdb_prompt $"\ > - {pass "issue unset environment"} > - timeout {fail "(timeout) issue unset environment"} > -} > -send_gdb "show environment EDITOR\n" > -gdb_expect { > - -re "Environment variable \"EDITOR\" not defined.\r\n$gdb_prompt $"\ > - {pass "unset environment"} > - -re "$gdb_prompt $"\ > - {fail "unset environment"} > - timeout {fail "(timeout) unset environment"} > -} > +gdb_test_no_output "unset environment EDITOR" "unset environment variable" > + > +gdb_test "show environment EDITOR" "Environment variable \"EDITOR\" not defined\." \ > + "confirm unset environment variable worked" > > # Verify that we can unset all environment variables. > -# > -send_gdb "unset environment\n" > -gdb_expect { > - -re "Delete all environment variables.*y or n. $"\ > - {send_gdb "y\n" > - gdb_expect { > - -re "$gdb_prompt $"\ > - {pass "unset entire environment"} > - timeout {fail "(timeout) unset entire environment"} > - } > - } > - -re "$gdb_prompt $"\ > - {fail "unset entire environment"} > - timeout {fail "(timeout) unset entire environment"} > +set msg "unset all environment variables" > +gdb_test_multiple "unset environment" $msg { > + -re "Delete all environment variables.*y or n.*$" { > + gdb_test_no_output "y" $msg > + } > + -re "$gdb_prompt $" { > + fail $msg > + } > } > > # Verify that we can set a specific environment variable. > -# > -send_gdb "set environment EDITOR emacs\n" > -gdb_expect { > - -re "$gdb_prompt $"\ > - {pass "issue set environment"} > - timeout {fail "(timeout) issue set environment"} > -} > -send_gdb "show environment EDITOR\n" > -gdb_expect { > - -re "EDITOR = emacs\r\n$gdb_prompt $"\ > - {pass "set environment"} > - -re "$gdb_prompt $"\ > - {fail "set environment"} > - timeout {fail "(timeout) set environment"} > -} > +test_set_show_env_var "EDITOR" "emacs" "set environment variable" > > # Verify that GDB responds gracefully to a request to set environment, > # with no variable name. > -# > -send_gdb "set environment\n" > -gdb_expect { > - -re "Argument required .environment variable and value..*$gdb_prompt $"\ > - {pass "set environment without variable disallowed"} > - -re "$gdb_prompt $"\ > - {fail "set environment without variable disallowed"} > - timeout {fail "(timeout) set environment without variable disallowed"} > -} > +gdb_test "set environment" "Argument required \\\(environment variable and value\\\)\." \ > + "set environment without arguments" > > # I'm not sure just what GDB has in mind in explicitly checking > # for this variant, but since GDB handles it, test it. > -# > -send_gdb "set environment =\n" > -gdb_expect { > - -re "Argument required .environment variable to set..*$gdb_prompt $"\ > - {pass "set environment equals without variable disallowed"} > - -re "$gdb_prompt $"\ > - {fail "set environment equals without variable disallowed"} > - timeout {fail "(timeout) set environment equals without variable disallowed"} > -} > +gdb_test "set environment =" "Argument required \\\(environment variable to set\\\)\." \ > + "set environment without variable name" > > # Setting an environment variable without a value sets it to a NULL > # value. > -# > -send_gdb "set environment EDITOR\n" > -gdb_expect { > - -re "Setting environment variable \"EDITOR\" to null value..*$gdb_prompt $"\ > - {pass "issue set environment without variable value"} > - -re "$gdb_prompt $"\ > - {fail "issue set environment without variable value"} > - timeout {fail "(timeout) issue set environment without variable value"} > -} > -send_gdb "show environment EDITOR\n" > -gdb_expect { > - -re "EDITOR = \r\n$gdb_prompt $"\ > - {pass "set environment without variable value"} > - -re "$gdb_prompt $"\ > - {fail "set environment without variable value"} > - timeout {fail "(timeout) set environment without variable value"} > -} > +gdb_test "set environment EDITOR" "Setting environment variable \"EDITOR\" to null value\." \ > + "set environment variable to null value" > +gdb_test "show environment EDITOR" "EDITOR = " "show null environment variable" > > # Verify that GDB responds gracefully to an attempt to show a > # non-existent environment variable. (We hope this variable is > # undefined!) > -# > -send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" > -gdb_expect { > - -re "Environment variable \"FOOBARBAZGRUNGESPAZBALL\" not defined..*$gdb_prompt $"\ > - {pass "show non-existent environment variable disallowed"} > - -re "$gdb_prompt $"\ > - {fail "show non-existent environment variable disallowed"} > - timeout {fail "(timeout) show non-existent environment variable disallowed"} > -} > +gdb_test "show environment FOOBARBAZGRUNGESPAZBALL" \ > + "Environment variable \"FOOBARBAZGRUNGESPAZBALL\" not defined\." \ > + "show non-existent environment variable" > > # Verify that GDB can set an environment variable hitherto undefined. > -# > -send_gdb "set environment FOOBARBAZGRUNGESPAZBALL t\n" > -gdb_expect { > - -re "$gdb_prompt $"\ > - {pass "issue set environment for previously undefined variable"} > - timeout {fail "(timeout) issue set environment for previously undefined variable"} > -} > -send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" > -gdb_expect { > - -re "FOOBARBAZGRUNGESPAZBALL = t\r\n$gdb_prompt $"\ > - {pass "set environment for previously undefined variable"} > - -re "$gdb_prompt $"\ > - {fail "set environment for previously undefined variable"} > - timeout {fail "(timeout) set environment for previously undefined variable"} > -} > +test_set_show_env_var "FOOBARBAZGRUNGESPAZBALL" "t" \ > + "set environment variable previously undefined" > > # Verify that GDB can also set an environment variable using the "=" > # syntax. > -# > -send_gdb "set environment FOOBARBAZGRUNGESPAZBALL = t\n" > -gdb_expect { > - -re "$gdb_prompt $"\ > - {pass "issue set environment with equals"} > - timeout {fail "(timeout) issue set environment with equals"} > -} > -send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" > -gdb_expect { > - -re "FOOBARBAZGRUNGESPAZBALL = t\r\n$gdb_prompt $"\ > - {pass "set environment with equals"} > - -re "$gdb_prompt $"\ > - {fail "set environment with equals"} > - timeout {fail "(timeout) set environment with equals"} > -} > +test_set_show_env_var_equal "FOOBARBAZGRUNGESPAZBALL" "y" \ > + "set environment variable using = syntax" > > # Verify that GDB can set an environment variable to a value that has > # an embedded (trailing, in this case) equals. > -# > -send_gdb "set environment FOOBARBAZGRUNGESPAZBALL t=\n" > -gdb_expect { > - -re "$gdb_prompt $"\ > - {pass "issue set environment with trailing equals"} > - timeout {fail "(timeout) issue set environment with trailing equals"} > -} > -send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" > -gdb_expect { > - -re "FOOBARBAZGRUNGESPAZBALL = t=\r\n$gdb_prompt $"\ > - {pass "set environment with trailing equals"} > - -re "$gdb_prompt $"\ > - {fail "set environment with trailing equals"} > - timeout {fail "(timeout) set environment with trailing equals"} > -} > +test_set_show_env_var_equal "FOOBARBAZGRUNGESPAZBALL" "t=" \ > + "set environment variable with trailing equals" > > # Verify that GDB can set an environment variable to a value preceded > # by whitespace, and that such whitespace is ignored (not included > # in the set value). > -# > -send_gdb "set environment FOOBARBAZGRUNGESPAZBALL = foo\n" > -gdb_expect { > - -re "$gdb_prompt $"\ > - {pass "issue set environment with preceding whitespace"} > - timeout {fail "(timeout) issue set environment with preceding whitespace"} > -} > -send_gdb "show environment FOOBARBAZGRUNGESPAZBALL\n" > -gdb_expect { > - -re "FOOBARBAZGRUNGESPAZBALL = foo\r\n$gdb_prompt $"\ > - {pass "set environment with preceding whitespace"} > - -re "$gdb_prompt $"\ > - {fail "set environment with preceding whitespace"} > - timeout {fail "(timeout) set environment with preceding whitespace"} > -} > - > -# Verify that GDB can manipulate the distinguished PATH variable. > -# > -send_gdb "path /tmp/FOOBARBAZGRUNGESPAZBALL\n" > -gdb_expect { > - -re ".*Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\ > - {pass "issue path"} > - -re "$gdb_prompt $"\ > - {fail "issue path"} > - timeout {fail "(timeout) issue path"} > -} > -send_gdb "show paths\n" > -gdb_expect { > - -re "Executable and object file path: /tmp/FOOBARBAZGRUNGESPAZBALL.*$gdb_prompt $"\ > - {pass "show paths"} > - -re "$gdb_prompt $"\ > - {fail "show paths"} > - timeout {fail "(timeout) show paths"} > -} > +gdb_test_no_output "set environment FOOBARBAZGRUNGESPAZBALL = foo" \ > + "set environment variable with trailing whitespace" > +gdb_test "show environment FOOBARBAZGRUNGESPAZBALL" \ > + "FOOBARBAZGRUNGESPAZBALL = foo" \ > + "confirm set environment variable with trailing whitespace" > > gdb_exit > return 0 > diff --git a/gdb/testsuite/gdb.base/info-program.exp b/gdb/testsuite/gdb.base/info-program.exp > new file mode 100644 > index 0000000..a24a654 > --- /dev/null > +++ b/gdb/testsuite/gdb.base/info-program.exp > @@ -0,0 +1,45 @@ > +# Copyright 2017 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 . > + > +standard_testfile normal.c > + > +if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } { > + return -1 > +} > + > +if { ![runto_main] } { > + fail "can't run to main" > + return -1 > +} > + > +gdb_test "info program" "\tUsing the running image of child process $decimal\.\r\nProgram stopped at $hex\.\r\nIt stopped at breakpoint $decimal\.\r\nType \"info stack\" or \"info registers\" for more information\." \ > + "info program after run to main" > + > +# We don't really care where this step lands, so long as it gets > +# the inferior pushed off the breakpoint it's currently on... > +gdb_test "next" "$decimal\t.*" "advancing pc" > + > +gdb_test "info program" "\tUsing the running image of child process $decimal\.\r\nProgram stopped at $hex\.\r\nIt stopped after being stepped\.\r\nType \"info stack\" or \"info registers\" for more information\." \ > + "info program after next" > + > +if { ![runto_main] } then { > + fail "can't restart program" > + return -1 > +} > + > +delete_breakpoints > + > +gdb_test "info program" "\tUsing the running image of child process $decimal\.\r\nProgram stopped at $hex\.\r\nIt stopped at a breakpoint that has since been deleted\.\r\nType \"info stack\" or \"info registers\" for more information\." \ > + "info program after deleting all breakpoints" > -- > 2.9.3 -- Sergio GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36 Please send encrypted e-mail if possible http://sergiodj.net/