2012-02-20 Pedro Alves <palves@redhat.com>

* gdb.threads/attach-into-signal.exp (corefunc): Don't enable
	lin-lwp output.  Set SIGALRM to stop.  Adjust tests to not rely on
	gdb's internal debug output.  For the non-threaded case, look for
	"Program received signal SIGLARM", for the threaded case, peek at
	the thread's siginfo.
This commit is contained in:
Pedro Alves 2012-02-20 13:20:38 +00:00
parent cc51a17021
commit c5a006e6e8
2 changed files with 49 additions and 16 deletions

View File

@ -1,3 +1,11 @@
2012-02-20 Pedro Alves <palves@redhat.com>
* gdb.threads/attach-into-signal.exp (corefunc): Don't enable
lin-lwp output. Set SIGALRM to stop. Adjust tests to not rely on
gdb's internal debug output. For the non-threaded case, look for
"Program received signal SIGLARM", for the threaded case, peek at
the thread's siginfo.
2012-02-20 Pedro Alves <palves@redhat.com>
General cleanup, make output test messages unique, and build

View File

@ -45,7 +45,6 @@ proc corefunc { threadtype executable } {
lappend pf_prefix "$threadtype:"
clean_restart ${executable}
gdb_test_no_output "set debug lin-lwp 1" ""
set binfile ${objdir}/${subdir}/${executable}
set escapedbinfile [string_to_regexp ${objdir}/${subdir}/${executable}]
@ -55,6 +54,8 @@ proc corefunc { threadtype executable } {
return -1
}
gdb_test "handle SIGALRM stop print pass" "Yes.*Yes.*Yes.*"
# Start the program running and then wait for a bit, to be sure
# that it can be attached to.
# Statistically there is a better chance without giving process a nice.
@ -97,27 +98,51 @@ proc corefunc { threadtype executable } {
# Main test:
set test "attach (pass $passes), pending signal catch"
if {[gdb_test_multiple "attach $testpid" $test {
-re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*Received Alarm clock.*$gdb_prompt $" {
-re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*Program received signal SIGALRM.*$gdb_prompt $" {
# nonthreaded:
pass $test
verbose -log "$test succeeded on the attempt # $attempt of $attempts"
set passes [expr $passes + 1]
}
-re "Attaching to program.*`?$escapedbinfile'?, process $testpid.*$gdb_prompt $" {
# nonthreaded:
# We just lack the luck, we should try it again.
set attempt [expr $attempt + 1]
}
-re "Attaching to process $testpid.*Received Alarm clock.*$gdb_prompt $" {
# threaded:
pass $test
verbose -log "$test succeeded on the attempt # $attempt of $attempts"
set passes [expr $passes + 1]
}
-re "Attaching to process $testpid.*$gdb_prompt $" {
# threaded:
# We just lack the luck, we should try it again.
set attempt [expr $attempt - 1]
set ok 0
if { $threadtype == "threaded" } {
# In the threaded case, the signal is left pending
# on the second thread. Check for that by peeking
# at the thread's siginfo. SIGALRM is 14, SIGSTOP
# is 19.
# With remote targets, we need to pull the thread
# list explicitly before GDB even knows about
# thread 2.
set test2 "pull thread list"
gdb_test_multiple "info threads" $test2 {
-re "\r\n$gdb_prompt $" {
}
}
set test2 "thread apply 2 print \$_siginfo.si_signo"
gdb_test_multiple $test2 $test2 {
-re " = 14\r\n$gdb_prompt $" {
set ok 1
}
-re " = 19\r\n$gdb_prompt $" {
}
}
} else {
# In the nonthreaded case, GDB should tell the
# user about having seen a signal.
}
if { $ok == 0} {
# We just lack the luck, we should try it again.
set attempt [expr $attempt + 1]
} else {
pass $test
verbose -log "$test succeeded on the attempt # $attempt of $attempts"
set passes [expr $passes + 1]
}
}
}] != 0 } {
break