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


if {[skip_shlib_tests]} {
    return 0
}

standard_testfile
set libfile "dprintf-pendshr"
set libsrc  $srcdir/$subdir/$libfile.c
set lib_sl [standard_output_file $libfile.sl]

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

if { [get_compiler_info] } {
    return -1
}

if { [gdb_compile_shlib $libsrc $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
}

with_test_prefix "without format" {
    gdb_exit
    gdb_start
    gdb_reinitialize_dir $srcdir/$subdir

    gdb_test \
	"dprintf pendfunc" \
	"Dprintf.*pendfunc.*pending." \
	"set pending dprintf" \
	".*Make dprintf pending.*y or \\\[n\\\]. $" \
	"y"

    gdb_test "file ${binfile}" ".*Error in re-setting breakpoint.*" "resolved dprintf fails to be re-set"
}

with_test_prefix "without symbols" {
    gdb_exit
    gdb_start
    gdb_reinitialize_dir $srcdir/$subdir

    gdb_test \
	"dprintf pendfunc1, \"x=%d\\n\", x" \
	"Dprintf.*pendfunc1.*pending." \
	"set pending dprintf" \
	".*Make dprintf pending.*y or \\\[n\\\]. $" \
	"y"

    gdb_test "info break" \
        "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+dprintf.*keep y.*PENDING.*pendfunc1.*" \
	"single pending dprintf info"

    gdb_load ${binfile}
    gdb_load_shlibs $lib_sl

    gdb_run_cmd

    gdb_test "" ".*x=3.*x=4.*x=3.*" "run to resolved dprintf"
}

clean_restart ${binfile}
gdb_load_shlibs $lib_sl

#
# Test setting, querying, and modifying pending breakpoints
#

gdb_test \
    "dprintf pendfunc1, \"x=%d\\n\", x" \
    "Dprintf.*pendfunc1.*pending." \
    "set pending dprintf" \
    ".*Make dprintf pending.*y or \\\[n\\\]. $" \
    "y"

gdb_test "info break" \
    "Num     Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+dprintf.*keep y.*PENDING.*pendfunc1.*" \
"single pending dprintf info"

gdb_run_cmd

gdb_test "" ".*x=3.*x=4.*x=3.*" "run to resolved dprintf"
