diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/dprintf.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/dprintf.exp | 134 |
1 files 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 <http://www.gnu.org/licenses/>. +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" |