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

# 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:1291.  Ensure that backtrace works properly for stack
# frames greater than 256 bytes.

# Test SH backtraces with >256 byte frame stack. (PR:1291)


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

set testfile "gdb1291"
set srcfile ${testfile}.s
set binfile ${objdir}/${subdir}/${testfile}
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable ""] != "" } {
    untested gdb1291.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 "b sub1" "Breakpoint 2.*" "set breakpoint"
gdb_test "c" "Breakpoint 2.* sub1 .*" "get to sub1"

send_gdb "bt\n"
gdb_expect {
    -re "#0.* sub1 .*\r\n#1\[ \t\]*$hex in main \\(\\).*\r\n$gdb_prompt $" {
	pass "backtrace with local variable less than or equal to 256 bytes"
    }
    -re ".*$gdb_prompt $" {
	fail "backtrace with local variable less than or equal to 256 bytes"
    }
    timeout {
	fail "backtrace with local variable less than or equal to 256 bytes (timeout)"
    }
}

gdb_test "b sub2" "Breakpoint 3.*" "set breakpoint"
gdb_test "c" "Breakpoint 3.* sub2 .*" "get to sub2"

send_gdb "bt\n"
gdb_expect {
    -re "#0.* sub2 .*\r\n#1\[ \t\]*$hex in main \\(\\).*\r\n$gdb_prompt $" {
	pass "backtrace with local variable larger than 256 bytes"
    }
    -re "#0.* sub2 .*\r\n#1  0x00000000 in \\?\\? \\(\\).*\r\n$gdb_prompt $" {
	kfail "gdb/1291" "backtrace with local variable larger than 256 bytes"
    }
    -re ".*$gdb_prompt $" {
	fail "backtrace with local variable larger than 256 bytes"
    }
    timeout {
	fail "backtrace with local variable larger than 256 bytes (timeout)"
    }
}
