# Copyright 2002-2005, 2007-2012 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.

if { ![support_displaced_stepping] } { 
    unsupported "displaced stepping"
    return -1
}

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
#
standard_testfile ns-stale-regcache.c

set options [list debug]
if {[gdb_compile "$srcdir/$subdir/$srcfile" \
	 $binfile executable $options] != "" } {
    return -1
}

mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load $binfile

mi_gdb_test "-gdb-set non-stop 1" ".*"
mi_gdb_test "-gdb-set target-async 1" ".*"
mi_detect_async

if { [mi_run_to_main] < 0 } {
    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
