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 + + clean_restart $binfile + + if ![runto main] { + return -1 + } + + gdb_test "dprintf foo,\"At foo entry\\n\"" \ + "Dprintf .*" + + gdb_test "dprintf $dp_location1,\"arg=%d, g=%d\\n\", arg, g" \ + "Dprintf .*" + + gdb_test "break $bp_location1" "Breakpoint .*" +} + +# Test continuing across a dprintf. PATTERN matches the output +# generated by the dprintf. MSG is used as test message. + +proc test_dprintf {pattern msg} { + gdb_test_stdio "continue" $pattern "" "$msg" +} + +# Test the "call" style. + +proc test_call {} { + global binfile + global bp_location1 # Now switch styles and rerun; in the absence of redirection the # output should be the same. - gdb_test_no_output "set dprintf-style call" "Set dprintf style to call" + with_test_prefix "printf" { + restart - gdb_run_cmd + gdb_test_no_output "set dprintf-style call" "set dprintf style to call" - gdb_test "" "Breakpoint" + test_dprintf "At foo entry.*arg=1234, g=1234\r\n" "1st dprintf" - gdb_test "continue" "At foo entry.*arg=1234, g=1234.*" "1st dprintf, call" - - gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" "2nd dprintf, call" - - gdb_test_no_output "set dprintf-function fprintf" "Set dprintf function" - gdb_test_no_output "set dprintf-channel stderr" "Set dprintf channel" - - gdb_run_cmd - - gdb_test "" "Breakpoint" - - gdb_test "continue" "At foo entry.*arg=1234, g=1234.*" \ - "1st dprintf, fprintf" - - gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" \ - "2nd dprintf, fprintf" -} - -# Now test the "agent" style. - -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" + 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" } } -if $target_can_dprintf { - gdb_run_cmd +# The "call" style depends on having I/O functions available. - gdb_test "" "Breakpoint" +if ![target_info exists gdb,noinferiorio] { + with_test_prefix "call" { + test_call + } +} + +# Test the "agent" style. + +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"