binutils-gdb/gdb/testsuite/gdb.base/dprintf.exp
Joel Brobecker 61baf725ec update copyright year range in GDB files
This applies the second part of GDB's End of Year Procedure, which
updates the copyright year range in all of GDB's files.

gdb/ChangeLog:

        Update copyright year range in all GDB files.
2017-01-01 10:52:34 +04:00

212 lines
5.7 KiB
Plaintext

# Copyright (C) 2012-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 <http://www.gnu.org/licenses/>.
standard_testfile
if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } {
return -1
}
set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]
set dp_location1 [gdb_get_line_number "set dprintf 1 here"]
if ![runto main] {
return -1
}
gdb_test "dprintf" "Format string required"
gdb_test "dprintf foo" "Format string required"
gdb_test "dprintf 29" "Format string required"
delete_breakpoints
gdb_breakpoint "main"
gdb_test "dprintf foo,\"At foo entry\\n\"" \
"Dprintf .*"
gdb_test "ignore \$bpnum 1" ".*Will ignore next crossing of breakpoint.*"
gdb_test "dprintf $dp_location1,\"arg=%d, g=%d\\n\", arg, g" \
"Dprintf .*"
gdb_test_sequence "info breakpoints" "dprintf info 1" {
"\[\r\n\]Num Type Disp Enb Address +What"
"\[\r\n\]2 breakpoint"
"\[\r\n\]3 dprintf"
"\[\r\n\] printf \"At foo entry\\\\n\""
"\[\r\n\]4 dprintf"
"\[\r\n\] printf \"arg=%d, g=%d\\\\n\", arg, g"
}
gdb_test "break $bp_location1" \
"Breakpoint .*"
gdb_run_cmd
gdb_test "" "Breakpoint"
gdb_test "continue" "arg=1234, g=1234.*" "1st dprintf, gdb"
gdb_test "continue" "At foo entry.*arg=1235, g=2222.*" "2nd dprintf, gdb"
# Restart GDB and set set up for testing.
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.
with_test_prefix "printf" {
restart
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"
}
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
}
}
# 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"
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
unsupported "$msg"
}
-re "Breakpoint \[0-9\]+, foo .*$gdb_prompt $" {
pass "$msg"
}
}
if $target_can_dprintf {
gdb_test "continue" "Breakpoint \[0-9\]+, foo .*" "2nd dprintf"
gdb_test_sequence "info breakpoints" "dprintf info" {
"\[\r\n\]Num Type Disp Enb Address +What"
"\[\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\]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"
# Test that force-disabling the BreakpointCommands RSP feature works
# as expected. dprintf relies on support for target-side breakpoint
# commands --- use it as proxy.
if [gdb_is_target_remote] {
gdb_test_no_output "set remote breakpoint-commands-packet off"
gdb_test "set dprintf-style agent" \
"warning: Target cannot run dprintf commands.*" \
"set dprintf-style agent, with feature disabled"
}