1# Copyright 2002-2020 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16# Regression test for PR11557. Make sure we don't end up with a stale 17# register cache just after resuming a thread. 18 19if { ![support_displaced_stepping] } { 20 unsupported "displaced stepping" 21 return -1 22} 23 24load_lib mi-support.exp 25set MIFLAGS "-i=mi" 26 27gdb_exit 28if {[mi_gdb_start]} { 29 continue 30} 31 32proc mi_nonstop_resume { command test } { 33 if { [mi_send_resuming_command $command $test] != 0 } { 34 # If a resume fails, assume non-stop is broken or unsupported 35 # for this target. We have logged a FAIL or UNSUPPORTED; skip 36 # the remaining tests to limit timeouts. 37 return -code continue 38 } 39} 40 41# 42# Start here 43# 44standard_testfile ns-stale-regcache.c 45 46set options [list debug] 47if {[gdb_compile "$srcdir/$subdir/$srcfile" \ 48 $binfile executable $options] != "" } { 49 return -1 50} 51 52mi_gdb_reinitialize_dir $srcdir/$subdir 53mi_gdb_load $binfile 54 55mi_gdb_test "-gdb-set non-stop 1" ".*" 56mi_gdb_test "-gdb-set mi-async 1" ".*" 57mi_detect_async 58 59if { [mi_run_to_main] < 0 } { 60 continue 61} 62 63# Check that register and stack info don't end up stale after resuming 64# a thread. 65mi_nonstop_resume "exec-continue" "resume thread" 66 67mi_gdb_test "-data-evaluate-expression \$pc" \ 68 "\\^error,msg=\".*\"" "no stale register cache of resumed thread" 69 70mi_gdb_test "-stack-info-frame" \ 71 "\\^error,msg=\".*\"" "no stale frame info of resumed thread" 72 73# Check that the thread is still running. If the above tests passed, 74# we want it to be for the right reasons. 75mi_check_thread_states {"running"} "main thread still running" 76 77mi_gdb_exit 78