binutils-gdb/gdb/testsuite/gdb.arch/i386-dr3-watch.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

92 lines
3.3 KiB
Plaintext

# Copyright 2011-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/>.
# x86 and amd64 gdbserver had a bug where a watchpoint triggered by
# the DR3 debug register would trip on a bogus assertion.
# This test relies on being able to set 4 hardware watchpoints. Since
# that is not a valid assumption across most targets, and we're
# testing a x86 specific bug, skip everywhere else.
if { ![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"] } then {
return 0
}
standard_testfile
if [prepare_for_testing "failed to prepare" ${binfile} ${srcfile} {debug $additional_flags}] {
return -1
}
if ![runto_main] then {
untested "could not run to main"
return -1
}
gdb_test_no_output "set breakpoint always-inserted on"
# Test that we handle watchpoints in all of DR0-DR3.
gdb_test "watch i1" "Hardware watchpoint .*: i1"
gdb_test "watch i2" "Hardware watchpoint .*: i2"
gdb_test "watch i3" "Hardware watchpoint .*: i3"
gdb_test "watch i4" "Hardware watchpoint .*: i4"
gdb_test "c" "Hardware watchpoint.*: i1.*" "continue to i1 watchpoint"
gdb_test "c" "Hardware watchpoint.*: i2.*" "continue to i2 watchpoint"
gdb_test "c" "Hardware watchpoint.*: i3.*" "continue to i3 watchpoint"
gdb_test "c" "Hardware watchpoint.*: i4.*" "continue to i4 watchpoint"
delete_breakpoints
# Regression test for a bug where the i386 watchpoints support backend
# would leave some debug registers occupied even if not enough debug
# registers were available to cover a single watchpoint location.
gdb_test "watch i1" \
"Hardware watchpoint .*: i1" \
"set watchpoint occuping one debug register"
# gap1 too long to fit the 3 left over debug registers (but would fit
# 4 if all were available).
set test "watchpoint on gap1 does not fit debug registers"
gdb_test_multiple "watch gap1" "$test" {
-re "Hardware watchpoint .*: gap1.*Warning:.*Could not insert hardware watchpoint.*You may have requested too many.*\r\n$gdb_prompt $" {
pass $test
}
-re "Hardware watchpoint .*: gap1\r\n$gdb_prompt $" {
pass "$test (target emulates hardware watchpoints)"
return
}
-re "Watchpoint .*: gap1\r\n$gdb_prompt $" {
pass "$test (gdb figured out itself the watchpoint does not fit)"
return
}
}
# Start over.
gdb_test "delete" \
"" \
"delete all watchpoints" \
{Delete all breakpoints\? \(y or n\) $} \
"y"
# If debug registers were left occupied by mistake, we'll fail to set
# some of these watchpoints. Each watchpoint should fit in one of the
# 4 debug registers available.
gdb_test "watch i1" "Hardware watchpoint .*: i1" "watch i1 still fits"
gdb_test "watch i2" "Hardware watchpoint .*: i2" "watch i2 still fits"
gdb_test "watch i3" "Hardware watchpoint .*: i3" "watch i3 still fits"
gdb_test "watch i4" "Hardware watchpoint .*: i4" "watch i4 still fits"