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

load_lib "java.exp"

standard_testfile .java
if  { [compile_java_from_source $srcdir/$subdir/$srcfile $binfile "-g"] != "" } {
    untested "Couldn't compile ${srcdir}/$subdir/${srcfile}"
    return -1
}

# Start with a fresh gdb.

clean_restart $testfile

set line [gdb_get_line_number "break here" $testfile.java]
if ![runto "$testfile.java:$line"] then {
    perror "couldn't run to jnpe.main"
    continue
} 

if {![skip_unwinder_tests]} {
    unsupported "jnpe.exp could not find _Unwind_DebugHook"
    return -1
}

gdb_test "handle SIGSEGV nostop noprint" \
  "SIGSEGV.*fault" \
  "disable SIGSEGV for next-over-NPE"

# The line where we stop differs according to gcj; just check that we
# did not already execute the catch point.  This is done in a somewhat
# funny way due to other gcj debuginfo oddities that don't
# meaningfully affect the user's experience.

gdb_test "next" \
  ".*" \
  "next over NPE"

set line [gdb_get_line_number "stop point"]
gdb_breakpoint $line
gdb_test "continue" "Continuing.\[\r\n\]*success\[\r\n\]*Breakpoint .*:$line\[\r\n\]*.*// stop point\[\r\n\]*" \
  "continue to success for next-over-NPE"
