Get GDBserver pid on remote target

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-11  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".
This commit is contained in:
Yao Qi 2014-09-30 21:08:15 +08:00
parent bf40a6078f
commit f90183d7e3
3 changed files with 33 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2014-10-11 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".
2014-10-11 Yao Qi <yao@codesourcery.com>
* gdb.server/server-kill.exp: Remove "delete_breakpoints".

View File

@ -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;
}

View File

@ -33,7 +33,23 @@ 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
}
}
if {$server_pid == "" } {
return -1
}
remote_exec target "kill -9 $server_pid"
# Force GDB to talk with GDBserver, so that we can get the