From: Pedro Alves Date: Wed, 29 Jul 2015 10:09:39 +0000 (+0100) Subject: Make gdb.base/dprintf.exp use gdb_test_stdio X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8396d2cdf4b013b237bf8cca306bbec602bdbb72;p=binutils-gdb.git Make gdb.base/dprintf.exp use gdb_test_stdio 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-07-29 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. --- diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 825243eb297..0f0ddc9e52b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2015-07-29 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. + 2015-07-29 Pedro Alves * gdb.base/catch-gdb-caused-signals.exp: Use gdb_test_stdio. diff --git a/gdb/testsuite/gdb.base/dprintf.exp b/gdb/testsuite/gdb.base/dprintf.exp index 0cd31aa8958..23905e422e6 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"