#   Copyright 1997-1999, 2007-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/>.  */


# are we on a target board
if ![isnative] then {
    return
}

# This test is presently only valid on HP-UX.  It verifies GDB's
# ability to catch loads and unloads of shared libraries.
#

#setup_xfail "*-*-*"
#clear_xfail "hppa*-*-*hpux*"
if {![istarget "hppa*-*-hpux*"]} {
    return 0
}

set testfile "solib"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

# build the first test case
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     untested solib.exp
     return -1
}

if [get_compiler_info] {
    return -1
}

# Build the shared libraries this test case needs.
#
#cd ${subdir}
#remote_exec build "$CC -g +z -c ${testfile}1.c -o ${testfile}1.o"
#remote_exec build "$CC -g +z -c ${testfile}2.c -o ${testfile}2.o"

if {$gcc_compiled == 0} {
    if [istarget "hppa*-hp-hpux*"] then {
	set additional_flags "additional_flags=+z"
    } else {
	# don't know what the compiler is...
	set additional_flags ""
    }
} else {
    set additional_flags "additional_flags=-fpic"
}

if {[gdb_compile "${srcdir}/${subdir}/${testfile}1.c" "${binfile}1.o" object [list debug $additional_flags]] != ""} {
    perror "Couldn't compile ${testfile}1.c"
    #return -1
}
if {[gdb_compile "${srcdir}/${subdir}/${testfile}2.c" "${binfile}2.o" object [list debug, $additional_flags]] != ""} {
    perror "Couldn't compile ${testfile}2.c"
    #return -1
}

if [istarget "hppa*-*-hpux*"] {
    remote_exec build "ld -b ${binfile}1.o -o ${binfile}1.sl"
    remote_exec build "ld -b ${binfile}2.o -o ${binfile}2.sl"
} else {
    set additional_flags "additional_flags=-shared"
    gdb_compile "${binfile}1.o" "${binfile}1.sl" executable [list debug $additional_flags]
    gdb_compile "${binfile}2.o" "${binfile}2.sl" executable [list debug $additional_flags]
}

# Build a version where the main program is in a shared library.  For
# testing an indirect call made in a shared library.

if {[gdb_compile "${srcdir}/${subdir}/${testfile}.c" "${binfile}_sl.o" object [list debug $additional_flags]] != ""} {
    perror "Couldn't compile ${testfile}.c for ${binfile}_sl.o"
    #return -1
}

if { [istarget "hppa*-*-hpux*"] } {
    remote_exec build "ld -b ${binfile}_sl.o -o ${binfile}_sl.sl"
} else {
    set additional_flags "additional_flags=-shared"
    gdb_compile "${binfile}_sl.o" "${binfile}_sl.sl" executable [list debug $additional_flags]
}

if { [istarget "hppa*-*-hpux*"] } {
    set additional_flags "-Wl,-u,main"
    if { [gdb_compile "${binfile}_sl.sl" "${binfile}_sl" executable [list debug $additional_flags]] != "" } {
        untested solib.exp
        return -1
    }
} else {
    # FIXME: need to fill this part in for non-HP build
}

#cd ..

# Start with a fresh gdb

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

# This program manually loads and unloads SOM shared libraries, via calls
# to shl_load and shl_unload.
#
if ![runto_main] then { fail "catch load/unload tests suppressed" }

# Verify that we complain if the user tells us to catch something we
# don't understand.
#
send_gdb "catch a_cold\n"
gdb_expect {
  -re "Unknown event kind specified for catch.*$gdb_prompt $"\
          {pass "bogus catch kind is disallowed"}
  -re "$gdb_prompt $"\
          {fail "bogus catch kind is disallowed"}
  timeout {fail "(timeout) bogus catch kind is disallowed"}
}

# Verify that we can set a generic catchpoint on shlib loads.  I.e., that
# we can catch any shlib load, without specifying the name.
#
send_gdb "catch load\n"
gdb_expect {
  -re "Catchpoint \[0-9\]* .load <any library>.*$gdb_prompt $"\
          {pass "set generic catch load"}
  -re "$gdb_prompt $"\
          {fail "set generic catch load"}
  timeout {fail "(timeout) set generic catch load"}
}

