diff options
Diffstat (limited to 'gdb/testsuite/gdb.threads/pthreads.exp')
-rw-r--r-- | gdb/testsuite/gdb.threads/pthreads.exp | 320 |
1 files changed, 0 insertions, 320 deletions
diff --git a/gdb/testsuite/gdb.threads/pthreads.exp b/gdb/testsuite/gdb.threads/pthreads.exp deleted file mode 100644 index a2bc4e0..0000000 --- a/gdb/testsuite/gdb.threads/pthreads.exp +++ /dev/null @@ -1,320 +0,0 @@ -# Copyright (C) 1996 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 2 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -# Please email any bugs, comments, and/or additions to this file to: -# bug-gdb@prep.ai.mit.edu - -# This file was written by Fred Fish. (fnf@cygnus.com) - -if $tracelevel then { - strace $tracelevel -} - -set prms_id 0 -set bug_id 0 - -# This only works with native configurations -if ![isnative] then { - return -} - -set testfile "pthreads" -set srcfile ${testfile}.c -set binfile ${objdir}/${subdir}/${testfile} - -set built_binfile 0 -if [istarget "*-*-linux"] then { - set target_cflags "-D_MIT_POSIX_THREADS" -} else { - set target_cflags "" -} -set why_msg "unrecognized error" -foreach lib {-lpthreads -lpthread} { - set options "debug" - lappend options "incdir=${objdir}/${subdir}" - lappend options "libs=$lib" - set ccout [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable $options] - switch -regexp -- $ccout { - ".*no posix threads support.*" { - set why_msg "missing threads include file" - break - } - ".*cannot open -lpthread.*" { - set why_msg "missing runtime threads library" - } - ".*Can't find library for -lpthread.*" { - set why_msg "missing runtime threads library" - } - {^$} { - pass "successfully compiled posix threads test case" - set built_binfile 1 - break - } - } -} -if {$built_binfile == "0"} { - unsupported "Couldn't compile ${srcfile}, ${why_msg}" - return -1 -} - -# Now we can proceed with the real testing. - -# Start with a fresh gdb. - -gdb_exit -gdb_start -gdb_reinitialize_dir $srcdir/$subdir -gdb_load ${binfile} - -gdb_test "set print sevenbit-strings" "" -#gdb_test "set print address off" "" -gdb_test "set width 0" "" - -# We'll need this when we send_gdb a ^C to GDB. Need to do it before we -# run the program and gdb starts saving and restoring tty states. -# On Ultrix, we don't need it and it is really slow (because shell_escape -# doesn't use vfork). -if ![istarget "*-*-ultrix*"] then { - gdb_test "shell stty intr '^C'" "" -} - -proc all_threads_running {} { - global prompt - global srcfile - - # Reset all the counters to zero. - gdb_test "set var common_routine::hits=0" "" - gdb_test "set var common_routine::from_thread1=0" "" - gdb_test "set var common_routine::from_thread2=0" "" - gdb_test "set var common_routine::from_main=0" "" - gdb_test "set var common_routine::full_coverage=0" "" - - # Disable all breakpoints. - gdb_test "disable" "" - - # Set up a breakpoint that will cause us to stop when we have - # been called 15 times. This should be plenty of time to allow - # every thread to run at least once, since each thread sleeps for - # one second between calls to common_routine. - gdb_test "tbreak common_routine if hits == 15" "" - - # Start all the threads running again and wait for the inferior - # to stop. Since no other breakpoints are set at this time - # we should stop only when we have been previously called 15 times. - - send_gdb "continue\n" - expect { - -re "Continuing.*common_routine.*at.*$srcfile.*$prompt $" {} - default { - fail "continue until common routine run 15 times" - return 0 - } - timeout { - fail "continue until common routine run 15 times (timeout)" - return 0 - } - } - - # Check that we stopped when we actually expected to stop, by - # verifying that there have been 15 previous hits. - - send_gdb "p common_routine::hits\n" - expect { - -re ".*= 15\r\n$prompt $" {} - default { - fail "stopped before calling common_routine 15 times" - return 0 - } - -re ".*$prompt $" { - fail "stopped before clling common_routine 15 times" - return 0 - } - timeout { - fail "stopped before calling common_routine 15 times (timeout)" - return 0 - } - } - - # Also check that all of the threads have run, which will only be true - # if the full_coverage variable is set. - - send_gdb "p common_routine::full_coverage\n" - expect { - -re ".*= 1\r\n$prompt $" {} - default { - fail "some threads didn't run" - return 0 - } - timeout { - fail "some threads didn't run (timeout)" - return 0 - } - } - - # Looks fine, return success. - return 1 -} - -proc test_startup {} { - global srcdir srcfile prompt expect_out - global main_id thread1_id thread2_id - - # We should be able to do an info threads before starting any others. - send_gdb "info threads\n" - expect { - -re ".*Thread.*LWP.*main.*" { - pass "info threads" - } - -re "\r\n$prompt $" { - pass "info threads" - setup_xfail "*-*-*" - fail "gdb does not support pthreads for this machine" - return 0 - } - } - - # Extract the thread id number of main thread from "info threads" output. - send_gdb "info threads\n" ; expect -re "(\[0-9\]+)(.*Thread.*main.*)($prompt $)" - set main_id $expect_out(1,string) - - # Check that we can continue and create the first thread. - gdb_test "break thread1" "Breakpoint .* file .*$srcdir.*" - gdb_test "continue" \ - "Continuing.*Breakpoint .*, thread1 \\(arg=0xfeedface\\).*at.*$srcfile.*" \ - "Continue to creation of first thread" - gdb_test "disable" "" - - # Extract the thread id number of thread 1 from "info threads" output. - send_gdb "info threads\n" ; expect -re "(\[0-9\]+)(.*Thread.*thread1.*)($prompt $)" - set thread1_id $expect_out(1,string) - - # Check that we can continue and create the second thread, - # ignoring the first thread for the moment. - gdb_test "break thread2" "Breakpoint .* file .*$srcdir.*" - gdb_test "continue" \ - "Continuing.*Breakpoint .*, thread2 \\(arg=0xdeadbeef\\).*at.*$srcfile.*" \ - "Continue to creation of second thread" - - # Extract the thread id number of thread 2 from "info threads" output. - send_gdb "info threads\n" ; expect -re "(\[0-9\]+)(.*Thread.*thread2.*)($prompt $)" - set thread2_id $expect_out(1,string) - - return 1 -} - -proc check_control_c {} { - global prompt - - # Verify that all threads are running. - if [all_threads_running] then { - pass "All threads running after startup" - } - - # Send a continue followed by ^C to the process to stop it. - send_gdb "continue\n" - set description "Stopped with a ^C" - after 1000 [send_gdb "\003"] - expect { - -re "Program received signal SIGINT.*$prompt $" { - pass $description - } - -re "Quit.*$prompt $" { - pass $description - } - timeout { - fail "$description (timeout)" - } - } - gdb_test "bt" "" - - # Verify that all threads can be run again after a ^C stop. - if [all_threads_running] then { - pass "All threads running after continuing from ^C stop" - } -} - -proc check_backtraces {} { - global prompt main_id thread1_id thread2_id - - # Check that the "thread apply N backtrace" command works - - gdb_test "thread apply $main_id backtrace" \ - ".* in main \\(argc=.*, argv=.*\\).*" \ - "check backtrace from main thread" - gdb_test "thread apply $thread1_id backtrace" \ - ".* in thread1 \\(arg=0xfeedface\\).*" \ - "check backtrace from thread 1" - gdb_test "thread apply $thread2_id backtrace" \ - ".* in thread2 \\(arg=0xdeadbeef\\).*" \ - "check backtrace from thread 2" - - # Check that we can apply the backtrace command to all - # three threads with a single gdb command - - gdb_test "thread apply $main_id $thread1_id $thread2_id bt" \ - ".* in main .* in thread1 .* in thread2.*" \ - "apply backtrace command to all three threads" - - # Check that we can do thread specific backtraces - # This also tests that we can do thread specific breakpoints. - - gdb_test "break common_routine thread $thread2_id" \ - "Breakpoint .* at 0x.* file .* line .*" \ - "set break at common_routine in thread 2" - - send_gdb "continue\n" - expect { - -re "Breakpoint .* common_routine \\(arg=2\\).*" { - send_gdb "backtrace\n" - expect { - -re "#0.*common_routine \\(arg=2\\).*#1.*thread2.*" { - pass "backtrace from thread 2 bkpt in common_routine" - } - default { - fail "backtrace from thread 2 bkpt in common_routine" - } - timeout { - fail "backtrace from thread 2 bkpt in common_routine (timeout)" - } - } - } - -re "Breakpoint .* common_routine \\(arg=0\\).*" { - fail "stopped in main thread at breakpoint for thread 2" - } - -re "Breakpoint .* common_routine \\(arg=1\\).*" { - fail "stopped in main thread at breakpoint for thread 1" - } - -re ".*$prompt" { - fail "continue to bkpt at common_routine in thread 2" - } - default { - fail "continue to bkpt at common_routine in thread 2" - } - timeout { - fail "continue to bkpt at common_routine in thread 2 (timeout)" - } - } -} - -setup_xfail "alpha-*-osf*" -if [runto_main] then { - clear_xfail "alpha-*-osf*" - if [test_startup] then { - check_control_c - check_backtraces - } -} -clear_xfail "alpha-*-osf*" |