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

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

# 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"
    }
}
