# Copyright 2012-2013 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 mi-support.exp

if {[skip_shlib_tests]} {
    return -1
}

gdb_exit
if [mi_gdb_start] {
    continue
}

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

standard_testfile mi-catch-load.c

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

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

# test -catch-load
mi_gdb_test "111-gdb-set auto-solib-add on" "111\\^done" "catch-load: auto-solib-add on"
mi_gdb_test "222-catch-load -t mi-catch-load-so.so*" \
    "222\\^done,bkpt=\{number=\"2\",type=\"catchpoint\",disp=\"del\",enabled=\"y\",what=\"load of library matching mi-catch-load-so\.so\\*\",catch-type=\"load\",thread-groups=\\\[\"i1\"\\\],times=\"0\"\}" \
    "catch-load: catch load"
mi_send_resuming_command "exec-continue" "catch-load: continue"

gdb_expect {
    -re "\\*stopped.*reason=\"solib-event\".*added=.*\r\n.*\r\n$mi_gdb_prompt$" {
        pass "catch-load: solib-event stop"
    }
    -re ".*$mi_gdb_prompt$" {
        fail "catch-load: solib-event stop"
    }
    timeout {
        fail "(timeout) catch-load: solib-event stop"
    }
}

mi_gdb_exit


if [mi_gdb_start] {
    continue
}
mi_run_to_main

# test -catch-unload
mi_gdb_test "111-gdb-set auto-solib-add on" "111\\^done" "catch-unload: auto-solib-add on"
mi_gdb_test "222-catch-unload -t mi-catch-load-so.so*" \
    "222\\^done,bkpt=\{number=\"2\",type=\"catchpoint\",disp=\"del\",enabled=\"y\",what=\"unload of library matching mi-catch-load-so\.so\\*\",catch-type=\"unload\",thread-groups=\\\[\"i1\"\\\],times=\"0\"\}" \
    "catch-unload: catch unload"
mi_send_resuming_command "exec-continue" "catch-unload: continue"

gdb_expect {
    -re "\\*stopped.*reason=\"solib-event\".*removed=.*\r\n.*\r\n$mi_gdb_prompt$" {
        pass "catch-unload: solib-event stop"
    }
    -re ".*$mi_gdb_prompt$" {
        fail "catch-unload: solib-event stop"
    }
    timeout {
        fail "(timeout) catch-unload: solib-event stop"
    }
}
