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

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

if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

set testfile "staticthreads"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
set static_flag "-static"

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

gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
gdb_test "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 "The program is running.  Quit anyway \\(and kill it\\)\\? \\(y or n\\) $" {
	send_gdb "y\n"
	exp_continue
    }
    eof {
        pass "$test"
    }
}
