Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Unified Diff: gdb/testsuite/gdb.threads/attach-into-signal.exp

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gdb/testsuite/gdb.threads/Makefile.in ('k') | gdb/testsuite/gdb.threads/attach-stopped.exp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/testsuite/gdb.threads/attach-into-signal.exp
diff --git a/gdb/testsuite/gdb.threads/attach-into-signal.exp b/gdb/testsuite/gdb.threads/attach-into-signal.exp
index db8822208537acee453b128a1302df7e576eb414..c74fafa4842a343f8d02f1da5b619e577109738c 100644
--- a/gdb/testsuite/gdb.threads/attach-into-signal.exp
+++ b/gdb/testsuite/gdb.threads/attach-into-signal.exp
@@ -22,149 +22,162 @@ if { ![isnative] || [is_remote host] || [target_info exists use_gdb_stub]
continue
}
-set testfile "attach-into-signal"
-set srcfile ${testfile}.c
-set binfile ${objdir}/${subdir}/${testfile}
-set escapedbinfile [string_to_regexp ${objdir}/${subdir}/${testfile}]
+standard_testfile
+set executable_nothr ${testfile}-nothr
+set executable_thr ${testfile}-thr
-remote_exec build "rm -f ${binfile}"
-# For debugging this test
-#
-#log_user 1
-
-proc corefunc { threadtype } {
+proc corefunc { threadtype executable } {
global srcfile
- global binfile
- global escapedbinfile
global srcdir
global subdir
global gdb_prompt
- if [get_compiler_info ${binfile}] {
- return -1
- }
+ with_test_prefix "$threadtype" {
+ clean_restart ${executable}
- # 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.
-
- set testpid [eval exec $binfile &]
- exec sleep 2
-
- # Run 2 passes of the test.
- # The C file inferior stops pending its signals if a single one is lost,
- # we test successful redelivery of the caught signal by the 2nd pass.
-
- # linux-2.6.20.4.x86_64 had maximal attempt # 20 in 4 test runs.
- set attempts 100
- set attempt 1
- set passes 1
- while { $passes < 3 && $attempt <= $attempts } {
- set stoppedtry 0
- while { $stoppedtry < 10 } {
- if [catch {open /proc/${testpid}/status r} fileid] {
- set stoppedtry 10
- break
- }
- gets $fileid line1;
- gets $fileid line2;
- close $fileid;
+ set binfile [standard_output_file $executable]
+ set escapedbinfile [string_to_regexp ${binfile}]
- if {![string match "*(stopped)*" $line2]} {
- # No PASS message as we may be looping in multiple attempts.
- break
- }
- sleep 1
- set stoppedtry [expr $stoppedtry + 1]
- }
- if { $stoppedtry >= 10 } {
- verbose -log $line2
- set test "$threadtype: process is still running on the attempt # $attempt of $attempts"
- break
+ if [get_compiler_info] {
+ return -1
}
- # Main test:
- set test "$threadtype: 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 $" {
- # 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]
+ 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.
+
+ set testpid [eval exec $binfile &]
+ exec sleep 2
+
+ # Run 2 passes of the test.
+ # The C file inferior stops pending its signals if a single one is lost,
+ # we test successful redelivery of the caught signal by the 2nd pass.
+
+ # linux-2.6.20.4.x86_64 had maximal attempt # 20 in 4 test runs.
+ set attempts 100
+ set attempt 1
+ set passes 1
+ while { $passes < 3 && $attempt <= $attempts } {
+ set stoppedtry 0
+ while { $stoppedtry < 10 } {
+ if [catch {open /proc/${testpid}/status r} fileid] {
+ set stoppedtry 10
+ break
+ }
+ gets $fileid line1;
+ gets $fileid line2;
+ close $fileid;
+
+ if {![string match "*(stopped)*" $line2]} {
+ # No PASS message as we may be looping in multiple
+ # attempts.
+ break
+ }
+ sleep 1
+ set stoppedtry [expr $stoppedtry + 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]
+ if { $stoppedtry >= 10 } {
+ verbose -log $line2
+ set test "process is still running on the attempt # $attempt of $attempts"
+ break
}
- -re "Attaching to process $testpid.*$gdb_prompt $" {
- # threaded:
- # We just lack the luck, we should try it again.
- set attempt [expr $attempt - 1]
+
+ # Main test:
+ set test "attach (pass $passes), pending signal catch"
+ if {[gdb_test_multiple "attach $testpid" $test {
+ -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 $" {
+ 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
}
- }] != 0 } {
- break
- }
- gdb_test "detach" "Detaching from.*" ""
- }
- if {$passes < 3} {
- if {$attempt > $attempts} {
- unresolved $test
- } else {
- fail $test
+ gdb_test "detach" "Detaching from.*" ""
+ }
+ if {$passes < 3} {
+ if {$attempt > $attempts} {
+ unresolved $test
+ } else {
+ fail $test
+ }
}
- }
- # Exit and detach the process.
+ # Exit and detach the process.
- gdb_exit
+ gdb_exit
- # Make sure we don't leave a process around to confuse
- # the next test run (and prevent the compile by keeping
- # the text file busy), in case the "set should_exit" didn't
- # work.
+ # Make sure we don't leave a process around to confuse the
+ # next test run (and prevent the compile by keeping the text
+ # file busy), in case the "set should_exit" didn't work.
- # Continue the program - some Linux kernels need it before -9 if the
- # process is stopped.
- remote_exec build "kill -s CONT ${testpid}"
+ # Continue the program - some Linux kernels need it before -9 if the
+ # process is stopped.
+ remote_exec build "kill -s CONT ${testpid}"
- remote_exec build "kill -9 ${testpid}"
-}
+ remote_exec build "kill -9 ${testpid}"
-# Start with clean gdb
-gdb_exit
+ }
+}
# build the test case first without threads
#
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
- untested "attach-into-signal.exp (unthreaded)"
+if {[build_executable $testfile $executable_nothr $srcfile] == -1} {
+ untested "attach-into-signal.exp (nonthreaded)"
return -1
}
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-gdb_test_no_output "set debug lin-lwp 1" ""
-
-corefunc nonthreaded
+corefunc nonthreaded ${executable_nothr}
# build the test case also with threads
#
-if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DUSE_THREADS}] != "" } {
+if { [gdb_compile_pthreads "${srcdir}/${subdir}/${srcfile}" [standard_output_file ${executable_thr}] executable {debug additional_flags=-DUSE_THREADS}] != "" } {
untested "attach-into-signal.exp (threaded)"
return -1
}
-gdb_start
-gdb_reinitialize_dir $srcdir/$subdir
-gdb_load ${binfile}
-gdb_test_no_output "set debug lin-lwp 1" ""
-
-corefunc threaded
+corefunc threaded ${executable_thr}
« no previous file with comments | « gdb/testsuite/gdb.threads/Makefile.in ('k') | gdb/testsuite/gdb.threads/attach-stopped.exp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698