This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH 04/14] gdb/testsuite: Avoid fake failures when exit is unreliable
- From: Shahab Vahedi <Shahab dot Vahedi at synopsys dot com>
- To: Luis Machado <luis dot machado at linaro dot org>, Shahab Vahedi <shahab dot vahedi at gmail dot com>, "gdb-patches at sourceware dot org" <gdb-patches at sourceware dot org>
- Cc: Francois Bedard <Francois dot Bedard at synopsys dot com>, Anton Kolesov <Anton dot Kolesov at synopsys dot com>
- Date: Tue, 18 Feb 2020 15:41:32 +0000
- Subject: Re: [PATCH 04/14] gdb/testsuite: Avoid fake failures when exit is unreliable
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=synopsys.com; dmarc=pass action=none header.from=synopsys.com; dkim=pass header.d=synopsys.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BzXalLufwB47MPpLXUZlDVctdUmKKmQ5pyH/giA5mLc=; b=kjEENV6ZxOVAglhzctCcOP8edOkde07jf2IjAhhA5QQCjSUc4c/YHYJfIPilwkYY9pkq6DICJXoFImKR093YQJKwifdh+vT8MQdrqpch4Q5wHBckpmBZBcBy5YHyG5Ef4cpgEAfQsAmMxBGQzH+DFBSvlQxn57NQKn2W+iiIbhu7dcTTSBvTzLTR/tmynC3S4Nks7j93174gj8mLJRKkkk6Sv0tOxfw6ZPLW8kJKf7Rtg/bi5IPgQW4CFCbAhgThxId7Ea3+exQFV+ygf6zG/ixPwDQ+2rU1afyNnxCwrBYCP/WODsKFoGJCOR8UfM8dMD+rYk29BYtzmq01gvDIWw==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=i6mAb7Jq1IgNs8R7NPlt7lyFfdUNLXW34csSY/26wm4Buo9G322sR8npCsd4+heNPh8IPrnDR2+bm6e6JRl9FoM5aWgdFCrU/w0jIxbwJ3HaSlvzNHtizLLNdUPmh9v7/f29cHzDwPrAKtI84TvyhMJHclrgFNTfgolPJTeUXR98xiqK7olD7QIR9E2Ic0RugSjIX7qUwKIZBr6RGiGqw6JSUPlt1bNJLfiLKQE38R8ydUZcmKuxuyAUVhgaf4dJVO47rTs8kEuM7NoxmJOoTKQjoG/TYLgTivWyVrfUtpVagZSCZUpfOqx7Gy4du0/SK5NhDzo31yaX6mQmDTec0w==
- References: <20200207150003.8383-1-shahab.vahedi@gmail.com> <20200207150003.8383-5-shahab.vahedi@gmail.com> <8f69ff53-d8af-deed-b886-d83459f26b34@linaro.org>
On 2/11/20 9:10 AM, Luis Machado wrote:
> Hi,
>
> On 2/7/20 11:59 AM, Shahab Vahedi wrote:
>> From: Anton Kolesov <Anton.Kolesov@synopsys.com>
>>
>> Tests that run in background will not run properly with targets that
>> doesn't have a proper "exit" function. For example, gdb.base/hook-stop
>> expects that after hook will resume inferior in background, there would
>> be a message "exited normally", however such a message will appear only
>> for targets with a proper exit(), while others will, for example, spin
>> in the infinite loop.
>>
>> Test gdb.base/nextoverexit expects message "inferior exited normally",
>> which is present only when exit() actually halts the target.
>>
>> Some tests in gdb.base/commands.exp has a flow that expects that
>> application can exit itself, which is not true when exit() function is
>> not reliable.
>>
>> This patch makes those tests conditional - they run only if exit is
>> reliable.
>
> I don't know about this one. Doesn't your debugging stub have a way of detecting a call to exit, for example?
There is some testglue (gdb_tg.o) that prints to stdout if exit has happened with values other than 0. However, I believe the issue here is about running on a board. Anton is the best for responding to this.
>
> These changes seem to indicate you are using some custom/modified dejagnu board to run your tests. Is your target a qemu/probe that gdb connects to and then does the tests?
That is correct. The target has never been qemu/probe. I believe it has been the in-house simulator and also some real boards.
>
>>
>> gdb/testsuite/ChangeLog:
>> 2016-07-13 Anton Kolesov <Anton.Kolesov@synopsys.com>
>>
>> * gdb.base/callexit.exp: Expect an "exit()" only if
>> "exit_is_reliable" says so.
>> * gdb.base/commands.exp: Likewise.
>> * gdb.base/ena-dis-br.exp: Likewise.
>> * gdb.base/hook-stop.exp: Likewise.
>> * gdb.base/nextoverexit.exp: Likewise.
>> * gdb.mi/mi-break.exp: Likewise.
>> * gdb.mi/mi-exit-code.exp: Likewise.
>> * gdb.mi/mi-simplerun.exp: Likewise.
>>
>> Signed-off-by: Anton Kolesov <Anton.Kolesov@synopsys.com>
>> ---
>> gdb/testsuite/gdb.base/callexit.exp | 7 +++++++
>> gdb/testsuite/gdb.base/commands.exp | 14 ++++++++++++++
>> gdb/testsuite/gdb.base/ena-dis-br.exp | 18 +++++++++++-------
>> gdb/testsuite/gdb.base/hook-stop.exp | 12 +++++++++++-
>> gdb/testsuite/gdb.base/nextoverexit.exp | 7 +++++++
>> gdb/testsuite/gdb.mi/mi-break.exp | 5 +++++
>> gdb/testsuite/gdb.mi/mi-exit-code.exp | 5 +++++
>> gdb/testsuite/gdb.mi/mi-simplerun.exp | 5 +++++
>> 8 files changed, 65 insertions(+), 8 deletions(-)
>>
>> diff --git a/gdb/testsuite/gdb.base/callexit.exp b/gdb/testsuite/gdb.base/callexit.exp
>> index 67ff48283646..4fc2d5a2669a 100644
>> --- a/gdb/testsuite/gdb.base/callexit.exp
>> +++ b/gdb/testsuite/gdb.base/callexit.exp
>> @@ -28,6 +28,13 @@ if [target_info exists gdb,cannot_call_functions] {
>> continue
>> }
>> +# Some targets (for example baremetal ones) doesn't have exit() that actually
>> +# exits anywhere.
>> +if ![exit_is_reliable] {
>> + unsupported "This target doesn't have reliable exit() function."
>> + continue
>> +}
>> +
>> # Start with a fresh gdb.
>> clean_restart ${binfile}
>> diff --git a/gdb/testsuite/gdb.base/commands.exp b/gdb/testsuite/gdb.base/commands.exp
>> index 869d0a81a4a7..fd92b3fa3111 100644
>> --- a/gdb/testsuite/gdb.base/commands.exp
>> +++ b/gdb/testsuite/gdb.base/commands.exp
>> @@ -694,6 +694,13 @@ proc_with_prefix deprecated_command_test {} {
>> proc_with_prefix bp_deleted_in_command_test {} {
>> global gdb_prompt
>> + # Flow of this test assumes that application will halt after reaching the
>> + # exit() function.
>> + if ![exit_is_reliable] {
>> + unsupported "Function exit() is not reliable on this board."
>> + return 0
>> + }
>> +
>> delete_breakpoints
>> # Create a breakpoint, and associate a command-list to it, with
>> @@ -736,6 +743,13 @@ proc_with_prefix bp_deleted_in_command_test {} {
>> }
>> proc_with_prefix temporary_breakpoint_commands {} {
>> + # Flow of this test assumes that application will halt after reaching the
>> + # exit() function.
>> + if ![exit_is_reliable] {
>> + unsupported "Function exit() is not reliable on this board."
>> + return 0
>> + }
>> +
>> delete_breakpoints
>> # Create a temporary breakpoint, and associate a commands list to it.
>> diff --git a/gdb/testsuite/gdb.base/ena-dis-br.exp b/gdb/testsuite/gdb.base/ena-dis-br.exp
>> index c338a0d51fa9..bf670cbae948 100644
>> --- a/gdb/testsuite/gdb.base/ena-dis-br.exp
>> +++ b/gdb/testsuite/gdb.base/ena-dis-br.exp
>> @@ -295,13 +295,17 @@ gdb_test "continue 2" \
>> gdb_test "next" ".*$bp_location11\[ \t\]*marker1.*" \
>> "step after continue with ignore count"
>> -set test "continue with ignore count, not stopped at bpt"
>> -gdb_test_multiple "continue 2" "$test" {
>> - -re "Not stopped at any breakpoint; argument ignored.*$gdb_prompt $" {
>> - pass "$test"
>> - }
>> - -re "No breakpoint number -1.*$gdb_prompt $" {
>> - kfail gdb/1689 "$test"
>> +# Application is expected to reach an exit() here, so this can't be run if exit
>> +# is not working.
>> +if [exit_is_reliable] {
>> + set test "continue with ignore count, not stopped at bpt"
>> + gdb_test_multiple "continue 2" "$test" {
>> + -re "Not stopped at any breakpoint; argument ignored.*$gdb_prompt $" {
>> + pass "$test"
>> + }
>> + -re "No breakpoint number -1.*$gdb_prompt $" {
>> + kfail gdb/1689 "$test"
>> + }
>> }
>> }
>> diff --git a/gdb/testsuite/gdb.base/hook-stop.exp b/gdb/testsuite/gdb.base/hook-stop.exp
>> index 6b49e39b7380..c9bc3d3b6438 100644
>> --- a/gdb/testsuite/gdb.base/hook-stop.exp
>> +++ b/gdb/testsuite/gdb.base/hook-stop.exp
>> @@ -165,5 +165,15 @@ proc hook_stop_next {} {
>> hook_stop_before_frame
>> hook_stop_kill
>> hook_stop_continue_fg
>> -hook_stop_continue_bg
>> +
>> +# Tests that run in background will not run properly with targets that
>> +# doesn't have a proper "exit" function. For example, this particular
>> +# test expects that after hook will resume inferior in background, there
>> +# would be a message "exited normally", however such a message will
>> +# appear only for targets with a proper # exit(), while others will, for
>> +# example, spin in the infinite loop.
>> +if [exit_is_reliable] {
>> + hook_stop_continue_bg
>> +}
>> +
>> hook_stop_next
>> diff --git a/gdb/testsuite/gdb.base/nextoverexit.exp b/gdb/testsuite/gdb.base/nextoverexit.exp
>> index 30eafef675ff..fcea35762b00 100644
>> --- a/gdb/testsuite/gdb.base/nextoverexit.exp
>> +++ b/gdb/testsuite/gdb.base/nextoverexit.exp
>> @@ -14,6 +14,13 @@
>> standard_testfile
>> +# This tests expects message "inferior exited normally", which is present only
>> +# when exit() actually halts the target.
>> +if ![exit_is_reliable] {
>> + unsupported "Function exit() is not reliable on this board."
>> + return 0
>> +}
>> +
>> if {[prepare_for_testing "failed to prepare" $testfile $testfile.c]} {
>> return -1
>> }
>> diff --git a/gdb/testsuite/gdb.mi/mi-break.exp b/gdb/testsuite/gdb.mi/mi-break.exp
>> index 1149bb34c8dc..acec246f52ee 100644
>> --- a/gdb/testsuite/gdb.mi/mi-break.exp
>> +++ b/gdb/testsuite/gdb.mi/mi-break.exp
>> @@ -244,6 +244,11 @@ proc test_disabled_creation {} {
>> proc test_breakpoint_commands {} {
>> global line_callee2_body
>> + if ![exit_is_reliable] {
>> + unsupported "This test requires working exit() function."
>> + return 0
>> + }
>> +
>> set bp_no_script \
>> [mi_create_breakpoint "basics.c:callee2" \
>> "breakpoint commands: insert breakpoint at basics.c:callee2" \
>> diff --git a/gdb/testsuite/gdb.mi/mi-exit-code.exp b/gdb/testsuite/gdb.mi/mi-exit-code.exp
>> index f10b49cee0f8..fb5c693597da 100644
>> --- a/gdb/testsuite/gdb.mi/mi-exit-code.exp
>> +++ b/gdb/testsuite/gdb.mi/mi-exit-code.exp
>> @@ -23,6 +23,11 @@ if [mi_gdb_start] {
>> standard_testfile
>> +if ![exit_is_reliable] {
>> + unsupported "Function exit() is not reliable on this board."
>> + return 0
>> +}
>> +
>> if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
>> untested "failed to compile"
>> return -1
>> diff --git a/gdb/testsuite/gdb.mi/mi-simplerun.exp b/gdb/testsuite/gdb.mi/mi-simplerun.exp
>> index 20a079ead896..ce19122803da 100644
>> --- a/gdb/testsuite/gdb.mi/mi-simplerun.exp
>> +++ b/gdb/testsuite/gdb.mi/mi-simplerun.exp
>> @@ -177,6 +177,11 @@ proc test_program_termination {} {
>> # -exec-abort
>> # (normal termination of inferior)
>> + if ![exit_is_reliable] {
>> + unsupported "Function exit() is not reliable on this board."
>> + return
>> + }
>> +
>> mi_execute_to "exec-continue" "exited-normally" "" "" "" "" "" "continue to end"
>> }
>>