summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/startup-with-shell.exp
diff options
context:
space:
mode:
authorSergio Durigan Junior <sergiodj@redhat.com>2016-12-22 22:14:02 -0500
committerSergio Durigan Junior <sergiodj@redhat.com>2017-06-07 19:56:09 -0400
commitaefd8b33d97bded58e51d75271f99e1eaec9fb28 (patch)
treed0d9b9017717644c5344682003d24c7dba73963b /gdb/testsuite/gdb.base/startup-with-shell.exp
parent2090129c36c7e582943b7d300968d19b46160d84 (diff)
Implement proper "startup-with-shell" support on gdbserver
This patch implements the proper support for the "startup-with-shell" feature on gdbserver. A new packet is added, QStartupWithShell, and it is sent on initialization. If the host sends a "QStartupWithShell:1", it means the inferior shall be started using a shell. If the host sends a "QStartupWithShell:0", it means the inferior shall be started without using a shell. Any other value is considered an error. There is no way to remotely set the shell that will be used by the target to start the inferior. In order to do that, the user must start gdbserver while providing a shell via the $SHELL environment variable. The same is true for the host side. The "set startup-with-shell" setting from the host side is used to decide whether to start the remote inferior using a shell. This same setting is also used to decide whether to use a shell to start the host inferior; this means that it is not really possible to start the inferior using different mechanisms on target and host. A documentation patch is included, along with a new testcase for the feature. gdb/ChangeLog: 2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> * NEWS (Changes since GDB 8.0): Announce that GDBserver is now able to start inferiors using a shell. (New remote packets): Announce new packet "QStartupWithShell". * remote.c: Add PACKET_QStartupWithShell. (extended_remote_create_inferior): Handle new PACKET_QStartupWithShell. (remote_protocol_features) <QStartupWithShell>: New entry for PACKET_QStartupWithShell. (_initialize_remote): Call "add_packet_config_cmd" for QStartupShell. gdb/gdbserver/ChangeLog: 2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> * server.c (handle_general_set): Handle new packet "QStartupWithShell". (handle_query): Add "QStartupWithShell" to the list of supported packets. (gdbserver_usage): Add help text explaining the new "--startup-with-shell" and "--no-startup-with-shell" CLI options. (captured_main): Recognize and act upon the presence of the new CLI options. gdb/testsuite/ChangeLog: 2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.base/startup-with-shell.c: New file. * gdb.base/startup-with-shell.exp: Likewise. gdb/doc/ChangeLog: 2017-06-07 Sergio Durigan Junior <sergiodj@redhat.com> * gdb.texinfo (Starting) <startup-with-shell>: Add @anchor. (Connecting) <Remote Packet>: Add "startup-with-shell" and "QStartupWithShell" to the table. (Remote Protocol) <QStartupWithShell>: New item, explaining the packet.
Diffstat (limited to 'gdb/testsuite/gdb.base/startup-with-shell.exp')
-rw-r--r--gdb/testsuite/gdb.base/startup-with-shell.exp89
1 files changed, 89 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/startup-with-shell.exp b/gdb/testsuite/gdb.base/startup-with-shell.exp
new file mode 100644
index 0000000000..af06c88a96
--- /dev/null
+++ b/gdb/testsuite/gdb.base/startup-with-shell.exp
@@ -0,0 +1,89 @@
+# This testcase is part of GDB, the GNU debugger.
+
+# Copyright 2017 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 test doesn't make sense on native-gdbserver.
+if { [use_gdb_stub] } {
+ untested "not supported"
+ return
+}
+
+# There's no easy way to set environment variables on remote targets
+# (via dejagnu) yet.
+if { [is_remote target] } {
+ untested "remote board"
+ return
+}
+
+standard_testfile
+
+if { [prepare_for_testing "failed to prepare" $testfile $srcfile debug] } {
+ return -1
+}
+
+set unique_file [standard_output_file "unique-file.unique-extension"]
+set unique_file_dir [standard_output_file ""]
+
+run_on_host "touch $unique_file" "touch" "$unique_file"
+
+# Initial setup for simple test (wildcard expansion, variable substitution).
+
+proc initial_setup_simple { startup_with_shell run_args } {
+ global hex decimal binfile unique_file
+
+ clean_restart $binfile
+
+ gdb_test_no_output "set startup-with-shell $startup_with_shell"
+
+ gdb_test_no_output "set args $run_args"
+
+ set test "inferior started"
+ if { [runto_main] } {
+ pass $test
+ } else {
+ fail $test
+ }
+}
+
+## Run the actual tests
+
+with_test_prefix "startup_with_shell = on; run_args = *.unique-extension" {
+ initial_setup_simple "on" "$unique_file_dir/*.unique-extension"
+ gdb_test "print argv\[1\]" "\\\$$decimal = $hex \"$unique_file\"" \
+ "first argument expanded"
+}
+
+with_test_prefix "startup_with_shell = off; run_args = *.unique-extension" {
+ initial_setup_simple "off" "$unique_file_dir/*.unique-extension"
+ gdb_test "print argv\[1\]" "\\\$$decimal = $hex \"$unique_file_dir/\\\*\.unique-extension\"" \
+ "first argument not expanded"
+}
+
+with_test_prefix "startup_with_shell = on; run_args = \$TEST" {
+ set env(TEST) "1234"
+ initial_setup_simple "on" "\$TEST"
+ gdb_test "print argv\[1\]" "\\\$$decimal = $hex \"1234\"" \
+ "testing first argument"
+ unset env(TEST)
+}
+
+with_test_prefix "startup_with_shell = off; run_args = \$TEST" {
+ set env(TEST) "1234"
+ initial_setup_simple "off" "\$TEST"
+ gdb_test "print argv\[1\]" "\\\$$decimal = $hex \"\\\$TEST\"" \
+ "testing first argument"
+ unset env(TEST)
+}