#   Copyright (C) 1997-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_hp_tests] } then { continue }

set testfile "so-thresh"
set binfile ${objdir}/${subdir}/${testfile}

if [get_compiler_info] {
    return -1
}

# This testcase is relatively large, and therefore can take awhile to
# load.  We'd best set the timeout to something suitable, or we may
# seem to fail...
#
set timeout 60

# Build procedure for this testcase:
#    ${srcdir}/${subdir}/so-thresh.sh ${subdir}
#        which calls,
#        make -f ${srcdir}/${subdir}/so-thresh.mk <targets> <macros>
#            which builds,
#                genso-thresh (from genso-thresh.c)
#                    which generates,
#                        lib00-so-thresh.c
#                        lib01-so-thresh.c
#                        lib02-so-thresh.c
#                        so-thresh.lopt (link options file)
#                lib0*-so-thresh.sl (from .c files above)
#                so-thresh (from so-thresh.c)
#                    using lib0*-so-thresh.sl and so-thresh.lopt
#
# Since so-thresh.mk requires SRCDIR and OBJDIR macro definitions,
# and SRCDIR / OBJDIR could be in relative path format, we use
# so-thresh.sh script to pin down SRCDIR / OBJDIR (using $PWD/ prefix
# when detected relative path values for srcdir / objdir), before the
# 'cd $subdir' call (when this can be done in TCL here, we can call
# make directly instead).
#
# remote_exec build "sh -c \\\"cd ${objdir}/${subdir}\\; make -v -f ${srcdir}/${subdir}/${testfile}.mk clean require_shlibs all SRCDIR=${srcdir}/${subdir} OBJDIR=${objdir}/${subdir}\\\""

remote_exec build "${srcdir}/${subdir}/${testfile}.sh $subdir"

# Only HP-UX (and any other platforms using SOM shared libraries, I
# guess) interprets the auto-solib-limit variable as a threshhold,
# rather than a boolean that strictly enables or disables automatic
# loading of shlib symbol tables.
#
# On HP-UX, it is the size threshhold (in megabytes) at which to
# stop auto loading of symbol tables.
#
if ![istarget "hppa*-hp-hpux*"] then {
   setup_xfail "*-*-*"
}

# Start with a fresh gdb
#
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

# This is a test of gdb's ability on HP-UX to stop automatically
# loading symbols of shared libraries, when the total size of the
# debugger's symbol table reaches a specified threshhold.
#

# On HP-UX, the help text for auto-solib-limit mentions that it
# serves as a threshhold.
#
send_gdb "help set auto-solib-limit\n"
gdb_expect {
  -re "Set threshold .in Mb. for autoloading shared library symbols.*
When shared library autoloading is enabled, new libraries will be loaded.*
only until the total size of shared library symbols exceeds this.*
threshold in megabytes.  Is ignored when using .sharedlibrary.*$gdb_prompt $"\
          {pass "help set auto-solib-limit"}
  -re "$gdb_prompt $"\
          {fail "help set auto-solib-limit"}
  timeout {fail "(timeout) help set auto-solib-limit"}
}

# On HP-UX, the threshhold is by default set to 50, which means
# 50 megabytes.
#
send_gdb "show auto-solib-limit\n"
gdb_expect {
  -re "Threshold .in Mb. for autoloading shared library symbols is $decimal.*$gdb_prompt $"\
          {pass "show auto-solib-limit "}
  -re "$gdb_prompt $"\
          {fail "show auto-solib-limit "}
  timeout {fail "(timeout) show auto-solib-limit "}
}

send_gdb "set auto-solib-limit 1\n"
gdb_expect {
   -re ".*$gdb_prompt $"
            {pass "set auto-solib-limit to 1"}
   -re ".*$gdb_prompt $"
            {fail "set auto-solib-limit to 1"}
   timeout {fail "(timeout) set auto-solib-limit to 1"}
}


# We have manually verified that our testcase exceeds 1 Mbytes
# of heap space in GDB to hold the symbols for the main program
# and all associated linked-against libraries.  Thus, when we
# run to the program's main, and therefore notice all the linked-
# against shlibs, we expect to hit the threshhold.
#
# (Note that we're not using the expect [runto main] function here,
# 'cause we want to match on output from the run command.
#
send_gdb "break main\n"
gdb_expect {
  -re "Breakpoint \[0-9\]* at.*$gdb_prompt $"\
          {pass "1 set break at main"}
  -re "$gdb_prompt $"\
          {fail "1 set break at main"}
  timeout {fail "(timeout) 1 set break at main"}
}

send_gdb "run\n"
gdb_expect {
  -re ".*warning. Symbols for some libraries have not been loaded, because.*
doing so would exceed the size threshold specified by auto-solib-limit.*
To manually load symbols, use the 'sharedlibrary' command.*
To raise the threshold, set auto-solib-limit to a larger value and rerun.*
the program.*$gdb_prompt $"\
          {pass "run to main hit auto-solib-limit threshold"}
  -re "$gdb_prompt $"\
          {fail "run to main hit auto-solib-limit threshold"}
  timeout {fail "(timeout) run to main hit auto-solib-limit threshold"}
}

