A new board file remote-gdbserver-on-localhost.exp

Message ID 1429796515-26821-1-git-send-email-qiyaoltc@gmail.com
State New, archived
Headers

Commit Message

Yao Qi April 23, 2015, 1:41 p.m. UTC
  From: Yao Qi <yao.qi@linaro.org>

This patch is to add a new board file that does real remote gdbserver
testing on localhost.  This board file can be used to reproduce PR 18208.

gdb/testsuite

2015-04-23  Yao Qi  <yao.qi@linaro.org>

	* boards/remote-gdbserver-on-localhost.exp: New file.
---
 .../boards/remote-gdbserver-on-localhost.exp       | 74 ++++++++++++++++++++++
 1 file changed, 74 insertions(+)
 create mode 100644 gdb/testsuite/boards/remote-gdbserver-on-localhost.exp
  

Comments

Pedro Alves April 23, 2015, 3:18 p.m. UTC | #1
On 04/23/2015 02:41 PM, Yao Qi wrote:
> From: Yao Qi <yao.qi@linaro.org>
> 
> This patch is to add a new board file that does real remote gdbserver
> testing on localhost.  This board file can be used to reproduce PR 18208.

Awesome.

> +# This gdbserver can only run a process once per session.
> +set_board_info gdb,do_reload_on_run 1
> +
> +# gdbserver does not intercept target file operations and perform them
> +# on the host.
> +set_board_info gdb,nofileio 1
> +
> +# There's no support for argument-passing (yet).
> +set_board_info noargs 1
> +
> +set_board_info exit_is_reliable 1

These two from gdbserver-base.exp seems to be missing:

# The predefined TSVs in GDBserver.
set_board_info gdb,predefined_tsv "\\\$trace_timestamp"

set GDBFLAGS "${GDBFLAGS} -ex \"set auto-connect-native-target off\""

Guess that ideally we'd move the "native" bits out of gdbserver-base.exp
to a native-gdbserver-base.exp file, and make this new one include
gdbserver-base.exp.  (TBC, it's fine with me to push it in without
doing that first).

Thanks,
Pedro Alves
  
Yao Qi April 24, 2015, 10:06 a.m. UTC | #2
Pedro Alves <palves@redhat.com> writes:

> These two from gdbserver-base.exp seems to be missing:
>
> # The predefined TSVs in GDBserver.
> set_board_info gdb,predefined_tsv "\\\$trace_timestamp"
>
> set GDBFLAGS "${GDBFLAGS} -ex \"set auto-connect-native-target off\""
>

Oops, I thought I checked gdbserver-base.exp before I post the patch.
Include them in the remote-gdbserver-on-localhost.exp.  Patch is pushed in.

> Guess that ideally we'd move the "native" bits out of gdbserver-base.exp
> to a native-gdbserver-base.exp file, and make this new one include
> gdbserver-base.exp.  (TBC, it's fine with me to push it in without
> doing that first).

Yeah, good to move these bits into a common file.  I'll do that once
PR 18208 is fixed :)  fails in coredump-filter.exp are shown in my tests
for arm and aarch64 every time.
  
Sergio Durigan Junior April 24, 2015, 7:38 p.m. UTC | #3
On Thursday, April 23 2015, Yao Qi wrote:

> From: Yao Qi <yao.qi@linaro.org>
>
> This patch is to add a new board file that does real remote gdbserver
> testing on localhost.  This board file can be used to reproduce PR 18208.

Thanks for this, Yao.

While using your board file to try to reproduce the failure, I found
that it can stale on:

  (gdb) spawn /usr/bin/ssh -l user localhost
  /path/to/gdb/build-original/gdb/testsuite/../gdbserver/gdbserver --once :2346
  /path/to/gdb/build-original/gdb/testsuite/gdb.base/coredump-filter
  The authenticity of host 'localhost (::1)' can't be established.
  ECDSA key fingerprint is xx:xx:xx:xx:xx:xx.
  Are you sure you want to continue connecting (yes/no)?
  got a INT signal, interrupted by user

It also can stale if the user needs to provide a password to log into
the system (which normally is the case).  BTW, how do you use the board
in this case?

*And* it also assumes that the user will have a sshd running on
localhost, which is not always the case, right?

So maybe the board could check for those cases and act accordingly, or
at least the introductory comments on the board file could be extended
to mention those situations.

Cheers,
  

Patch

diff --git a/gdb/testsuite/boards/remote-gdbserver-on-localhost.exp b/gdb/testsuite/boards/remote-gdbserver-on-localhost.exp
new file mode 100644
index 0000000..fc6a735
--- /dev/null
+++ b/gdb/testsuite/boards/remote-gdbserver-on-localhost.exp
@@ -0,0 +1,74 @@ 
+# Copyright 2015 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# This file is a dejagnu "board file" and is used to run the testsuite
+# with remote gdbserver on localhost.
+#
+# To use this file:
+# bash$ cd ${build_dir}/gdb
+# bash$ make check RUNTESTFLAGS="--target_board=remote-gdbserver-on-localhost"
+
+load_generic_config "gdbserver"
+
+# The default compiler for this target.
+set_board_info compiler  "[find_gcc]"
+
+process_multilib_options ""
+
+set_board_info rcp_prog "/usr/bin/scp"
+set_board_info rsh_prog "/usr/bin/ssh"
+set_board_info protocol standard
+set_board_info username $env(USER)
+set_board_info hostname localhost
+
+# We will be using the standard GDB remote protocol
+set_board_info gdb_protocol "remote"
+
+# Test the copy of gdbserver in the build directory, of an absolute path.
+set_board_info gdb_server_prog "[pwd]/../gdbserver/gdbserver"
+
+# Use techniques appropriate to a stub
+set_board_info use_gdb_stub 1
+
+# This gdbserver can only run a process once per session.
+set_board_info gdb,do_reload_on_run 1
+
+# gdbserver does not intercept target file operations and perform them
+# on the host.
+set_board_info gdb,nofileio 1
+
+# There's no support for argument-passing (yet).
+set_board_info noargs 1
+
+set_board_info exit_is_reliable 1
+
+proc ${board}_download { board src dest } {
+    if { [file pathtype $src] == "relative" } {
+	return [file join [pwd] $src]
+    } else {
+	return $src
+    }
+}
+
+proc ${board}_upload {dest srcfile args} {
+    return $srcfile
+}
+
+proc ${board}_file { dest op args } {
+    if { $op == "delete" } {
+	return 0
+    }
+    return [eval [list standard_file $dest $op] $args]
+}