send_gdb "continue\n"
gdb_expect {
  -re "Catchpoint \[0-9\] .loaded gdb.base/solib1.sl.*$gdb_prompt $"\
          {pass "caught generic solib load"}
  -re "$gdb_prompt $"\
          {fail "caught generic solib load"}
  timeout {fail "(timeout) caught generic solib load"}
}

# Set a breakpoint on the line following the shl_load call, and
# continue.
#
# ??rehrauer: It appears that we can't just say "finish" from here;
# GDB is getting confused by the dld's presense on the stack.
#
send_gdb "break 27\n"
gdb_expect {
  -re "Breakpoint \[0-9\]* at.*$gdb_prompt $"\
          {pass "set break after shl_load"}
  -re "$gdb_prompt $"\
          {fail "set break after shl_load"}
  timeout {fail "(timeout) set break after shl_load"}
}

send_gdb "continue\n"
gdb_expect {
  -re "Breakpoint \[0-9\]*, main .. at .*solib.c:27.*$gdb_prompt $"\
          {pass "continue after generic catch load"}
  -re "$gdb_prompt $"\
          {fail "continue after generic catch load"}
  timeout {fail "(timeout) continue after generic catch load"}
}

# Step over the call to shl_findsym.
#
# ??rehrauer: In theory, since the call to shl_load asked for
# immediate binding of the shlib's symbols, and since the
# shlib's symbols should have been auto-loaded, we ought to
# be able to set a breakpoint on solib_main now.  However,
# that seems not to be the case.  Dunno why for sure; perhaps
# the breakpoint wants to be set on an import stub in the
# main program for solib_main?  There wouldn't be one, in
# this case...
# 
send_gdb "next\n"
gdb_expect {
  -re "$gdb_prompt $"\
          {pass "step over shl_findsym"}
  timeout {fail "(timeout) step over shl_findsym"}
}

# Verify that we can catch an unload of any library.
#
send_gdb "catch unload\n"
gdb_expect {
  -re "Catchpoint \[0-9\]* .unload <any library>.*$gdb_prompt $"\
          {pass "set generic catch unload"}
  -re "$gdb_prompt $"\
          {fail "set generic catch unload"}
  timeout {fail "(timeout) set generic catch load"}
}

send_gdb "continue\n"
gdb_expect {
  -re "Catchpoint \[0-9\] .unloaded gdb.base/solib1.sl.*$gdb_prompt $"\
          {pass "caught generic solib unload"}
  -re "$gdb_prompt $"\
          {fail "caught generic solib unload"}
  timeout {fail "(timeout) caught generic solib unload"}
}

# Verify that we can catch a load of a specific library.  (Delete
# all the other catchpoints first, so that the generic catchpoints
# we've previously set don't trigger.)
#
send_gdb "delete\n"
gdb_expect {
  -re "Delete all breakpoints.*y or n.*"\
          {send_gdb "y\n"
           gdb_expect {
             -re "$gdb_prompt $"\
                     {pass "delete all catchpoints"}
             timeout {fail "(timeout) delete all catchpoints"}
           }
          }
  -re "$gdb_prompt $"\
          {fail "delete all catchpoints"}
  timeout {fail "(timeout) delete all catchpoints"}
}

send_gdb "catch load gdb.base/solib2.sl\n"
gdb_expect {
  -re "Catchpoint \[0-9\]* .load gdb.base/solib2.sl.*$gdb_prompt $"\
          {pass "set specific catch load"}
  -re "$gdb_prompt $"\
          {fail "set specific catch load"}
  timeout {fail "(timeout) set specific catch load"}
}

send_gdb "continue\n"
gdb_expect {
  -re "Catchpoint \[0-9\] .loaded gdb.base/solib2.sl.*$gdb_prompt $"\
          {pass "caught specific solib load"}
  -re "$gdb_prompt $"\
          {fail "caught specific solib load"}
  timeout {fail "(timeout) caught specific solib load"}
}

