From c72b934c3ae329d571efeea70844c485a33435a3 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Wed, 1 Sep 2004 18:02:45 +0000 Subject: [PATCH] 2004-09-01 Andrew Cagney * gdb.threads/staticthreads.c, gdb.threads/staticthreads.exp: New files. --- gdb/testsuite/ChangeLog | 10 +++ gdb/testsuite/gdb.threads/staticthreads.c | 73 ++++++++++++++++ gdb/testsuite/gdb.threads/staticthreads.exp | 95 +++++++++++++++++++++ 3 files changed, 178 insertions(+) create mode 100644 gdb/testsuite/gdb.threads/staticthreads.c create mode 100644 gdb/testsuite/gdb.threads/staticthreads.exp diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 381700082b..f9dcfa4dac 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-09-01 Andrew Cagney + + * gdb.threads/staticthreads.c, gdb.threads/staticthreads.exp: New + files. + 2004-09-01 Jeff Johnston * gdb.base/unload.exp: Fix expected warning message to match @@ -207,6 +212,11 @@ cp_test_ptype_class. (test_enums): Likewise. +2004-08-10 Andrew Cagney + + * gdb.threads/staticthreads.c, gdb.threads/staticthreads.exp: New + files. + 2004-08-10 Andrew Cagney * gdb.gdb/selftest.exp (do_steps_and_nexts): Remove code to skip diff --git a/gdb/testsuite/gdb.threads/staticthreads.c b/gdb/testsuite/gdb.threads/staticthreads.c new file mode 100644 index 0000000000..57defefcae --- /dev/null +++ b/gdb/testsuite/gdb.threads/staticthreads.c @@ -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; +} diff --git a/gdb/testsuite/gdb.threads/staticthreads.exp b/gdb/testsuite/gdb.threads/staticthreads.exp new file mode 100644 index 0000000000..bf04fa3bce --- /dev/null +++ b/gdb/testsuite/gdb.threads/staticthreads.exp @@ -0,0 +1,95 @@ +# static.exp -- test script, for GDB, the GNU debugger. + +# Copyright 2004 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. + +# Based on manythreads written by Jeff Johnston, contributed by Red +# Hat. + +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_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 "The program is running. Exit anyway\\? \\(y or n\\) $" { + send_gdb "y\n" + exp_continue + } + eof { + pass "$test" + } +}