# Copyright 2007-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
set MIFLAGS "-i=mi"

#
# test running programs
#

if {[skip_shlib_tests]} {
    return 0
}

standard_testfile mi-pending.c mi-pendshr.c
set lib_sl [standard_output_file mi-pendshr.sl]

set lib_opts  debug
set exec_opts [list debug shlib=$lib_sl]

if [get_compiler_info] {
    return -1
}

if { [gdb_compile_shlib $srcdir/$subdir/$srcfile2 $lib_sl $lib_opts] != ""
     || [gdb_compile $srcdir/$subdir/$srcfile $binfile executable $exec_opts] != ""} {
    untested "Could not compile either $libsrc or $srcdir/$subdir/$srcfile."
    return -1
}

# Start with a fresh gdb.

gdb_exit
mi_gdb_start
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}
mi_load_shlibs $lib_sl

# Set pending breakpoint via MI.
mi_gdb_test "-break-insert -f pendfunc1" \
    ".*\\^done,bkpt=\{number=\"1\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"<PENDING>\",pending=\"pendfunc1\",times=\"0\",original-location=\"pendfunc1\"\}"\
    "MI pending breakpoint on pendfunc1"

# Set pending breakpoint with a condition via MI.
mi_gdb_test "-break-insert -f -c x==4 ${srcfile2}:pendfunc2" \
    ".*\\^done,bkpt=\{number=\"2\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"<PENDING>\",pending=\"${srcfile2}:pendfunc2\",cond=\"x==4\",times=\"0\",original-location=\"${srcfile2}:pendfunc2\"\}"\
    "MI pending breakpoint on ${srcfile2}:pendfunc2 if x==4"

mi_run_cmd
mi_expect_stop "breakpoint-hit" "pendfunc1" ".*" ".*" ".*" \
    { "" "disp=\"keep\"" } \
    "Run till MI pending breakpoint on pendfunc1"

mi_send_resuming_command "exec-continue" "continuing execution to skip conditional bp"
# We should not stop on the conditional breakpoint yet, but we stop on the original bp. 
mi_expect_stop "breakpoint-hit" "pendfunc1" ".*" ".*" ".*" \
    { "" "disp=\"keep\"" } \
    "Run till MI pending breakpoint on pendfunc1 a second time"

mi_send_resuming_command "exec-continue" "continuing execution to conditional bp"
# Now we should stop on the conditional breakpoint.
mi_expect_stop "breakpoint-hit" "pendfunc2" "\{name=\"x\",value=\"4\"\}" ".*" ".*" \
    { "" "disp=\"keep\"" } \
    "Run till MI pending breakpoint on pendfunc2 with x==4"
