URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-stable/] [gdb-7.2/] [gdb/] [testsuite/] [gdb.threads/] [step2.exp] - Rev 841
Compare with Previous | Blame | View Log
# step2.exp -- Expect script to test gdb step.c# Copyright (C) 1992, 1997, 2007, 2008, 2009, 2010# 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 <http://www.gnu.org/licenses/>.# This file was written by Jeff Law. (law@cygnus.com)#if $tracelevel then {strace $tracelevel}set program_exited 0# A simple and crude test to see that we can step two threads independentlyproc test_multi_threaded_stepping {} {global gdb_promptglobal hexglobal srcfileglobal decimal# Set breakpoints in code that we know is executed in only# thread of control.gdb_test "break thread1" \"Break.* at $hex: file .*$srcfile, line $decimal\\."gdb_test "break thread2" \"Break.* at $hex: file .*$srcfile, line $decimal\\."# the order in which things happen is indeterminate. So we basically# look for a set of events and note that each one happens and that# all of the required events have happened when we're done.## Right now we only verify that both threads start and that they# both call pthread_cond_wait twice.set thread1started 0set thread1condwait 0set thread2started 0set thread2condwait 0send_gdb "run\n"gdb_expect {-re "The program .* has been started already.*y or n. $" {send_gdb "y\n"exp_continue}-re ".*Breakpoint \[0-9\]+,.*thread1.* at .*$srcfile:.*\[\t \].*$gdb_prompt $" {if { $thread1started != 0 } then {fail "thread1 started"return} else {set thread1started 1pass "thread1 started"}send_gdb "step\n"exp_continue}-re ".*Breakpoint \[0-9\]+,.*thread2.* at .*$srcfile:.*\[\t \].*$gdb_prompt $" {if { $thread2started != 0 } then {fail "thread2 started"return} else {set thread2started 1pass "thread2 started"}send_gdb "step\n"exp_continue}-re ".*pthread_cond_wait.*cv_a.*$gdb_prompt" {if { $thread1started == 0 } then {fail "thread1 condwait"return}if { $thread1condwait < 2 } then {pass "thread1 condwait"incr thread1condwait}if { $thread2condwait == 2 } then {pass "multi threaded stepping"return}send_gdb "step\n"exp_continue}-re ".*pthread_cond_wait.*cv_b.*$gdb_prompt" {if { $thread2started == 0 } then {fail "thread2 condwait"return}if { $thread2condwait < 2 } then {pass "thread2 condwait"incr thread2condwait}if { $thread1condwait == 2 } then {pass "multi threaded stepping"return}send_gdb "step\n"exp_continue}-re "$gdb_prompt" {send_gdb "step\n"exp_continue}default { fail "multi threaded stepping" }}}# Check to see if we have an executable to test. If not, then either we# haven't tried to compile one, or the compilation failed for some reason.# In either case, just notify the user and skip the tests in this file.set binfile "step"set srcfile "step.c"if ![file exists $objdir/$subdir/$binfile] then {if $all_flag then {warning "$binfile does not exist; tests suppressed."}return}# Start with a fresh gdb.gdb_exitgdb_startgdb_reinitialize_dir $srcdir/$subdirgdb_load $objdir/$subdir/$binfiletest_multi_threaded_stepping
