# Copyright 2003, 2004, 2007, 2008 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/>.

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@gnu.org

# This file is part of the gdb testsuite.

# Tests for PR:1431.  Catch gdb not continuing to second function properly.
# Note that originally this bug was reported as a problem with the "until"
# command, which actually is behaving as currently defined.  What apparently
# was expected was the behavior of the newer "advance" command.

if $tracelevel {
    strace $tracelevel
}

# Observe that the until command doesn't go all the way to sub2.

set prms_id 0
set bug_id 0

if ![istarget "sh-*-*"] then {
    verbose "Skipping SH backtrace tests."
    return
}

set testfile "gdb1431"
set srcfile ${testfile}.s
set binfile ${objdir}/${subdir}/${testfile}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable ""] != "" } {
    untested gdb1431.exp
    return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

#
# Run to `main' where we begin our tests.
#

if ![runto_main] then {
    gdb_suppress_tests
}

gdb_test "advance sub1" "hello world\r\n$hex in sub1 \\(\\)" "get to sub1"
gdb_test "advance sub2" "$hex in main \\(\\)" "advance returns from sub1 frame"
gdb_test "advance sub2" "$hex in sub2 \\(\\)" "get to sub2"
