# static.exp -- test script, for GDB, the GNU debugger.

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

# Based on manythreads written by Jeff Johnston, contributed by Red
# Hat.


standard_testfile
set static_flag "-static"

if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
	 executable \
	 [list debug "additional_flags=${static_flag}" \
	     ]] != "" } {
    return -1
}

clean_restart ${binfile}
gdb_test_no_output "set print sevenbit-strings"


# See if the static multi-threaded program runs.

runto_main
gdb_test "break sem_post"
set test "Continue to main's call of sem_post"
gdb_test_multiple "continue" "$test" {
    -re "Breakpoint .*, .*sem_post .*$gdb_prompt " {
	pass "$test"
    }
    -re "Program received signal .*$gdb_prompt " {
	kfail gdb/1328 "$test"
    }
}
    

# See if handle SIG32 helps (a little) with a static multi-threaded
# program.

set sig "SIG32"

# SIGRTMIN is 37 on hppa-linux and hpux
if [istarget hppa*-*-*] {
  set sig "SIG37"
}

rerun_to_main
gdb_test "handle $sig nostop noprint pass"
set test "Handle $sig helps"
gdb_test "continue" " .*sem_post .*" "handle $sig helps"


# See if info threads produces anything approaching a thread list.

set test "info threads"
gdb_test_multiple "info threads" "$test" {
    -re " Thread .*$gdb_prompt " {
	pass "$test"
    }
    -re "$gdb_prompt " {
	kfail gdb/1328 "$test"
    }
}


# Check that the program can be quit.

set test "GDB exits with static thread program"
gdb_test_multiple "quit" "$test" {
    -re "Quit anyway\\? \\(y or n\\) $" {
	send_gdb "y\n"
	exp_continue
    }
    eof {
        pass "$test"
    }
}
