diff options
author | Pedro Alves <palves@redhat.com> | 2010-04-29 16:33:16 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2010-04-29 16:33:16 +0000 |
commit | e66408edfdc94395f4a59bbe360abb222ccc48ea (patch) | |
tree | 7a885efc4c6361cbf4b55b4ac3838c2215d5831c /gdb/testsuite/gdb.mi | |
parent | b2319725b8a702f0efa820d0cc4dd0bdd7d8f52b (diff) | |
download | gdb-e66408edfdc94395f4a59bbe360abb222ccc48ea.zip gdb-e66408edfdc94395f4a59bbe360abb222ccc48ea.tar.gz gdb-e66408edfdc94395f4a59bbe360abb222ccc48ea.tar.bz2 |
PR gdb/11557
gdb/
* regcache.c (registers_changed): Rename to ...
(registers_changed_ptid): ... this, and only delete register cache
entries matching the ptid filter argument.
(registers_changed): Reimplement on top of registers_changed_ptid.
* regcache.h (registers_changed_ptid): Declare.
* target.c (target_resume): Flush register caches.
gdb/testsuite/
* gdb.mi/mi-ns-stale-regcache.exp, gdb.mi/ns-stale-regcache.c: New
files.
Diffstat (limited to 'gdb/testsuite/gdb.mi')
-rw-r--r-- | gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp | 88 | ||||
-rw-r--r-- | gdb/testsuite/gdb.mi/ns-stale-regcache.c | 30 |
2 files changed, 118 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp b/gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp new file mode 100644 index 0000000..a98e702 --- /dev/null +++ b/gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp @@ -0,0 +1,88 @@ +# Copyright 2002, 2003, 2004, 2005, 2007, 2008, 2009, 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 <http://www.gnu.org/licenses/>. + +# Regression test for PR11557. Make sure we don't end up with a stale +# register cache just after resuming a thread. + +load_lib mi-support.exp +set MIFLAGS "-i=mi" + +gdb_exit +if {[mi_gdb_start]} { + continue +} + +proc mi_nonstop_resume { command test } { + if { [mi_send_resuming_command $command $test] != 0 } { + # If a resume fails, assume non-stop is broken or unsupported + # for this target. We have logged a FAIL or UNSUPPORTED; skip + # the remaining tests to limit timeouts. + return -code continue + } +} + +# +# Start here +# +set testfile "ns-stale-regcache" +set srcfile "$testfile.c" +set binfile "$objdir/$subdir/mi-$testfile" + +set options [list debug incdir=$objdir] +if {[gdb_compile "$srcdir/$subdir/$srcfile" \ + $binfile executable $options] != "" } { + return -1 +} + +mi_gdb_reinitialize_dir $srcdir/$subdir +mi_gdb_load $binfile + +set supported 0 +send_gdb "-gdb-show non-stop\n" +gdb_expect { + -re ".*\\^done,value=\"off\",supported=\"(\[^\"\]+)\"\r\n$mi_gdb_prompt$" { + if { $expect_out(1,string) == "1" } { + set supported 1 + } + } + -re ".$mi_gdb_prompt$" { + } +} + +mi_gdb_test "-gdb-set non-stop 1" ".*" +mi_gdb_test "-gdb-set target-async 1" ".*" +detect_async + +if { [mi_run_to_main] < 0 } { + perror "mi-ns-stale-regcache.exp tests suppressed" + continue +} + +# Check that register and stack info don't end up stale after resuming +# a thread. +mi_nonstop_resume "exec-continue" "resume thread" + +mi_gdb_test "-data-evaluate-expression \$pc" \ + "\\^error,msg=\".*\"" "no stale register cache of resumed thread" + +mi_gdb_test "-stack-info-frame" \ + "\\^error,msg=\".*\"" "no stale frame info of resumed thread" + +# Check that the thread is still running. If the above tests passed, +# we want it to be for the right reasons. +mi_check_thread_states {"running"} "main thread still running" + +mi_gdb_exit diff --git a/gdb/testsuite/gdb.mi/ns-stale-regcache.c b/gdb/testsuite/gdb.mi/ns-stale-regcache.c new file mode 100644 index 0000000..0e51f75 --- /dev/null +++ b/gdb/testsuite/gdb.mi/ns-stale-regcache.c @@ -0,0 +1,30 @@ +/* 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 <http://www.gnu.org/licenses/>. +*/ + +#include <unistd.h> + +int +main (int argc, char **argv) +{ + volatile int my_number = 1; + + while (my_number > 0) + { + usleep (1); + } +} |