#   Copyright 2013-2021 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 "failed to compile shared library"
    return -1
}

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

    gdb_test "dprintf pendfunc" "Format string required" "missing ,FMT"
    gdb_test "dprintf pendfunc," "Format string required" "missing FMT"
}

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_shlib $lib_sl

    gdb_run_cmd

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

clean_restart ${binfile}
gdb_load_shlib $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"
