Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Franco de Carvalho <pedromfc@linux.ibm.com>
To: Tom de Vries <tdevries@suse.de>,
	Simon Marchi <simon.marchi@polymtl.ca>,
	       Gary Benson <gbenson@redhat.com>
Cc: gdb-patches@sourceware.org, Pedro Alves <palves@redhat.com>
Subject: Re: [PATCH][gdb/testsuite] Log wait status on process no longer exists error
Date: Wed, 05 Dec 2018 19:35:00 -0000	[thread overview]
Message-ID: <87zhtjojhf.fsf@linux.vnet.ibm.com> (raw)
In-Reply-To: <10673518-aad3-7305-6b73-486f9df742eb@suse.de>

Tom de Vries <tdevries@suse.de> writes:

> Btw, I noticed that gdb_test_multiple emits an "ERROR: Process no longer
> exists" preceding the unresolved message, but does not give details
> about the process exit status, which might be helpful.
>
> How about this patch?
>
> Thanks,
> - Tom

Hello,

I noticed that in certain cases the wait call used to find out the exit
status can hang forever waiting for the GDB process, due to a dejagnu
oddity.

The gdb_test_multiple procedure uses gdb_expect, which itself uses
remote_expect (provided by dejagnu).  The remote_expect procedure parses
the expect body passed to it and uses the eof block as a "default" case
to be executed in case of an error, which means that it can be executed
even when there was no actual eof and the GDB process is still running.

You can see this happen with a testcase like:

gdb_start

gdb_test_multiple "show version" "show version" {
    -re ".*" {
	error "forced error"
    }
}

I'm not sure how to solve this.  This was triggered by some testcases
when gdbserver failed to start, the testcases don't check this and use
the gdbserver spawn_id even though it no longer exists, which is what
causes the error to be raised.  This gdbserver issue has been fixed
since, so for now this will probably not happen.

Thanks!

--
Pedro Franco de Carvalho

> [gdb/testsuite] Log wait status on process no longer exists error
>
> Proc gdb_test_multiple can run into a process no longer exists error, but when
> that happens it shows no details about the process:
> ...
> ERROR: Process no longer exists
> ...
>
> Fix this by showing the wait status of the process in the log:
> ...
> ERROR: Gdb process no longer exists
> Gdb process exited with wait status 8106 exp8 0 0 CHILDKILLED SIGSEGV \
>   {segmentation violation}
> ...
>
> In order to run the wait commmand we need an explicit pid, so we can't use
> any_spawn_id, and duplicate the "-i any_spawn_id eof" patter for gdb_spawn_id,
> and add the wait status logging there.
>
> Build and tested on x86_64-linux.
>
> 2018-10-24  Tom de Vries  <tdevries@suse.de>
>
> 	* lib/gdb.exp (gdb_test_multiple): Log wait status on process no
> 	longer exists error.
>
> ---
>  gdb/testsuite/lib/gdb.exp | 10 ++++++++++
>  1 file changed, 10 insertions(+)
>
> diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp
> index 2d197d9b5c..f68664b0ef 100644
> --- a/gdb/testsuite/lib/gdb.exp
> +++ b/gdb/testsuite/lib/gdb.exp
> @@ -980,6 +980,16 @@ proc gdb_test_multiple { command message user_code } {
>  	    set result -1
>  	}
>
> +	-i $gdb_spawn_id
> +	eof {
> +	    perror "Gdb process no longer exists"
> +	    verbose -log "Gdb process exited with wait status [wait -i $gdb_spawn_id]"
> +	    if { $message != "" } {
> +		fail "$message"
> +	    }
> +	    return -1
> +	}
> +
>  	# Patterns below apply to any spawn id specified.
>  	-i $any_spawn_id
>  	eof {


  parent reply	other threads:[~2018-12-05 19:35 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-05 10:11 [PATCH][gdb/testsuite] Rewrite catch-follow-exec.exp Tom de Vries
2018-10-09 13:52 ` Gary Benson
2018-10-09 16:40   ` Tom de Vries
2018-10-10  9:28     ` Gary Benson
2018-10-10 13:29       ` Simon Marchi
2018-10-10 13:44         ` Gary Benson
2018-10-11  7:47           ` Tom de Vries
2018-10-11  8:33             ` Gary Benson
2018-10-13 22:18               ` Simon Marchi
     [not found]                 ` <480ea2be-eac0-8d19-cfe7-93c56b33a7ac@suse.de>
2018-10-15 22:12                   ` Simon Marchi
2018-10-23 21:04                   ` Simon Marchi
2018-10-23 21:05                     ` Tom de Vries
2018-10-23 22:38                       ` Tom de Vries
2018-10-23 23:37                         ` Simon Marchi
2018-10-24 11:47                           ` Tom de Vries
2018-10-24 12:09                             ` [PATCH][gdb/testsuite] Log wait status on process no longer exists error Tom de Vries
2018-10-24 14:05                               ` Simon Marchi
2018-12-05 19:35                               ` Pedro Franco de Carvalho [this message]
2018-10-15 22:12             ` [PATCH][gdb/testsuite] Rewrite catch-follow-exec.exp Simon Marchi
2018-10-16 16:11               ` Tom de Vries
2018-10-16 17:07               ` Tom de Vries
2018-10-16 20:12                 ` Simon Marchi
2018-10-17  7:30               ` Upper case test names Tom de Vries
2018-10-17 12:07                 ` Simon Marchi
2018-10-18 12:56                   ` Tom de Vries
2018-10-18 13:05                     ` Simon Marchi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87zhtjojhf.fsf@linux.vnet.ibm.com \
    --to=pedromfc@linux.ibm.com \
    --cc=gbenson@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=palves@redhat.com \
    --cc=simon.marchi@polymtl.ca \
    --cc=tdevries@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox