2004-08-10 Andrew Cagney * gdb.threads/staticthreads.c, gdb.threads/staticthreads.exp: New files. Index: gdb.threads/staticthreads.c =================================================================== RCS file: gdb.threads/staticthreads.c diff -N gdb.threads/staticthreads.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb.threads/staticthreads.c 10 Aug 2004 14:14:10 -0000 @@ -0,0 +1,73 @@ +/* This test program is part of GDB, The GNU debugger. + + Copyright 2004 Free Software Foundation, Inc. + + Originally written by Jeff Johnston , + contributed by Red Hat + + This file is part of GDB. + + 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. */ + +#include +#include +#include +#include +#include + +sem_t semaphore; + +void * +thread_function (void *arg) +{ + printf ("Thread executing\n"); + while (sem_wait (&semaphore) != 0) + { + if (errno != EINTR) + { + perror ("thread_function"); + return; + } + } + return NULL; +} + +int +main (int argc, char **argv) +{ + pthread_attr_t attr; + + pthread_attr_init (&attr); + pthread_attr_setstacksize (&attr, PTHREAD_STACK_MIN); + + if (sem_init (&semaphore, 0, 0) == -1) + { + perror ("semaphore"); + return -1; + } + + + /* Create a thread, wait for it to complete. */ + { + pthread_t thread; + pthread_create (&thread, &attr, thread_function, NULL); + sem_post (&semaphore); + pthread_join (thread, NULL); + } + + pthread_attr_destroy (&attr); + return 0; +} Index: gdb.threads/staticthreads.exp =================================================================== RCS file: gdb.threads/staticthreads.exp diff -N gdb.threads/staticthreads.exp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ gdb.threads/staticthreads.exp 10 Aug 2004 14:14:10 -0000 @@ -0,0 +1,87 @@ +# static.exp -- test script, for GDB, the GNU debugger. + +# Copyright 2004 Free Software Foundation, Inc. + +# Originally written by Jeff Johnston, contributed by Red Hat. + +# 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. + +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 " 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. + +rerun_to_main +gdb_test "handle SIG32 nostop noprint pass" +set test "Handle SIG32 helps" +gdb_test "continue" " sem_post .*" "handle SIG32 helps" + + +# See if info threads produces anything approaching a thread list. + +set test "info threads" +gdb_test "info threads" " Thread .*$gdb_prompt" + + +# 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. Exit anyway\\? \\(y or n\\) $" { + send_gdb "y\n" + exp_continue + } + eof { + pass "$test" + } +}