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

if {[skip_shlib_tests]} {
    untested catch-load.exp
    return -1
}

if {[get_compiler_info]} {
    warning "Could not get compiler info"
    untested catch-load.exp
    return -1
}

set testfile catch-load
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug shlib_load}] != "" } {
    untested catch-load.exp
    return -1
}

set testfile2 catch-load-so
set srcfile2 ${testfile2}.c
set binfile2 ${objdir}/${subdir}/${testfile2}.so
set binfile2_dlopen [shlib_target_file ${testfile2}.so]
if { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfile2}" ${binfile2} {debug}] != "" } {
    untested catch-load.exp
    return -1
}

# Run one set of tests.
# SCENARIO is the name of the test scenario, it is just used in test
# names.
# KIND is passed to the "catch" command.
# MATCH is a boolean saying whether we expect the catchpoint to be hit.
proc one_catch_load_test {scenario kind match sostop} { with_test_prefix "${scenario}" {
    global verbose testfile testfile2 binfile2 binfile2_dlopen
    global srcfile
    global decimal gdb_prompt

    clean_restart $testfile
    gdb_load_shlibs $binfile2

    if {![runto_main]} {
	fail "can't run to main"
	return
    }

    gdb_breakpoint [gdb_get_line_number "final breakpoint here"]
    gdb_test_no_output "set var libname = \"$binfile2_dlopen\""
    gdb_test_no_output "set stop-on-solib-events $sostop"
    gdb_test "catch $kind" "Catchpoint $decimal \\(.*\\)"

    gdb_test_multiple "continue" "continue" {
	-re "Catchpoint $decimal\r\n.*loaded .*/$testfile2.*\r\n.*$gdb_prompt $" {
	    if {$match} {
		pass "continue"
	    } else {
		fail "continue"
	    }
	}

	-re "Stopped due to shared library event.*\r\n$gdb_prompt $" {
	    if {$sostop} {
		pass "continue"
	    } else {
		fail "continue"
	    }
	}

	-re "Breakpoint $decimal, .*\r\n$gdb_prompt $" {
	    if {!$match} {
		pass "continue"
	    } else {
		fail "continue"
	    }
	}

	-re ".*$gdb_prompt $" {
	    fail "continue"
	}
    }
}}

one_catch_load_test "plain load" "load" 1 0
one_catch_load_test "plain load with stop-on-solib-events" "load" 1 1
one_catch_load_test "rx load" "load $testfile2" 1 0
one_catch_load_test "rx load with stop-on-solib-events" "load $testfile2" 1 1
one_catch_load_test "non-matching load" "load zardoz" 0 0
one_catch_load_test "non-matching load with stop-on-solib-events" \
    "load zardoz" 0 1

one_catch_load_test "plain unload" "unload" 1 0
one_catch_load_test "plain unload with stop-on-solib-events" "unload" 1 1
one_catch_load_test "rx unload" "unload $testfile2" 1 0
one_catch_load_test "rx unload with stop-on-solib-events" \
    "unload $testfile2" 1 1
one_catch_load_test "non-matching unload" "unload zardoz" 0 0
one_catch_load_test "non-matching unload with stop-on-solib-events" \
    "unload zardoz" 0 1
