Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Yao Qi <yao@codesourcery.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH 2/3] Get GDBserver pid on remote target
Date: Wed, 08 Oct 2014 14:07:00 -0000	[thread overview]
Message-ID: <54354520.4020307@redhat.com> (raw)
In-Reply-To: <1412749679-27076-3-git-send-email-yao@codesourcery.com>

On 10/08/2014 07:27 AM, Yao Qi wrote:
> Hi,
> We see the following fail in the real remote testing...
> 
> (gdb) Executing on target: kill -9 29808    (timeout = 300)
> spawn [open ...]^M
> sh: 1: kill: No such process
> 
> The test tries to kill gdbserver in this way:
> 
> set server_pid [exp_pid -i [board_info target fileid]]
> remote_exec target "kill -9 $server_pid"
> 
> in native testing, we'll get the pid of spawned gdbserver, however, in
> remote testing, we'll get the pid of ssh session, since we start
> gdbserver on the remote target through ssh.  The pid on build doesn't
> exist on target.
> 
> In this patch, we tweak server-kill.c to get the parent pid, which is
> the pid of GDBserver.  GDB gets it and kill GDBserver on target.
> 
> gdb/testsuite:
> 
> 2014-10-08  Yao Qi  <yao@codesourcery.com>
> 
> 	* gdb.server/server-kill.c: Include sys/types.h and unistd.h.
> 	(main): Call getppid.
> 	* gdb.server/server-kill.exp: Set breakpoint on line "i = 0;"
> 	and continue to it.  Read variable "server_pid".
> ---
>  gdb/testsuite/gdb.server/server-kill.c   | 10 +++++++++-
>  gdb/testsuite/gdb.server/server-kill.exp | 17 ++++++++++++++++-
>  2 files changed, 25 insertions(+), 2 deletions(-)
> 
> diff --git a/gdb/testsuite/gdb.server/server-kill.c b/gdb/testsuite/gdb.server/server-kill.c
> index 8a7c74e..8369024b 100644
> --- a/gdb/testsuite/gdb.server/server-kill.c
> +++ b/gdb/testsuite/gdb.server/server-kill.c
> @@ -15,10 +15,18 @@
>     You should have received a copy of the GNU General Public License
>     along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
>  
> +#include <sys/types.h>
> +#include <unistd.h>
> +
> +int server_pid;
> +
>  int
>  main (void)
>  {
> -  int i = 0;
> +  int i;
> +
> +  server_pid = getppid ();
> +  i = 0;
>  
>    return i;
>  }
> diff --git a/gdb/testsuite/gdb.server/server-kill.exp b/gdb/testsuite/gdb.server/server-kill.exp
> index b23c2b5..0f808a9 100644
> --- a/gdb/testsuite/gdb.server/server-kill.exp
> +++ b/gdb/testsuite/gdb.server/server-kill.exp
> @@ -33,7 +33,22 @@ gdb_test "disconnect" ".*"
>  
>  gdbserver_run ""
>  
> -set server_pid [exp_pid -i [board_info target fileid]]
> +# Continue past server_pid assignment.
> +gdb_breakpoint ${srcfile}:[gdb_get_line_number "i = 0;"]
> +gdb_continue_to_breakpoint "after server_pid assignment"
> +
> +# Get the pid of GDBServer.
> +set test "p server_pid"
> +gdb_test_multiple $test $test {
> +    -re " = ($decimal)\r\n$gdb_prompt $" {
> +	set server_pid $expect_out(1,string)
> +	pass $test
> +    }
> +    -re "$gdb_prompt $" {
> +	fail $test
> +	return -1
> +    }
> +}

If gdb_test_multiple catches an internal error, or a timeout, this
won't return, and below we'll end up using $server_pid without it
being set.  So please do the usual (also note "GDBserver" typo):

# Get GDBserver's pid.

set server_pid ""
set test "p server_pid"
gdb_test_multiple $test $test {
    -re " = ($decimal)\r\n$gdb_prompt $" {
	set server_pid $expect_out(1,string)
	pass $test
    }
}
if {$server_pid == "" } {
    return -1
}

This is OK with that change.

I think mingw doesn't have getppid; so as is this will be losing
coverage there.  gnulib doesn't appear to have something we could borrow,
unfortunately.  I think we could emulate it with NtQueryInformationProcess,
but it's fine with me to leave it for another pass.

Thanks,
Pedro Alves


  reply	other threads:[~2014-10-08 14:07 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-30 13:15 [PATCH] Skip server-kill.exp " Yao Qi
2014-10-07 13:55 ` Yao Qi
2014-10-07 15:21 ` Pedro Alves
2014-10-08  6:32   ` [PATCH 0/3] Tweak server-kill.exp for " Yao Qi
2014-10-08  6:32     ` [PATCH 1/3] Clean up server-kill.exp Yao Qi
2014-10-08 13:48       ` Pedro Alves
2014-10-08  6:32     ` [PATCH 3/3] Use command "monitor set debug 0" to check the connection Yao Qi
2014-10-08 14:19       ` Pedro Alves
2014-10-09  3:05         ` Yao Qi
2014-10-10  9:38           ` Pedro Alves
2014-10-10 13:52             ` Yao Qi
2014-10-10 13:57               ` Pedro Alves
2014-10-08  6:32     ` [PATCH 2/3] Get GDBserver pid on remote target Yao Qi
2014-10-08 14:07       ` Pedro Alves [this message]
2014-10-11  3:20     ` [PATCH 0/3] Tweak server-kill.exp for " Yao Qi

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=54354520.4020307@redhat.com \
    --to=palves@redhat.com \
    --cc=gdb-patches@sourceware.org \
    --cc=yao@codesourcery.com \
    /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