mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-27 04:52:05 +08:00
4a94e36819
This commit brings all the changes made by running gdb/copyright.py as per GDB's Start of New Year Procedure. For the avoidance of doubt, all changes in this commits were performed by the script.
212 lines
5.7 KiB
Plaintext
212 lines
5.7 KiB
Plaintext
# Copyright (C) 2012-2022 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 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"
|
|
}
|