From patchwork Tue Aug 25 05:42:22 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergio Durigan Junior X-Patchwork-Id: 8417 Received: (qmail 41089 invoked by alias); 25 Aug 2015 05:42:37 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 41042 invoked by uid 89); 25 Aug 2015 05:42:29 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=AWL, BAYES_40, KAM_LAZY_DOMAIN_SECURITY, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Tue, 25 Aug 2015 05:42:27 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id A95878E37F for ; Tue, 25 Aug 2015 05:42:26 +0000 (UTC) Received: from psique.yyz.redhat.com (unused-10-15-17-51.yyz.redhat.com [10.15.17.51]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t7P5gQmY003755; Tue, 25 Aug 2015 01:42:26 -0400 From: Sergio Durigan Junior To: GDB Patches Cc: Sergio Durigan Junior Subject: [PATCH] Increase timeout on gdb.base/exitsignal.exp Date: Tue, 25 Aug 2015 01:42:22 -0400 Message-Id: <1440481342-25971-1-git-send-email-sergiodj@redhat.com> X-IsSubscribed: yes 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 * 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" +}