From patchwork Tue Apr 21 18:08:18 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pedro Alves X-Patchwork-Id: 6357 Received: (qmail 93724 invoked by alias); 21 Apr 2015 18:08:48 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 93535 invoked by uid 89); 21 Apr 2015 18:08:48 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 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; Tue, 21 Apr 2015 18:08:45 +0000 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id C8C45A10BD for ; Tue, 21 Apr 2015 18:08:44 +0000 (UTC) Received: from brno.lan (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t3LI8WL0028722 for ; Tue, 21 Apr 2015 14:08:44 -0400 From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 11/24] Make gdb.base/dprintf.exp use gdb_test_stdio Date: Tue, 21 Apr 2015 19:08:18 +0100 Message-Id: <1429639711-16459-12-git-send-email-palves@redhat.com> In-Reply-To: <1429639711-16459-1-git-send-email-palves@redhat.com> References: <1429639711-16459-1-git-send-email-palves@redhat.com> This one needed a larger revamp. The issue is that the "info breakpoints" test at the bottom of the file is broken on targets that can do both server-side dprintf, and inferior I/O, because then neither the breakpoint numbers match nor the "already hit N times" output. Address that by making the test restart gdb from scratch when switching between dprintf styles. Test groups are factored into procedures, and we now use with_test_prefix. While we're changing test messages, lowercase a few test messages, and then while at it, modernize a couple things here and there. gdb/testsuite/ChangeLog: 2015-04-21 Pedro Alves * gdb.base/dprintf.exp: Use standard_testfile. Change prepare_for_testing call. (srcfile): Don't set. (restart): New procedure. (test_dprintf): New procecure, use to continue over dprintfs. (test_call, test_agent): New procedures, tests moved here. Restart gdb and recreate dprintfs. Adjust expected output. --- gdb/testsuite/gdb.base/dprintf.exp | 134 +++++++++++++++++++++++++------------ 1 file changed, 90 insertions(+), 44 deletions(-) diff --git a/gdb/testsuite/gdb.base/dprintf.exp b/gdb/testsuite/gdb.base/dprintf.exp index 0cd31aa..23905e4 100644 --- a/gdb/testsuite/gdb.base/dprintf.exp +++ b/gdb/testsuite/gdb.base/dprintf.exp @@ -13,13 +13,12 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +standard_testfile -if { [prepare_for_testing dprintf.exp "dprintf" {} {debug}] } { +if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } { return -1 } -set srcfile dprintf.c - set bp_location1 [gdb_get_line_number "set breakpoint 1 here"] set dp_location1 [gdb_get_line_number "set dprintf 1 here"] @@ -65,65 +64,108 @@ gdb_test "continue" "arg=1234, g=1234.*" "1st dprintf, gdb" gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" "2nd dprintf, gdb" -# The "call" style depends on having I/O functions available, so test. +# Restart GDB and set set up for testing. -if ![target_info exists gdb,noinferiorio] { +proc restart {} { + global binfile + global bp_location1 dp_location1 - # Now switch styles and rerun; in the absence of redirection the - # output should be the same. + clean_restart $binfile - gdb_test_no_output "set dprintf-style call" "Set dprintf style to call" + if ![runto main] { + return -1 + } - gdb_run_cmd + gdb_test "dprintf foo,\"At foo entry\\n\"" \ + "Dprintf .*" - gdb_test "" "Breakpoint" + gdb_test "dprintf $dp_location1,\"arg=%d, g=%d\\n\", arg, g" \ + "Dprintf .*" - gdb_test "continue" "At foo entry.*arg=1234, g=1234.*" "1st dprintf, call" + gdb_test "break $bp_location1" "Breakpoint .*" +} - gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" "2nd dprintf, call" +# Test continuing across a dprintf. PATTERN matches the output +# generated by the dprintf. MSG is used as test message. - gdb_test_no_output "set dprintf-function fprintf" "Set dprintf function" - gdb_test_no_output "set dprintf-channel stderr" "Set dprintf channel" +proc test_dprintf {pattern msg} { + gdb_test_stdio "continue" $pattern "" "$msg" +} - gdb_run_cmd +# Test the "call" style. - gdb_test "" "Breakpoint" +proc test_call {} { + global binfile + global bp_location1 - gdb_test "continue" "At foo entry.*arg=1234, g=1234.*" \ - "1st dprintf, fprintf" + # Now switch styles and rerun; in the absence of redirection the + # output should be the same. - gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" \ - "2nd dprintf, fprintf" -} + with_test_prefix "printf" { + restart -# Now test the "agent" style. + gdb_test_no_output "set dprintf-style call" "set dprintf style to call" -set target_can_dprintf 1 -set msg "set dprintf style to agent" -gdb_test_multiple "set dprintf-style agent" $msg { - -re "warning: Target cannot run dprintf commands.*\r\n$gdb_prompt $" { + test_dprintf "At foo entry.*arg=1234, g=1234\r\n" "1st dprintf" - # The target reports that it doesn't support target side - # commands at all. - set target_can_dprintf 0 - unsupported "$msg" + test_dprintf "At foo entry.*arg=1235, g=2222\r\n" "2nd dprintf" } - -re ".*$gdb_prompt $" { - pass "$msg" + + with_test_prefix "fprintf" { + restart + + gdb_test_no_output "set dprintf-function fprintf" "set dprintf function" + gdb_test_no_output "set dprintf-channel stderr" "set dprintf channel" + + gdb_test_no_output "set dprintf-style call" "set dprintf style to call" + + test_dprintf "At foo entry.*arg=1234, g=1234\r\n" "1st dprintf" + + test_dprintf "At foo entry.*arg=1235, g=2222\r\n" "2nd dprintf" + } +} + +# The "call" style depends on having I/O functions available. + +if ![target_info exists gdb,noinferiorio] { + with_test_prefix "call" { + test_call } } -if $target_can_dprintf { - gdb_run_cmd +# Test the "agent" style. - gdb_test "" "Breakpoint" +proc test_agent {} { + global binfile + global gdb_prompt + + restart + + set target_can_dprintf 1 + set msg "set dprintf style to agent" + gdb_test_multiple "set dprintf-style agent" $msg { + -re "warning: Target cannot run dprintf commands.*\r\n$gdb_prompt $" { + + # The target reports that it doesn't support target side + # commands at all. + set target_can_dprintf 0 + unsupported "$msg" + } + -re ".*$gdb_prompt $" { + pass "$msg" + } + } + + if !$target_can_dprintf { + return + } # Even if the the target reports that it does support target side # commands, we can only tell that it supports them in combination # with a particular breakpoint type (Z0, Z1, etc.) when we try to # insert the breakpoint. When "set breakpoint always-inserted is # off", that'll be on next continue. - set msg "1st dprintf, agent" + set msg "1st dprintf" gdb_test_multiple "continue" $msg { -re "Warning:.*Target doesn't support breakpoints that have target side commands.*\r\n$gdb_prompt $" { set target_can_dprintf 0 @@ -135,22 +177,26 @@ if $target_can_dprintf { } if $target_can_dprintf { - gdb_test "continue" "Breakpoint \[0-9\]+, foo .*" "2nd dprintf, agent" + gdb_test "continue" "Breakpoint \[0-9\]+, foo .*" "2nd dprintf" - gdb_test_sequence "info breakpoints" "dprintf info 2" { + gdb_test_sequence "info breakpoints" "dprintf info" { "\[\r\n\]Num Type Disp Enb Address +What" - "\[\r\n\]2 breakpoint" - "\[\r\n\]\tbreakpoint already hit 2 times" - "\[\r\n\]3 dprintf" - "\[\r\n\]\tbreakpoint already hit 2 times" + "\[\r\n\]1 breakpoint" + "\[\r\n\]\tbreakpoint already hit 1 time" + "\[\r\n\]2 dprintf" "\[\r\n\] agent-printf \"At foo entry\\\\n\"" - "\[\r\n\]4 dprintf" - "\[\r\n\]\tbreakpoint already hit 2 times" + "\[\r\n\]3 dprintf" "\[\r\n\] agent-printf \"arg=%d, g=%d\\\\n\", arg, g" + "\[\r\n\]4 breakpoint" + "\[\r\n\]\tbreakpoint already hit 2 times" } } } +with_test_prefix "agent" { + test_agent +} + gdb_test "set dprintf-style foobar" "Undefined item: \"foobar\"." \ "Set dprintf style to an unrecognized type"