# static.exp -- test script, for GDB, the GNU debugger. # Copyright 2004-2020 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 . # Based on manythreads written by Jeff Johnston, contributed by Red # Hat. standard_testfile set static_flag "-static" foreach have_tls { "-DHAVE_TLS" "" } { if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ executable \ [list debug "additional_flags=${static_flag} ${have_tls}" \ ]] == "" } { break } if { $have_tls == "" } { 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 " 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 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" } } clean_restart ${binfile} if { "$have_tls" != "" } { if ![runto_main] { return -1 } gdb_breakpoint [gdb_get_line_number "tlsvar-is-set"] gdb_continue_to_breakpoint "tlsvar-is-set" ".* tlsvar-is-set .*" gdb_test "p tlsvar" " = 2" "tlsvar in thread" gdb_test "thread 1" ".*" # Unwind to main. gdb_test "up 10" " in main .*" gdb_test "p tlsvar" " = 1" "tlsvar in main" }