aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYao Qi <yao@codesourcery.com>2014-09-30 21:08:15 +0800
committerYao Qi <yao@codesourcery.com>2014-10-11 11:13:34 +0800
commitf90183d7e31b335b8a6048e46805509dc56332a4 (patch)
tree9f701cc74f8ee51a245cd9b52b891ce21fdff3f3
parentbf40a6078fd5bc24f54aaa1ca2bf44fa95b57c69 (diff)
downloadfsf-binutils-gdb-f90183d7e31b335b8a6048e46805509dc56332a4.zip
fsf-binutils-gdb-f90183d7e31b335b8a6048e46805509dc56332a4.tar.gz
fsf-binutils-gdb-f90183d7e31b335b8a6048e46805509dc56332a4.tar.bz2
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".
-rw-r--r--gdb/testsuite/ChangeLog7
-rw-r--r--gdb/testsuite/gdb.server/server-kill.c10
-rw-r--r--gdb/testsuite/gdb.server/server-kill.exp18
3 files changed, 33 insertions, 2 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 23eea6b..14e2d5c 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,5 +1,12 @@
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".
2014-10-11 Yao Qi <yao@codesourcery.com>
diff --git a/gdb/testsuite/gdb.server/server-kill.c b/gdb/testsuite/gdb.server/server-kill.c
index 8a7c74e..8369024 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..83c11f2 100644
--- a/gdb/testsuite/gdb.server/server-kill.exp
+++ b/gdb/testsuite/gdb.server/server-kill.exp
@@ -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