# Verify that we can catch an unload of a specific library.
#
send_gdb "catch unload gdb.base/solib2.sl\n"
gdb_expect {
  -re "Catchpoint \[0-9\]* .unload gdb.base/solib2.sl.*$gdb_prompt $"\
          {pass "set specific catch unload"}
  -re "$gdb_prompt $"\
          {fail "set specific catch unload"}
  timeout {fail "(timeout) set specific catch unload"}
}

send_gdb "continue\n"
gdb_expect {
  -re "Catchpoint \[0-9\] .unloaded gdb.base/solib2.sl.*$gdb_prompt $"\
          {pass "caught specific solib unload"}
  -re "$gdb_prompt $"\
          {fail "caught specific solib unload"}
  timeout {fail "(timeout) caught specific solib unload"}
}

# Verify that we can set a catchpoint on a specific library that
# happens not to be loaded by the program.  And, that this catchpoint
# won't trigger inappropriately when other shlibs are loaded.
#
send_gdb "break 55\n"
gdb_expect {
  -re "Breakpoint \[0-9\]* at.*$gdb_prompt $"\
          {pass "set break on shl_unload"}
  -re "$gdb_prompt $"\
          {fail "set break on shl_unload"}
  timeout {fail "(timeout) set break on shl_unload"}
}

send_gdb "break 58\n"
gdb_expect {
  -re "Breakpoint \[0-9\]* at.*$gdb_prompt $"\
          {pass "set break after shl_unload"}
  -re "$gdb_prompt $"\
          {fail "set break after shl_unload"}
  timeout {fail "(timeout) set break after shl_unload"}
}

send_gdb "catch load foobar.sl\n"
gdb_expect {
  -re "Catchpoint \[0-9\]* .load foobar.sl.*$gdb_prompt $"\
          {pass "set specific catch load for nonloaded shlib"}
  -re "$gdb_prompt $"\
          {fail "set specific catch load for nonloaded shlib"}
  timeout {fail "(timeout) set specific catch load for nonloaded shlib"}
}

send_gdb "catch unload foobar.sl\n"
gdb_expect {
  -re "Catchpoint \[0-9\]* .unload foobar.sl.*$gdb_prompt $"\
          {pass "set specific catch unload for nonloaded shlib"}
  -re "$gdb_prompt $"\
          {fail "set specific catch unload for nonloaded shlib"}
  timeout {fail "(timeout) set specific catch unload for nonloaded shlib"}
}

send_gdb "continue\n"
gdb_expect {
  -re "Breakpoint \[0-9\]*.*$gdb_prompt $"\
          {pass "specific catch load doesn't trigger inappropriately"}
  -re "$gdb_prompt $"\
          {fail "specific catch load doesn't trigger inappropriately"}
  timeout {fail "(timeout) specific catch load doesn't trigger inappropriately"}
}

send_gdb "continue\n"
gdb_expect {
  -re "Breakpoint \[0-9\]*.*$gdb_prompt $"\
          {pass "specific catch unload doesn't trigger inappropriately"}
  -re "$gdb_prompt $"\
          {fail "specific catch unload doesn't trigger inappropriately"}
  timeout {fail "(timeout) specific catch unload doesn't trigger inappropriately"}
}

# ??rehrauer: There ought to be testpoints here that verify that
# load/unload catchpoints can use conditionals, can be temporary,
# self-disabling, etc etc.
#

gdb_exit

#
# Test stepping into an indirect call in a shared library.
#

gdb_start
gdb_load ${binfile}_sl
gdb_test "break main" ".*deferred. at .main..*" "break on main"
gdb_test "run" ".*Breakpoint.*main.*solib.c.*" "hit breakpoint at main"
gdb_test "break 45" "Breakpoint.*solib.c, line 45.*" "break on indirect call"
gdb_test "continue" "Continuing.*solib.c:45.*" \
	"continue to break on indirect call"
gdb_test "step" "solib_main.*solib1.c:17.*return arg.arg.*" \
	"step into indirect call from a shared library"
gdb_exit

return 0
