This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] Increase timeout on gdb.base/exitsignal.exp
- From: Sergio Durigan Junior <sergiodj at redhat dot com>
- To: GDB Patches <gdb-patches at sourceware dot org>
- Cc: Sergio Durigan Junior <sergiodj at redhat dot com>
- Date: Tue, 25 Aug 2015 01:42:22 -0400
- Subject: [PATCH] Increase timeout on gdb.base/exitsignal.exp
- Authentication-results: sourceware.org; auth=none
I have noticed that BuildBot is showing random failures of
gdb.base/exitsignal.exp, specifically when testing on the
Fedora-ppc64be-native-gdbserver-m64 builder. Since I wrote this test
a while ago, I decided to investigate this further.
This is what you see when you examine gdb.log:
Breakpoint 1, main (argc=1, argv=0x3fffffffe3c8) at ../../../binutils-gdb/gdb/testsuite/gdb.base/segv.c:26
26 raise (SIGSEGV);
(gdb) print $_exitsignal
$1 = void
(gdb) PASS: gdb.base/exitsignal.exp: $_exitsignal is void before running
print $_exitcode
$2 = void
(gdb) PASS: gdb.base/exitsignal.exp: $_exitcode is void before running
continue
Continuing.
Program received signal SIGSEGV, Segmentation fault.
0x00003fffb7cbf808 in .raise () from target:/lib64/libc.so.6
(gdb) PASS: gdb.base/exitsignal.exp: trigger SIGSEGV
continue
Continuing.
FAIL: gdb.base/exitsignal.exp: program terminated with SIGSEGV (timeout)
print $_exitsignal
FAIL: gdb.base/exitsignal.exp: $_exitsignal is 11 (SIGSEGV) after SIGSEGV. (timeout)
print $_exitcode
FAIL: gdb.base/exitsignal.exp: $_exitcode is still void after SIGSEGV (timeout)
kill
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
(gdb) print $_exitsignal
$3 = 11
(gdb) print $_exitcode
$4 = void
Clearly a timeout issue: one can see that even though the tests failed
because the program was still running, both 'print' commands actually
succeeded later.
I could not reproduce this timeout here, but I decided to propose this
timeout increase anyway. I have chosen to increase it by a factor of
10; that should give GDB/gdbserver plenty of time to reach the SEGV
point.
For clarity, I am also attaching the output of 'git diff -w' here; it
makes things much easier to visualize.
OK to apply?
diff --git a/gdb/testsuite/gdb.base/exitsignal.exp b/gdb/testsuite/gdb.base/exitsignal.exp
index ae0adf4a9b..fdb3b13 100644
### a/gdb/testsuite/gdb.base/exitsignal.exp
### b/gdb/testsuite/gdb.base/exitsignal.exp
@@ -37,6 +37,7 @@ if { ![runto_main] } {
return -1
}
+with_timeout_factor 10 {
# Print $_exitsignal. It should be void now, because nothing
# happened.
gdb_test "print \$_exitsignal" " = void" \
@@ -45,6 +46,7 @@ gdb_test "print \$_exitsignal" " = void" \
# Just to guarantee, making sure that $_exitcode is also void.
gdb_test "print \$_exitcode" " = void" \
"\$_exitcode is void before running"
+}
# Trigger SIGSEGV.
gdb_test "continue" "Program received signal SIGSEGV.*" "trigger SIGSEGV"
@@ -53,6 +55,7 @@ gdb_test "continue" "Program received signal SIGSEGV.*" "trigger SIGSEGV"
gdb_test "continue" "Program terminated with signal SIGSEGV.*" \
"program terminated with SIGSEGV"
+with_timeout_factor 10 {
# Now, print $_exitsignal again. It should be 11 (SIGSEGV).
gdb_test "print \$_exitsignal" " = 11" \
"\$_exitsignal is 11 (SIGSEGV) after SIGSEGV."
@@ -61,10 +64,12 @@ gdb_test "print \$_exitsignal" " = 11" \
# of a signal, and did not return.
gdb_test "print \$_exitcode" " = void" \
"\$_exitcode is still void after SIGSEGV"
+}
# Re-run to main, i.e., restart the executable.
rerun_to_main
+with_timeout_factor 10 {
# Print the $_exitsignal again. Even in this normal scenario, it
# should still contain the signal triggered in the other run.
gdb_test "print \$_exitsignal" " = 11" \
@@ -73,6 +78,7 @@ gdb_test "print \$_exitsignal" " = 11" \
# And, again, print $_exitcode.
gdb_test "print \$_exitcode" " = void" \
"\$_exitcode is still void after restarting the inferior"
+}
# Now we test the behaviour of $_exit{code,signal} during a normal
# inferior execution.
@@ -82,12 +88,14 @@ if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
return -1
}
+with_timeout_factor 10 {
# Checking $_exitsignal and $_exitcode, both should be void before the
# inferior is executed.
gdb_test "print \$_exitsignal" " = void" \
"\$_exitsignal is void before normal inferior is executed"
gdb_test "print \$_exitcode" " = void" \
"\$_exitcode is void before normal inferior is executed"
+}
# Run the inferior until the end.
if { ![runto_main] } {
@@ -96,6 +104,7 @@ if { ![runto_main] } {
gdb_continue_to_end
+with_timeout_factor 10 {
# Checking $_exitcode. It should be 0.
gdb_test "print \$_exitcode" " = 0" \
"\$_exitcode is zero after normal inferior is executed"
@@ -104,3 +113,4 @@ gdb_test "print \$_exitcode" " = 0" \
# has not received any signal.
gdb_test "print \$_exitsignal" " = void" \
"\$_exitsignal is still void after normal inferior is executed"
+}
gdb/testsuite/ChangeLog:
2015-08-25 Sergio Durigan Junior <sergiodj@redhat.com>
* gdb.base/exitsignal.exp: Increase timeout of 'print' commands by
a factor of 10.
---
gdb/testsuite/gdb.base/exitsignal.exp | 80 ++++++++++++++++++++---------------
1 file changed, 45 insertions(+), 35 deletions(-)
diff --git a/gdb/testsuite/gdb.base/exitsignal.exp b/gdb/testsuite/gdb.base/exitsignal.exp
index ae0adf4a9b..fdb3b13 100644
--- a/gdb/testsuite/gdb.base/exitsignal.exp
+++ b/gdb/testsuite/gdb.base/exitsignal.exp
@@ -37,14 +37,16 @@ if { ![runto_main] } {
return -1
}
-# Print $_exitsignal. It should be void now, because nothing
-# happened.
-gdb_test "print \$_exitsignal" " = void" \
- "\$_exitsignal is void before running"
-
-# Just to guarantee, making sure that $_exitcode is also void.
-gdb_test "print \$_exitcode" " = void" \
- "\$_exitcode is void before running"
+with_timeout_factor 10 {
+ # Print $_exitsignal. It should be void now, because nothing
+ # happened.
+ gdb_test "print \$_exitsignal" " = void" \
+ "\$_exitsignal is void before running"
+
+ # Just to guarantee, making sure that $_exitcode is also void.
+ gdb_test "print \$_exitcode" " = void" \
+ "\$_exitcode is void before running"
+}
# Trigger SIGSEGV.
gdb_test "continue" "Program received signal SIGSEGV.*" "trigger SIGSEGV"
@@ -53,26 +55,30 @@ gdb_test "continue" "Program received signal SIGSEGV.*" "trigger SIGSEGV"
gdb_test "continue" "Program terminated with signal SIGSEGV.*" \
"program terminated with SIGSEGV"
-# Now, print $_exitsignal again. It should be 11 (SIGSEGV).
-gdb_test "print \$_exitsignal" " = 11" \
- "\$_exitsignal is 11 (SIGSEGV) after SIGSEGV."
+with_timeout_factor 10 {
+ # Now, print $_exitsignal again. It should be 11 (SIGSEGV).
+ gdb_test "print \$_exitsignal" " = 11" \
+ "\$_exitsignal is 11 (SIGSEGV) after SIGSEGV."
-# And $_exitcode should still be void, since the inferior died because
-# of a signal, and did not return.
-gdb_test "print \$_exitcode" " = void" \
- "\$_exitcode is still void after SIGSEGV"
+ # And $_exitcode should still be void, since the inferior died because
+ # of a signal, and did not return.
+ gdb_test "print \$_exitcode" " = void" \
+ "\$_exitcode is still void after SIGSEGV"
+}
# Re-run to main, i.e., restart the executable.
rerun_to_main
-# Print the $_exitsignal again. Even in this normal scenario, it
-# should still contain the signal triggered in the other run.
-gdb_test "print \$_exitsignal" " = 11" \
- "\$_exitsignal is 11 (SIGSEGV) after restarting the inferior"
+with_timeout_factor 10 {
+ # Print the $_exitsignal again. Even in this normal scenario, it
+ # should still contain the signal triggered in the other run.
+ gdb_test "print \$_exitsignal" " = 11" \
+ "\$_exitsignal is 11 (SIGSEGV) after restarting the inferior"
-# And, again, print $_exitcode.
-gdb_test "print \$_exitcode" " = void" \
- "\$_exitcode is still void after restarting the inferior"
+ # And, again, print $_exitcode.
+ gdb_test "print \$_exitcode" " = void" \
+ "\$_exitcode is still void after restarting the inferior"
+}
# Now we test the behaviour of $_exit{code,signal} during a normal
# inferior execution.
@@ -82,12 +88,14 @@ if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
return -1
}
-# Checking $_exitsignal and $_exitcode, both should be void before the
-# inferior is executed.
-gdb_test "print \$_exitsignal" " = void" \
- "\$_exitsignal is void before normal inferior is executed"
-gdb_test "print \$_exitcode" " = void" \
- "\$_exitcode is void before normal inferior is executed"
+with_timeout_factor 10 {
+ # Checking $_exitsignal and $_exitcode, both should be void before the
+ # inferior is executed.
+ gdb_test "print \$_exitsignal" " = void" \
+ "\$_exitsignal is void before normal inferior is executed"
+ gdb_test "print \$_exitcode" " = void" \
+ "\$_exitcode is void before normal inferior is executed"
+}
# Run the inferior until the end.
if { ![runto_main] } {
@@ -96,11 +104,13 @@ if { ![runto_main] } {
gdb_continue_to_end
-# Checking $_exitcode. It should be 0.
-gdb_test "print \$_exitcode" " = 0" \
- "\$_exitcode is zero after normal inferior is executed"
+with_timeout_factor 10 {
+ # Checking $_exitcode. It should be 0.
+ gdb_test "print \$_exitcode" " = 0" \
+ "\$_exitcode is zero after normal inferior is executed"
-# Checking $_exitsignal. It should still be void, since the inferior
-# has not received any signal.
-gdb_test "print \$_exitsignal" " = void" \
- "\$_exitsignal is still void after normal inferior is executed"
+ # Checking $_exitsignal. It should still be void, since the inferior
+ # has not received any signal.
+ gdb_test "print \$_exitsignal" " = void" \
+ "\$_exitsignal is still void after normal inferior is executed"
+}
--
2.4.3