From bdf92a1c039d3dfb07246213967bf109545e07a5 Mon Sep 17 00:00:00 2001 From: Pierre Muller Date: Mon, 26 Apr 2010 20:49:28 +0000 Subject: [PATCH] PR breakpoints/11531. * gdb.base/gdb11531.c: New file. * gdb.base/gdb11531.exp: New file. --- gdb/testsuite/ChangeLog | 6 ++++ gdb/testsuite/gdb.base/gdb11531.c | 40 +++++++++++++++++++++++ gdb/testsuite/gdb.base/gdb11531.exp | 64 +++++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 gdb/testsuite/gdb.base/gdb11531.c create mode 100644 gdb/testsuite/gdb.base/gdb11531.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 4c3bf83..5be5bb7 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-04-24 Pierre Muller + + PR breakpoints/11531. + * gdb.base/gdb11531.c: New file. + * gdb.base/gdb11531.exp: New file. + 2010-04-26 Tom Tromey * gdb.base/completion.exp: Add tests for completion and deprecated diff --git a/gdb/testsuite/gdb.base/gdb11531.c b/gdb/testsuite/gdb.base/gdb11531.c new file mode 100644 index 0000000..5a7a3de --- /dev/null +++ b/gdb/testsuite/gdb.base/gdb11531.c @@ -0,0 +1,40 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2010 Free Software Foundation, Inc. + + Contributed by Pierre Muller. + + 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 . + + Test for Solaris specific watchpoint problem. */ + +struct rec +{ + int x; + double y; + int z; +}; + +static struct rec myrec; + +int +main () +{ + myrec.x = 5; + myrec.y = 3.4; + myrec.z = 56; + myrec.x = 78; + return myrec.x; +} + diff --git a/gdb/testsuite/gdb.base/gdb11531.exp b/gdb/testsuite/gdb.base/gdb11531.exp new file mode 100644 index 0000000..43748a1 --- /dev/null +++ b/gdb/testsuite/gdb.base/gdb11531.exp @@ -0,0 +1,64 @@ +# This testcase is part of GDB, the GNU debugger. + +# Copyright 2010 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 . + +# Test GDB bug report 11531. +# This is a problem related to CANNOT_STEP_HW_WATCHPOINTS macro. +# It affects Solaris native targets. + +if $tracelevel then { + strace $tracelevel +} + +set prms_id 0 +set bug_id 0 + +set testfile "gdb11531" + +if { [prepare_for_testing $testfile.exp $testfile $testfile.c {debug}] } { + return -1; +} + + +if { ![runto main] } then { + fail "run to main" + return +} + +# The breakpoint is probably at the instruction where the value being +# watched (myrec.x) gets updated. This is the instruction where we +# expect to receive a watchpoint notification when we do the "stepi" +# below. However, having the breakpoint at the same location as this +# intruction can possibly interfere with our testcase, as stepping +# over the breakpoint in order to get past it may incorrectly lead +# to the debugger missing the watchpoint hit. This would be a bug +# in GDB, but this is not the bug that we are trying to test here. +# So, we remove all breakpoints first. + +delete_breakpoints + +set nl "\[\r\n\]+" + +gdb_test "watch myrec.x" ".*atchpoint \[0-9\]+: myrec\.x" "Set watchpoint" + +gdb_test "next" \ + ".*${nl}.*atchpoint \[0-9\]+: myrec\.x${nl}Old value = 0${nl}New value = 5${nl}.*" \ + "watchpoint variable triggers at next" + +gdb_test "continue" \ + ".*${nl}.*atchpoint \[0-9\]+: myrec\.x${nl}Old value = 5${nl}New value = 78${nl}.*" \ + "watchpoint variable triggers at continue" + -- 2.7.4