# Verify that "info share" mentions something about libraries whose
# symbols weren't loaded.
#
# We'll assume that at least the last two shlib's symbols weren't
# loaded.  As a side-effect of matching this pattern, the text start
# address of the last one is captured in expect_out(1,string).
# (we'll need it for the 'add-symbol-file' command in a nonce...)
#
send_gdb "info sharedlibrary\n"
gdb_expect {
  -re ".*lib01_$testfile.sl .*symbols not loaded.*0x\[0-9\]*  (0x\[0-9a-fA-F\]*).*$gdb_prompt $"\
          { send_gdb "add-symbol-file lib02_$testfile.sl $expect_out(1,string)\n"
            gdb_expect {
              -re "add symbol table.*y or n.*$"\
                      {send_gdb "y\n"
                       gdb_expect {
                         -re "$gdb_prompt $" {pass "add-symbol-file and info sharedlib"}
                         timeout {fail "(timeout) add-symbol-file and info sharedlib"}
                       }}
              -re "$gdb_prompt $"\
                      {fail "add-symbol-file and info sharedlib"}
              timeout {fail "(timeout) add-symbol-file and info sharedlib"}
            }
          }
  -re "$gdb_prompt $" {
	setup_xfail hppa*-*-* CHFts24108
	fail "info sharedlibrary shows shlibs with unloaded symbols"
    }
  timeout {fail "(timeout) info sharedlibrary shows shlibs with unloaded symbols"}
}

# Verify that we can manually load the symbol table of a library
# whose symbols weren't loaded.  (We'll pick the last one.)
#

# I moved this test inside the one above, because the expect_out array is not ok if the
# previous test has failed, and expect would error out (elz)
#
#send_gdb "add-symbol-file lib02_$testfile.sl $expect_out(1,string)\n"
#gdb_expect {
#  -re "add symbol table.*y or n.*$"\
#          {send_gdb "y\n"
#           gdb_expect {
#             -re "$gdb_prompt $" {pass "add-symbol-file"}
#             timeout {fail "(timeout) add-symbol-file"}
#           }}
#  -re "$gdb_prompt $"\
#          {fail "add-symbol-file"}
#  timeout {fail "(timeout) add-symbol-file"}
#}

# Verify that we can manually load the symbols for all libraries
# which weren't already loaded.
#
# Warning!  On a machine with little free swap space, this may
# fail!
#
send_gdb "sharedlibrary\n"
gdb_expect {
  -re "Reading symbols from.*done.*$gdb_prompt $"\
          {pass "sharedlibrary"}
  -re "$gdb_prompt $" {
	setup_xfail hppa*-*-* CHFts24108
	fail "sharedlibrary"
    }
  timeout {fail "(timeout) sharedlibrary"}
}

# Rerun the program, this time verifying that we can set the
# threshhold high enough to avoid hitting it.
#
# It appears that gdb isn't freeing memory when rerunning, as one
# would expect.  To avoid potentially hitting a virtual memory
# ceiling, start with a fresh gdb.
#
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

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

send_gdb "set auto-solib-limit 9999\n"
gdb_expect {
  -re "$gdb_prompt $"\
          {pass "set auto-solib-limit threshold to practical infinity"}
  timeout {fail "(timeout) set auto-solib-limit threshold to practical infinity"}
}
send_gdb "run\n"
gdb_expect {
  -re ".*warning. Symbols for some libraries have not been loaded, because.*
doing so would exceed the size threshold specified by auto-solib-limit.*
To manually load symbols, use the 'sharedlibrary' command.*
To raise the threshold, set auto-solib-limit to a larger value and rerun.*
the program.*$gdb_prompt $"\
          {fail "rerun threshold at practical infinity (still hit threshold)"}
  -re "$gdb_prompt $"\
          {pass "rerun with threshold at practical infinity"}
  timeout {fail "(timeout) rerun with threshold at practical infinity"}
}

# Rerun the program, this time altogether disabling the auto loading
# feature.  There should be no information at all about shared
# libraries now.
#
# ??rehrauer: Personally, I'd call that a bug, since it doesn't give
# you the ability to manually load single shlibs (you need the text
# start address that 'info share' normall gives you).  On the other
# hand, one can easily choose to load them all...
#
# It appears that gdb isn't freeing memory when rerunning, as one
# would expect.  To avoid potentially hitting a virtual memory
# ceiling, start with a fresh gdb.
#
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

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

send_gdb "set auto-solib-limit 0\n"
gdb_expect {
  -re "$gdb_prompt $"\
          {pass "set auto-solib-limit threshold to 0"}
  timeout {fail "(timeout) set auto-solib-limit threshold to 0"}
}
send_gdb "run\n"
gdb_expect {
  -re ".*warning. Symbols for some libraries have not been loaded, because.*
doing so would exceed the size threshold specified by auto-solib-limit.*
To manually load symbols, use the 'sharedlibrary' command.*
To raise the threshold, set auto-solib-limit to a larger value and rerun.*
the program.*$gdb_prompt $"\
          {fail "rerun threshold at 0 (still hit threshold)"}
  -re "$gdb_prompt $"\
          {pass "rerun with threshold at 0"}
  timeout {fail "(timeout) rerun with threshold at 0"}
}

# Verify that we can still manually load symbols for all libraries.
# (We'll assume that if the last shlib's symbols are loaded, that
# all of them were.)
#
# Note that we set the GDB "height" variable to prevent GDB from
# prompting 
#
# Warning!  On a machine with little free swap space, this may
# fail!
#
send_gdb "set height 9999\n"
gdb_expect {
  -re "$gdb_prompt $"\
          {pass "set screen page height to practical infinity"}
  timeout {fail "(timeout) set screen page height to practical infinity"}
}
send_gdb "sharedlibrary\n"
gdb_expect {
  -re ".*Reading symbols from .*/lib02-so-thresh\\.sl\\.\\.\\.done\\..*$gdb_prompt $"\
          {pass "manually load all symbols"}
  -re "$gdb_prompt $" {
	setup_xfail hppa*-*-* CHFts24108
	fail "manually load all symbols (CHFts24108)"
    }
  timeout {fail "(timeout) manually load all symbols"}
}

return 0
