[PATCH v2] Fix random dejagnu test abort with simulator target

Andrew Burgess aburgess@redhat.com
Mon Apr 22 13:49:48 GMT 2024


Bernd Edlinger <bernd.edlinger@hotmail.de> writes:

> This is probably a dejagnu issue with the gdb testsuite
> when a simulator target is used.  I observed random
> testrun aborts with dejagnu 1.6.2-1 from ubuntu 20.04
> The problem starts when the test case gdb.base/sigwinch-notty.exp
> tries to execute "sleep", although that is impossible with a
> simulator.  And for unknown reason the test case completes
> (with errors) before the "after 1000" block is run.
>
> Then in a totally different test this happens with 50% likelihood:
>
> ERROR: (DejaGnu) proc "bgerror {can't read "gdb_pid": no such variable}" does not exist.
> The error code is TCL LOOKUP COMMAND bgerror
> The info on the error is:
> invalid command name "bgerror"
>     while executing
> "::tcl_unknown bgerror {can't read "gdb_pid": no such variable}"
>     ("uplevel" body line 1)
>     invoked from within
> "uplevel 1 ::tcl_unknown $args"
>
>                 === gdb Summary ===
>
>  # of expected passes            30815
>  # of unexpected failures        241
>  # of expected failures          3
>  # of known failures             23
>  # of unresolved testcases       241
>  # of untested testcases         96
>  # of unsupported tests          532
>  # of paths in test names        1
>
> So the whole test run is aborted in the middle.
>
> This patch should fix the issue.
>
> Co-Authored-By: Tom de Vries <tdevries@suse.de>
> ---
>  gdb/testsuite/gdb.base/sigwinch-notty.exp | 16 +++++++++++-----
>  1 file changed, 11 insertions(+), 5 deletions(-)
>
> v2: I took over Tom's suggestion 1:1, and gave it a few test runs with
> no unexpected test aborts so far.
> So this looks quite good to me, and has also a nice improvement of giving
> an UNSUPPORTED message, with what exactly was the reason why the test
> did not run.
>
> diff --git a/gdb/testsuite/gdb.base/sigwinch-notty.exp b/gdb/testsuite/gdb.base/sigwinch-notty.exp
> index cef21c07c59..621231df6af 100644
> --- a/gdb/testsuite/gdb.base/sigwinch-notty.exp
> +++ b/gdb/testsuite/gdb.base/sigwinch-notty.exp
> @@ -19,11 +19,17 @@
>  
>  require {!target_info exists gdb,nosignals}
>  
> -# The testfile relies on "run" from the command line, so only works
> -# with "target native".
> -if { [target_info gdb_protocol] != "" } {
> -    return
> -}
> +# The test-case relies on "run" from the command line, so it only works
> +# with "target native", so we need host == target.

I'm currently reading and rereaching the V1 series to try and understand
what's going on here, but I don't understand this comment.

  # The test-case relies on "run" from the command line, so it only works
  # with "target native", so we need host == target.

Just doesn't make sense to me: 'target extended-remote' will also
support the `run` command, as will 'target sim'.

The conclusion might well be valid, but I think the logic used to
justify it is incorrect.   Can we rephrase this comment so it makes
sense?

Thanks,
Andrew


> +#
> +# The test-case uses "exp_pid -i $gdb_spawn_id" which doesn't work with
> +# remote host, so we need build == host.
> +#
> +# In other words, we need build == host == target.
> +require {!is_remote host} {!is_remote target}
> +
> +# Check that we have "target native" as opposed to native-gdbserver etc.
> +require {string equal [target_info gdb_protocol] ""}
>  
>  gdb_exit
>  
> -- 
> 2.39.2



More information about the Gdb-patches mailing list