1*11efff7fSkettenis# static.exp -- test script, for GDB, the GNU debugger. 2*11efff7fSkettenis 3*11efff7fSkettenis# Copyright 2004 Free Software Foundation, Inc. 4*11efff7fSkettenis 5*11efff7fSkettenis# This program is free software; you can redistribute it and/or modify 6*11efff7fSkettenis# it under the terms of the GNU General Public License as published by 7*11efff7fSkettenis# the Free Software Foundation; either version 2 of the License, or 8*11efff7fSkettenis# (at your option) any later version. 9*11efff7fSkettenis# 10*11efff7fSkettenis# This program is distributed in the hope that it will be useful, 11*11efff7fSkettenis# but WITHOUT ANY WARRANTY; without even the implied warranty of 12*11efff7fSkettenis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*11efff7fSkettenis# GNU General Public License for more details. 14*11efff7fSkettenis# 15*11efff7fSkettenis# You should have received a copy of the GNU General Public License 16*11efff7fSkettenis# along with this program; if not, write to the Free Software 17*11efff7fSkettenis# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18*11efff7fSkettenis 19*11efff7fSkettenis# Based on manythreads written by Jeff Johnston, contributed by Red 20*11efff7fSkettenis# Hat. 21*11efff7fSkettenis 22*11efff7fSkettenisif $tracelevel then { 23*11efff7fSkettenis strace $tracelevel 24*11efff7fSkettenis} 25*11efff7fSkettenis 26*11efff7fSkettenisset prms_id 0 27*11efff7fSkettenisset bug_id 0 28*11efff7fSkettenis 29*11efff7fSkettenisset testfile "staticthreads" 30*11efff7fSkettenisset srcfile ${testfile}.c 31*11efff7fSkettenisset binfile ${objdir}/${subdir}/${testfile} 32*11efff7fSkettenisset static_flag "-static" 33*11efff7fSkettenis 34*11efff7fSkettenisif {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ 35*11efff7fSkettenis executable \ 36*11efff7fSkettenis [list debug "incdir=${objdir}" "additional_flags=${static_flag}" \ 37*11efff7fSkettenis ]] != "" } { 38*11efff7fSkettenis return -1 39*11efff7fSkettenis} 40*11efff7fSkettenis 41*11efff7fSkettenisgdb_start 42*11efff7fSkettenisgdb_reinitialize_dir $srcdir/$subdir 43*11efff7fSkettenisgdb_load ${binfile} 44*11efff7fSkettenisgdb_test "set print sevenbit-strings" "" 45*11efff7fSkettenis 46*11efff7fSkettenis 47*11efff7fSkettenis# See if the static multi-threaded program runs. 48*11efff7fSkettenis 49*11efff7fSkettenisrunto_main 50*11efff7fSkettenisgdb_test "break sem_post" 51*11efff7fSkettenisset test "Continue to main's call of sem_post" 52*11efff7fSkettenisgdb_test_multiple "continue" "$test" { 53*11efff7fSkettenis -re " sem_post .*$gdb_prompt " { 54*11efff7fSkettenis pass "$test" 55*11efff7fSkettenis } 56*11efff7fSkettenis -re "Program received signal .*$gdb_prompt " { 57*11efff7fSkettenis kfail gdb/1328 "$test" 58*11efff7fSkettenis } 59*11efff7fSkettenis} 60*11efff7fSkettenis 61*11efff7fSkettenis 62*11efff7fSkettenis# See if handle SIG32 helps (a little) with a static multi-threaded 63*11efff7fSkettenis# program. 64*11efff7fSkettenis 65*11efff7fSkettenisrerun_to_main 66*11efff7fSkettenisgdb_test "handle SIG32 nostop noprint pass" 67*11efff7fSkettenisset test "Handle SIG32 helps" 68*11efff7fSkettenisgdb_test "continue" " sem_post .*" "handle SIG32 helps" 69*11efff7fSkettenis 70*11efff7fSkettenis 71*11efff7fSkettenis# See if info threads produces anything approaching a thread list. 72*11efff7fSkettenis 73*11efff7fSkettenisset test "info threads" 74*11efff7fSkettenisgdb_test_multiple "info threads" "$test" { 75*11efff7fSkettenis -re " Thread .*$gdb_prompt " { 76*11efff7fSkettenis pass "$test" 77*11efff7fSkettenis } 78*11efff7fSkettenis -re "$gdb_prompt " { 79*11efff7fSkettenis kfail gdb/1328 "$test" 80*11efff7fSkettenis } 81*11efff7fSkettenis} 82*11efff7fSkettenis 83*11efff7fSkettenis 84*11efff7fSkettenis# Check that the program can be quit. 85*11efff7fSkettenis 86*11efff7fSkettenisset test "GDB exits with static thread program" 87*11efff7fSkettenisgdb_test_multiple "quit" "$test" { 88*11efff7fSkettenis -re "The program is running. Exit anyway\\? \\(y or n\\) $" { 89*11efff7fSkettenis send_gdb "y\n" 90*11efff7fSkettenis exp_continue 91*11efff7fSkettenis } 92*11efff7fSkettenis eof { 93*11efff7fSkettenis pass "$test" 94*11efff7fSkettenis } 95*11efff7fSkettenis} 96