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

#
# Test support for stepping over longjmp.
#


set testfile "longjmp"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
     untested longjmp.exp
     return -1
}

if [get_compiler_info] {
    return -1
}

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

if ![runto_main] then {
   fail "Can't run to main"
   return 0
}

set bp_miss_step_1 [gdb_get_line_number "miss_step_1"]
set bp_miss_step_2 [gdb_get_line_number "miss_step_2"]

set bp_start_test_1 [gdb_get_line_number "patt1"]
set bp_start_test_2 [gdb_get_line_number "patt2"]
set bp_start_test_3 [gdb_get_line_number "patt3"]

#
# Pattern 1 - simple longjmp.
#

delete_breakpoints

gdb_test "break $bp_start_test_1" \
    "Breakpoint.*at.* file .*$srcfile, line.*$bp_start_test_1.*" \
    "breakpoint at pattern 1 start"
gdb_test "continue" "patt1.*" "continue to breakpoint at pattern 1 start"

# set safe-net break
gdb_test "break $bp_miss_step_1" \
    "Breakpoint.*at.* file .*$srcfile, line.*$bp_miss_step_1.*" \
    "breakpoint at miss_step_1"

gdb_test "next" "longjmps\\+\\+;.*" "next over setjmp (1)"
gdb_test "next" "longjmp \\(env, 1\\);.*" "next to longjmp (1)"

set msg "next over longjmp(1)"
setup_kfail "gdb/14971" *-*-*
gdb_test_multiple "next" $msg {
    -re ".*patt1.*$gdb_prompt $" {
	pass $msg
	gdb_test "next" "resumes\\+\\+.*" "next into else block (1)"
	gdb_test "next" "miss_step_1.*" "next into safety net (1)"
    }
    -re "miss_step_1.*$gdb_prompt $" {
	fail $msg
    }
}

#
# Pattern 2 - longjmp from an inner function.
#

delete_breakpoints

gdb_test "break $bp_start_test_2" \
    "Breakpoint.*at.* file .*$srcfile, line.*$bp_start_test_2.*" \
    "breakpoint at pattern 2 start"
gdb_test "continue" "patt2.*" "continue to breakpoint at pattern 2 start"

# set safe-net break
gdb_test "break $bp_miss_step_2" \
    "Breakpoint.*at.* file .*$srcfile, line.*$bp_miss_step_2.*" \
    "breakpoint at miss_step_2"

gdb_test "next" "call_longjmp.*" "next over setjmp (2)"

set msg "next over call_longjmp (2)"
setup_kfail "gdb/14971" *-*-*
gdb_test_multiple "next" $msg {
    -re ".*patt2.*$gdb_prompt $" {
	pass $msg

	gdb_test "next" "resumes\\+\\+.*" "next into else block (2)"
	gdb_test "next" "miss_step_2.*" "next into safety net (2)"
    }
    -re "miss_step_2.*$gdb_prompt $" {
	fail $msg
    }
}

#
# Pattern 3 - setjmp/longjmp inside stepped-over function.
#

delete_breakpoints

gdb_test "break $bp_start_test_3" \
    "Breakpoint.*at.* file .*$srcfile, line.*$bp_start_test_3.*" \
    "breakpoint at pattern 3 start"
gdb_test "continue" "patt3.*" "continue to breakpoint at pattern 3 start"

gdb_test "next" "longjmp caught.*" "next over patt3"
