# 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/>.

# Test DW_OP_call_frame_cfa.

set testfile "pr10770"
set srcfile ${testfile}.c

if {[prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}]} {
    return 0
}

# This test can only be run on targets which use GCC.
get_compiler_info ${testfile}
if {![test_compiler_info "gcc-*"]} {
    return 0
}

if {![runto_main]} {
    return -1
}

# This test also requires DWARF 2.
get_debug_format
if {![test_debug_format "DWARF 2"]} {
    return -1
}

gdb_test "break force_unwind" "Breakpoint .*" "set breakpoint for pr10770"
gdb_test "cont" "Breakpoint ., force_unwind .*"
# If we have the bug, this will hang.
gdb_test "frame 2" "#2 .* callme .*"
