aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.threads/pthread_cond_wait.exp
diff options
context:
space:
mode:
authorJoel Brobecker <brobecker@gnat.com>2004-05-19 21:41:03 +0000
committerJoel Brobecker <brobecker@gnat.com>2004-05-19 21:41:03 +0000
commit8b923272a9c7288abb6ceefaa9ecd8353087d23f (patch)
treef83e9456152327d60d2336df2128128b7d9f33d3 /gdb/testsuite/gdb.threads/pthread_cond_wait.exp
parent1b09e940ece9cf4f29580025373ae19c9c640e2a (diff)
downloadfsf-binutils-gdb-8b923272a9c7288abb6ceefaa9ecd8353087d23f.zip
fsf-binutils-gdb-8b923272a9c7288abb6ceefaa9ecd8353087d23f.tar.gz
fsf-binutils-gdb-8b923272a9c7288abb6ceefaa9ecd8353087d23f.tar.bz2
* gdb.threads/pthread_cond_wait.c: New file.
* gdb.threads/pthread_cond_wait.exp: New testcase.
Diffstat (limited to 'gdb/testsuite/gdb.threads/pthread_cond_wait.exp')
-rw-r--r--gdb/testsuite/gdb.threads/pthread_cond_wait.exp73
1 files changed, 73 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.threads/pthread_cond_wait.exp b/gdb/testsuite/gdb.threads/pthread_cond_wait.exp
new file mode 100644
index 0000000..72ae03a
--- /dev/null
+++ b/gdb/testsuite/gdb.threads/pthread_cond_wait.exp
@@ -0,0 +1,73 @@
+# Copyright (C) 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@gnu.org
+
+# This file verifies that GDB is able to compute a backtrace for a thread
+# being blocked on a call to pthread_cond_wait().
+
+if $tracelevel then {
+ strace $tracelevel
+}
+
+set testfile "pthread_cond_wait"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+
+if {[gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "incdir=${objdir}"]] != "" } {
+ return -1
+}
+
+gdb_exit
+gdb_start
+gdb_reinitialize_dir $srcdir/$subdir
+gdb_load ${binfile}
+
+gdb_test "break break_me" \
+ "Breakpoint 1 at .*: file .*${srcfile}, line .*" \
+ "breakpoint on break_me"
+
+gdb_test "run" \
+ ".*Breakpoint 1, break_me ().*" \
+ "run to break_me"
+
+#
+# Backtrace all threads, find the one running noreturn, and
+# verify that we are able to get a sensible backtrace, including
+# the frame for the pthread_cond_wait() call.
+#
+# The string below will only match if the functions named
+# occur in a single thread's backtrace, in the given order.
+#
+
+global hex
+global decimal
+
+#
+# This is a "backtrace break" ("btb"):
+#
+set btb "\[^\r\n\]+\[\r\n\]+\#${decimal}\[ \t\]+${hex} in "
+
+# One of the threads is blocked on a call to pthread_cond_wait, and
+# we want to verify that we are able to get a sensible backtrace for
+# that thread. Because we don't know its thread ID, we can't switch
+# to it before doing the backtrace. So we get a backtrace for all
+# threads, and verify that one them returns the expected backtrace.
+gdb_test "thread apply all backtrace" \
+ "pthread_cond_wait${btb}cond_wait${btb}noreturn${btb}forever_pthread.*" \
+ "backtrace in blocked thread"
+