--- /dev/null +++ b/gdb/testsuite/gdb.base/dprintf-same-addr.c @@ -0,0 +1,35 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright (C) 2013 Free Software Foundation, Inc. + Contributed by Hui Zhu + + 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 . */ + +#include + +int +main () +{ + int i; + + for (i=0; i < 99; i++) + { + printf("Hello\n"); /* test line */ + + /* Without this line, test with fprintf will not work. */ + fprintf (stderr, "world\n"); + } + + return 0; +} --- /dev/null +++ b/gdb/testsuite/gdb.base/dprintf-same-addr.exp @@ -0,0 +1,82 @@ +# Copyright (C) 2013 Free Software Foundation, Inc. +# Contributed by Hui Zhu + +# 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 . + +standard_testfile + +if [prepare_for_testing "failed to prepare for dprintf with non-stop" \ + ${testfile} ${srcfile} {debug}] { + return -1 +} + +set bp_location [gdb_get_line_number "test line"] + +proc continue_dprintf {args} { + with_test_prefix $args { + global bp_location + + gdb_test "dprintf $bp_location,\"Hello\\n\"" "Dprintf .*" + gdb_test_no_output {set $bpnum1=$bpnum} + gdb_breakpoint $bp_location + gdb_test_no_output {set $bpnum2=$bpnum} + + gdb_test "continue" "Breakpoint \[0-9\]+, main .*" "First continue" + + gdb_test_no_output "condition \$bpnum1 i>10" + gdb_test_no_output "condition \$bpnum2 i>15" + + gdb_test "continue" "Breakpoint \[0-9\]+, main .*" "Second continue" + + gdb_test "p i" "\[0-9\]+ = 16" "check i" + } +} + +if ![runto main] { + return -1 +} +gdb_test_no_output "set dprintf-style gdb" "Set dprintf style to gdb" +continue_dprintf "gdb" + +if ![target_info exists gdb,noinferiorio] { + if ![runto main] { + return -1 + } + gdb_test_no_output "set dprintf-style call" "Set dprintf style to call" + continue_dprintf "call" + + if ![runto main] { + return -1 + } + gdb_test_no_output "set dprintf-function fprintf" "set dprintf-channel stderr" + gdb_test_no_output "set dprintf-channel stderr" "set dprintf channel" + continue_dprintf "fprintf" +} else { + unsupported "test dprintf-style call" +} + +if ![runto main] { + return -1 +} +gdb_test "dprintf main,\"Hello\\n\"" "Dprintf .*" +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 $" { + unsupported $msg + } + -re ".*$gdb_prompt $" { + pass $msg + continue_dprintf "agent" + } +}